commit 6fb9eee74c798db5782dd75858ed9768c21565b9 Author: Wojtek Figat Date: Mon Dec 7 23:40:54 2020 +0100 You're breathtaking! diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 000000000..2f9df2e87 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,44 @@ +# Set the default behavior, in case people don't have core.autocrlf set. +* text=auto + +# Explicitly declare text files you want to always be normalized and converted to native line endings on checkout. +*.c text diff=cpp +*.h text diff=cpp +*.cpp text diff=cpp +*.hpp text diff=cpp +*.txt text +*.cs text diff=csharp + +# Declare files that will always have CRLF line endings on checkout. +*.sln text eol=crlf +*.props text eol=crlf +*.csproj text eol=crlf +*.vcxproj text eol=crlf +*.vcxproj.filters text eol=crlf + +# Git LFS for binaries +*.flax filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.dat filter=lfs diff=lfs merge=lfs -text +*.dll filter=lfs diff=lfs merge=lfs -text +*.lib filter=lfs diff=lfs merge=lfs -text +*.so filter=lfs diff=lfs merge=lfs -text +*.pdb filter=lfs diff=lfs merge=lfs -text +*.exe filter=lfs diff=lfs merge=lfs -text +*.a filter=lfs diff=lfs merge=lfs -text +*.jpg filter=lfs diff=lfs merge=lfs -text +*.jpeg filter=lfs diff=lfs merge=lfs -text +*.png filter=lfs diff=lfs merge=lfs -text +*.gif filter=lfs diff=lfs merge=lfs -text +*.psd filter=lfs diff=lfs merge=lfs -text +*.ai filter=lfs diff=lfs merge=lfs -text +*.mp3 filter=lfs diff=lfs merge=lfs -text +*.wav filter=lfs diff=lfs merge=lfs -text +*.ogg filter=lfs diff=lfs merge=lfs -text +*.mp4 filter=lfs diff=lfs merge=lfs -text +*.mov filter=lfs diff=lfs merge=lfs -text +*.FBX filter=lfs diff=lfs merge=lfs -text +*.fbx filter=lfs diff=lfs merge=lfs -text +*.blend filter=lfs diff=lfs merge=lfs -text +*.obj filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..f9a58f31c --- /dev/null +++ b/.gitignore @@ -0,0 +1,187 @@ +# Flax stuff +*.sln +[Dd]ebug/ +[Rr]elease/ +obj/ +Cache/ +Binaries/ +Logs/ +Source/*.csproj +!Source/Engine/Debug + +# User-specific files +*.suo +*.user +*.sln.docstates +*.idb +*.tlog +*.lastbuilddate +*.opendb + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# NuGet Packages Directory +packages/**/* +!packages/repositories.config + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opensdf +*.sdf +*.cachefile + +# Visual Studio profiler +*.psess +*.vsp +*.vspx + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding addin-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml + +# Enable "build/" folder in the NuGet Packages folder since +# NuGet packages use it for MSBuild targets. +# This line needs to be after the ignore of the build folder +# (and the packages folder if the line above has been uncommented) +!packages/build/ + +# Windows Azure Build Output +csx/ +*.build.csdef + +# Windows Store app package directory +AppPackages/ + +# Others +sql/ +*.Cache +ClientBin/ +[Ss]tyle[Cc]op.* +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.pfx +*.publishsettings +node_modules/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project files +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# LightSwitch generated files +GeneratedArtifacts/ +_Pvt_Extensions/ +ModelManifest.xml + +# IDE files +*.VC.db +enc_temp_folder/ +*.stackdump +.vs/ +bin/ +obj/ +*.vcxproj.filters +.vscode/ +*.code-workspace diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 000000000..e69de29bb diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..03fff1aa1 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at contact@flaxengine.com. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/Content/Editor/Camera/M_Camera.flax b/Content/Editor/Camera/M_Camera.flax new file mode 100644 index 000000000..0631de26c --- /dev/null +++ b/Content/Editor/Camera/M_Camera.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:52c68260bfdf79f3cc9addea31680379c89c804b07a932d363be0254d44f708a +size 38302 diff --git a/Content/Editor/Camera/O_Camera.flax b/Content/Editor/Camera/O_Camera.flax new file mode 100644 index 000000000..443f7502f --- /dev/null +++ b/Content/Editor/Camera/O_Camera.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c356aa9250b8d42c6ba44fa23bad29a4b2c216f31061df03f20efd3c871414a +size 88395 diff --git a/Content/Editor/Camera/T_Camera.flax b/Content/Editor/Camera/T_Camera.flax new file mode 100644 index 000000000..bf2605aac --- /dev/null +++ b/Content/Editor/Camera/T_Camera.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbb8bff552a5f261aa2119d52b9f97cd8f16eb28ecbbcd5915ad41aa4b4b5f5f +size 3105 diff --git a/Content/Editor/CubeTexturePreviewMaterial.flax b/Content/Editor/CubeTexturePreviewMaterial.flax new file mode 100644 index 000000000..90bc9f368 --- /dev/null +++ b/Content/Editor/CubeTexturePreviewMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:959f9d4006dc11b0ecbd57cbb406213b2519a388de0d798bff69d61c2042c89b +size 39859 diff --git a/Content/Editor/DefaultFontMaterial.flax b/Content/Editor/DefaultFontMaterial.flax new file mode 100644 index 000000000..a0f703a85 --- /dev/null +++ b/Content/Editor/DefaultFontMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e424d2436f4973a0ecef28c241e222e7e5f992a2ae017e943f4ba033608b3bd7 +size 38383 diff --git a/Content/Editor/EditorIcon.flax b/Content/Editor/EditorIcon.flax new file mode 100644 index 000000000..958573f46 --- /dev/null +++ b/Content/Editor/EditorIcon.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5ff94d35d9615450a4c3ee32a6d254d4eb1887bf34c1be62a5bd267c7c9f00b +size 6206 diff --git a/Content/Editor/Fonts/Inconsolata-Regular.flax b/Content/Editor/Fonts/Inconsolata-Regular.flax new file mode 100644 index 000000000..a2fdf0626 --- /dev/null +++ b/Content/Editor/Fonts/Inconsolata-Regular.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36995fa880bf47331618b1e96f613c6925e72484fe76e98d6e44c1985ecab017 +size 93015 diff --git a/Content/Editor/Fonts/Roboto-Regular.flax b/Content/Editor/Fonts/Roboto-Regular.flax new file mode 100644 index 000000000..a1e416f77 --- /dev/null +++ b/Content/Editor/Fonts/Roboto-Regular.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:574b86d8e7439e88c3d7b4265cbc5ad7089c49368c47661b2c6f4c997cb53d86 +size 172093 diff --git a/Content/Editor/Fonts/SegMDL2.flax b/Content/Editor/Fonts/SegMDL2.flax new file mode 100644 index 000000000..d06bac811 --- /dev/null +++ b/Content/Editor/Fonts/SegMDL2.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c4a17c412fce35275af5be883c784b57d192eb188fb3568990b0ae8e0e6d34e +size 204049 diff --git a/Content/Editor/Fonts/Segoe Media Center Regular.flax b/Content/Editor/Fonts/Segoe Media Center Regular.flax new file mode 100644 index 000000000..e9038cd65 --- /dev/null +++ b/Content/Editor/Fonts/Segoe Media Center Regular.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d277b4abbdc1c91f056dd0d838631135242643abb41ce5751b1be3aaca72401 +size 72697 diff --git a/Content/Editor/Gizmo/Axis.flax b/Content/Editor/Gizmo/Axis.flax new file mode 100644 index 000000000..c2b0a30f0 --- /dev/null +++ b/Content/Editor/Gizmo/Axis.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f32f2401c2c6eb05d1674f98950f4d9ff0a9508d42fa25413eba3a49a0be9363 +size 11800 diff --git a/Content/Editor/Gizmo/FoliageBrushMaterial.flax b/Content/Editor/Gizmo/FoliageBrushMaterial.flax new file mode 100644 index 000000000..d8cc3fb6a --- /dev/null +++ b/Content/Editor/Gizmo/FoliageBrushMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b239a3122fe40c386c3161576cf74c94248d92a3d501b18ed2d658f18742a2 +size 41087 diff --git a/Content/Editor/Gizmo/Material.flax b/Content/Editor/Gizmo/Material.flax new file mode 100644 index 000000000..c65bf8bfc --- /dev/null +++ b/Content/Editor/Gizmo/Material.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc1c77fbc5849a052d5a677c936d3fc1a926d3acde7595d02ef3b3bca6f9e287 +size 36009 diff --git a/Content/Editor/Gizmo/MaterialAxisFocus.flax b/Content/Editor/Gizmo/MaterialAxisFocus.flax new file mode 100644 index 000000000..56c3f6560 --- /dev/null +++ b/Content/Editor/Gizmo/MaterialAxisFocus.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b051fe079aa227c67f861220e35fab93c321d310f737ff663d9b77ef3fe98c3e +size 466 diff --git a/Content/Editor/Gizmo/MaterialAxisX.flax b/Content/Editor/Gizmo/MaterialAxisX.flax new file mode 100644 index 000000000..2bdb44208 --- /dev/null +++ b/Content/Editor/Gizmo/MaterialAxisX.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cdffe8d74604845d50004b3f481e28c996a5b7945ae4e3e9e69975d23b2ef176 +size 302 diff --git a/Content/Editor/Gizmo/MaterialAxisY.flax b/Content/Editor/Gizmo/MaterialAxisY.flax new file mode 100644 index 000000000..b07d7b64a --- /dev/null +++ b/Content/Editor/Gizmo/MaterialAxisY.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1407e7ad2dbd54e0833488fd96ef4c3ede3b78fd970b3ff7e804d51dd04fdb2e +size 302 diff --git a/Content/Editor/Gizmo/MaterialAxisZ.flax b/Content/Editor/Gizmo/MaterialAxisZ.flax new file mode 100644 index 000000000..e2bf44327 --- /dev/null +++ b/Content/Editor/Gizmo/MaterialAxisZ.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f4a98b0028a9a9750f8dad737e5baf2bd061970f2f35fd10deacf47162cd992 +size 302 diff --git a/Content/Editor/Gizmo/MaterialWire.flax b/Content/Editor/Gizmo/MaterialWire.flax new file mode 100644 index 000000000..ebd8e8d97 --- /dev/null +++ b/Content/Editor/Gizmo/MaterialWire.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:918b4f7c7dde101ebe9b3e757cde61718413408f585159173cd87372671af006 +size 35222 diff --git a/Content/Editor/Gizmo/MaterialWireFocus.flax b/Content/Editor/Gizmo/MaterialWireFocus.flax new file mode 100644 index 000000000..4310dcfec --- /dev/null +++ b/Content/Editor/Gizmo/MaterialWireFocus.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1822666601676f9a8da90ed139a36ab80950972098a4ac3981139392b40002c2 +size 434 diff --git a/Content/Editor/Gizmo/ScaleAxis.flax b/Content/Editor/Gizmo/ScaleAxis.flax new file mode 100644 index 000000000..150b1e1dd --- /dev/null +++ b/Content/Editor/Gizmo/ScaleAxis.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feb61724fc4fd620de5e3cedf6f74485d38aea4f3a88bf44ecdc186424d14b04 +size 3933 diff --git a/Content/Editor/Gizmo/SelectionOutlineMaterial.flax b/Content/Editor/Gizmo/SelectionOutlineMaterial.flax new file mode 100644 index 000000000..661897e62 --- /dev/null +++ b/Content/Editor/Gizmo/SelectionOutlineMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06b86af6ada11a767d70ebb5b633b998bbfc9fcdc507b09597fc8070d7bf4a4e +size 16115 diff --git a/Content/Editor/Gizmo/TranslateAxis.flax b/Content/Editor/Gizmo/TranslateAxis.flax new file mode 100644 index 000000000..a97bbc780 --- /dev/null +++ b/Content/Editor/Gizmo/TranslateAxis.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:011c8be02f11017c28b300601b19f12c8750b256d0aabe060c519794c4578d41 +size 7757 diff --git a/Content/Editor/Gizmo/VertexColorsPreviewMaterial.flax b/Content/Editor/Gizmo/VertexColorsPreviewMaterial.flax new file mode 100644 index 000000000..e42b74129 --- /dev/null +++ b/Content/Editor/Gizmo/VertexColorsPreviewMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c2abe350d858eeb42158b6c5fa8b0875a332bc003038fe846bf63aa3a9117577 +size 39316 diff --git a/Content/Editor/Gizmo/WireBox.flax b/Content/Editor/Gizmo/WireBox.flax new file mode 100644 index 000000000..b8140c8fd --- /dev/null +++ b/Content/Editor/Gizmo/WireBox.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebdbfcb90d6b3df803294ff601a2765b27cbee83caf9753a0e3ba6c8b888a44a +size 7874 diff --git a/Content/Editor/Gizmo/WireCircle.flax b/Content/Editor/Gizmo/WireCircle.flax new file mode 100644 index 000000000..1378ea4f6 --- /dev/null +++ b/Content/Editor/Gizmo/WireCircle.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:901ae5ba301bf22697e4f7ced101f97dfe6ef38771f940c0c38e43125157d080 +size 139269 diff --git a/Content/Editor/Highlight Material.flax b/Content/Editor/Highlight Material.flax new file mode 100644 index 000000000..2b1baa997 --- /dev/null +++ b/Content/Editor/Highlight Material.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:889bfcffc68926671e3915300900c6d5908b4c1a5981f815d56f0aa3877e672a +size 35420 diff --git a/Content/Editor/Icons/AudioListener.flax b/Content/Editor/Icons/AudioListener.flax new file mode 100644 index 000000000..1d05d75a7 --- /dev/null +++ b/Content/Editor/Icons/AudioListener.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:420c596ce4719b05d63cdf8ee4491993ae4346e0dd98e438d5b4de949311e1fe +size 466 diff --git a/Content/Editor/Icons/AudioSource.flax b/Content/Editor/Icons/AudioSource.flax new file mode 100644 index 000000000..1e7d99187 --- /dev/null +++ b/Content/Editor/Icons/AudioSource.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5ef14e409196318a53050981f91890e62d9f387f9d3440034f4fb6dcfea7f364 +size 466 diff --git a/Content/Editor/Icons/Decal.flax b/Content/Editor/Icons/Decal.flax new file mode 100644 index 000000000..ecd65a17d --- /dev/null +++ b/Content/Editor/Icons/Decal.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd9d7b7a55f7ecfde753d0e1b253c3768b25cc7b65ca840647212a8870de6917 +size 466 diff --git a/Content/Editor/Icons/DirectionalLight.flax b/Content/Editor/Icons/DirectionalLight.flax new file mode 100644 index 000000000..b879061cc --- /dev/null +++ b/Content/Editor/Icons/DirectionalLight.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b2530bc1db1a640d7ac09124e6c1c7f1f6d1d917b38347c57df78b0e6ba0596 +size 303 diff --git a/Content/Editor/Icons/EnvironmentProbe.flax b/Content/Editor/Icons/EnvironmentProbe.flax new file mode 100644 index 000000000..c56740de7 --- /dev/null +++ b/Content/Editor/Icons/EnvironmentProbe.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd025e805204377e3d7aea2ecccdaeec21561f4885195d70daa662654afa21ad +size 303 diff --git a/Content/Editor/Icons/IconsMaterial.flax b/Content/Editor/Icons/IconsMaterial.flax new file mode 100644 index 000000000..9d4eefd96 --- /dev/null +++ b/Content/Editor/Icons/IconsMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e2b53c83b4f1ac7908e0af6b5d917ccc617c74a67665d8484db8b9709c5bb85 +size 35353 diff --git a/Content/Editor/Icons/ParticleEffect.flax b/Content/Editor/Icons/ParticleEffect.flax new file mode 100644 index 000000000..de63fb220 --- /dev/null +++ b/Content/Editor/Icons/ParticleEffect.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d36cb8f0b9d9d94be7fa9f568f97ccf23a893f7b804146cf7965ab30cf157088 +size 466 diff --git a/Content/Editor/Icons/PointLight.flax b/Content/Editor/Icons/PointLight.flax new file mode 100644 index 000000000..977162666 --- /dev/null +++ b/Content/Editor/Icons/PointLight.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c13708632656b7794753803c021a285ed4023b0bc1561cb14e0ba28fe0271480 +size 303 diff --git a/Content/Editor/Icons/SceneAnimationPlayer.flax b/Content/Editor/Icons/SceneAnimationPlayer.flax new file mode 100644 index 000000000..5064558d1 --- /dev/null +++ b/Content/Editor/Icons/SceneAnimationPlayer.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab77a2e8aeeba97aba519f5dfee5250e41d210d6020cb61d19ae4c7f48ccd0b9 +size 466 diff --git a/Content/Editor/Icons/Skybox.flax b/Content/Editor/Icons/Skybox.flax new file mode 100644 index 000000000..13ac1472d --- /dev/null +++ b/Content/Editor/Icons/Skybox.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:354283ae32bd759458179ed437ca0bd9be12062c5b8a3aa4020c4bc1ac83092c +size 303 diff --git a/Content/Editor/Icons/Skylight.flax b/Content/Editor/Icons/Skylight.flax new file mode 100644 index 000000000..0570b5b09 --- /dev/null +++ b/Content/Editor/Icons/Skylight.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c587e885e3fb0bdf6bd4a9fbd9bf8c746aae149c894009ebd5496f100290388 +size 303 diff --git a/Content/Editor/Icons/Textures/AudioListner.flax b/Content/Editor/Icons/Textures/AudioListner.flax new file mode 100644 index 000000000..8c8c4920d --- /dev/null +++ b/Content/Editor/Icons/Textures/AudioListner.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6eeba8388149269d67ab06fd52eb8e8e1411f187393b6160f20750d565e12f32 +size 22576 diff --git a/Content/Editor/Icons/Textures/AudioSource.flax b/Content/Editor/Icons/Textures/AudioSource.flax new file mode 100644 index 000000000..059b900c8 --- /dev/null +++ b/Content/Editor/Icons/Textures/AudioSource.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84afd860b8ebcaf166846220f275ea16bb69729ec5abfdf07fa9985e355539fe +size 22575 diff --git a/Content/Editor/Icons/Textures/Decal.flax b/Content/Editor/Icons/Textures/Decal.flax new file mode 100644 index 000000000..73b661465 --- /dev/null +++ b/Content/Editor/Icons/Textures/Decal.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22a3d53ddc4792fa4cf127da5d6a3e4d8a95757cb51fa04d7cb6b5abae2a643c +size 22569 diff --git a/Content/Editor/Icons/Textures/DirectionalLight.flax b/Content/Editor/Icons/Textures/DirectionalLight.flax new file mode 100644 index 000000000..1e4b650c4 --- /dev/null +++ b/Content/Editor/Icons/Textures/DirectionalLight.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d16e0df628d13c72aef9f214c9459536832b9c8c21293444a6fb0f75d40a411 +size 22251 diff --git a/Content/Editor/Icons/Textures/EnvironmentProbe.flax b/Content/Editor/Icons/Textures/EnvironmentProbe.flax new file mode 100644 index 000000000..dfd69645f --- /dev/null +++ b/Content/Editor/Icons/Textures/EnvironmentProbe.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2386df0b9a39ab819f166f5a48c0d859f2f3aaeb1c98451565446fd9f35f70c4 +size 22251 diff --git a/Content/Editor/Icons/Textures/ParticleEffect.flax b/Content/Editor/Icons/Textures/ParticleEffect.flax new file mode 100644 index 000000000..fa4788651 --- /dev/null +++ b/Content/Editor/Icons/Textures/ParticleEffect.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eced258052ad7aad0abcdb1abc7a811087b9688688eb0923d01b62277111e319 +size 22633 diff --git a/Content/Editor/Icons/Textures/PointLight.flax b/Content/Editor/Icons/Textures/PointLight.flax new file mode 100644 index 000000000..5bc463f7c --- /dev/null +++ b/Content/Editor/Icons/Textures/PointLight.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:205c29a130708367cfd920c02dad1ff5ce029bca2e4ba8b846ee924db6ed5ce8 +size 22245 diff --git a/Content/Editor/Icons/Textures/SceneAnimationPlayer.flax b/Content/Editor/Icons/Textures/SceneAnimationPlayer.flax new file mode 100644 index 000000000..498aa4a2c --- /dev/null +++ b/Content/Editor/Icons/Textures/SceneAnimationPlayer.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42a79e33f6237ff570ec799cf21859bde252280120a460d117a46c64e171f131 +size 22639 diff --git a/Content/Editor/Icons/Textures/SkyLight.flax b/Content/Editor/Icons/Textures/SkyLight.flax new file mode 100644 index 000000000..9e557e37a --- /dev/null +++ b/Content/Editor/Icons/Textures/SkyLight.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:821d8878412cdaebf1472f7a8afc8f081dd4bf7818c3824d6d02d18c474e4355 +size 22243 diff --git a/Content/Editor/Icons/Textures/Skybox.flax b/Content/Editor/Icons/Textures/Skybox.flax new file mode 100644 index 000000000..c252d2fbf --- /dev/null +++ b/Content/Editor/Icons/Textures/Skybox.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:54e8d8520f6d1e6dea5c4596309700358d97692fefbfea68ff76a058f4161e32 +size 22241 diff --git a/Content/Editor/IconsAtlas.flax b/Content/Editor/IconsAtlas.flax new file mode 100644 index 000000000..9dda6fec2 --- /dev/null +++ b/Content/Editor/IconsAtlas.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:51daf141b7f0d7faf83bb42eceebf9c5442a2f101d02e352215b9684842b5fc7 +size 5636265 diff --git a/Content/Editor/IesProfilePreviewMaterial.flax b/Content/Editor/IesProfilePreviewMaterial.flax new file mode 100644 index 000000000..f9e249e81 --- /dev/null +++ b/Content/Editor/IesProfilePreviewMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:946c1c4723c46a55c2d47a67009810a58c6e790b0af27137507e2c5cb9f3d64e +size 18669 diff --git a/Content/Editor/LayoutDefault.xml b/Content/Editor/LayoutDefault.xml new file mode 100644 index 000000000..2b1756650 --- /dev/null +++ b/Content/Editor/LayoutDefault.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Content/Editor/MaterialTemplates/Decal.shader b/Content/Editor/MaterialTemplates/Decal.shader new file mode 100644 index 000000000..1e2076211 --- /dev/null +++ b/Content/Editor/MaterialTemplates/Decal.shader @@ -0,0 +1,217 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +@3 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +@7 +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4x4 ViewMatrix; +float4x4 InvWorld; +float4x4 SVPositionToWorld; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +@1META_CB_END + +// Use depth buffer for per-pixel decal layering +Texture2D DepthBuffer : register(t0); + +// Material shader resources +@2 +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; +}; + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + float3x3 localToWorld = (float3x3)WorldMatrix; + return mul(localVector, localToWorld); +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + float3x3 localToWorld = (float3x3)WorldMatrix; + return mul(localToWorld, worldVector); +} + +// Gets the current object position (supports instancing) +float3 GetObjectPosition(MaterialInput input) +{ + return WorldMatrix[3].xyz; +} + +// Gets the current object size +float3 GetObjectSize(MaterialInput input) +{ + return float3(1, 1, 1); +} + +// Get the current object random value supports instancing) +float GetPerInstanceRandom(MaterialInput input) +{ + return 0; +} + +// Get the current object LOD transition dither factor (supports instancing) +float GetLODDitherFactor(MaterialInput input) +{ + return 0; +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ + return 1; +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Input macro specified by the material: DECAL_BLEND_MODE + +#define DECAL_BLEND_MODE_TRANSLUCENT 0 +#define DECAL_BLEND_MODE_STAIN 1 +#define DECAL_BLEND_MODE_NORMAL 2 +#define DECAL_BLEND_MODE_EMISSIVE 3 + +// Vertex Shader function for decals rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +void VS_Decal(in float3 Position : POSITION0, out float4 SvPosition : SV_Position) +{ + // Compute world space vertex position + float3 worldPosition = mul(float4(Position.xyz, 1), WorldMatrix).xyz; + + // Compute clip space position + SvPosition = mul(float4(worldPosition.xyz, 1), ViewProjectionMatrix); +} + +// Pixel Shader function for decals rendering +META_PS(true, FEATURE_LEVEL_ES2) +void PS_Decal( + in float4 SvPosition : SV_Position + , out float4 Out0 : SV_Target0 +#if DECAL_BLEND_MODE == DECAL_BLEND_MODE_TRANSLUCENT + , out float4 Out1 : SV_Target1 +#if USE_NORMAL || USE_EMISSIVE + , out float4 Out2 : SV_Target2 +#endif +#if USE_NORMAL && USE_EMISSIVE + , out float4 Out3 : SV_Target3 +#endif +#endif + ) +{ + float2 screenUV = SvPosition.xy * ScreenSize.zw; + SvPosition.z = SAMPLE_RT(DepthBuffer, screenUV).r; + + float4 positionHS = mul(float4(SvPosition.xyz, 1), SVPositionToWorld); + float3 positionWS = positionHS.xyz / positionHS.w; + float3 positionOS = mul(float4(positionWS, 1), InvWorld).xyz; + + // Clip content outside the decal + clip(0.5 - abs(positionOS.xyz)); + + // By default, map textures using the vectors perpendicular to the projection direction + float2 decalUVs = positionOS.xz + 0.5f; + + // Setup material input + MaterialInput materialInput = (MaterialInput)0; + materialInput.WorldPosition = positionWS; + materialInput.TexCoord = decalUVs; + materialInput.TwoSidedSign = 1; + materialInput.SvPosition = SvPosition; + + // Build tangent to world transformation matrix + float3 ddxWp = ddx(positionWS); + float3 ddyWp = ddy(positionWS); + materialInput.TBN[0] = normalize(ddyWp); + materialInput.TBN[1] = normalize(ddxWp); + materialInput.TBN[2] = normalize(cross(ddxWp, ddyWp)); + + // Sample material + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + // Set the output +#if DECAL_BLEND_MODE == DECAL_BLEND_MODE_TRANSLUCENT + // GBuffer0 + Out0 = float4(material.Color, material.Opacity); + // GBuffer2 + Out1 = float4(material.Roughness, material.Metalness, material.Specular, material.Opacity); +#if USE_EMISSIVE + // Light Buffer + Out2 = float4(material.Emissive, material.Opacity); +#if USE_NORMAL + // GBuffer1 + Out3 = float4(material.WorldNormal * 0.5f + 0.5f, 1); +#endif +#elif USE_NORMAL + // GBuffer1 + Out2 = float4(material.WorldNormal * 0.5f + 0.5f, 1); +#endif +#elif DECAL_BLEND_MODE == DECAL_BLEND_MODE_STAIN + Out0 = float4(material.Color, material.Opacity); +#elif DECAL_BLEND_MODE == DECAL_BLEND_MODE_NORMAL + Out0 = float4(material.WorldNormal * 0.5f + 0.5f, 1); +#elif DECAL_BLEND_MODE == DECAL_BLEND_MODE_EMISSIVE + Out0 = float4(material.Emissive * material.Opacity, material.Opacity); +#else + #error "Invalid decal blending mode" +#endif +} diff --git a/Content/Editor/MaterialTemplates/GPUParticles.shader b/Content/Editor/MaterialTemplates/GPUParticles.shader new file mode 100644 index 000000000..0115b9e23 --- /dev/null +++ b/Content/Editor/MaterialTemplates/GPUParticles.shader @@ -0,0 +1,239 @@ +// File generated by Flax Editor +// Version: @0 + +@3 +#include "./Flax/Common.hlsl" +#include "./Flax/GBufferCommon.hlsl" +#include "./Flax/Matrix.hlsl" +@7 +// Primary constant buffer +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 InvViewProjectionMatrix; +float4x4 InvViewMatrix; +float4x4 ViewMatrix; +float4x4 WorldMatrix; +float4x4 InvWorldMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float Time; +float4 ViewInfo; +float4 ScreenSize; +float3 EffectPosition; +float DeltaTime; +float4 EffectRotation; +float3 EffectScale; +uint ParticleCounterOffset; +float3 Dummy0; +uint SpawnCount; +@1META_CB_END + +// Particles data buffers +ByteAddressBuffer SrcParticlesData : register(t0); +RWByteAddressBuffer DstParticlesData : register(u0); + +// The GPU particles simulation context data +struct Context +{ + uint ParticleIndex; + uint ParticlesCount; + uint Seed; +}; + +@6 +// Seed generation function +uint WangHash(uint seed) +{ + seed = (seed ^ 61) ^ (seed >> 16); + seed += (seed << 3); + seed = seed ^ (seed >> 4); + seed *= 0x27d4eb2d; + seed = seed ^ (seed >> 15); + return seed; +} + +// Random number generation function +float Rand(inout uint seed) +{ + const uint multiplier = 0x0019660d; + const uint increment = 0x3c6ef35f; + seed = multiplier * seed + increment; + return asfloat((seed >> 9) | 0x3f800000) - 1.0f; +} + +float4 Mod289(float4 x) +{ + return x - floor(x * (1.0 / 289.0)) * 289.0; +} + +float4 Perm(float4 x) +{ + return Mod289(((x * 34.0) + 1.0) * x); +} + +float Noise(float3 p) +{ + float3 a = floor(p); + float3 d = p - a; + d = d * d * (3.0 - 2.0 * d); + + float4 b = a.xxyy + float4(0.0, 1.0, 0.0, 1.0); + float4 k1 = Perm(b.xyxy); + float4 k2 = Perm(k1.xyxy + b.zzww); + + float4 c = k2 + a.zzzz; + float4 k3 = Perm(c); + float4 k4 = Perm(c + 1.0); + + float4 o1 = frac(k3 * (1.0 / 41.0)); + float4 o2 = frac(k4 * (1.0 / 41.0)); + + float4 o3 = o2 * d.z + o1 * (1.0 - d.z); + float2 o4 = o3.yw * d.x + o3.xz * (1.0 - d.x); + + return o4.y * d.y + o4.x * (1.0 - d.y); +} + +float3 Noise3D(float3 p) +{ + float o = Noise(p); + float a = Noise(p + float3(0.0001f, 0.0f, 0.0f)); + float b = Noise(p + float3(0.0f, 0.0001f, 0.0f)); + float c = Noise(p + float3(0.0f, 0.0f, 0.0001f)); + + float3 grad = float3(o - a, o - b, o - c); + float3 other = abs(grad.zxy); + return normalize(cross(grad,other)); +} + +float3 Noise3D(float3 position, int octaves, float roughness) +{ + float weight = 0.0f; + float3 noise = float3(0.0, 0.0, 0.0); + float scale = 1.0f; + for (int i = 0; i < octaves; i++) + { + float curWeight = pow((1.0-((float)i / octaves)), lerp(2.0, 0.2, roughness)); + + noise += Noise3D(position * scale) * curWeight; + weight += curWeight; + + scale *= 1.72531; + } + return noise / weight; +} + +// Reprojects the world space position from the given UV and raw device depth +float3 ReprojectPosition(float2 uv, float rawDepth) +{ + uv = uv * float2(2.0, -2.0) + float2(-1.0, 1.0); + float4 pos = mul(float4(uv.x, uv.y, rawDepth, 1.0f), InvViewProjectionMatrix); + return pos.xyz / pos.w; +} + +// Random values generation wrapper macros +#define RAND Rand(context.Seed) +#define RAND2 float2(RAND, RAND) +#define RAND3 float3(RAND, RAND, RAND) +#define RAND4 float4(RAND, RAND, RAND, RAND) + +@2uint GetParticleUint(uint particleIndex, int offset) +{ + return SrcParticlesData.Load(particleIndex * PARTICLE_STRIDE + offset); +} + +int GetParticleInt(uint particleIndex, int offset) +{ + return asint(SrcParticlesData.Load(particleIndex * PARTICLE_STRIDE + offset)); +} + +float GetParticleFloat(uint particleIndex, int offset) +{ + return asfloat(SrcParticlesData.Load(particleIndex * PARTICLE_STRIDE + offset)); +} + +float2 GetParticleVec2(uint particleIndex, int offset) +{ + return asfloat(SrcParticlesData.Load2(particleIndex * PARTICLE_STRIDE + offset)); +} + +float3 GetParticleVec3(uint particleIndex, int offset) +{ + return asfloat(SrcParticlesData.Load3(particleIndex * PARTICLE_STRIDE + offset)); +} + +float4 GetParticleVec4(uint particleIndex, int offset) +{ + return asfloat(SrcParticlesData.Load4(particleIndex * PARTICLE_STRIDE + offset)); +} + +void SetParticleUint(uint particleIndex, int offset, uint value) +{ + DstParticlesData.Store(particleIndex * PARTICLE_STRIDE + offset, value); +} + +void SetParticleInt(uint particleIndex, int offset, int value) +{ + DstParticlesData.Store(particleIndex * PARTICLE_STRIDE + offset, asuint(value)); +} + +void SetParticleFloat(uint particleIndex, int offset, float value) +{ + DstParticlesData.Store(particleIndex * PARTICLE_STRIDE + offset, asuint(value)); +} + +void SetParticleVec2(uint particleIndex, int offset, float2 value) +{ + DstParticlesData.Store2(particleIndex * PARTICLE_STRIDE + offset, asuint(value)); +} + +void SetParticleVec3(uint particleIndex, int offset, float3 value) +{ + DstParticlesData.Store3(particleIndex * PARTICLE_STRIDE + offset, asuint(value)); +} + +void SetParticleVec4(uint particleIndex, int offset, float4 value) +{ + DstParticlesData.Store4(particleIndex * PARTICLE_STRIDE + offset, asuint(value)); +} + +bool AddParticle(out uint dstIndex) +{ + // Acquire the particle index in the destination buffer + DstParticlesData.InterlockedAdd(ParticleCounterOffset, 1, dstIndex); + + // Prevent overflow + return dstIndex >= PARTICLE_CAPACITY; +} + +void UpdateParticle(Context context) +{ +@5} + +void SpawnParticle(Context context) +{ + if (AddParticle(context.ParticleIndex)) + return; + +@4} + +// Main entry point for the particles simulation and spawning +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(THREAD_GROUP_SIZE, 1, 1)] +void CS_Main(uint3 dispatchThreadId : SV_DispatchThreadID) +{ + Context context; + context.ParticleIndex = dispatchThreadId.x; + context.ParticlesCount = min(SrcParticlesData.Load(ParticleCounterOffset), PARTICLE_CAPACITY); + context.Seed = WangHash(context.ParticleIndex ^ asuint(Time)); + + if (context.ParticleIndex < context.ParticlesCount) + { + UpdateParticle(context); + } + else if (context.ParticleIndex < context.ParticlesCount + SpawnCount) + { + SpawnParticle(context); + } +} diff --git a/Content/Editor/MaterialTemplates/GUI.shader b/Content/Editor/MaterialTemplates/GUI.shader new file mode 100644 index 000000000..6d3c11dc2 --- /dev/null +++ b/Content/Editor/MaterialTemplates/GUI.shader @@ -0,0 +1,260 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +@3 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +#include "./Flax/GUICommon.hlsl" +@7 +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4x4 ViewMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +@1META_CB_END + +// Material shader resources +@2 +// Interpolants passed from the vertex shader +struct VertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 WindowPos : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float4 ClipExtents : TEXCOORD3; + float2 ClipOrigin : TEXCOORD4; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif +}; + +// Interpolants passed to the pixel shader +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 WindowPos : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float4 ClipExtents : TEXCOORD3; + float2 ClipOrigin : TEXCOORD4; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + bool IsFrontFace : SV_IsFrontFace; +}; + +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; +#if USE_VERTEX_COLOR + half4 VertexColor; +#endif + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; +#endif +}; + +MaterialInput GetMaterialInput(Render2DVertex input, VertexOutput output) +{ + MaterialInput result; + result.WorldPosition = output.WorldPosition; + result.TexCoord = output.TexCoord; +#if USE_VERTEX_COLOR + result.VertexColor = output.VertexColor; +#endif + result.TBN[0] = float3(1, 0, 0); + result.TBN[1] = float3(0, 1, 0); + result.TBN[2] = float3(0, 0, 1); + result.TwoSidedSign = 1.0; + result.SvPosition = output.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = output.CustomVSToPS; +#endif + return result; +} + +MaterialInput GetMaterialInput(PixelInput input) +{ + MaterialInput result; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_VERTEX_COLOR + result.VertexColor = input.VertexColor; +#endif + result.TBN[0] = float3(1, 0, 0); + result.TBN[1] = float3(0, 1, 0); + result.TBN[2] = float3(0, 0, 1); + result.TwoSidedSign = input.IsFrontFace ? 1.0 : -1.0; + result.SvPosition = input.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + return localVector; +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + return worldVector; +} + +// Gets the current object position (supports instancing) +float3 GetObjectPosition(MaterialInput input) +{ + return float3(0, 0, 0); +} + +// Gets the current object size +float3 GetObjectSize(MaterialInput input) +{ + return float3(1, 1, 1); +} + +// Get the current object random value supports instancing) +float GetPerInstanceRandom(MaterialInput input) +{ + return 0; +} + +// Get the current object LOD transition dither factor (supports instancing) +float GetLODDitherFactor(MaterialInput input) +{ + return 0; +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ +#if USE_VERTEX_COLOR + return input.VertexColor; +#else + return 1; +#endif +} + +// Get material properties function (for vertex shader) +Material GetMaterialVS(MaterialInput input) +{ +@5 +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Vertex Shader function for GUI materials rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R32G32B32A32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R32G32B32A32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 2, R32G32B32A32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +VertexOutput VS_GUI(Render2DVertex input) +{ + VertexOutput output; + + // Render2D::RenderingFeatures::VertexSnapping + if ((int)input.CustomDataAndClipOrigin.y & 1) + input.Position = (int2)input.Position; + + output.Position = mul(float4(input.Position, 0, 1), ViewProjectionMatrix); + output.WorldPosition = mul(float4(input.Position, 0, 1), WorldMatrix).xyz; + output.TexCoord = input.TexCoord; + output.WindowPos = input.Position; +#if USE_VERTEX_COLOR + output.VertexColor = input.Color; +#endif + output.ClipOrigin = input.CustomDataAndClipOrigin.zw; + output.ClipExtents = input.ClipExtents; + + // Get material input params if need to evaluate any material property +#if USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = GetMaterialInput(input, output); + Material material = GetMaterialVS(materialInput); +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +// Pixel Shader function for GUI materials rendering +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_GUI(PixelInput input) : SV_Target0 +{ + // 2D per pixel clipping + PerformClipping(input.ClipOrigin, input.WindowPos, input.ClipExtents); + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + return float4(material.Emissive, material.Opacity); +} diff --git a/Content/Editor/MaterialTemplates/Particle.shader b/Content/Editor/MaterialTemplates/Particle.shader new file mode 100644 index 000000000..cd7f163d0 --- /dev/null +++ b/Content/Editor/MaterialTemplates/Particle.shader @@ -0,0 +1,868 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +#define MAX_LOCAL_LIGHTS 4 +@3 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +#include "./Flax/LightingCommon.hlsl" +#if USE_REFLECTIONS +#include "./Flax/ReflectionsCommon.hlsl" +#endif +#include "./Flax/Lighting.hlsl" +#include "./Flax/ShadowsSampling.hlsl" +#include "./Flax/ExponentialHeightFog.hlsl" +#include "./Flax/Matrix.hlsl" +@7 +struct SpriteInput +{ + float2 Position : POSITION; + float2 TexCoord : TEXCOORD; +}; + +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4x4 ViewMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +uint SortedIndicesOffset; +float PerInstanceRandom; +int ParticleStride; +int PositionOffset; +int SpriteSizeOffset; +int SpriteFacingModeOffset; +int SpriteFacingVectorOffset; +int VelocityOffset; +int RotationOffset; +int ScaleOffset; +int ModelFacingModeOffset; +float RibbonUVTilingDistance; +float2 RibbonUVScale; +float2 RibbonUVOffset; +int RibbonWidthOffset; +int RibbonTwistOffset; +int RibbonFacingVectorOffset; +uint RibbonSegmentCount; +float4x4 WorldMatrixInverseTransposed; +@1META_CB_END + +// Secondary constantant buffer (for lighting) +META_CB_BEGIN(1, LightingData) +LightData DirectionalLight; +LightShadowData DirectionalLightShadow; +LightData SkyLight; +ProbeData EnvironmentProbe; +ExponentialHeightFogData ExponentialHeightFog; +float3 Dummy1; +uint LocalLightsCount; +LightData LocalLights[MAX_LOCAL_LIGHTS]; +META_CB_END + +DECLARE_LIGHTSHADOWDATA_ACCESS(DirectionalLightShadow); + +// Particles attributes buffer +ByteAddressBuffer ParticlesData : register(t0); + +// Ribbons don't use sorted indices so overlap the segment distances buffer on the slot +#define HAS_SORTED_INDICES (!defined(_VS_Ribbon)) + +#if HAS_SORTED_INDICES + +// Sorted particles indices +Buffer SortedIndices : register(t1); + +#else + +// Ribbon particles segments distances buffer +Buffer SegmentDistances : register(t1); + +#endif + +// Shader resources +TextureCube EnvProbe : register(t2); +TextureCube SkyLightTexture : register(t3); +Texture2DArray DirectionalLightShadowMap : register(t4); +@2 + +// Interpolants passed from the vertex shader +struct VertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + uint ParticleIndex : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3x3 TBN : TEXCOORD3; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float InstanceParams : TEXCOORD7; // x-PerInstanceRandom +}; + +// Interpolants passed to the pixel shader +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + uint ParticleIndex : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3x3 TBN : TEXCOORD3; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float InstanceParams : TEXCOORD7; // x-PerInstanceRandom + bool IsFrontFace : SV_IsFrontFace; +}; + +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; + uint ParticleIndex; +#if USE_VERTEX_COLOR + half4 VertexColor; +#endif + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; + float3 InstanceOrigin; + float InstanceParams; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; +#endif +}; + +MaterialInput GetMaterialInput(PixelInput input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; + result.ParticleIndex = input.ParticleIndex; +#if USE_VERTEX_COLOR + result.VertexColor = input.VertexColor; +#endif + result.TBN = input.TBN; + result.TwoSidedSign = input.IsFrontFace ? 1.0 : -1.0; + result.InstanceOrigin = input.InstanceOrigin; + result.InstanceParams = input.InstanceParams; + result.SvPosition = input.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +// Gets the local to world transform matrix (supports instancing) +float4x4 GetInstanceTransform(ModelInput input) +{ + return WorldMatrix; +} +float4x4 GetInstanceTransform(MaterialInput input) +{ + return WorldMatrix; +} + +// Removes the scale vector from the local to world transformation matrix (supports instancing) +float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld) +{ + // Extract per axis scales from localToWorld transform + float scaleX = length(localToWorld[0]); + float scaleY = length(localToWorld[1]); + float scaleZ = length(localToWorld[2]); + float3 invScale = float3( + scaleX > 0.00001f ? 1.0f / scaleX : 0.0f, + scaleY > 0.00001f ? 1.0f / scaleY : 0.0f, + scaleZ > 0.00001f ? 1.0f / scaleZ : 0.0f); + localToWorld[0] *= invScale.x; + localToWorld[1] *= invScale.y; + localToWorld[2] *= invScale.z; + return localToWorld; +} + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + float3x3 localToWorld = (float3x3)GetInstanceTransform(input); + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localVector, localToWorld); +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + float3x3 localToWorld = (float3x3)GetInstanceTransform(input); + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localToWorld, worldVector); +} + +// Gets the current object position (supports instancing) +float3 GetObjectPosition(MaterialInput input) +{ + return input.InstanceOrigin.xyz; +} + +// Gets the current object size +float3 GetObjectSize(MaterialInput input) +{ + return float3(1, 1, 1); +} + +// Get the current object random value (supports instancing) +float GetPerInstanceRandom(MaterialInput input) +{ + return input.InstanceParams; +} + +// Get the current object LOD transition dither factor (supports instancing) +float GetLODDitherFactor(MaterialInput input) +{ + return 0; +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ +#if USE_VERTEX_COLOR + return input.VertexColor; +#else + return 1; +#endif +} + +uint GetParticleUint(uint particleIndex, int offset) +{ + return ParticlesData.Load(particleIndex * ParticleStride + offset); +} + +int GetParticleInt(uint particleIndex, int offset) +{ + return asint(ParticlesData.Load(particleIndex * ParticleStride + offset)); +} + +float GetParticleFloat(uint particleIndex, int offset) +{ + return asfloat(ParticlesData.Load(particleIndex * ParticleStride + offset)); +} + +float2 GetParticleVec2(uint particleIndex, int offset) +{ + return asfloat(ParticlesData.Load2(particleIndex * ParticleStride + offset)); +} + +float3 GetParticleVec3(uint particleIndex, int offset) +{ + return asfloat(ParticlesData.Load3(particleIndex * ParticleStride + offset)); +} + +float4 GetParticleVec4(uint particleIndex, int offset) +{ + return asfloat(ParticlesData.Load4(particleIndex * ParticleStride + offset)); +} + +float3 TransformParticlePosition(float3 input) +{ + return mul(float4(input, 1.0f), WorldMatrix).xyz; +} + +float3 TransformParticleVector(float3 input) +{ + return mul(float4(input, 0.0f), WorldMatrixInverseTransposed).xyz; +} + +// Get material properties function (for vertex shader) +Material GetMaterialVS(MaterialInput input) +{ +@5 +} + +// Get material properties function (for domain shader) +Material GetMaterialDS(MaterialInput input) +{ +@6 +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Calculates the transform matrix from mesh tangent space to local space +half3x3 CalcTangentToLocal(ModelInput input) +{ + float bitangentSign = input.Tangent.w ? -1.0f : +1.0f; + float3 normal = input.Normal.xyz * 2.0 - 1.0; + float3 tangent = input.Tangent.xyz * 2.0 - 1.0; + float3 bitangent = cross(normal, tangent) * bitangentSign; + return float3x3(tangent, bitangent, normal); +} + +half3x3 CalcTangentToWorld(in float4x4 world, in half3x3 tangentToLocal) +{ + half3x3 localToWorld = RemoveScaleFromLocalToWorld((float3x3)world); + return mul(tangentToLocal, localToWorld); +} + +float3 GetParticlePosition(uint ParticleIndex) +{ + return TransformParticlePosition(GetParticleVec3(ParticleIndex, PositionOffset)); +} + +// Vertex Shader function for Sprite Rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +VertexOutput VS_Sprite(SpriteInput input, uint particleIndex : SV_InstanceID) +{ + VertexOutput output; + +#if HAS_SORTED_INDICES + // Sorted particles mapping + if (SortedIndicesOffset != 0xFFFFFFFF) + { + particleIndex = SortedIndices[SortedIndicesOffset + particleIndex]; + } +#endif + + // Read particle data + float3 particlePosition = GetParticleVec3(particleIndex, PositionOffset); + float3 particleRotation = GetParticleVec3(particleIndex, RotationOffset); + float2 spriteSize = GetParticleVec2(particleIndex, SpriteSizeOffset); + int spriteFacingMode = SpriteFacingModeOffset != -1 ? GetParticleInt(particleIndex, SpriteFacingModeOffset) : -1; + + float4x4 world = WorldMatrix; + float3x3 eulerMatrix = EulerMatrix(radians(particleRotation)); + float3x3 viewRot = transpose((float3x3)ViewMatrix); + float3 position = mul(float4(particlePosition, 1), world).xyz; + + // Orient sprite + float3 axisX, axisY, axisZ; + if (spriteFacingMode == 0) + { + // Face Camera Position + axisZ = normalize(ViewPos - position); + axisX = -normalize(cross(viewRot[1].xyz, axisZ)); + axisY = cross(axisZ, axisX); + } + else if (spriteFacingMode == 1) + { + // Face Camera Plane + axisX = viewRot[0].xyz; + axisY = -viewRot[1].xyz; + axisZ = viewRot[2].xyz; + } + else if (spriteFacingMode == 2) + { + // Along Velocity + float3 velocity = GetParticleVec3(particleIndex, VelocityOffset); + axisY = normalize(velocity); + axisZ = ViewPos - position; + axisX = normalize(cross(axisY, axisZ)); + axisZ = cross(axisX, axisY); + } + else if (spriteFacingMode == 3) + { + // Custom Facing Vector + float3 spriteFacingVector = GetParticleVec3(particleIndex, SpriteFacingVectorOffset); + axisZ = spriteFacingVector; + axisX = normalize(cross(viewRot[1].xyz, axisZ)); + axisY = cross(axisZ, axisX); + } + else if (spriteFacingMode == 4) + { + // Fixed Axis + float3 spriteFacingVector = GetParticleVec3(particleIndex, SpriteFacingVectorOffset); + axisY = spriteFacingVector; + axisZ = ViewPos - position; + axisX = normalize(cross(axisY, axisZ)); + axisZ = cross(axisX, axisY); + } + else + { + // Default + axisX = float3(1, 0, 0); + axisY = float3(0, 1, 0); + axisZ = float3(0, 0, 1); + } + + // Compute world space vertex position + float3 spriteVertexPosition = float3(input.Position.xy * spriteSize, 0); + spriteVertexPosition = mul(spriteVertexPosition, eulerMatrix); + spriteVertexPosition = mul(spriteVertexPosition, float3x3(axisX, axisY, axisZ)); + output.WorldPosition = position + spriteVertexPosition; + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.TexCoord = input.TexCoord; + output.ParticleIndex = particleIndex; +#if USE_VERTEX_COLOR + output.VertexColor = 1; +#endif + output.InstanceOrigin = world[3].xyz; + output.InstanceParams = PerInstanceRandom; + + // Calculate tanget space to world space transformation matrix for unit vectors + half3x3 tangentToLocal = float3x3(axisX, axisY, axisZ); + half3x3 tangentToWorld = CalcTangentToWorld(world, tangentToLocal); + output.TBN = tangentToWorld; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = (MaterialInput)0; + materialInput.WorldPosition = output.WorldPosition; + materialInput.TexCoord = output.TexCoord; + materialInput.ParticleIndex = output.ParticleIndex; +#if USE_VERTEX_COLOR + materialInput.VertexColor = output.VertexColor; +#endif + materialInput.TBN = output.TBN; + materialInput.TwoSidedSign = 1; + materialInput.SvPosition = output.Position; + materialInput.PreSkinnedPosition = float3(input.Position.xy, 0); + materialInput.PreSkinnedNormal = tangentToLocal[2].xyz; + materialInput.InstanceOrigin = output.InstanceOrigin; + materialInput.InstanceParams = output.InstanceParams; + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +// Vertex Shader function for Model Rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 1, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R16G16_FLOAT, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R8G8B8A8_UNORM, 2, 0, PER_VERTEX, 0, USE_VERTEX_COLOR) +VertexOutput VS_Model(ModelInput input, uint particleIndex : SV_InstanceID) +{ + VertexOutput output; + +#if HAS_SORTED_INDICES + // Sorted particles mapping + if (SortedIndicesOffset != 0xFFFFFFFF) + { + particleIndex = SortedIndices[SortedIndicesOffset + particleIndex]; + } +#endif + + // Read particle data + float3 particlePosition = GetParticleVec3(particleIndex, PositionOffset); + float3 particleScale = GetParticleVec3(particleIndex, ScaleOffset); + float3 particleRotation = GetParticleVec3(particleIndex, RotationOffset); + int modelFacingMode = ModelFacingModeOffset != -1 ? GetParticleInt(particleIndex, ModelFacingModeOffset) : -1; + float3 position = mul(float4(particlePosition, 1), WorldMatrix).xyz; + + // Compute final vertex position in the world + float3x3 eulerMatrix = EulerMatrix(radians(particleRotation)); + float4 transform0 = float4(eulerMatrix[0], particlePosition.x); + float4 transform1 = float4(eulerMatrix[1], particlePosition.y); + float4 transform2 = float4(eulerMatrix[2], particlePosition.z); + float4x4 scaleMatrix = float4x4(float4(particleScale.x, 0.0f, 0.0f, 0.0f), float4(0.0f, particleScale.y, 0.0f, 0.0f), float4(0.0f, 0.0f, particleScale.z, 0.0f), float4(0.0f, 0.0f, 0.0f, 1.0f)); + float4x4 world = float4x4(transform0, transform1, transform2, float4(0.0f, 0.0f, 0.0f, 1.0f)); + if (modelFacingMode == 0) + { + // Face Camera Position + float3 direction = normalize(ViewPos - position); + float4 alignmentQuat = FindQuatBetween(float3(1.0f, 0.0f, 0.0f), direction); + float4x4 alignmentMat = QuaternionToMatrix(alignmentQuat); + world = mul(world, mul(alignmentMat, scaleMatrix)); + } + else if (modelFacingMode == 1) + { + // Face Camera Plane + float3 direction = -ViewDir; + float4 alignmentQuat = FindQuatBetween(float3(1.0f, 0.0f, 0.0f), direction); + float4x4 alignmentMat = QuaternionToMatrix(alignmentQuat); + world = mul(world, mul(alignmentMat, scaleMatrix)); + } + else if (modelFacingMode == 2) + { + // Along Velocity + float3 direction = GetParticleVec3(particleIndex, VelocityOffset); + float4 alignmentQuat = FindQuatBetween(float3(1.0f, 0.0f, 0.0f), normalize(direction)); + float4x4 alignmentMat = QuaternionToMatrix(alignmentQuat); + world = mul(world, mul(alignmentMat, scaleMatrix)); + } + else + { + // Default + world = mul(world, scaleMatrix); + } + world = transpose(world); + world = mul(world, WorldMatrix); + + // Calculate the vertex position in world space + output.WorldPosition = mul(float4(input.Position, 1), world).xyz; + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.TexCoord = input.TexCoord; + output.ParticleIndex = particleIndex; +#if USE_VERTEX_COLOR + output.VertexColor = input.Color; +#endif + output.InstanceOrigin = WorldMatrix[3].xyz; + output.InstanceParams = PerInstanceRandom; + + // Calculate tanget space to world space transformation matrix for unit vectors + half3x3 tangentToLocal = CalcTangentToLocal(input); + half3x3 tangentToWorld = CalcTangentToWorld(WorldMatrix, tangentToLocal); + output.TBN = tangentToWorld; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = (MaterialInput)0; + materialInput.WorldPosition = output.WorldPosition; + materialInput.TexCoord = output.TexCoord; + materialInput.ParticleIndex = output.ParticleIndex; +#if USE_VERTEX_COLOR + materialInput.VertexColor = output.VertexColor; +#endif + materialInput.TBN = output.TBN; + materialInput.TwoSidedSign = 1; + materialInput.SvPosition = output.Position; + materialInput.PreSkinnedPosition = input.Position.xyz; + materialInput.PreSkinnedNormal = tangentToLocal[2].xyz; + materialInput.InstanceOrigin = output.InstanceOrigin; + materialInput.InstanceParams = output.InstanceParams; + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +// Vertex Shader function for Ribbon Rendering +META_VS(true, FEATURE_LEVEL_ES2) +VertexOutput VS_Ribbon(uint vertexIndex : SV_VertexID) +{ + VertexOutput output; + + // Get particle data + uint particleIndex = vertexIndex / 2; + int vertexSign = (((int)vertexIndex & 0x1) * 2) - 1; + float3 position = GetParticlePosition(particleIndex); + float ribbonWidth = RibbonWidthOffset != -1 ? GetParticleFloat(particleIndex, RibbonWidthOffset) : 20.0f; + float ribbonTwist = RibbonTwistOffset != -1 ? GetParticleFloat(particleIndex, RibbonTwistOffset) : 0.0f; + + // Calculate ribbon direction + float3 direction; + if (particleIndex == 0) + { + float3 nextParticlePos = GetParticlePosition(particleIndex + 1); + direction = nextParticlePos - position; + } + else + { + float3 previousParticlePos = GetParticlePosition(particleIndex - 1); + direction = position - previousParticlePos; + } + + // Calculate particle orientation (tangent vectors) + float3 cameraDirection = SafeNormalize(ViewPos - position); + float3 tangentUp = SafeNormalize(direction); + float3 facing = RibbonFacingVectorOffset != -1 ? GetParticleVec3(particleIndex, RibbonFacingVectorOffset) : cameraDirection; + float twistSine, twistCosine; + sincos(radians(ribbonTwist), twistSine, twistCosine); + facing = facing * twistCosine + cross(facing, tangentUp) * twistSine + tangentUp * dot(tangentUp, facing) * (1 - twistCosine); + float3 tangentRight = SafeNormalize(cross(tangentUp, facing)); + if (!any(tangentRight)) + { + tangentRight = SafeNormalize(cross(tangentUp, float3(0.0f, 0.0f, 1.0f))); + } + + // Calculate texture coordinates + float texCoordU; +#ifdef _VS_Ribbon + if (RibbonUVTilingDistance != 0.0f) + { + texCoordU = SegmentDistances[particleIndex] / RibbonUVTilingDistance; + } + else +#endif + { + texCoordU = (float)particleIndex / RibbonSegmentCount; + } + float texCoordV = (vertexIndex + 1) & 0x1; + output.TexCoord = float2(texCoordU, texCoordV) * RibbonUVScale + RibbonUVOffset; + + // Compute world space vertex position + output.WorldPosition = position + tangentRight * vertexSign * (ribbonWidth.xxx * 0.5f); + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.ParticleIndex = particleIndex; +#if USE_VERTEX_COLOR + output.VertexColor = 1; +#endif + output.InstanceOrigin = WorldMatrix[3].xyz; + output.InstanceParams = PerInstanceRandom; + + // Calculate tanget space to world space transformation matrix for unit vectors + half3x3 tangentToLocal = float3x3(tangentRight, tangentUp, cross(tangentRight, tangentUp)); + half3x3 tangentToWorld = CalcTangentToWorld(WorldMatrix, tangentToLocal); + output.TBN = tangentToWorld; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = (MaterialInput)0; + materialInput.WorldPosition = output.WorldPosition; + materialInput.TexCoord = output.TexCoord; + materialInput.ParticleIndex = output.ParticleIndex; +#if USE_VERTEX_COLOR + materialInput.VertexColor = output.VertexColor; +#endif + materialInput.TBN = output.TBN; + materialInput.TwoSidedSign = 1; + materialInput.SvPosition = output.Position; + materialInput.PreSkinnedPosition = Position; + materialInput.PreSkinnedNormal = tangentToLocal[2].xyz; + materialInput.InstanceOrigin = output.InstanceOrigin; + materialInput.InstanceParams = output.InstanceParams; + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +// Pixel Shader function for Forward Pass +META_PS(USE_FORWARD, FEATURE_LEVEL_ES2) +float4 PS_Forward(PixelInput input) : SV_Target0 +{ + float4 output = 0; + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + // Add emissive light + output = float4(material.Emissive, material.Opacity); + +#if MATERIAL_SHADING_MODEL != SHADING_MODEL_UNLIT + + // Setup GBuffer data as proxy for lighting + GBufferSample gBuffer; + gBuffer.Normal = material.WorldNormal; + gBuffer.Roughness = material.Roughness; + gBuffer.Metalness = material.Metalness; + gBuffer.Color = material.Color; + gBuffer.Specular = material.Specular; + gBuffer.AO = material.AO; + gBuffer.ViewPos = mul(float4(materialInput.WorldPosition, 1), ViewMatrix).xyz; +#if MATERIAL_SHADING_MODEL == SHADING_MODEL_SUBSURFACE + gBuffer.CustomData = float4(material.SubsurfaceColor, material.Opacity); +#elif MATERIAL_SHADING_MODEL == SHADING_MODEL_FOLIAGE + gBuffer.CustomData = float4(material.SubsurfaceColor, material.Opacity); +#else + gBuffer.CustomData = float4(0, 0, 0, 0); +#endif + gBuffer.WorldPos = materialInput.WorldPosition; + gBuffer.ShadingModel = MATERIAL_SHADING_MODEL; + + // Calculate lighting from a single directional light + float4 shadowMask = 1.0f; + if (DirectionalLight.CastShadows > 0) + { + LightShadowData directionalLightShadowData = GetDirectionalLightShadowData(); + shadowMask.r = SampleShadow(DirectionalLight, directionalLightShadowData, DirectionalLightShadowMap, gBuffer, shadowMask.g); + } + float4 light = GetLighting(ViewPos, DirectionalLight, gBuffer, shadowMask, false, false); + + // Calculate lighting from sky light + light += GetSkyLightLighting(SkyLight, gBuffer, SkyLightTexture); + + // Calculate lighting from local lights + LOOP + for (uint localLightIndex = 0; localLightIndex < LocalLightsCount; localLightIndex++) + { + const LightData localLight = LocalLights[localLightIndex]; + bool isSpotLight = localLight.SpotAngles.x > -2.0f; + shadowMask = 1.0f; + light += GetLighting(ViewPos, localLight, gBuffer, shadowMask, true, isSpotLight); + } + +#if USE_REFLECTIONS + // Calculate reflections + light.rgb += GetEnvProbeLighting(ViewPos, EnvProbe, EnvironmentProbe, gBuffer) * light.a; +#endif + + // Add lighting (apply ambient occlusion) + output.rgb += light.rgb * gBuffer.AO; + +#if USE_FOG + // Calculate exponential height fog + float4 fog = GetExponentialHeightFog(ExponentialHeightFog, materialInput.WorldPosition, ViewPos, 0); + + // Apply fog to the output color +#if MATERIAL_BLEND == MATERIAL_BLEND_OPAQUE + output = float4(output.rgb * fog.a + fog.rgb, output.a); +#elif MATERIAL_BLEND == MATERIAL_BLEND_TRANSPARENT + output = float4(output.rgb * fog.a + fog.rgb, output.a); +#elif MATERIAL_BLEND == MATERIAL_BLEND_ADDITIVE + output = float4(output.rgb * fog.a + fog.rgb, output.a * fog.a); +#elif MATERIAL_BLEND == MATERIAL_BLEND_MULTIPLY + output = float4(lerp(float3(1, 1, 1), output.rgb, fog.aaa * fog.aaa), output.a); +#endif + +#endif + +#endif + + return output; +} + +#if USE_DISTORTION + +// Pixel Shader function for Distortion Pass +META_PS(USE_DISTORTION, FEATURE_LEVEL_ES2) +float4 PS_Distortion(PixelInput input) : SV_Target0 +{ + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + float3 viewNormal = normalize(TransformWorldVectorToView(materialInput, material.WorldNormal)); + float airIOR = 1.0f; +#if USE_PIXEL_NORMAL_OFFSET_REFRACTION + float3 viewVertexNormal = TransformWorldVectorToView(materialInput, TransformTangentVectorToWorld(materialInput, float3(0, 0, 1))); + float2 distortion = (viewVertexNormal.xy - viewNormal.xy) * (material.Refraction - airIOR); +#else + float2 distortion = viewNormal.xy * (material.Refraction - airIOR); +#endif + + // Clip if the distortion distance (squared) is too small to be noticed + clip(dot(distortion, distortion) - 0.00001); + + // Scale up for better precision in low/subtle refractions at the expense of artefacts at higher refraction + distortion *= 4.0f; + + // Store positive and negative offsets separately + float2 addOffset = max(distortion, 0); + float2 subOffset = abs(min(distortion, 0)); + return float4(addOffset.x, addOffset.y, subOffset.x, subOffset.y); +} + +#endif + +// Pixel Shader function for Depth Pass +META_PS(true, FEATURE_LEVEL_ES2) +void PS_Depth(PixelInput input +#if GLSL + , out float4 OutColor : SV_Target0 +#endif + ) +{ + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Perform per pixel clipping +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif +#if MATERIAL_BLEND == MATERIAL_BLEND_TRANSPARENT + clip(material.Opacity - MATERIAL_OPACITY_THRESHOLD); +#endif + +#if GLSL + OutColor = 0; +#endif +} diff --git a/Content/Editor/MaterialTemplates/PostProcess.shader b/Content/Editor/MaterialTemplates/PostProcess.shader new file mode 100644 index 000000000..d4a5424bf --- /dev/null +++ b/Content/Editor/MaterialTemplates/PostProcess.shader @@ -0,0 +1,150 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +@3 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +@7 +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +float4 TemporalAAJitter; +@1META_CB_END + +// Material shader resources +@2 +// Interpolants passed to the pixel shader +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + bool IsFrontFace : SV_IsFrontFace; +}; + +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; +#if USE_VERTEX_COLOR + half4 VertexColor; +#endif + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; +}; + +MaterialInput GetMaterialInput(PixelInput input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_VERTEX_COLOR + result.VertexColor = float4(0, 0, 0, 1); +#endif + result.TBN[0] = float3(1, 0, 0); + result.TBN[1] = float3(0, 1, 0); + result.TBN[2] = float3(0, 0, 1); + result.TwoSidedSign = input.IsFrontFace ? 1.0 : -1.0; + result.SvPosition = input.Position; + return result; +} + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + return localVector; +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + return worldVector; +} + +// Gets the current object position (supports instancing) +float3 GetObjectPosition(MaterialInput input) +{ + return float3(0, 0, 0); +} + +// Gets the current object size +float3 GetObjectSize(MaterialInput input) +{ + return float3(1, 1, 1); +} + +// Get the current object random value supports instancing) +float GetPerInstanceRandom(MaterialInput input) +{ + return 0; +} + +// Get the current object LOD transition dither factor (supports instancing) +float GetLODDitherFactor(MaterialInput input) +{ + return 0; +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ + return 1; +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Pixel Shader function for PostFx materials rendering +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_PostFx(PixelInput input) : SV_Target0 +{ + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + return float4(material.Emissive, material.Opacity); +} diff --git a/Content/Editor/MaterialTemplates/SurfaceDeferred.shader b/Content/Editor/MaterialTemplates/SurfaceDeferred.shader new file mode 100644 index 000000000..cc65235c0 --- /dev/null +++ b/Content/Editor/MaterialTemplates/SurfaceDeferred.shader @@ -0,0 +1,1085 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +@3 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +@7 +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4x4 ViewMatrix; +float4x4 PrevViewProjectionMatrix; +float4x4 PrevWorldMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +float4 LightmapArea; +float3 WorldInvScale; +float WorldDeterminantSign; +float2 Dummy0; +float LODDitherFactor; +float PerInstanceRandom; +float4 TemporalAAJitter; +float3 GeometrySize; +float Dummy1; +@1META_CB_END + +#if CAN_USE_LIGHTMAP + +// Irradiance and directionality prebaked lightmaps +Texture2D Lightmap0 : register(t0); +Texture2D Lightmap1 : register(t1); +Texture2D Lightmap2 : register(t2); + +#endif + +// Material shader resources +@2 + +// Interpolants passed from the vertex shader +struct VertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3 WorldNormal : TEXCOORD3; + float4 WorldTangent : TEXCOORD4; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; // x-PerInstanceRandom, y-LODDitherFactor +#if IS_MOTION_VECTORS_PASS + float3 PrevWorldPosition : TEXCOORD8; +#endif +#if USE_TESSELLATION + float TessellationMultiplier : TESS; +#endif +}; + +// Interpolants passed to the pixel shader +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3 WorldNormal : TEXCOORD3; + float4 WorldTangent : TEXCOORD4; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; // x-PerInstanceRandom, y-LODDitherFactor +#if IS_MOTION_VECTORS_PASS + float3 PrevWorldPosition : TEXCOORD8; +#endif + bool IsFrontFace : SV_IsFrontFace; +}; + +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; +#if USE_LIGHTMAP + float2 LightmapUV; +#endif +#if USE_VERTEX_COLOR + half4 VertexColor; +#endif + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; + float3 InstanceOrigin; + float2 InstanceParams; +#if USE_INSTANCING + float3 InstanceTransform1; + float3 InstanceTransform2; + float3 InstanceTransform3; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; +#endif +}; + +float3x3 CalcTangentBasis(float3 normal, float4 tangent) +{ + float3 bitangent = cross(normal, tangent.xyz) * tangent.w; + return float3x3(tangent.xyz, bitangent, normal); +} + +MaterialInput GetMaterialInput(ModelInput input, VertexOutput output, float3 localNormal) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = output.WorldPosition; + result.TexCoord = output.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = output.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = output.VertexColor; +#endif + result.TBN = CalcTangentBasis(output.WorldNormal, output.WorldTangent); + result.TwoSidedSign = WorldDeterminantSign; + result.SvPosition = output.Position; + result.PreSkinnedPosition = input.Position.xyz; + result.PreSkinnedNormal = localNormal; +#if USE_INSTANCING + result.InstanceOrigin = input.InstanceOrigin.xyz; + result.InstanceParams = float2(input.InstanceOrigin.w, input.InstanceTransform1.w); + result.InstanceTransform1 = input.InstanceTransform1.xyz; + result.InstanceTransform2 = input.InstanceTransform2.xyz; + result.InstanceTransform3 = input.InstanceTransform3.xyz; +#else + result.InstanceOrigin = WorldMatrix[3].xyz; + result.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); +#endif + return result; +} + +MaterialInput GetMaterialInput(VertexOutput output, float3 localPosition, float3 localNormal) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = output.WorldPosition; + result.TexCoord = output.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = output.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = output.VertexColor; +#endif + result.TBN = CalcTangentBasis(output.WorldNormal, output.WorldTangent); + result.TwoSidedSign = WorldDeterminantSign; + result.InstanceOrigin = WorldMatrix[3].xyz; + result.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); + result.SvPosition = output.Position; + result.PreSkinnedPosition = localPosition; + result.PreSkinnedNormal = localNormal; + return result; +} + +MaterialInput GetMaterialInput(PixelInput input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = input.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = input.VertexColor; +#endif + result.TBN = CalcTangentBasis(input.WorldNormal, input.WorldTangent); + result.TwoSidedSign = WorldDeterminantSign * (input.IsFrontFace ? 1.0 : -1.0); + result.InstanceOrigin = input.InstanceOrigin; + result.InstanceParams = input.InstanceParams; + result.SvPosition = input.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +#if USE_INSTANCING +#define INSTANCE_TRANS_WORLD float4x4(float4(input.InstanceTransform1.xyz, 0.0f), float4(input.InstanceTransform2.xyz, 0.0f), float4(input.InstanceTransform3.xyz, 0.0f), float4(input.InstanceOrigin.xyz, 1.0f)) +#else +#define INSTANCE_TRANS_WORLD WorldMatrix +#endif + +// Gets the local to world transform matrix (supports instancing) +float4x4 GetInstanceTransform(ModelInput input) +{ + return INSTANCE_TRANS_WORLD; +} +float4x4 GetInstanceTransform(ModelInput_Skinned input) +{ + return INSTANCE_TRANS_WORLD; +} +float4x4 GetInstanceTransform(ModelInput_PosOnly input) +{ + return INSTANCE_TRANS_WORLD; +} +float4x4 GetInstanceTransform(MaterialInput input) +{ + return INSTANCE_TRANS_WORLD; +} + +// Removes the scale vector from the local to world transformation matrix (supports instancing) +float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld) +{ +#if USE_INSTANCING + // Extract per axis scales from localToWorld transform + float scaleX = length(localToWorld[0]); + float scaleY = length(localToWorld[1]); + float scaleZ = length(localToWorld[2]); + float3 invScale = float3( + scaleX > 0.00001f ? 1.0f / scaleX : 0.0f, + scaleY > 0.00001f ? 1.0f / scaleY : 0.0f, + scaleZ > 0.00001f ? 1.0f / scaleZ : 0.0f); +#else + float3 invScale = WorldInvScale; +#endif + localToWorld[0] *= invScale.x; + localToWorld[1] *= invScale.y; + localToWorld[2] *= invScale.z; + return localToWorld; +} + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + float3x3 localToWorld = (float3x3)GetInstanceTransform(input); + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localVector, localToWorld); +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + float3x3 localToWorld = (float3x3)GetInstanceTransform(input); + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localToWorld, worldVector); +} + +// Gets the current object position (supports instancing) +float3 GetObjectPosition(MaterialInput input) +{ + return input.InstanceOrigin.xyz; +} + +// Gets the current object size (supports instancing) +float3 GetObjectSize(MaterialInput input) +{ + float4x4 world = GetInstanceTransform(input); + return GeometrySize * float3(world._m00, world._m11, world._m22); +} + +// Get the current object random value (supports instancing) +float GetPerInstanceRandom(MaterialInput input) +{ + return input.InstanceParams.x; +} + +// Get the current object LOD transition dither factor (supports instancing) +float GetLODDitherFactor(MaterialInput input) +{ +#if USE_DITHERED_LOD_TRANSITION + return input.InstanceParams.y; +#else + return 0; +#endif +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ +#if USE_VERTEX_COLOR + return input.VertexColor; +#else + return 1; +#endif +} + +// Get material properties function (for vertex shader) +Material GetMaterialVS(MaterialInput input) +{ +@5 +} + +// Get material properties function (for domain shader) +Material GetMaterialDS(MaterialInput input) +{ +@6 +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Calculates the transform matrix from mesh tangent space to local space +float3x3 CalcTangentToLocal(ModelInput input) +{ + float bitangentSign = input.Tangent.w ? -1.0f : +1.0f; + float3 normal = input.Normal.xyz * 2.0 - 1.0; + float3 tangent = input.Tangent.xyz * 2.0 - 1.0; + float3 bitangent = cross(normal, tangent) * bitangentSign; + return float3x3(tangent, bitangent, normal); +} + +float3x3 CalcTangentToWorld(float4x4 world, float3x3 tangentToLocal) +{ + float3x3 localToWorld = RemoveScaleFromLocalToWorld((float3x3)world); + return mul(tangentToLocal, localToWorld); +} + +// Vertex Shader function for GBuffer Pass and Depth Pass (with full vertex data) +META_VS(IS_SURFACE, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_INSTANCING=0) +META_PERMUTATION_1(USE_INSTANCING=1) +META_PERMUTATION_2(USE_INSTANCING=0, IS_MOTION_VECTORS_PASS=1) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 1, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R16G16_FLOAT, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R8G8B8A8_UNORM, 2, 0, PER_VERTEX, 0, USE_VERTEX_COLOR) +META_VS_IN_ELEMENT(ATTRIBUTE,0, R32G32B32A32_FLOAT,3, 0, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,1, R32G32B32A32_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,2, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,3, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,4, R16G16B16A16_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +VertexOutput VS(ModelInput input) +{ + VertexOutput output; + + // Compute world space vertex position + float4x4 world = GetInstanceTransform(input); + output.WorldPosition = mul(float4(input.Position.xyz, 1), world).xyz; +#if IS_MOTION_VECTORS_PASS + output.PrevWorldPosition = mul(float4(input.Position.xyz, 1), PrevWorldMatrix).xyz; +#endif + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.TexCoord = input.TexCoord; +#if USE_VERTEX_COLOR + output.VertexColor = input.Color; +#endif + output.InstanceOrigin = world[3].xyz; +#if USE_INSTANCING + output.LightmapUV = input.LightmapUV * input.InstanceLightmapArea.zw + input.InstanceLightmapArea.xy; + output.InstanceParams = float2(input.InstanceOrigin.w, input.InstanceTransform1.w); +#else + output.LightmapUV = input.LightmapUV * LightmapArea.zw + LightmapArea.xy; + output.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); +#endif + + // Calculate tanget space to world space transformation matrix for unit vectors + float3x3 tangentToLocal = CalcTangentToLocal(input); + float3x3 tangentToWorld = CalcTangentToWorld(world, tangentToLocal); + output.WorldNormal = tangentToWorld[2]; + output.WorldTangent.xyz = tangentToWorld[0]; + output.WorldTangent.w = input.Tangent.w ? -1.0f : +1.0f; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_TESSELLATION || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = GetMaterialInput(input, output, tangentToLocal[2].xyz); + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Get tessalation multiplier (per vertex) +#if USE_TESSELLATION + output.TessellationMultiplier = material.TessellationMultiplier; +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +// Vertex Shader function for Depth Pass +META_VS(IS_SURFACE, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_INSTANCING=0) +META_PERMUTATION_1(USE_INSTANCING=1) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(ATTRIBUTE,0, R32G32B32A32_FLOAT,3, 0, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,1, R32G32B32A32_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,2, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,3, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,4, R16G16B16A16_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +float4 VS_Depth(ModelInput_PosOnly input) : SV_Position +{ + float4x4 world = GetInstanceTransform(input); + float3 worldPosition = mul(float4(input.Position.xyz, 1), world).xyz; + float4 position = mul(float4(worldPosition.xyz, 1), ViewProjectionMatrix); + return position; +} + +#if USE_SKINNING + +// The skeletal bones matrix buffer (stored as 4x3, 3 float4 behind each other) +Buffer BoneMatrices : register(t0); + +#if PER_BONE_MOTION_BLUR + +// The skeletal bones matrix buffer from the previous frame +Buffer PrevBoneMatrices : register(t1); + +float3x4 GetPrevBoneMatrix(int index) +{ + float4 a = PrevBoneMatrices[index * 3]; + float4 b = PrevBoneMatrices[index * 3 + 1]; + float4 c = PrevBoneMatrices[index * 3 + 2]; + return float3x4(a, b, c); +} + +float3 SkinPrevPosition(ModelInput_Skinned input) +{ + float4 position = float4(input.Position.xyz, 1); + float3x4 boneMatrix = input.BlendWeights.x * GetPrevBoneMatrix(input.BlendIndices.x); + boneMatrix += input.BlendWeights.y * GetPrevBoneMatrix(input.BlendIndices.y); + boneMatrix += input.BlendWeights.z * GetPrevBoneMatrix(input.BlendIndices.z); + boneMatrix += input.BlendWeights.w * GetPrevBoneMatrix(input.BlendIndices.w); + return mul(boneMatrix, position); +} + +#endif + +// Cached skinning data to avoid multiple calculation +struct SkinningData +{ + float3x4 BlendMatrix; +}; + +// Calculates the transposed transform matrix for the given bone index +float3x4 GetBoneMatrix(int index) +{ + float4 a = BoneMatrices[index * 3]; + float4 b = BoneMatrices[index * 3 + 1]; + float4 c = BoneMatrices[index * 3 + 2]; + return float3x4(a, b, c); +} + +// Calculates the transposed transform matrix for the given vertex (uses blending) +float3x4 CalcBoneMatrix(ModelInput_Skinned input) +{ + float3x4 boneMatrix = input.BlendWeights.x * GetBoneMatrix(input.BlendIndices.x); + boneMatrix += input.BlendWeights.y * GetBoneMatrix(input.BlendIndices.y); + boneMatrix += input.BlendWeights.z * GetBoneMatrix(input.BlendIndices.z); + boneMatrix += input.BlendWeights.w * GetBoneMatrix(input.BlendIndices.w); + return boneMatrix; +} + +// Transforms the vertex position by weighted sum of the skinning matrices +float3 SkinPosition(ModelInput_Skinned input, SkinningData data) +{ + float4 position = float4(input.Position.xyz, 1); + return mul(data.BlendMatrix, position); +} + +// Transforms the vertex position by weighted sum of the skinning matrices +float3x3 SkinTangents(ModelInput_Skinned input, SkinningData data) +{ + // Unpack vertex tangent frame + float bitangentSign = input.Tangent.w ? -1.0f : +1.0f; + float3 normal = input.Normal.xyz * 2.0 - 1.0; + float3 tangent = input.Tangent.xyz * 2.0 - 1.0; + + // Apply skinning + tangent = mul(data.BlendMatrix, float4(tangent, 0)); + normal = mul(data.BlendMatrix, float4(normal, 0)); + + float3 bitangent = cross(normal, tangent) * bitangentSign; + return float3x3(tangent, bitangent, normal); +} + +// Vertex Shader function for GBuffers/Depth Pass (skinned mesh rendering) +META_VS(IS_SURFACE, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_SKINNING=1) +META_PERMUTATION_2(USE_SKINNING=1, IS_MOTION_VECTORS_PASS=1) +META_PERMUTATION_3(USE_SKINNING=1, IS_MOTION_VECTORS_PASS=1, PER_BONE_MOTION_BLUR=1) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(BLENDINDICES, 0, R8G8B8A8_UINT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(BLENDWEIGHT, 0, R16G16B16A16_FLOAT,0, ALIGN, PER_VERTEX, 0, true) +VertexOutput VS_Skinned(ModelInput_Skinned input) +{ + VertexOutput output; + + // Perform skinning + SkinningData data; + data.BlendMatrix = CalcBoneMatrix(input); + float3 position = SkinPosition(input, data); + float3x3 tangentToLocal = SkinTangents(input, data); + + // Compute world space vertex position + float4x4 world = GetInstanceTransform(input); + output.WorldPosition = mul(float4(position, 1), world).xyz; +#if IS_MOTION_VECTORS_PASS +#if PER_BONE_MOTION_BLUR + float3 prevPosition = SkinPrevPosition(input); + output.PrevWorldPosition = mul(float4(prevPosition, 1), PrevWorldMatrix).xyz; +#else + output.PrevWorldPosition = mul(float4(position, 1), PrevWorldMatrix).xyz; +#endif +#endif + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.TexCoord = input.TexCoord; +#if USE_VERTEX_COLOR + output.VertexColor = float4(0, 0, 0, 1); +#endif + output.LightmapUV = float2(0, 0); + output.InstanceOrigin = world[3].xyz; +#if USE_INSTANCING + output.InstanceParams = float2(input.InstanceOrigin.w, input.InstanceTransform1.w); +#else + output.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); +#endif + + // Calculate tanget space to world space transformation matrix for unit vectors + float3x3 tangentToWorld = CalcTangentToWorld(world, tangentToLocal); + output.WorldNormal = tangentToWorld[2]; + output.WorldTangent.xyz = tangentToWorld[0]; + output.WorldTangent.w = input.Tangent.w ? -1.0f : +1.0f; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_TESSELLATION || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = GetMaterialInput(output, input.Position.xyz, tangentToLocal[2].xyz); + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Get tessalation multiplier (per vertex) +#if USE_TESSELLATION + output.TessellationMultiplier = material.TessellationMultiplier; +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +#endif + +#if USE_TESSELLATION + +// Interpolants passed from the hull shader to the domain shader +struct TessalationHSToDS +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3 WorldNormal : TEXCOORD3; + float4 WorldTangent : TEXCOORD4; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; +#if IS_MOTION_VECTORS_PASS + float3 PrevWorldPosition : TEXCOORD8; +#endif + float TessellationMultiplier : TESS; +}; + +// Interpolants passed from the domain shader and to the pixel shader +struct TessalationDSToPS +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3 WorldNormal : TEXCOORD3; + float4 WorldTangent : TEXCOORD4; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; +#if IS_MOTION_VECTORS_PASS + float3 PrevWorldPosition : TEXCOORD8; +#endif +}; + +MaterialInput GetMaterialInput(TessalationDSToPS input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = input.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = input.VertexColor; +#endif + result.TBN = CalcTangentBasis(input.WorldNormal, input.WorldTangent); + result.TwoSidedSign = WorldDeterminantSign; + result.InstanceOrigin = input.InstanceOrigin; + result.InstanceParams = input.InstanceParams; + result.SvPosition = input.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +struct TessalationPatch +{ + float EdgeTessFactor[3] : SV_TessFactor; + float InsideTessFactor : SV_InsideTessFactor; +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + float3 B210 : POSITION4; + float3 B120 : POSITION5; + float3 B021 : POSITION6; + float3 B012 : POSITION7; + float3 B102 : POSITION8; + float3 B201 : POSITION9; + float3 B111 : CENTER; +#endif +}; + +TessalationPatch HS_PatchConstant(InputPatch input) +{ + TessalationPatch output; + + // Average tess factors along edges, and pick an edge tess factor for the interior tessellation + float4 tessellationMultipliers; + tessellationMultipliers.x = 0.5f * (input[1].TessellationMultiplier + input[2].TessellationMultiplier); + tessellationMultipliers.y = 0.5f * (input[2].TessellationMultiplier + input[0].TessellationMultiplier); + tessellationMultipliers.z = 0.5f * (input[0].TessellationMultiplier + input[1].TessellationMultiplier); + tessellationMultipliers.w = 0.333f * (input[0].TessellationMultiplier + input[1].TessellationMultiplier + input[2].TessellationMultiplier); + tessellationMultipliers = clamp(tessellationMultipliers, 1, MAX_TESSELLATION_FACTOR); + + output.EdgeTessFactor[0] = tessellationMultipliers.x; // 1->2 edge + output.EdgeTessFactor[1] = tessellationMultipliers.y; // 2->0 edge + output.EdgeTessFactor[2] = tessellationMultipliers.z; // 0->1 edge + output.InsideTessFactor = tessellationMultipliers.w; + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + // Calculate PN-Triangle coefficients + // Refer to Vlachos 2001 for the original formula + float3 p1 = input[0].WorldPosition; + float3 p2 = input[1].WorldPosition; + float3 p3 = input[2].WorldPosition; + float3 n1 = input[0].WorldNormal; + float3 n2 = input[1].WorldNormal; + float3 n3 = input[2].WorldNormal; + + // Calculate control points + output.B210 = (2.0f * p1 + p2 - dot((p2 - p1), n1) * n1) / 3.0f; + output.B120 = (2.0f * p2 + p1 - dot((p1 - p2), n2) * n2) / 3.0f; + output.B021 = (2.0f * p2 + p3 - dot((p3 - p2), n2) * n2) / 3.0f; + output.B012 = (2.0f * p3 + p2 - dot((p2 - p3), n3) * n3) / 3.0f; + output.B102 = (2.0f * p3 + p1 - dot((p1 - p3), n3) * n3) / 3.0f; + output.B201 = (2.0f * p1 + p3 - dot((p3 - p1), n1) * n1) / 3.0f; + float3 e = (output.B210 + output.B120 + output.B021 + + output.B012 + output.B102 + output.B201) / 6.0f; + float3 v = (p1 + p2 + p3) / 3.0f; + output.B111 = e + ((e - v) / 2.0f); +#endif + + return output; +} + +META_HS(USE_TESSELLATION, FEATURE_LEVEL_SM5) +META_PERMUTATION_1(IS_MOTION_VECTORS_PASS=0) +META_PERMUTATION_1(IS_MOTION_VECTORS_PASS=1) +META_HS_PATCH(TESSELLATION_IN_CONTROL_POINTS) +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[maxtessfactor(MAX_TESSELLATION_FACTOR)] +[outputcontrolpoints(3)] +[patchconstantfunc("HS_PatchConstant")] +TessalationHSToDS HS(InputPatch input, uint ControlPointID : SV_OutputControlPointID) +{ + TessalationHSToDS output; + + // Pass through shader +#define COPY(thing) output.thing = input[ControlPointID].thing; + COPY(Position); + COPY(WorldPosition); + COPY(TexCoord); + COPY(LightmapUV); +#if USE_VERTEX_COLOR + COPY(VertexColor); +#endif + COPY(WorldNormal); + COPY(WorldTangent); + COPY(InstanceOrigin); + COPY(InstanceParams); +#if IS_MOTION_VECTORS_PASS + COPY(PrevWorldPosition); +#endif + COPY(TessellationMultiplier); +#if USE_CUSTOM_VERTEX_INTERPOLATORS + COPY(CustomVSToPS); +#endif +#undef COPY + + return output; +} + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PHONG + +// Orthogonal projection on to plane +float3 ProjectOntoPlane(float3 planeNormal, float3 planePoint, float3 pointToProject) +{ + return pointToProject - dot(pointToProject-planePoint, planeNormal) * planeNormal; +} + +#endif + +META_DS(USE_TESSELLATION, FEATURE_LEVEL_SM5) +META_PERMUTATION_1(IS_MOTION_VECTORS_PASS=0) +META_PERMUTATION_1(IS_MOTION_VECTORS_PASS=1) +[domain("tri")] +TessalationDSToPS DS(TessalationPatch constantData, float3 barycentricCoords : SV_DomainLocation, const OutputPatch input) +{ + TessalationDSToPS output; + + // Get the barycentric coords + float U = barycentricCoords.x; + float V = barycentricCoords.y; + float W = barycentricCoords.z; + + // Interpolate patch attributes to generated vertices +#define INTERPOLATE(thing) output.thing = U * input[0].thing + V * input[1].thing + W * input[2].thing +#define COPY(thing) output.thing = input[0].thing + INTERPOLATE(Position); +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + // Precompute squares and squares * 3 + float UU = U * U; + float VV = V * V; + float WW = W * W; + float UU3 = UU * 3.0f; + float VV3 = VV * 3.0f; + float WW3 = WW * 3.0f; + + // Interpolate using barycentric coordinates and PN Triangle control points + output.WorldPosition = + input[0].WorldPosition * UU * U + + input[1].WorldPosition * VV * V + + input[2].WorldPosition * WW * W + + constantData.B210 * UU3 * V + + constantData.B120 * VV3 * U + + constantData.B021 * VV3 * W + + constantData.B012 * WW3 * V + + constantData.B102 * WW3 * U + + constantData.B201 * UU3 * W + + constantData.B111 * 6.0f * W * U * V; +#if IS_MOTION_VECTORS_PASS + output.PrevWorldPosition = + input[0].PrevWorldPosition * UU * U + + input[1].PrevWorldPosition * VV * V + + input[2].PrevWorldPosition * WW * W + + constantData.B210 * UU3 * V + + constantData.B120 * VV3 * U + + constantData.B021 * VV3 * W + + constantData.B012 * WW3 * V + + constantData.B102 * WW3 * U + + constantData.B201 * UU3 * W + + constantData.B111 * 6.0f * W * U * V; +#endif +#else + INTERPOLATE(WorldPosition); +#if IS_MOTION_VECTORS_PASS + INTERPOLATE(PrevWorldPosition); +#endif +#endif + INTERPOLATE(TexCoord); + INTERPOLATE(LightmapUV); +#if USE_VERTEX_COLOR + INTERPOLATE(VertexColor); +#endif + INTERPOLATE(WorldNormal); + INTERPOLATE(WorldTangent); + COPY(InstanceOrigin); + COPY(InstanceParams); +#if USE_CUSTOM_VERTEX_INTERPOLATORS + UNROLL + for (int i = 0; i < CUSTOM_VERTEX_INTERPOLATORS_COUNT; i++) + { + INTERPOLATE(CustomVSToPS[i]); + } +#endif +#undef INTERPOLATE +#undef COPY + + // Interpolating tangents can unnormalize it, so normalize it + output.WorldNormal = normalize(output.WorldNormal); + output.WorldTangent.xyz = normalize(output.WorldTangent.xyz); + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PHONG + // Orthogonal projection in the tangent planes + float3 posProjectedU = ProjectOntoPlane(input[0].WorldNormal, input[0].WorldPosition, output.WorldPosition); + float3 posProjectedV = ProjectOntoPlane(input[1].WorldNormal, input[1].WorldPosition, output.WorldPosition); + float3 posProjectedW = ProjectOntoPlane(input[2].WorldNormal, input[2].WorldPosition, output.WorldPosition); + + // Interpolate the projected points + output.WorldPosition = U * posProjectedU + V * posProjectedV + W * posProjectedW; +#if IS_MOTION_VECTORS_PASS + posProjectedU = ProjectOntoPlane(input[0].WorldNormal, input[0].PrevWorldPosition, output.PrevWorldPosition); + posProjectedV = ProjectOntoPlane(input[1].WorldNormal, input[1].PrevWorldPosition, output.PrevWorldPosition); + posProjectedW = ProjectOntoPlane(input[2].WorldNormal, input[2].PrevWorldPosition, output.PrevWorldPosition); + output.PrevWorldPosition = U * posProjectedU + V * posProjectedV + W * posProjectedW; +#endif +#endif + + // Perform displacement mapping +#if USE_DISPLACEMENT + MaterialInput materialInput = GetMaterialInput(output); + Material material = GetMaterialDS(materialInput); + output.WorldPosition += material.WorldDisplacement; +#if IS_MOTION_VECTORS_PASS + output.PrevWorldPosition += material.WorldDisplacement; +#endif +#endif + + // Recalculate the clip space position + output.Position = mul(float4(output.WorldPosition, 1), ViewProjectionMatrix); + + return output; +} + +#endif + +#if USE_LIGHTMAP + +float3 SampleLightmap(Material material, MaterialInput materialInput) +{ + // Sample lightmaps + float4 lightmap0 = Lightmap0.Sample(SamplerLinearClamp, materialInput.LightmapUV); + float4 lightmap1 = Lightmap1.Sample(SamplerLinearClamp, materialInput.LightmapUV); + float4 lightmap2 = Lightmap2.Sample(SamplerLinearClamp, materialInput.LightmapUV); + + // Unpack H-basis + float3 h0 = float3(lightmap0.x, lightmap1.x, lightmap2.x); + float3 h1 = float3(lightmap0.y, lightmap1.y, lightmap2.y); + float3 h2 = float3(lightmap0.z, lightmap1.z, lightmap2.z); + float3 h3 = float3(lightmap0.w, lightmap1.w, lightmap2.w); + + // Sample baked diffuse irradiance from the H-basis coefficients + float3 normal = material.TangentNormal; +#if MATERIAL_SHADING_MODEL == SHADING_MODEL_FOLIAGE + normal *= material.TangentNormal; +#endif + return GetHBasisIrradiance(normal, h0, h1, h2, h3) / PI; +} + +#endif + +#if USE_DITHERED_LOD_TRANSITION + +void ClipLODTransition(PixelInput input) +{ + float ditherFactor = input.InstanceParams.y; + if (abs(ditherFactor) > 0.001) + { + float randGrid = cos(dot(floor(input.Position.xy), float2(347.83452793, 3343.28371863))); + float randGridFrac = frac(randGrid * 1000.0); + half mask = (ditherFactor < 0.0) ? (ditherFactor + 1.0 > randGridFrac) : (ditherFactor < randGridFrac); + clip(mask - 0.001); + } +} + +#else + +void ClipLODTransition(PixelInput input) +{ +} + +#endif + +// Pixel Shader function for GBuffer Pass +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_LIGHTMAP=0) +META_PERMUTATION_1(USE_LIGHTMAP=1) +void PS_GBuffer( + in PixelInput input + ,out float4 Light : SV_Target0 +#if MATERIAL_DOMAIN == MATERIAL_DOMAIN_SURFACE + // GBuffer + ,out float4 RT0 : SV_Target1 + ,out float4 RT1 : SV_Target2 + ,out float4 RT2 : SV_Target3 +#if USE_GBUFFER_CUSTOM_DATA + ,out float4 RT3 : SV_Target4 +#endif +#endif + ) +{ + Light = 0; + + // LOD masking + ClipLODTransition(input); + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + +#if MATERIAL_DOMAIN == MATERIAL_DOMAIN_SURFACE + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + +#if USE_LIGHTMAP + + float3 diffuseColor = GetDiffuseColor(material.Color, material.Metalness); + float3 specularColor = GetSpecularColor(material.Color, material.Specular, material.Metalness); + + // Sample lightmap + float3 diffuseIndirectLighting = SampleLightmap(material, materialInput); + + // Apply static indirect light + Light.rgb = diffuseColor * diffuseIndirectLighting * AOMultiBounce(material.AO, diffuseColor); + +#endif + + // Pack material properties to GBuffer + RT0 = float4(material.Color, material.AO); + RT1 = float4(material.WorldNormal * 0.5 + 0.5, MATERIAL_SHADING_MODEL * (1.0 / 3.0)); + RT2 = float4(material.Roughness, material.Metalness, material.Specular, 0); + + // Custom data +#if USE_GBUFFER_CUSTOM_DATA +#if MATERIAL_SHADING_MODEL == SHADING_MODEL_SUBSURFACE + RT3 = float4(material.SubsurfaceColor, material.Opacity); +#elif MATERIAL_SHADING_MODEL == SHADING_MODEL_FOLIAGE + RT3 = float4(material.SubsurfaceColor, material.Opacity); +#else + RT3 = float4(0, 0, 0, 0); +#endif +#endif + +#endif + + // Add light emission +#if USE_EMISSIVE + Light.rgb += material.Emissive; +#endif +} + +// Pixel Shader function for Depth Pass +META_PS(IS_SURFACE, FEATURE_LEVEL_ES2) +void PS_Depth(PixelInput input +#if GLSL + , out float4 OutColor : SV_Target0 +#endif + ) +{ + // LOD masking + ClipLODTransition(input); + +#if MATERIAL_MASKED + // Perform per pixel clipping if material requries it + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + +#if GLSL + OutColor = 0; +#endif +} + +// Pixel Shader function for Motion Vectors Pass +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(IS_MOTION_VECTORS_PASS=1) +float4 PS_MotionVectors(PixelInput input) : SV_Target0 +{ +#if IS_MOTION_VECTORS_PASS + // LOD masking + ClipLODTransition(input); + +#if MATERIAL_MASKED + // Perform per pixel clipping if material requries it + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + // Calculate this and previosu frame pixel locations in clip space + float4 prevClipPos = mul(float4(input.PrevWorldPosition, 1), PrevViewProjectionMatrix); + float4 curClipPos = mul(float4(input.WorldPosition, 1), ViewProjectionMatrix); + float2 prevHPos = prevClipPos.xy / prevClipPos.w; + float2 curHPos = curClipPos.xy / curClipPos.w; + + // Revert temporal jitter offset + prevHPos -= TemporalAAJitter.zw; + curHPos -= TemporalAAJitter.xy; + + // Clip Space -> UV Space + float2 vPosPrev = prevHPos.xy * 0.5f + 0.5f; + float2 vPosCur = curHPos.xy * 0.5f + 0.5f; + vPosPrev.y = 1.0 - vPosPrev.y; + vPosCur.y = 1.0 - vPosCur.y; + + // Calculate per-pixel motion vector + return float4(vPosCur - vPosPrev, 0, 1); +#else + return float4(0, 0, 0, 1); +#endif +} diff --git a/Content/Editor/MaterialTemplates/SurfaceForward.shader b/Content/Editor/MaterialTemplates/SurfaceForward.shader new file mode 100644 index 000000000..64fe054d4 --- /dev/null +++ b/Content/Editor/MaterialTemplates/SurfaceForward.shader @@ -0,0 +1,1013 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +#define MAX_LOCAL_LIGHTS 4 +@3 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +#include "./Flax/LightingCommon.hlsl" +#if USE_REFLECTIONS +#include "./Flax/ReflectionsCommon.hlsl" +#endif +#include "./Flax/Lighting.hlsl" +#include "./Flax/ShadowsSampling.hlsl" +#include "./Flax/ExponentialHeightFog.hlsl" +@7 +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4x4 ViewMatrix; +float4x4 PrevViewProjectionMatrix; +float4x4 PrevWorldMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +float4 LightmapArea; +float3 WorldInvScale; +float WorldDeterminantSign; +float2 Dummy0; +float LODDitherFactor; +float PerInstanceRandom; +float3 GeometrySize; +float Dummy1; +@1META_CB_END + +// Secondary constantant buffer (for lighting) +META_CB_BEGIN(1, LightingData) +LightData DirectionalLight; +LightShadowData DirectionalLightShadow; +LightData SkyLight; +ProbeData EnvironmentProbe; +ExponentialHeightFogData ExponentialHeightFog; +float3 Dummy2; +uint LocalLightsCount; +LightData LocalLights[MAX_LOCAL_LIGHTS]; +META_CB_END + +DECLARE_LIGHTSHADOWDATA_ACCESS(DirectionalLightShadow); + +// Shader resources +TextureCube EnvProbe : register(t0); +TextureCube SkyLightTexture : register(t1); +Texture2DArray DirectionalLightShadowMap : register(t2); +@2 + +// Interpolants passed from the vertex shader +struct VertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3x3 TBN : TEXCOORD3; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; // x-PerInstanceRandom, y-LODDitherFactor +#if USE_TESSELLATION + float TessellationMultiplier : TESS; +#endif +}; + +// Interpolants passed to the pixel shader +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3x3 TBN : TEXCOORD3; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; // x-PerInstanceRandom, y-LODDitherFactor + bool IsFrontFace : SV_IsFrontFace; +}; + +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; +#if USE_LIGHTMAP + float2 LightmapUV; +#endif +#if USE_VERTEX_COLOR + half4 VertexColor; +#endif + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; + float3 InstanceOrigin; + float2 InstanceParams; +#if USE_INSTANCING + float3 InstanceTransform1; + float3 InstanceTransform2; + float3 InstanceTransform3; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; +#endif +}; + +MaterialInput GetMaterialInput(ModelInput input, VertexOutput output, float3 localNormal) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = output.WorldPosition; + result.TexCoord = output.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = output.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = output.VertexColor; +#endif + result.TBN = output.TBN; + result.TwoSidedSign = WorldDeterminantSign; + result.SvPosition = output.Position; + result.PreSkinnedPosition = input.Position.xyz; + result.PreSkinnedNormal = localNormal; +#if USE_INSTANCING + result.InstanceOrigin = input.InstanceOrigin.xyz; + result.InstanceParams = float2(input.InstanceOrigin.w, input.InstanceTransform1.w); + result.InstanceTransform1 = input.InstanceTransform1.xyz; + result.InstanceTransform2 = input.InstanceTransform2.xyz; + result.InstanceTransform3 = input.InstanceTransform3.xyz; +#else + result.InstanceOrigin = WorldMatrix[3].xyz; + result.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); +#endif + return result; +} + +MaterialInput GetMaterialInput(VertexOutput output, float3 localPosition, float3 localNormal) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = output.WorldPosition; + result.TexCoord = output.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = output.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = output.VertexColor; +#endif + result.TBN = output.TBN; + result.TwoSidedSign = WorldDeterminantSign; + result.InstanceOrigin = WorldMatrix[3].xyz; + result.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); + result.SvPosition = output.Position; + result.PreSkinnedPosition = localPosition; + result.PreSkinnedNormal = localNormal; + return result; +} + +MaterialInput GetMaterialInput(PixelInput input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = input.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = input.VertexColor; +#endif + result.TBN = input.TBN; + result.TwoSidedSign = WorldDeterminantSign * (input.IsFrontFace ? 1.0 : -1.0); + result.InstanceOrigin = input.InstanceOrigin; + result.InstanceParams = input.InstanceParams; + result.SvPosition = input.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +#if USE_INSTANCING +#define INSTANCE_TRANS_WORLD float4x4(float4(input.InstanceTransform1.xyz, 0.0f), float4(input.InstanceTransform2.xyz, 0.0f), float4(input.InstanceTransform3.xyz, 0.0f), float4(input.InstanceOrigin.xyz, 1.0f)) +#else +#define INSTANCE_TRANS_WORLD WorldMatrix +#endif + +// Gets the local to world transform matrix (supports instancing) +float4x4 GetInstanceTransform(ModelInput input) +{ + return INSTANCE_TRANS_WORLD; +} +float4x4 GetInstanceTransform(ModelInput_Skinned input) +{ + return INSTANCE_TRANS_WORLD; +} +float4x4 GetInstanceTransform(MaterialInput input) +{ + return INSTANCE_TRANS_WORLD; +} + +// Removes the scale vector from the local to world transformation matrix (supports instancing) +float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld) +{ +#if USE_INSTANCING + // Extract per axis scales from localToWorld transform + float scaleX = length(localToWorld[0]); + float scaleY = length(localToWorld[1]); + float scaleZ = length(localToWorld[2]); + float3 invScale = float3( + scaleX > 0.00001f ? 1.0f / scaleX : 0.0f, + scaleY > 0.00001f ? 1.0f / scaleY : 0.0f, + scaleZ > 0.00001f ? 1.0f / scaleZ : 0.0f); +#else + float3 invScale = WorldInvScale; +#endif + localToWorld[0] *= invScale.x; + localToWorld[1] *= invScale.y; + localToWorld[2] *= invScale.z; + return localToWorld; +} + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + float3x3 localToWorld = (float3x3)GetInstanceTransform(input); + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localVector, localToWorld); +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + float3x3 localToWorld = (float3x3)GetInstanceTransform(input); + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localToWorld, worldVector); +} + +// Gets the current object position (supports instancing) +float3 GetObjectPosition(MaterialInput input) +{ + return input.InstanceOrigin.xyz; +} + +// Gets the current object size (supports instancing) +float3 GetObjectSize(MaterialInput input) +{ + float4x4 world = GetInstanceTransform(input); + return GeometrySize * float3(world._m00, world._m11, world._m22); +} + +// Get the current object random value (supports instancing) +float GetPerInstanceRandom(MaterialInput input) +{ + return input.InstanceParams.x; +} + +// Get the current object LOD transition dither factor (supports instancing) +float GetLODDitherFactor(MaterialInput input) +{ +#if USE_DITHERED_LOD_TRANSITION + return input.InstanceParams.y; +#else + return 0; +#endif +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ +#if USE_VERTEX_COLOR + return input.VertexColor; +#else + return 1; +#endif +} + +// Get material properties function (for vertex shader) +Material GetMaterialVS(MaterialInput input) +{ +@5 +} + +// Get material properties function (for domain shader) +Material GetMaterialDS(MaterialInput input) +{ +@6 +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Calculates the transform matrix from mesh tangent space to local space +half3x3 CalcTangentToLocal(ModelInput input) +{ + float bitangentSign = input.Tangent.w ? -1.0f : +1.0f; + float3 normal = input.Normal.xyz * 2.0 - 1.0; + float3 tangent = input.Tangent.xyz * 2.0 - 1.0; + float3 bitangent = cross(normal, tangent) * bitangentSign; + return float3x3(tangent, bitangent, normal); +} + +half3x3 CalcTangentToWorld(in float4x4 world, in half3x3 tangentToLocal) +{ + half3x3 localToWorld = RemoveScaleFromLocalToWorld((float3x3)world); + return mul(tangentToLocal, localToWorld); +} + +// Vertex Shader function for Forward/Depth Pass +META_VS(IS_SURFACE, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_INSTANCING=0) +META_PERMUTATION_1(USE_INSTANCING=1) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 1, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R16G16_FLOAT, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R8G8B8A8_UNORM, 2, 0, PER_VERTEX, 0, USE_VERTEX_COLOR) +META_VS_IN_ELEMENT(ATTRIBUTE,0, R32G32B32A32_FLOAT,3, 0, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,1, R32G32B32A32_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,2, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,3, R32G32B32_FLOAT, 3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +META_VS_IN_ELEMENT(ATTRIBUTE,4, R16G16B16A16_FLOAT,3, ALIGN, PER_INSTANCE, 1, USE_INSTANCING) +VertexOutput VS(ModelInput input) +{ + VertexOutput output; + + // Compute world space vertex position + float4x4 world = GetInstanceTransform(input); + output.WorldPosition = mul(float4(input.Position.xyz, 1), world).xyz; + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.TexCoord = input.TexCoord; +#if USE_VERTEX_COLOR + output.VertexColor = input.Color; +#endif +#if USE_INSTANCING + output.LightmapUV = input.LightmapUV * input.InstanceLightmapArea.zw + input.InstanceLightmapArea.xy; + output.InstanceOrigin = world[3].xyz; + output.InstanceParams = float2(input.InstanceOrigin.w, input.InstanceTransform1.w); +#else + output.LightmapUV = input.LightmapUV * LightmapArea.zw + LightmapArea.xy; + output.InstanceOrigin = WorldMatrix[3].xyz; + output.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); +#endif + + // Calculate tanget space to world space transformation matrix for unit vectors + half3x3 tangentToLocal = CalcTangentToLocal(input); + half3x3 tangentToWorld = CalcTangentToWorld(world, tangentToLocal); + output.TBN = tangentToWorld; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_TESSELLATION || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = GetMaterialInput(input, output, tangentToLocal[2].xyz); + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Get tessalation multiplier (per vertex) +#if USE_TESSELLATION + output.TessellationMultiplier = material.TessellationMultiplier; +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +#if USE_SKINNING + +// The skeletal bones matrix buffer (stored as 4x3, 3 float4 behind each other) +Buffer BoneMatrices : register(t0); + +#if PER_BONE_MOTION_BLUR + +// The skeletal bones matrix buffer from the previous frame +Buffer PrevBoneMatrices : register(t1); + +float3x4 GetPrevBoneMatrix(int index) +{ + float4 a = PrevBoneMatrices[index * 3]; + float4 b = PrevBoneMatrices[index * 3 + 1]; + float4 c = PrevBoneMatrices[index * 3 + 2]; + return float3x4(a, b, c); +} + +float3 SkinPrevPosition(ModelInput_Skinned input) +{ + float4 position = float4(input.Position.xyz, 1); + float3x4 boneMatrix = input.BlendWeights.x * GetPrevBoneMatrix(input.BlendIndices.x); + boneMatrix += input.BlendWeights.y * GetPrevBoneMatrix(input.BlendIndices.y); + boneMatrix += input.BlendWeights.z * GetPrevBoneMatrix(input.BlendIndices.z); + boneMatrix += input.BlendWeights.w * GetPrevBoneMatrix(input.BlendIndices.w); + return mul(boneMatrix, position); +} + +#endif + +// Cached skinning data to avoid multiple calculation +struct SkinningData +{ + float3x4 BlendMatrix; +}; + +// Calculates the transposed transform matrix for the given bone index +float3x4 GetBoneMatrix(int index) +{ + float4 a = BoneMatrices[index * 3]; + float4 b = BoneMatrices[index * 3 + 1]; + float4 c = BoneMatrices[index * 3 + 2]; + return float3x4(a, b, c); +} + +// Calculates the transposed transform matrix for the given vertex (uses blending) +float3x4 CalcBoneMatrix(ModelInput_Skinned input) +{ + float3x4 boneMatrix = input.BlendWeights.x * GetBoneMatrix(input.BlendIndices.x); + boneMatrix += input.BlendWeights.y * GetBoneMatrix(input.BlendIndices.y); + boneMatrix += input.BlendWeights.z * GetBoneMatrix(input.BlendIndices.z); + boneMatrix += input.BlendWeights.w * GetBoneMatrix(input.BlendIndices.w); + return boneMatrix; +} + +// Transforms the vertex position by weighted sum of the skinning matrices +float3 SkinPosition(ModelInput_Skinned input, SkinningData data) +{ + float4 position = float4(input.Position.xyz, 1); + return mul(data.BlendMatrix, position); +} + +// Transforms the vertex position by weighted sum of the skinning matrices +half3x3 SkinTangents(ModelInput_Skinned input, SkinningData data) +{ + // Unpack vertex tangent frame + float bitangentSign = input.Tangent.w ? -1.0f : +1.0f; + float3 normal = input.Normal.xyz * 2.0 - 1.0; + float3 tangent = input.Tangent.xyz * 2.0 - 1.0; + + // Apply skinning + tangent = mul(data.BlendMatrix, float4(tangent, 0)); + normal = mul(data.BlendMatrix, float4(normal, 0)); + + float3 bitangent = cross(normal, tangent) * bitangentSign; + return half3x3(tangent, bitangent, normal); +} + +// Vertex Shader function for Forward/Depth Pass (skinned mesh rendering) +META_VS(IS_SURFACE, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_SKINNING=1) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(BLENDINDICES, 0, R8G8B8A8_UINT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(BLENDWEIGHT, 0, R16G16B16A16_FLOAT,0, ALIGN, PER_VERTEX, 0, true) +VertexOutput VS_Skinned(ModelInput_Skinned input) +{ + VertexOutput output; + + // Perform skinning + SkinningData data; + data.BlendMatrix = CalcBoneMatrix(input); + float3 position = SkinPosition(input, data); + half3x3 tangentToLocal = SkinTangents(input, data); + + // Compute world space vertex position + float4x4 world = GetInstanceTransform(input); + output.WorldPosition = mul(float4(position, 1), world).xyz; + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes + output.TexCoord = input.TexCoord; +#if USE_VERTEX_COLOR + output.VertexColor = float4(0, 0, 0, 1); +#endif + output.LightmapUV = float2(0, 0); +#if USE_INSTANCING + output.InstanceOrigin = world[3].xyz; + output.InstanceParams = float2(input.InstanceOrigin.w, input.InstanceTransform1.w); +#else + output.InstanceOrigin = WorldMatrix[3].xyz; + output.InstanceParams = float2(PerInstanceRandom, LODDitherFactor); +#endif + + // Calculate tanget space to world space transformation matrix for unit vectors + half3x3 tangentToWorld = CalcTangentToWorld(world, tangentToLocal); + output.TBN = tangentToWorld; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_TESSELLATION || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = GetMaterialInput(output, input.Position.xyz, tangentToLocal[2].xyz); + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Get tessalation multiplier (per vertex) +#if USE_TESSELLATION + output.TessellationMultiplier = material.TessellationMultiplier; +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +#endif + +#if USE_TESSELLATION + +// Interpolants passed from the hull shader to the domain shader +struct TessalationHSToDS +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3x3 TBN : TEXCOORD3; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; + float TessellationMultiplier : TESS; +}; + +// Interpolants passed from the domain shader and to the pixel shader +struct TessalationDSToPS +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; +#if USE_VERTEX_COLOR + half4 VertexColor : COLOR; +#endif + float3x3 TBN : TEXCOORD3; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float3 InstanceOrigin : TEXCOORD6; + float2 InstanceParams : TEXCOORD7; +}; + +MaterialInput GetMaterialInput(TessalationDSToPS input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = input.LightmapUV; +#endif +#if USE_VERTEX_COLOR + result.VertexColor = input.VertexColor; +#endif + result.TBN = input.TBN; + result.TwoSidedSign = WorldDeterminantSign; + result.InstanceOrigin = input.InstanceOrigin; + result.InstanceParams = input.InstanceParams; + result.SvPosition = input.Position; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +struct TessalationPatch +{ + float EdgeTessFactor[3] : SV_TessFactor; + float InsideTessFactor : SV_InsideTessFactor; +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + float3 B210 : POSITION4; + float3 B120 : POSITION5; + float3 B021 : POSITION6; + float3 B012 : POSITION7; + float3 B102 : POSITION8; + float3 B201 : POSITION9; + float3 B111 : CENTER; +#endif +}; + +TessalationPatch HS_PatchConstant(InputPatch input) +{ + TessalationPatch output; + + // Average tess factors along edges, and pick an edge tess factor for the interior tessellation + float4 tessellationMultipliers; + tessellationMultipliers.x = 0.5f * (input[1].TessellationMultiplier + input[2].TessellationMultiplier); + tessellationMultipliers.y = 0.5f * (input[2].TessellationMultiplier + input[0].TessellationMultiplier); + tessellationMultipliers.z = 0.5f * (input[0].TessellationMultiplier + input[1].TessellationMultiplier); + tessellationMultipliers.w = 0.333f * (input[0].TessellationMultiplier + input[1].TessellationMultiplier + input[2].TessellationMultiplier); + tessellationMultipliers = clamp(tessellationMultipliers, 1, MAX_TESSELLATION_FACTOR); + + output.EdgeTessFactor[0] = tessellationMultipliers.x; // 1->2 edge + output.EdgeTessFactor[1] = tessellationMultipliers.y; // 2->0 edge + output.EdgeTessFactor[2] = tessellationMultipliers.z; // 0->1 edge + output.InsideTessFactor = tessellationMultipliers.w; + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + // Calculate PN-Triangle coefficients + // Refer to Vlachos 2001 for the original formula + float3 p1 = input[0].WorldPosition; + float3 p2 = input[1].WorldPosition; + float3 p3 = input[2].WorldPosition; + float3 n1 = input[0].TBN[2]; + float3 n2 = input[1].TBN[2]; + float3 n3 = input[2].TBN[2]; + + // Calculate control points + output.B210 = (2.0f * p1 + p2 - dot((p2 - p1), n1) * n1) / 3.0f; + output.B120 = (2.0f * p2 + p1 - dot((p1 - p2), n2) * n2) / 3.0f; + output.B021 = (2.0f * p2 + p3 - dot((p3 - p2), n2) * n2) / 3.0f; + output.B012 = (2.0f * p3 + p2 - dot((p2 - p3), n3) * n3) / 3.0f; + output.B102 = (2.0f * p3 + p1 - dot((p1 - p3), n3) * n3) / 3.0f; + output.B201 = (2.0f * p1 + p3 - dot((p3 - p1), n1) * n1) / 3.0f; + float3 e = (output.B210 + output.B120 + output.B021 + + output.B012 + output.B102 + output.B201) / 6.0f; + float3 v = (p1 + p2 + p3) / 3.0f; + output.B111 = e + ((e - v) / 2.0f); +#endif + + return output; +} + +META_HS(USE_TESSELLATION, FEATURE_LEVEL_SM5) +META_HS_PATCH(TESSELLATION_IN_CONTROL_POINTS) +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[maxtessfactor(MAX_TESSELLATION_FACTOR)] +[outputcontrolpoints(3)] +[patchconstantfunc("HS_PatchConstant")] +TessalationHSToDS HS(InputPatch input, uint ControlPointID : SV_OutputControlPointID) +{ + TessalationHSToDS output; + + // Pass through shader +#define COPY(thing) output.thing = input[ControlPointID].thing; + COPY(Position); + COPY(WorldPosition); + COPY(TexCoord); + COPY(LightmapUV); +#if USE_VERTEX_COLOR + COPY(VertexColor); +#endif + COPY(TBN); + COPY(InstanceOrigin); + COPY(InstanceParams); + COPY(TessellationMultiplier); +#if USE_CUSTOM_VERTEX_INTERPOLATORS + COPY(CustomVSToPS); +#endif +#undef COPY + + return output; +} + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PHONG + +// Orthogonal projection on to plane +float3 ProjectOntoPlane(float3 planeNormal, float3 planePoint, float3 pointToProject) +{ + return pointToProject - dot(pointToProject-planePoint, planeNormal) * planeNormal; +} + +#endif + +META_DS(USE_TESSELLATION, FEATURE_LEVEL_SM5) +[domain("tri")] +TessalationDSToPS DS(TessalationPatch constantData, float3 barycentricCoords : SV_DomainLocation, const OutputPatch input) +{ + TessalationDSToPS output; + + // Get the barycentric coords + float U = barycentricCoords.x; + float V = barycentricCoords.y; + float W = barycentricCoords.z; + + // Interpolate patch attributes to generated vertices +#define INTERPOLATE(thing) output.thing = U * input[0].thing + V * input[1].thing + W * input[2].thing +#define COPY(thing) output.thing = input[0].thing + INTERPOLATE(Position); +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + // Precompute squares and squares * 3 + float UU = U * U; + float VV = V * V; + float WW = W * W; + float UU3 = UU * 3.0f; + float VV3 = VV * 3.0f; + float WW3 = WW * 3.0f; + + // Interpolate using barycentric coordinates and PN Triangle control points + output.WorldPosition = + input[0].WorldPosition * UU * U + + input[1].WorldPosition * VV * V + + input[2].WorldPosition * WW * W + + constantData.B210 * UU3 * V + + constantData.B120 * VV3 * U + + constantData.B021 * VV3 * W + + constantData.B012 * WW3 * V + + constantData.B102 * WW3 * U + + constantData.B201 * UU3 * W + + constantData.B111 * 6.0f * W * U * V; +#else + INTERPOLATE(WorldPosition); +#endif + INTERPOLATE(TexCoord); + INTERPOLATE(LightmapUV); +#if USE_VERTEX_COLOR + INTERPOLATE(VertexColor); +#endif + INTERPOLATE(TBN[0]); + INTERPOLATE(TBN[1]); + INTERPOLATE(TBN[2]); + COPY(InstanceOrigin); + COPY(InstanceParams); +#if USE_CUSTOM_VERTEX_INTERPOLATORS + UNROLL + for (int i = 0; i < CUSTOM_VERTEX_INTERPOLATORS_COUNT; i++) + { + INTERPOLATE(CustomVSToPS[i]); + } +#endif +#undef INTERPOLATE +#undef COPY + + // Interpolating normal can unnormalize it, so normalize it + output.TBN[0] = normalize(output.TBN[0]); + output.TBN[1] = normalize(output.TBN[1]); + output.TBN[2] = normalize(output.TBN[2]); + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PHONG + // Orthogonal projection in the tangent planes + float3 posProjectedU = ProjectOntoPlane(input[0].TBN[2], input[0].WorldPosition, output.WorldPosition); + float3 posProjectedV = ProjectOntoPlane(input[1].TBN[2], input[1].WorldPosition, output.WorldPosition); + float3 posProjectedW = ProjectOntoPlane(input[2].TBN[2], input[2].WorldPosition, output.WorldPosition); + + // Interpolate the projected points + output.WorldPosition = U * posProjectedU + V * posProjectedV + W * posProjectedW; +#endif + + // Perform displacement mapping +#if USE_DISPLACEMENT + MaterialInput materialInput = GetMaterialInput(output); + Material material = GetMaterialDS(materialInput); + output.WorldPosition += material.WorldDisplacement; +#endif + + // Recalculate the clip space position + output.Position = mul(float4(output.WorldPosition, 1), ViewProjectionMatrix); + + return output; +} + +#endif + +#if USE_DITHERED_LOD_TRANSITION + +void ClipLODTransition(PixelInput input) +{ + float ditherFactor = input.InstanceParams.y; + if (abs(ditherFactor) > 0.001) + { + float randGrid = cos(dot(floor(input.Position.xy), float2(347.83452793, 3343.28371863))); + float randGridFrac = frac(randGrid * 1000.0); + half mask = (ditherFactor < 0.0) ? (ditherFactor + 1.0 > randGridFrac) : (ditherFactor < randGridFrac); + clip(mask - 0.001); + } +} + +#else + +void ClipLODTransition(PixelInput input) +{ +} + +#endif + +// Pixel Shader function for Forward Pass +META_PS(USE_FORWARD, FEATURE_LEVEL_ES2) +float4 PS_Forward(PixelInput input) : SV_Target0 +{ + float4 output = 0; + + // LOD masking + ClipLODTransition(input); + // TODO: make model LOD transition smoother for transparent materials by using opacity to reduce aliasing + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + // Add emissive light + output = float4(material.Emissive, material.Opacity); + +#if MATERIAL_SHADING_MODEL != SHADING_MODEL_UNLIT + + // Setup GBuffer data as proxy for lighting + GBufferSample gBuffer; + gBuffer.Normal = material.WorldNormal; + gBuffer.Roughness = material.Roughness; + gBuffer.Metalness = material.Metalness; + gBuffer.Color = material.Color; + gBuffer.Specular = material.Specular; + gBuffer.AO = material.AO; + gBuffer.ViewPos = mul(float4(materialInput.WorldPosition, 1), ViewMatrix).xyz; +#if MATERIAL_SHADING_MODEL == SHADING_MODEL_SUBSURFACE + gBuffer.CustomData = float4(material.SubsurfaceColor, material.Opacity); +#elif MATERIAL_SHADING_MODEL == SHADING_MODEL_FOLIAGE + gBuffer.CustomData = float4(material.SubsurfaceColor, material.Opacity); +#else + gBuffer.CustomData = float4(0, 0, 0, 0); +#endif + gBuffer.WorldPos = materialInput.WorldPosition; + gBuffer.ShadingModel = MATERIAL_SHADING_MODEL; + + // Calculate lighting from a single directional light + float4 shadowMask = 1.0f; + if (DirectionalLight.CastShadows > 0) + { + LightShadowData directionalLightShadowData = GetDirectionalLightShadowData(); + shadowMask.r = SampleShadow(DirectionalLight, directionalLightShadowData, DirectionalLightShadowMap, gBuffer, shadowMask.g); + } + float4 light = GetLighting(ViewPos, DirectionalLight, gBuffer, shadowMask, false, false); + + // Calculate lighting from sky light + light += GetSkyLightLighting(SkyLight, gBuffer, SkyLightTexture); + + // Calculate lighting from local lights + LOOP + for (uint localLightIndex = 0; localLightIndex < LocalLightsCount; localLightIndex++) + { + const LightData localLight = LocalLights[localLightIndex]; + bool isSpotLight = localLight.SpotAngles.x > -2.0f; + shadowMask = 1.0f; + light += GetLighting(ViewPos, localLight, gBuffer, shadowMask, true, isSpotLight); + } + +#if USE_REFLECTIONS + // Calculate reflections + light.rgb += GetEnvProbeLighting(ViewPos, EnvProbe, EnvironmentProbe, gBuffer) * light.a; +#endif + + // Add lighting (apply ambient occlusion) + output.rgb += light.rgb * gBuffer.AO; + +#if USE_FOG + // Calculate exponential height fog + float4 fog = GetExponentialHeightFog(ExponentialHeightFog, materialInput.WorldPosition, ViewPos, 0); + + // Apply fog to the output color +#if MATERIAL_BLEND == MATERIAL_BLEND_OPAQUE + output = float4(output.rgb * fog.a + fog.rgb, output.a); +#elif MATERIAL_BLEND == MATERIAL_BLEND_TRANSPARENT + output = float4(output.rgb * fog.a + fog.rgb, output.a); +#elif MATERIAL_BLEND == MATERIAL_BLEND_ADDITIVE + output = float4(output.rgb * fog.a + fog.rgb, output.a * fog.a); +#elif MATERIAL_BLEND == MATERIAL_BLEND_MULTIPLY + output = float4(lerp(float3(1, 1, 1), output.rgb, fog.aaa * fog.aaa), output.a); +#endif + +#endif + +#endif + + return output; +} + +#if USE_DISTORTION + +// Pixel Shader function for Distortion Pass +META_PS(USE_DISTORTION, FEATURE_LEVEL_ES2) +float4 PS_Distortion(PixelInput input) : SV_Target0 +{ + // LOD masking + ClipLODTransition(input); + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + + float3 viewNormal = normalize(TransformWorldVectorToView(materialInput, material.WorldNormal)); + float airIOR = 1.0f; +#if USE_PIXEL_NORMAL_OFFSET_REFRACTION + float3 viewVertexNormal = TransformWorldVectorToView(materialInput, TransformTangentVectorToWorld(materialInput, float3(0, 0, 1))); + float2 distortion = (viewVertexNormal.xy - viewNormal.xy) * (material.Refraction - airIOR); +#else + float2 distortion = viewNormal.xy * (material.Refraction - airIOR); +#endif + + // Clip if the distortion distance (squared) is too small to be noticed + clip(dot(distortion, distortion) - 0.00001); + + // Scale up for better precision in low/subtle refractions at the expense of artefacts at higher refraction + distortion *= 4.0f; + + // Store positive and negative offsets separately + float2 addOffset = max(distortion, 0); + float2 subOffset = abs(min(distortion, 0)); + return float4(addOffset.x, addOffset.y, subOffset.x, subOffset.y); +} + +#endif + +// Pixel Shader function for Depth Pass +META_PS(true, FEATURE_LEVEL_ES2) +void PS_Depth(PixelInput input +#if GLSL + , out float4 OutColor : SV_Target0 +#endif + ) +{ + // LOD masking + ClipLODTransition(input); + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Perform per pixel clipping +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + clip(material.Opacity - MATERIAL_OPACITY_THRESHOLD); + +#if GLSL + OutColor = 0; +#endif +} diff --git a/Content/Editor/MaterialTemplates/Terrain.shader b/Content/Editor/MaterialTemplates/Terrain.shader new file mode 100644 index 000000000..b05ebd91c --- /dev/null +++ b/Content/Editor/MaterialTemplates/Terrain.shader @@ -0,0 +1,785 @@ +// File generated by Flax Materials Editor +// Version: @0 + +#define MATERIAL 1 +@3 + +// Enables/disables smooth terrain chunks LOD transitions (with morphing higher LOD near edges to the lower LOD in the neighbour) +#define USE_SMOOTH_LOD_TRANSITION 1 + +// Switches between using 0, 4 or 8 heightmap layers (values: 0, 1, 2) +#define TERRAIN_LAYERS_DATA_SIZE 2 +#define USE_TERRAIN_LAYERS (TERRAIN_LAYERS_DATA_SIZE > 0) + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +@7 +// Primary constant buffer (with additional material parameters) +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4x4 ViewMatrix; +float3 ViewPos; +float ViewFar; +float3 ViewDir; +float TimeParam; +float4 ViewInfo; +float4 ScreenSize; +float4 LightmapArea; +float3 WorldInvScale; +float WorldDeterminantSign; +float PerInstanceRandom; +float CurrentLOD; +float ChunkSizeNextLOD; +float TerrainChunkSizeLOD0; +float4 HeightmapUVScaleBias; +float4 NeighborLOD; +float2 OffsetUV; +float2 Dummy0; +@1META_CB_END + +#if CAN_USE_LIGHTMAP + +// Irradiance and directionality prebaked lightmaps +Texture2D Lightmap0 : register(t0); +Texture2D Lightmap1 : register(t1); +Texture2D Lightmap2 : register(t2); + +#endif + +// Terrain data +Texture2D Heightmap : register(t3); +Texture2D Splatmap0 : register(t4); +Texture2D Splatmap1 : register(t5); + +// Material shader resources +@2 + +// Interpolants passed from the vertex shader +struct VertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; + float HolesMask : TEXCOORD4; +#if USE_TERRAIN_LAYERS + float4 Layers[TERRAIN_LAYERS_DATA_SIZE] : TEXCOORD5; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif +#if USE_TESSELLATION + float TessellationMultiplier : TESS; +#endif +}; + +// Interpolants passed to the pixel shader +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; + float HolesMask : TEXCOORD4; +#if USE_TERRAIN_LAYERS + float4 Layers[TERRAIN_LAYERS_DATA_SIZE] : TEXCOORD5; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + bool IsFrontFace : SV_IsFrontFace; +}; + +// Material properties generation input +struct MaterialInput +{ + float3 WorldPosition; + float TwoSidedSign; + float2 TexCoord; +#if USE_LIGHTMAP + float2 LightmapUV; +#endif + float3x3 TBN; + float4 SvPosition; + float3 PreSkinnedPosition; + float3 PreSkinnedNormal; + float HolesMask; +#if USE_TERRAIN_LAYERS + float4 Layers[TERRAIN_LAYERS_DATA_SIZE]; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; +#endif +}; + +MaterialInput GetMaterialInput(PixelInput input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = input.LightmapUV; +#endif + result.TBN = CalcTangentBasisFromWorldNormal(input.WorldNormal); + result.TwoSidedSign = WorldDeterminantSign * (input.IsFrontFace ? 1.0 : -1.0); + result.SvPosition = input.Position; + result.HolesMask = input.HolesMask; +#if USE_TERRAIN_LAYERS + result.Layers = input.Layers; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +// Removes the scale vector from the local to world transformation matrix +float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld) +{ + localToWorld[0] *= WorldInvScale.x; + localToWorld[1] *= WorldInvScale.y; + localToWorld[2] *= WorldInvScale.z; + return localToWorld; +} + +// Transforms a vector from tangent space to world space +float3 TransformTangentVectorToWorld(MaterialInput input, float3 tangentVector) +{ + return mul(tangentVector, input.TBN); +} + +// Transforms a vector from world space to tangent space +float3 TransformWorldVectorToTangent(MaterialInput input, float3 worldVector) +{ + return mul(input.TBN, worldVector); +} + +// Transforms a vector from world space to view space +float3 TransformWorldVectorToView(MaterialInput input, float3 worldVector) +{ + return mul(worldVector, (float3x3)ViewMatrix); +} + +// Transforms a vector from view space to world space +float3 TransformViewVectorToWorld(MaterialInput input, float3 viewVector) +{ + return mul((float3x3)ViewMatrix, viewVector); +} + +// Transforms a vector from local space to world space +float3 TransformLocalVectorToWorld(MaterialInput input, float3 localVector) +{ + float3x3 localToWorld = (float3x3)WorldMatrix; + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localVector, localToWorld); +} + +// Transforms a vector from local space to world space +float3 TransformWorldVectorToLocal(MaterialInput input, float3 worldVector) +{ + float3x3 localToWorld = (float3x3)WorldMatrix; + //localToWorld = RemoveScaleFromLocalToWorld(localToWorld); + return mul(localToWorld, worldVector); +} + +// Gets the current object position +float3 GetObjectPosition(MaterialInput input) +{ + return WorldMatrix[3].xyz; +} + +// Gets the current object size +float3 GetObjectSize(MaterialInput input) +{ + return float3(1, 1, 1); +} + +// Get the current object random value +float GetPerInstanceRandom(MaterialInput input) +{ + return PerInstanceRandom; +} + +// Get the current object LOD transition dither factor +float GetLODDitherFactor(MaterialInput input) +{ + return 0; +} + +// Gets the interpolated vertex color (in linear space) +float4 GetVertexColor(MaterialInput input) +{ + return 1; +} + +// Get material properties function (for vertex shader) +Material GetMaterialVS(MaterialInput input) +{ +@5 +} + +// Get material properties function (for domain shader) +Material GetMaterialDS(MaterialInput input) +{ +@6 +} + +// Get material properties function (for pixel shader) +Material GetMaterialPS(MaterialInput input) +{ +@4 +} + +// Programmatically set the line number after all the material inputs which have a variable number of line endings +// This allows shader error line numbers after this point to be the same regardless of which material is being compiled +#line 1000 + +// Calculates LOD value (with fractional part for blending) +float CalcLOD(float2 xy, float4 morph) +{ +#if USE_SMOOTH_LOD_TRANSITION + // Use LOD value based on Barycentric coordinates to morph to the lower LOD near chunk edges + float4 lodCalculated = morph * CurrentLOD + NeighborLOD * (float4(1, 1, 1, 1) - morph); + + // Pick a quadrant (top, left, right or bottom) + float lod; + if ((xy.x + xy.y) > 1) + { + if (xy.x < xy.y) + { + lod = lodCalculated.w; + } + else + { + lod = lodCalculated.z; + } + } + else + { + if (xy.x < xy.y) + { + lod = lodCalculated.y; + } + else + { + lod = lodCalculated.x; + } + } + + return lod; +#else + return CurrentLOD; +#endif +} + +float3x3 CalcTangentToWorld(float4x4 world, float3x3 tangentToLocal) +{ + float3x3 localToWorld = RemoveScaleFromLocalToWorld((float3x3)world); + return mul(tangentToLocal, localToWorld); +} + +// Must match structure defined in TerrainManager.cpp +struct TerrainVertexInput +{ + float2 TexCoord : TEXCOORD0; + float4 Morph : TEXCOORD1; +}; + +// Vertex Shader function for terrain rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R8G8B8A8_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +VertexOutput VS(TerrainVertexInput input) +{ + VertexOutput output; + + // Calculate terrain LOD for this chunk + float lodCalculated = CalcLOD(input.TexCoord, input.Morph); + float lodValue = CurrentLOD; + float morphAlpha = lodCalculated - CurrentLOD; + + // Sample heightmap + float2 heightmapUVs = input.TexCoord * HeightmapUVScaleBias.xy + HeightmapUVScaleBias.zw; +#if USE_SMOOTH_LOD_TRANSITION + float4 heightmapValueThisLOD = Heightmap.SampleLevel(SamplerPointClamp, heightmapUVs, lodValue); + float2 nextLODPos = round(input.TexCoord * ChunkSizeNextLOD) / ChunkSizeNextLOD; + float2 heightmapUVsNextLOD = nextLODPos * HeightmapUVScaleBias.xy + HeightmapUVScaleBias.zw; + float4 heightmapValueNextLOD = Heightmap.SampleLevel(SamplerPointClamp, heightmapUVsNextLOD, lodValue + 1); + float4 heightmapValue = lerp(heightmapValueThisLOD, heightmapValueNextLOD, morphAlpha); + bool isHole = max(heightmapValueThisLOD.b + heightmapValueThisLOD.a, heightmapValueNextLOD.b + heightmapValueNextLOD.a) >= 1.9f; +#if USE_TERRAIN_LAYERS + float4 splatmapValueThisLOD = Splatmap0.SampleLevel(SamplerPointClamp, heightmapUVs, lodValue); + float4 splatmapValueNextLOD = Splatmap0.SampleLevel(SamplerPointClamp, heightmapUVsNextLOD, lodValue + 1); + float4 splatmap0Value = lerp(splatmapValueThisLOD, splatmapValueNextLOD, morphAlpha); +#if TERRAIN_LAYERS_DATA_SIZE > 1 + splatmapValueThisLOD = Splatmap1.SampleLevel(SamplerPointClamp, heightmapUVs, lodValue); + splatmapValueNextLOD = Splatmap1.SampleLevel(SamplerPointClamp, heightmapUVsNextLOD, lodValue + 1); + float4 splatmap1Value = lerp(splatmapValueThisLOD, splatmapValueNextLOD, morphAlpha); +#endif +#endif +#else + float4 heightmapValue = Heightmap.SampleLevel(SamplerPointClamp, heightmapUVs, lodValue); + bool isHole = (heightmapValue.b + heightmapValue.a) >= 1.9f; +#if USE_TERRAIN_LAYERS + float4 splatmap0Value = Splatmap0.SampleLevel(SamplerPointClamp, heightmapUVs, lodValue); +#if TERRAIN_LAYERS_DATA_SIZE > 1 + float4 splatmap1Value = Splatmap1.SampleLevel(SamplerPointClamp, heightmapUVs, lodValue); +#endif +#endif +#endif + float height = (float)((int)(heightmapValue.x * 255.0) + ((int)(heightmapValue.y * 255) << 8)) / 65535.0; + + // Extract normal and the holes mask + float2 normalTemp = float2(heightmapValue.b, heightmapValue.a) * 2.0f - 1.0f; + float3 normal = float3(normalTemp.x, sqrt(1.0 - saturate(dot(normalTemp, normalTemp))), normalTemp.y); + normal = normalize(normal); + output.HolesMask = isHole ? 0 : 1; + if (isHole) + { + normal = float3(0, 1, 0); + } + + // Construct vertex position +#if USE_SMOOTH_LOD_TRANSITION + float2 positionXZThisLOD = input.TexCoord * TerrainChunkSizeLOD0; + float2 positionXZNextLOD = nextLODPos * TerrainChunkSizeLOD0; + float2 positionXZ = lerp(positionXZThisLOD, positionXZNextLOD, morphAlpha); +#else + float2 positionXZ = input.TexCoord * TerrainChunkSizeLOD0; +#endif + float3 position = float3(positionXZ.x, height, positionXZ.y); + + // Compute world space vertex position + output.WorldPosition = mul(float4(position, 1), WorldMatrix).xyz; + + // Compute clip space position + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + + // Pass vertex attributes +#if USE_SMOOTH_LOD_TRANSITION + float2 texCoord = lerp(input.TexCoord, nextLODPos, morphAlpha); +#else + float2 texCoord = input.TexCoord; +#endif + output.TexCoord = positionXZ * (1.0f / TerrainChunkSizeLOD0) + OffsetUV; + output.LightmapUV = texCoord * LightmapArea.zw + LightmapArea.xy; + + // Extract terrain layers weights from the splatmap +#if USE_TERRAIN_LAYERS + output.Layers[0] = splatmap0Value; +#if TERRAIN_LAYERS_DATA_SIZE > 1 + output.Layers[1] = splatmap1Value; +#endif +#endif + + // Compute world space normal vector + float3x3 tangentToLocal = CalcTangentBasisFromWorldNormal(normal); + float3x3 tangentToWorld = CalcTangentToWorld(WorldMatrix, tangentToLocal); + output.WorldNormal = tangentToWorld[2]; + + // Get material input params if need to evaluate any material property +#if USE_POSITION_OFFSET || USE_TESSELLATION || USE_CUSTOM_VERTEX_INTERPOLATORS + MaterialInput materialInput = (MaterialInput)0; + materialInput.WorldPosition = output.WorldPosition; + materialInput.TexCoord = output.TexCoord; +#if USE_LIGHTMAP + materialInput.LightmapUV = output.LightmapUV; +#endif + materialInput.TBN = CalcTangentBasisFromWorldNormal(output.WorldNormal); + materialInput.TwoSidedSign = WorldDeterminantSign; + materialInput.SvPosition = output.Position; + materialInput.PreSkinnedPosition = position; + materialInput.PreSkinnedNormal = normal; + materialInput.HolesMask = output.HolesMask; +#if USE_TERRAIN_LAYERS + materialInput.Layers = output.Layers; +#endif + Material material = GetMaterialVS(materialInput); +#endif + + // Apply world position offset per-vertex +#if USE_POSITION_OFFSET + output.WorldPosition += material.PositionOffset; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); +#endif + + // Get tessalation multiplier (per vertex) +#if USE_TESSELLATION + output.TessellationMultiplier = material.TessellationMultiplier; +#endif + + // Copy interpolants for other shader stages +#if USE_CUSTOM_VERTEX_INTERPOLATORS + output.CustomVSToPS = material.CustomVSToPS; +#endif + + return output; +} + +#if USE_TESSELLATION + +// Interpolants passed from the hull shader to the domain shader +struct TessalationHSToDS +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; + float HolesMask : TEXCOORD4; +#if USE_TERRAIN_LAYERS + float4 Layers[TERRAIN_LAYERS_DATA_SIZE] : TEXCOORD5; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif + float TessellationMultiplier : TESS; +}; + +// Interpolants passed from the domain shader and to the pixel shader +struct TessalationDSToPS +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; + float HolesMask : TEXCOORD4; +#if USE_TERRAIN_LAYERS + float4 Layers[TERRAIN_LAYERS_DATA_SIZE] : TEXCOORD5; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT] : TEXCOORD9; +#endif +}; + +MaterialInput GetMaterialInput(TessalationDSToPS input) +{ + MaterialInput result = (MaterialInput)0; + result.WorldPosition = input.WorldPosition; + result.TexCoord = input.TexCoord; +#if USE_LIGHTMAP + result.LightmapUV = input.LightmapUV; +#endif + result.TBN = CalcTangentBasisFromWorldNormal(input.WorldNormal); + result.TwoSidedSign = WorldDeterminantSign; + result.SvPosition = input.Position; + result.HolesMask = input.HolesMask; +#if USE_TERRAIN_LAYERS + result.Layers = input.Layers; +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + result.CustomVSToPS = input.CustomVSToPS; +#endif + return result; +} + +struct TessalationPatch +{ + float EdgeTessFactor[3] : SV_TessFactor; + float InsideTessFactor : SV_InsideTessFactor; +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + float3 B210 : POSITION4; + float3 B120 : POSITION5; + float3 B021 : POSITION6; + float3 B012 : POSITION7; + float3 B102 : POSITION8; + float3 B201 : POSITION9; + float3 B111 : CENTER; +#endif +}; + +TessalationPatch HS_PatchConstant(InputPatch input) +{ + TessalationPatch output; + + // Average tess factors along edges, and pick an edge tess factor for the interior tessellation + float4 TessellationMultipliers; + TessellationMultipliers.x = 0.5f * (input[1].TessellationMultiplier + input[2].TessellationMultiplier); + TessellationMultipliers.y = 0.5f * (input[2].TessellationMultiplier + input[0].TessellationMultiplier); + TessellationMultipliers.z = 0.5f * (input[0].TessellationMultiplier + input[1].TessellationMultiplier); + TessellationMultipliers.w = 0.333f * (input[0].TessellationMultiplier + input[1].TessellationMultiplier + input[2].TessellationMultiplier); + + TessellationMultipliers = clamp(TessellationMultipliers, 1, MAX_TESSELLATION_FACTOR); + + output.EdgeTessFactor[0] = TessellationMultipliers.x; // 1->2 edge + output.EdgeTessFactor[1] = TessellationMultipliers.y; // 2->0 edge + output.EdgeTessFactor[2] = TessellationMultipliers.z; // 0->1 edge + output.InsideTessFactor = TessellationMultipliers.w; + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + // Calculate PN-Triangle coefficients + // Refer to Vlachos 2001 for the original formula + float3 p1 = input[0].WorldPosition; + float3 p2 = input[1].WorldPosition; + float3 p3 = input[2].WorldPosition; + float3 n1 = input[0].WorldNormal; + float3 n2 = input[1].WorldNormal; + float3 n3 = input[2].WorldNormal; + + // Calculate control points + output.B210 = (2.0f * p1 + p2 - dot((p2 - p1), n1) * n1) / 3.0f; + output.B120 = (2.0f * p2 + p1 - dot((p1 - p2), n2) * n2) / 3.0f; + output.B021 = (2.0f * p2 + p3 - dot((p3 - p2), n2) * n2) / 3.0f; + output.B012 = (2.0f * p3 + p2 - dot((p2 - p3), n3) * n3) / 3.0f; + output.B102 = (2.0f * p3 + p1 - dot((p1 - p3), n3) * n3) / 3.0f; + output.B201 = (2.0f * p1 + p3 - dot((p3 - p1), n1) * n1) / 3.0f; + float3 e = (output.B210 + output.B120 + output.B021 + + output.B012 + output.B102 + output.B201) / 6.0f; + float3 v = (p1 + p2 + p3) / 3.0f; + output.B111 = e + ((e - v) / 2.0f); +#endif + + return output; +} + +META_HS(USE_TESSELLATION, FEATURE_LEVEL_SM5) +META_HS_PATCH(TESSELLATION_IN_CONTROL_POINTS) +[domain("tri")] +[partitioning("fractional_odd")] +[outputtopology("triangle_cw")] +[maxtessfactor(MAX_TESSELLATION_FACTOR)] +[outputcontrolpoints(3)] +[patchconstantfunc("HS_PatchConstant")] +TessalationHSToDS HS(InputPatch input, uint ControlPointID : SV_OutputControlPointID) +{ + TessalationHSToDS output; + + // Pass through shader +#define COPY(thing) output.thing = input[ControlPointID].thing; + COPY(Position); + COPY(WorldPosition); + COPY(TexCoord); + COPY(LightmapUV); + COPY(WorldNormal); + COPY(HolesMask); + COPY(TessellationMultiplier); +#if USE_TERRAIN_LAYERS + COPY(Layers); +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + COPY(CustomVSToPS); +#endif +#undef COPY + + return output; +} + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PHONG + +// Orthogonal projection on to plane +float3 ProjectOntoPlane(float3 planeNormal, float3 planePoint, float3 pointToProject) +{ + return pointToProject - dot(pointToProject-planePoint, planeNormal) * planeNormal; +} + +#endif + +META_DS(USE_TESSELLATION, FEATURE_LEVEL_SM5) +[domain("tri")] +TessalationDSToPS DS(TessalationPatch constantData, float3 barycentricCoords : SV_DomainLocation, const OutputPatch input) +{ + TessalationDSToPS output; + + // Get the barycentric coords + float U = barycentricCoords.x; + float V = barycentricCoords.y; + float W = barycentricCoords.z; + + // Interpolate patch attributes to generated vertices +#define INTERPOLATE(thing) output.thing = U * input[0].thing + V * input[1].thing + W * input[2].thing +#define COPY(thing) output.thing = input[0].thing + INTERPOLATE(Position); +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PN + // Precompute squares and squares * 3 + float UU = U * U; + float VV = V * V; + float WW = W * W; + float UU3 = UU * 3.0f; + float VV3 = VV * 3.0f; + float WW3 = WW * 3.0f; + + // Interpolate using barycentric coordinates and PN Triangle control points + output.WorldPosition = + input[0].WorldPosition * UU * U + + input[1].WorldPosition * VV * V + + input[2].WorldPosition * WW * W + + constantData.B210 * UU3 * V + + constantData.B120 * VV3 * U + + constantData.B021 * VV3 * W + + constantData.B012 * WW3 * V + + constantData.B102 * WW3 * U + + constantData.B201 * UU3 * W + + constantData.B111 * 6.0f * W * U * V; +#else + INTERPOLATE(WorldPosition); +#endif + INTERPOLATE(TexCoord); + INTERPOLATE(LightmapUV); + INTERPOLATE(WorldNormal); + INTERPOLATE(HolesMask); +#if USE_TERRAIN_LAYERS + UNROLL + for (int i = 0; i < TERRAIN_LAYERS_DATA_SIZE; i++) + { + INTERPOLATE(Layers[i]); + } +#endif +#if USE_CUSTOM_VERTEX_INTERPOLATORS + UNROLL + for (int i = 0; i < CUSTOM_VERTEX_INTERPOLATORS_COUNT; i++) + { + INTERPOLATE(CustomVSToPS[i]); + } +#endif +#undef INTERPOLATE +#undef COPY + + // Interpolating normal can unnormalize it, so normalize it + output.WorldNormal = normalize(output.WorldNormal); + +#if MATERIAL_TESSELLATION == MATERIAL_TESSELLATION_PHONG + // Orthogonal projection in the tangent planes + float3 posProjectedU = ProjectOntoPlane(input[0].WorldNormal, input[0].WorldPosition, output.WorldPosition); + float3 posProjectedV = ProjectOntoPlane(input[1].WorldNormal, input[1].WorldPosition, output.WorldPosition); + float3 posProjectedW = ProjectOntoPlane(input[2].WorldNormal, input[2].WorldPosition, output.WorldPosition); + + // Interpolate the projected points + output.WorldPosition = U * posProjectedU + V * posProjectedV + W * posProjectedW; +#endif + + // Perform displacement mapping +#if USE_DISPLACEMENT + MaterialInput materialInput = GetMaterialInput(output); + Material material = GetMaterialDS(materialInput); + output.WorldPosition += material.WorldDisplacement; +#endif + + // Recalculate the clip space position + output.Position = mul(float4(output.WorldPosition, 1), ViewProjectionMatrix); + + return output; +} + +#endif + +#if USE_LIGHTMAP + +float3 SampleLightmap(Material material, MaterialInput materialInput) +{ + // Sample lightmaps + float4 lightmap0 = Lightmap0.Sample(SamplerLinearClamp, materialInput.LightmapUV); + float4 lightmap1 = Lightmap1.Sample(SamplerLinearClamp, materialInput.LightmapUV); + float4 lightmap2 = Lightmap2.Sample(SamplerLinearClamp, materialInput.LightmapUV); + + // Unpack H-basis + float3 h0 = float3(lightmap0.x, lightmap1.x, lightmap2.x); + float3 h1 = float3(lightmap0.y, lightmap1.y, lightmap2.y); + float3 h2 = float3(lightmap0.z, lightmap1.z, lightmap2.z); + float3 h3 = float3(lightmap0.w, lightmap1.w, lightmap2.w); + + // Sample baked diffuse irradiance from the H-basis coefficients + float3 normal = material.TangentNormal; +#if MATERIAL_SHADING_MODEL == SHADING_MODEL_FOLIAGE + normal *= material.TangentNormal; +#endif + return GetHBasisIrradiance(normal, h0, h1, h2, h3) / PI; +} + +#endif + +// Pixel Shader function for GBuffer Pass +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(USE_LIGHTMAP=0) +META_PERMUTATION_1(USE_LIGHTMAP=1) +void PS_GBuffer( + in PixelInput input + ,out float4 Light : SV_Target0 +#if MATERIAL_BLEND == MATERIAL_BLEND_OPAQUE + ,out float4 RT0 : SV_Target1 + ,out float4 RT1 : SV_Target2 + ,out float4 RT2 : SV_Target3 +#if USE_GBUFFER_CUSTOM_DATA + ,out float4 RT3 : SV_Target4 +#endif +#endif + ) +{ + Light = 0; + + // Get material parameters + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + + // Masking +#if MATERIAL_MASKED + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + +#if USE_LIGHTMAP + + float3 diffuseColor = GetDiffuseColor(material.Color, material.Metalness); + float3 specularColor = GetSpecularColor(material.Color, material.Specular, material.Metalness); + + // Sample lightmap + float3 diffuseIndirectLighting = SampleLightmap(material, materialInput); + + // Apply static indirect light + Light.rgb = diffuseColor * diffuseIndirectLighting * AOMultiBounce(material.AO, diffuseColor); + +#endif + +#if MATERIAL_BLEND == MATERIAL_BLEND_OPAQUE + + // Pack material properties to GBuffer + RT0 = float4(material.Color, material.AO); + RT1 = float4(material.WorldNormal * 0.5 + 0.5, MATERIAL_SHADING_MODEL * (1.0 / 3.0)); + RT2 = float4(material.Roughness, material.Metalness, material.Specular, 0); + + // Custom data +#if USE_GBUFFER_CUSTOM_DATA +#if MATERIAL_SHADING_MODEL == SHADING_MODEL_SUBSURFACE + RT3 = float4(material.SubsurfaceColor, material.Opacity); +#elif MATERIAL_SHADING_MODEL == SHADING_MODEL_FOLIAGE + RT3 = float4(material.SubsurfaceColor, material.Opacity); +#else + RT3 = float4(0, 0, 0, 0); +#endif +#endif + + // Add light emission +#if USE_EMISSIVE + Light.rgb += material.Emissive; +#endif + +#else + + // Handle blending as faked forward pass (use Light buffer and skip GBuffer modification) + Light = float4(material.Emissive, material.Opacity); + +#endif +} + +// Pixel Shader function for Depth Pass +META_PS(true, FEATURE_LEVEL_ES2) +void PS_Depth(PixelInput input +#if GLSL + , out float4 OutColor : SV_Target0 +#endif + ) +{ +#if MATERIAL_MASKED + // Perform per pixel clipping if material requries it + MaterialInput materialInput = GetMaterialInput(input); + Material material = GetMaterialPS(materialInput); + clip(material.Mask - MATERIAL_MASK_THRESHOLD); +#endif + +#if GLSL + OutColor = 0; +#endif +} diff --git a/Content/Editor/Particles/Constant Burst.flax b/Content/Editor/Particles/Constant Burst.flax new file mode 100644 index 000000000..6e8dc3057 --- /dev/null +++ b/Content/Editor/Particles/Constant Burst.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5c47c264658adc60ba1809e50039dbaa50c3157d678d31edb8328a143f6dd34 +size 2269 diff --git a/Content/Editor/Particles/Particle Material Color.flax b/Content/Editor/Particles/Particle Material Color.flax new file mode 100644 index 000000000..6c83bfc35 --- /dev/null +++ b/Content/Editor/Particles/Particle Material Color.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bf5ada0acae289fa7fbbbd6135779ef544d36999de9df0f29b2b9ce10ad52bb +size 30474 diff --git a/Content/Editor/Particles/Particle Material Preview.flax b/Content/Editor/Particles/Particle Material Preview.flax new file mode 100644 index 000000000..86d8be595 --- /dev/null +++ b/Content/Editor/Particles/Particle Material Preview.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:aff39f53494bc362f2c73fc598108b0b59c70a681ce77d9c4d3581d0b2e8247d +size 1628 diff --git a/Content/Editor/Particles/Periodic Burst.flax b/Content/Editor/Particles/Periodic Burst.flax new file mode 100644 index 000000000..6bbb5b7d7 --- /dev/null +++ b/Content/Editor/Particles/Periodic Burst.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d7266e3179077f26b1a12617cdb9b1733fd753ee557f2d81ea58a48fa4265f4 +size 3039 diff --git a/Content/Editor/Particles/Ribbon Spiral.flax b/Content/Editor/Particles/Ribbon Spiral.flax new file mode 100644 index 000000000..bff7f09a9 --- /dev/null +++ b/Content/Editor/Particles/Ribbon Spiral.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1bbb361118d68c52d4fd8176c01c144f2f3105ac13b80b33ea23101f40589ea +size 1992 diff --git a/Content/Editor/Particles/Smoke Atlas Normal.flax b/Content/Editor/Particles/Smoke Atlas Normal.flax new file mode 100644 index 000000000..f4e994778 --- /dev/null +++ b/Content/Editor/Particles/Smoke Atlas Normal.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b142885fc327b3a1dccf07446e01f16e0783beaeae9e6bba0bd3adfdf6eb8f29 +size 1398948 diff --git a/Content/Editor/Particles/Smoke Atlas.flax b/Content/Editor/Particles/Smoke Atlas.flax new file mode 100644 index 000000000..4e5c298b1 --- /dev/null +++ b/Content/Editor/Particles/Smoke Atlas.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44705a0f6475390845f3dc1b377ce98b5abaae5c5837eb258eb492b8da1b1218 +size 1398946 diff --git a/Content/Editor/Particles/Smoke Material.flax b/Content/Editor/Particles/Smoke Material.flax new file mode 100644 index 000000000..798c422f2 --- /dev/null +++ b/Content/Editor/Particles/Smoke Material.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a464d781c863bc54c43341cd68cc06726e6badd12813e381fefc8ba3dfd54fb4 +size 36574 diff --git a/Content/Editor/Particles/Smoke.flax b/Content/Editor/Particles/Smoke.flax new file mode 100644 index 000000000..cb474f3c3 --- /dev/null +++ b/Content/Editor/Particles/Smoke.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9787b9b4cc2caf91c65b4d858cfcb11afe0fe4917c0f741f3e0099ba687e4da9 +size 15421 diff --git a/Content/Editor/Particles/Sparks.flax b/Content/Editor/Particles/Sparks.flax new file mode 100644 index 000000000..9a94e1f98 --- /dev/null +++ b/Content/Editor/Particles/Sparks.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1abf314458e98bd45638abab1092dea374d68c9cb5085f6d3a5de65947f62ea7 +size 14743 diff --git a/Content/Editor/Primitives/Capsule.flax b/Content/Editor/Primitives/Capsule.flax new file mode 100644 index 000000000..10b38bf9d --- /dev/null +++ b/Content/Editor/Primitives/Capsule.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1d9c920a1931dda8ea9ad3edca0b97935ffe0ceba0bf647ef1611db76c13490 +size 25720 diff --git a/Content/Editor/Primitives/Cone.flax b/Content/Editor/Primitives/Cone.flax new file mode 100644 index 000000000..fa0123178 --- /dev/null +++ b/Content/Editor/Primitives/Cone.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ac606bb7dc790affc7b8ca01077597902e7a29e2ae9ea10c60d949adc953839 +size 8815 diff --git a/Content/Editor/Primitives/Cube.flax b/Content/Editor/Primitives/Cube.flax new file mode 100644 index 000000000..a45f860cc --- /dev/null +++ b/Content/Editor/Primitives/Cube.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff43d080b349c955e1b16396018ef0066f3eacd525f8837bb522af15e174bfda +size 2579 diff --git a/Content/Editor/Primitives/Cylinder.flax b/Content/Editor/Primitives/Cylinder.flax new file mode 100644 index 000000000..310b426aa --- /dev/null +++ b/Content/Editor/Primitives/Cylinder.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d487edcc44d3d27275f180e00a99753dae244b2ba74f7c1a016775d64d72929 +size 13207 diff --git a/Content/Editor/Primitives/Plane.flax b/Content/Editor/Primitives/Plane.flax new file mode 100644 index 000000000..bf2052f02 --- /dev/null +++ b/Content/Editor/Primitives/Plane.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8ab6d87b9f36f4ad231f38f415223130eea7b411be7ff8fd174b6ff7790258fb +size 2232 diff --git a/Content/Editor/Primitives/Sphere.flax b/Content/Editor/Primitives/Sphere.flax new file mode 100644 index 000000000..d2d26788f --- /dev/null +++ b/Content/Editor/Primitives/Sphere.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2f6b4fd9f83c269d54f716edb09071d00d71b09a89d829ce936038677648f22 +size 22219 diff --git a/Content/Editor/Scripting/ScriptTemplate.cpp b/Content/Editor/Scripting/ScriptTemplate.cpp new file mode 100644 index 000000000..a80b8836a --- /dev/null +++ b/Content/Editor/Scripting/ScriptTemplate.cpp @@ -0,0 +1,24 @@ +%copyright% +#include "%filename%.h" + +%class%::%class%(const SpawnParams& params) + : Script(params) +{ + // Enable ticking OnUpdate function + _tickUpdate = true; +} + +void %class%::OnEnable() +{ + // Here you can add code that needs to be called when script is enabled (eg. register for events) +} + +void %class%::OnDisable() +{ + // Here you can add code that needs to be called when script is disabled (eg. unregister from events) +} + +void %class%::OnUpdate() +{ + // Here you can add code that needs to be called every frame +} diff --git a/Content/Editor/Scripting/ScriptTemplate.cs b/Content/Editor/Scripting/ScriptTemplate.cs new file mode 100644 index 000000000..c9ae5068e --- /dev/null +++ b/Content/Editor/Scripting/ScriptTemplate.cs @@ -0,0 +1,29 @@ +%copyright%using System; +using System.Collections.Generic; +using FlaxEngine; + +namespace %namespace% +{ + public class %class% : Script + { + public override void OnStart() + { + // Here you can add code that needs to be called when script is created, just before the first game update + } + + public override void OnEnable() + { + // Here you can add code that needs to be called when script is enabled (eg. register for events) + } + + public override void OnDisable() + { + // Here you can add code that needs to be called when script is disabled (eg. unregister from events) + } + + public override void OnUpdate() + { + // Here you can add code that needs to be called every frame + } + } +} diff --git a/Content/Editor/Scripting/ScriptTemplate.h b/Content/Editor/Scripting/ScriptTemplate.h new file mode 100644 index 000000000..61997c011 --- /dev/null +++ b/Content/Editor/Scripting/ScriptTemplate.h @@ -0,0 +1,14 @@ +%copyright% +#pragma once + +#include "Engine/Scripting/Script.h" + +API_CLASS() class %module%%class% : public Script +{ +DECLARE_SCRIPTING_TYPE(%class%); + + // [Script] + void OnEnable() override; + void OnDisable() override; + void OnUpdate() override; +}; diff --git a/Content/Editor/Scripting/ShaderTemplate.shader b/Content/Editor/Scripting/ShaderTemplate.shader new file mode 100644 index 000000000..5e7034adc --- /dev/null +++ b/Content/Editor/Scripting/ShaderTemplate.shader @@ -0,0 +1,12 @@ +%copyright%#include "./Flax/Common.hlsl" + +META_CB_BEGIN(0, Data) +float4 Color; +META_CB_END + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Fullscreen(Quad_VS2PS input) : SV_Target +{ + // Solid color fill from the constant buffer passed from code + return Color; +} diff --git a/Content/Editor/SimplySky.flax b/Content/Editor/SimplySky.flax new file mode 100644 index 000000000..789392f10 --- /dev/null +++ b/Content/Editor/SimplySky.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7df7d1c905dcce01ba93caa39464016d58c9a4a0218d0158139a7e98b4947cb1 +size 524671 diff --git a/Content/Editor/Terrain/Circle Brush Material.flax b/Content/Editor/Terrain/Circle Brush Material.flax new file mode 100644 index 000000000..dc30e39fe --- /dev/null +++ b/Content/Editor/Terrain/Circle Brush Material.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bd0529d1088670eb9edd3533f9493d259bcc9797d0e01f12922f6f3b05daef4d +size 33136 diff --git a/Content/Editor/Terrain/Highlight Terrain Material.flax b/Content/Editor/Terrain/Highlight Terrain Material.flax new file mode 100644 index 000000000..49f76cb07 --- /dev/null +++ b/Content/Editor/Terrain/Highlight Terrain Material.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:820f0265ca7249f84f0c91b402f817dc5ca12a0a5884756b6d0bf712c12a9b06 +size 26815 diff --git a/Content/Editor/TexturePreviewMaterial.flax b/Content/Editor/TexturePreviewMaterial.flax new file mode 100644 index 000000000..0a68763cd --- /dev/null +++ b/Content/Editor/TexturePreviewMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9029bd6c09c686f551356800b6f16c60f7392fb3a396d2fe583e6cb1f83c46f7 +size 10907 diff --git a/Content/Editor/VisjectSurface.flax b/Content/Editor/VisjectSurface.flax new file mode 100644 index 000000000..3d7f502cf --- /dev/null +++ b/Content/Editor/VisjectSurface.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ce771772f9e14b43a11a617273da7316234870c3b8dca50c25b9fd50be1226d7 +size 5593008 diff --git a/Content/Editor/Wires Debug Material.flax b/Content/Editor/Wires Debug Material.flax new file mode 100644 index 000000000..146d8dba1 --- /dev/null +++ b/Content/Editor/Wires Debug Material.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5980c96def69ba574b2feb1337d9dd23c56a28779df9601252545b1a01b452d +size 35420 diff --git a/Content/Engine/DefaultMaterial.flax b/Content/Engine/DefaultMaterial.flax new file mode 100644 index 000000000..23401a029 --- /dev/null +++ b/Content/Engine/DefaultMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc0d25b2686512eba5f52691d45ee2e8348d578d627299953e5cec4f97e5e074 +size 40081 diff --git a/Content/Engine/DefaultTerrainMaterial.flax b/Content/Engine/DefaultTerrainMaterial.flax new file mode 100644 index 000000000..d1b0de859 --- /dev/null +++ b/Content/Engine/DefaultTerrainMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:138d3bbb4297dd585c8a0a4ecfd8e48ae542c71d8aff2a199ed28d51d4ced4cf +size 28896 diff --git a/Content/Engine/Models/Box.flax b/Content/Engine/Models/Box.flax new file mode 100644 index 000000000..91fa289c2 --- /dev/null +++ b/Content/Engine/Models/Box.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb14616f130595eedfb800d3805266c441ee653edba703c4a6973a6f07302a01 +size 3121 diff --git a/Content/Engine/Models/Quad.flax b/Content/Engine/Models/Quad.flax new file mode 100644 index 000000000..0bec10f36 --- /dev/null +++ b/Content/Engine/Models/Quad.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0ccf8e4082695391576e65cbaaf4a685d77a75cad668cc99a71149e852390c9 +size 865 diff --git a/Content/Engine/Models/SimpleBox.flax b/Content/Engine/Models/SimpleBox.flax new file mode 100644 index 000000000..db97d287a --- /dev/null +++ b/Content/Engine/Models/SimpleBox.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fbcbcd47cefbad93a2d14504c081fb7836ff24c4f875c0984552602a55877deb +size 2155 diff --git a/Content/Engine/Models/Sphere.flax b/Content/Engine/Models/Sphere.flax new file mode 100644 index 000000000..803b9ab40 --- /dev/null +++ b/Content/Engine/Models/Sphere.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec6177abb0235b6da27b0aef9f06f9865b15548afcdc34e71448cae6b51b8db6 +size 109567 diff --git a/Content/Engine/Models/SphereLowPoly.flax b/Content/Engine/Models/SphereLowPoly.flax new file mode 100644 index 000000000..57dc378b2 --- /dev/null +++ b/Content/Engine/Models/SphereLowPoly.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cd1093c7666a9a8df46b7b1d5cb1fe302bdf64eabc8d85c1cf1b2f91d35526d +size 3448 diff --git a/Content/Engine/SingleColorMaterial.flax b/Content/Engine/SingleColorMaterial.flax new file mode 100644 index 000000000..d11046007 --- /dev/null +++ b/Content/Engine/SingleColorMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:502f451e0b232b4288a85a274d81d22a7053c84f174286a05043707dc75fe193 +size 38381 diff --git a/Content/Engine/SkyboxMaterial.flax b/Content/Engine/SkyboxMaterial.flax new file mode 100644 index 000000000..24d56521b --- /dev/null +++ b/Content/Engine/SkyboxMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4b60416f9e2deb1f717860ae9a4cc1a74be0517db921526d21a79434b7506e7 +size 39603 diff --git a/Content/Engine/Textures/BlackTexture.flax b/Content/Engine/Textures/BlackTexture.flax new file mode 100644 index 000000000..bb85fbcf1 --- /dev/null +++ b/Content/Engine/Textures/BlackTexture.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ee43f9b878672be95e2567281f0a75c3bc834955a98f9c199266a39d3c485ae +size 474 diff --git a/Content/Engine/Textures/Bokeh/Circle.flax b/Content/Engine/Textures/Bokeh/Circle.flax new file mode 100644 index 000000000..d138e758f --- /dev/null +++ b/Content/Engine/Textures/Bokeh/Circle.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:407184ea7e4805a52c3e18af58ceb53b2809f15dcd476ea2e645e568e11c8d28 +size 11320 diff --git a/Content/Engine/Textures/Bokeh/Cross.flax b/Content/Engine/Textures/Bokeh/Cross.flax new file mode 100644 index 000000000..52be415a9 --- /dev/null +++ b/Content/Engine/Textures/Bokeh/Cross.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd37736fc6e0012712d8bbaa7c09239b9162ac7978daa02d574d4b4808c0fa2a +size 11319 diff --git a/Content/Engine/Textures/Bokeh/Hexagon.flax b/Content/Engine/Textures/Bokeh/Hexagon.flax new file mode 100644 index 000000000..cca63db9c --- /dev/null +++ b/Content/Engine/Textures/Bokeh/Hexagon.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:84b028093344341af783e612aa1c80c143246f5c5cf2558dea58d58f59ef80f0 +size 11317 diff --git a/Content/Engine/Textures/Bokeh/Octagon.flax b/Content/Engine/Textures/Bokeh/Octagon.flax new file mode 100644 index 000000000..ea6bccfa8 --- /dev/null +++ b/Content/Engine/Textures/Bokeh/Octagon.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:12c2293c5d3f07c8bb1a261005a7487738dfa151025bcd1b1c8836cb6f5027a6 +size 11317 diff --git a/Content/Engine/Textures/DefaultLensColor.flax b/Content/Engine/Textures/DefaultLensColor.flax new file mode 100644 index 000000000..c52d5787e --- /dev/null +++ b/Content/Engine/Textures/DefaultLensColor.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a33c432074129df8c96f7d2296bb5c37c07f6ea52b83b5b1d45fab61c79c7dc +size 2458 diff --git a/Content/Engine/Textures/DefaultLensDirt.flax b/Content/Engine/Textures/DefaultLensDirt.flax new file mode 100644 index 000000000..f5aab3eaa --- /dev/null +++ b/Content/Engine/Textures/DefaultLensDirt.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7e30c93ed54ef1ebfd3b8ecb59a73b037c297d058951e616da758cfeca6ee91 +size 16589149 diff --git a/Content/Engine/Textures/DefaultLensStarburst.flax b/Content/Engine/Textures/DefaultLensStarburst.flax new file mode 100644 index 000000000..cc3351fed --- /dev/null +++ b/Content/Engine/Textures/DefaultLensStarburst.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6698438109bfd26be8e320986ce3b93b5bf0f44907ad5562e3d4fc555be2c36a +size 11185242 diff --git a/Content/Engine/Textures/FlaxIcon.flax b/Content/Engine/Textures/FlaxIcon.flax new file mode 100644 index 000000000..90ebe7cad --- /dev/null +++ b/Content/Engine/Textures/FlaxIcon.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:038b7f0df0e45f320a54183dcf6de43372bf3b76a7b07e1bfeb82827578f495e +size 1398906 diff --git a/Content/Engine/Textures/FlaxIconBlue.flax b/Content/Engine/Textures/FlaxIconBlue.flax new file mode 100644 index 000000000..353a9a2e7 --- /dev/null +++ b/Content/Engine/Textures/FlaxIconBlue.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ead561da9a3689613404da036705bb6b128c150322137d408ed193a27ffdbc52 +size 1398910 diff --git a/Content/Engine/Textures/GrayTexture.flax b/Content/Engine/Textures/GrayTexture.flax new file mode 100644 index 000000000..e81fefae4 --- /dev/null +++ b/Content/Engine/Textures/GrayTexture.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:afc7ccb71d12256329c888e740e0d6f5154f95774c82092a5128aa8ed3b80c3c +size 473 diff --git a/Content/Engine/Textures/Logo.flax b/Content/Engine/Textures/Logo.flax new file mode 100644 index 000000000..6db239ed5 --- /dev/null +++ b/Content/Engine/Textures/Logo.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f673152512b6f7840ae25d5dd0b4ab9ee5cfa91a2cabc62f19890b33865ba73c +size 600623 diff --git a/Content/Engine/Textures/NormalTexture.flax b/Content/Engine/Textures/NormalTexture.flax new file mode 100644 index 000000000..f6d0bfada --- /dev/null +++ b/Content/Engine/Textures/NormalTexture.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:654e87ee866aebf5342159564a31df2b95e318b0cad7b7e3033a4e837192934e +size 671 diff --git a/Content/Engine/Textures/PreIntegratedGF.flax b/Content/Engine/Textures/PreIntegratedGF.flax new file mode 100644 index 000000000..97783def3 --- /dev/null +++ b/Content/Engine/Textures/PreIntegratedGF.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fcaf6ab41c5745842a005284259b9ed8eaec73587d73a9e3d7f39086b78ec0e2 +size 87789 diff --git a/Content/Engine/Textures/SMAA_AreaTex.flax b/Content/Engine/Textures/SMAA_AreaTex.flax new file mode 100644 index 000000000..d25378e7a --- /dev/null +++ b/Content/Engine/Textures/SMAA_AreaTex.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de768189b6aa6fec0c1906ec713d879e91e03a338855f0f92848a31adb1dfe3d +size 45484 diff --git a/Content/Engine/Textures/SMAA_SearchTex.flax b/Content/Engine/Textures/SMAA_SearchTex.flax new file mode 100644 index 000000000..36005c484 --- /dev/null +++ b/Content/Engine/Textures/SMAA_SearchTex.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4bcc5a34993b7dbd8a7177618f650ee878b444f1fcefdc1165f4d82fca52a9c2 +size 1470 diff --git a/Content/Engine/Textures/SplashScreenLogo.flax b/Content/Engine/Textures/SplashScreenLogo.flax new file mode 100644 index 000000000..c7e54f147 --- /dev/null +++ b/Content/Engine/Textures/SplashScreenLogo.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc0b1fe7596894317bbf7049d4e31794bbb98f224eba098025ae972f988fae59 +size 1266836 diff --git a/Content/Engine/Textures/Tiles_M.flax b/Content/Engine/Textures/Tiles_M.flax new file mode 100644 index 000000000..49a4002b5 --- /dev/null +++ b/Content/Engine/Textures/Tiles_M.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:332359786ae1acc0c2b979981c1aa07f96c46172fc8b0c52da268d0a62cdcf65 +size 2797177 diff --git a/Content/Engine/Textures/Tiles_N.flax b/Content/Engine/Textures/Tiles_N.flax new file mode 100644 index 000000000..732467ede --- /dev/null +++ b/Content/Engine/Textures/Tiles_N.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:beae5ea42642324e9ef9b50793e1746f8fa97f0c3ad5752ddf440484db993d3f +size 5593393 diff --git a/Content/Engine/Textures/WhiteTexture.flax b/Content/Engine/Textures/WhiteTexture.flax new file mode 100644 index 000000000..7afd1494a --- /dev/null +++ b/Content/Engine/Textures/WhiteTexture.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b6db73909f6ea8b4cf39ebd25cc69c9c9df9e64fc4f138b15b21d29282bb79c +size 474 diff --git a/Content/Engine/WhiteMaterial.flax b/Content/Engine/WhiteMaterial.flax new file mode 100644 index 000000000..fdbeb3873 --- /dev/null +++ b/Content/Engine/WhiteMaterial.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:379d175e7be56c7741df5ed0a69ff1375dbd6cc4cfe228179401fd40f3b28404 +size 461 diff --git a/Content/Shaders/AtmospherePreCompute.flax b/Content/Shaders/AtmospherePreCompute.flax new file mode 100644 index 000000000..80279402c --- /dev/null +++ b/Content/Shaders/AtmospherePreCompute.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71772e7059bc377bd2fc14e5e193af24e4e4c03f1d782fbf779e87901db0c329 +size 13430 diff --git a/Content/Shaders/BakeLightmap.flax b/Content/Shaders/BakeLightmap.flax new file mode 100644 index 000000000..f84e6a94a --- /dev/null +++ b/Content/Shaders/BakeLightmap.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fde14495e73f8433e6b529cf152fb8c3cf0f0ac69064e087a68acd5511251df +size 16095 diff --git a/Content/Shaders/BitonicSort.flax b/Content/Shaders/BitonicSort.flax new file mode 100644 index 000000000..dda68df88 --- /dev/null +++ b/Content/Shaders/BitonicSort.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e67cf2342b037ae696c72aa670aed7b9c7c5a07cc4cc295b9c963ca600e1cf01 +size 6725 diff --git a/Content/Shaders/ColorGrading.flax b/Content/Shaders/ColorGrading.flax new file mode 100644 index 000000000..7ffc7ff4f --- /dev/null +++ b/Content/Shaders/ColorGrading.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5b9c4b320ca1926bbc5a0c0b57b758e89cbc15cfa801db8c11714c06decc578 +size 11553 diff --git a/Content/Shaders/DebugDraw.flax b/Content/Shaders/DebugDraw.flax new file mode 100644 index 000000000..fd44cbe12 --- /dev/null +++ b/Content/Shaders/DebugDraw.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b6fea1d9b7d7fbfc51337c06017a87f929b5238e8c8108862d4aa9724ad3dadd +size 1746 diff --git a/Content/Shaders/DepthOfField.flax b/Content/Shaders/DepthOfField.flax new file mode 100644 index 000000000..5acc84c3e --- /dev/null +++ b/Content/Shaders/DepthOfField.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f4fe6201d9c205835e9a16f05fd3e95400854ea162bce8b1473037e52c7cfd69 +size 21043 diff --git a/Content/Shaders/Editor/LightmapUVsDensity.flax b/Content/Shaders/Editor/LightmapUVsDensity.flax new file mode 100644 index 000000000..257b7755b --- /dev/null +++ b/Content/Shaders/Editor/LightmapUVsDensity.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4492f139ebb5377b1450a74e28a33dd0dddb24480b7dad7506f833173091bd1b +size 4509 diff --git a/Content/Shaders/Editor/VertexColors.flax b/Content/Shaders/Editor/VertexColors.flax new file mode 100644 index 000000000..80b2b83fc --- /dev/null +++ b/Content/Shaders/Editor/VertexColors.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfced13aa6d3098566c42d7a0c3b5c486c59fdeca1c75b0a48866090fad9804b +size 2102 diff --git a/Content/Shaders/EyeAdaptation.flax b/Content/Shaders/EyeAdaptation.flax new file mode 100644 index 000000000..559b58a25 --- /dev/null +++ b/Content/Shaders/EyeAdaptation.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a635936a583a1b8da5d30587567b0f5ba0951e98e003077f19ced2a80a124d75 +size 4605 diff --git a/Content/Shaders/FXAA.flax b/Content/Shaders/FXAA.flax new file mode 100644 index 000000000..dd2efc5e5 --- /dev/null +++ b/Content/Shaders/FXAA.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:71c3aa093a2af316dee10553ac1225da0d206ee88cf288543fb207a6134924f4 +size 24774 diff --git a/Content/Shaders/Fog.flax b/Content/Shaders/Fog.flax new file mode 100644 index 000000000..3bb6a755e --- /dev/null +++ b/Content/Shaders/Fog.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f87bf73c8c4f77c4817d80d0fea85e006369ae508fb0f8922a502c393176f7b8 +size 3129 diff --git a/Content/Shaders/Forward.flax b/Content/Shaders/Forward.flax new file mode 100644 index 000000000..41ac2933a --- /dev/null +++ b/Content/Shaders/Forward.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e2ec3d7ecb31942e65371e6b7c706b9fd8e8d1ba8ca824a3049f3d058058e84 +size 1467 diff --git a/Content/Shaders/GBuffer.flax b/Content/Shaders/GBuffer.flax new file mode 100644 index 000000000..bef552135 --- /dev/null +++ b/Content/Shaders/GBuffer.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ed560c1adc9cbeb2f37c3e83946d167b5f05ef36f7e737c75cf1d8289f2f4b4 +size 2845 diff --git a/Content/Shaders/GPUParticlesSorting.flax b/Content/Shaders/GPUParticlesSorting.flax new file mode 100644 index 000000000..4e92309cb --- /dev/null +++ b/Content/Shaders/GPUParticlesSorting.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b538e7ae923869442330860d392a0f6adc921e26602d8b216caa8e1f2c9149d +size 2726 diff --git a/Content/Shaders/GUI.flax b/Content/Shaders/GUI.flax new file mode 100644 index 000000000..7db2c18c4 --- /dev/null +++ b/Content/Shaders/GUI.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:90124cb9b6acf303aedb04e8ef3b53676031efd2c9fae3e641d74384ecbeab70 +size 5108 diff --git a/Content/Shaders/Histogram.flax b/Content/Shaders/Histogram.flax new file mode 100644 index 000000000..0579197bd --- /dev/null +++ b/Content/Shaders/Histogram.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ccd2302c7b28d088ea2f810d22f81bb5beccd7e483ae0f7248ccbe0fd64ce70b +size 2928 diff --git a/Content/Shaders/Lights.flax b/Content/Shaders/Lights.flax new file mode 100644 index 000000000..1eeb9563f --- /dev/null +++ b/Content/Shaders/Lights.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a37a2bd9a2e7296c23ccb719b77143383e9f52aed8879f7637f0247c48bf3c6 +size 5209 diff --git a/Content/Shaders/MotionBlur.flax b/Content/Shaders/MotionBlur.flax new file mode 100644 index 000000000..1314b0326 --- /dev/null +++ b/Content/Shaders/MotionBlur.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d070a6cffc576f807e91f023f9331f6f2785f1ad48cd463b1b8431bd4373813 +size 13463 diff --git a/Content/Shaders/MultiScaler.flax b/Content/Shaders/MultiScaler.flax new file mode 100644 index 000000000..a89ebfb53 --- /dev/null +++ b/Content/Shaders/MultiScaler.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f3e0974edbf259ee284aab355735c281740ed05808fbed97f0ad6dc0ce3c2a0a +size 3929 diff --git a/Content/Shaders/PostProcessing.flax b/Content/Shaders/PostProcessing.flax new file mode 100644 index 000000000..7ce10e953 --- /dev/null +++ b/Content/Shaders/PostProcessing.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8d7c53061c2f0f6335cae78f09e11f08818196a3f0f40f3bced2c9b46cfe0b5 +size 16988 diff --git a/Content/Shaders/ProbesFilter.flax b/Content/Shaders/ProbesFilter.flax new file mode 100644 index 000000000..7a8c0b14d --- /dev/null +++ b/Content/Shaders/ProbesFilter.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cb6bf18e4179a4e2d85b23b3a7877dc50354d5030b0357cc365fc204b7a968f +size 5395 diff --git a/Content/Shaders/Quad.flax b/Content/Shaders/Quad.flax new file mode 100644 index 000000000..fc0a8359f --- /dev/null +++ b/Content/Shaders/Quad.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21e9c3fc030a85a59295b026f33790f8da824df0f9c6eab48eb37115998acdc4 +size 2310 diff --git a/Content/Shaders/Reflections.flax b/Content/Shaders/Reflections.flax new file mode 100644 index 000000000..0ea38f099 --- /dev/null +++ b/Content/Shaders/Reflections.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f5dec0b968c92460069a0e194a4768341f312f770f7b1e355fba119d45d480 +size 3288 diff --git a/Content/Shaders/SMAA.flax b/Content/Shaders/SMAA.flax new file mode 100644 index 000000000..0b24ed466 --- /dev/null +++ b/Content/Shaders/SMAA.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba606acbf34c101f25f4ad8004dad01e04c02b51fa7d62ec4e939d606f954393 +size 47673 diff --git a/Content/Shaders/SSAO.flax b/Content/Shaders/SSAO.flax new file mode 100644 index 000000000..0876ab6a7 --- /dev/null +++ b/Content/Shaders/SSAO.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:154d66b27b6010b2c27c68c8c7d8087a242ddd24fd0bc7982fdbda6aa59df563 +size 37614 diff --git a/Content/Shaders/SSR.flax b/Content/Shaders/SSR.flax new file mode 100644 index 000000000..25dbf176c --- /dev/null +++ b/Content/Shaders/SSR.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a76d5105eb8c915939d9855d9d65f50bb2001d4fc4342faf95038b0c6c8f339e +size 13442 diff --git a/Content/Shaders/Shadows.flax b/Content/Shaders/Shadows.flax new file mode 100644 index 000000000..f5cc0cdbd --- /dev/null +++ b/Content/Shaders/Shadows.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e02e444708fce9d576dc59769905381546a49be2b593a83b524393e2986dedf2 +size 7847 diff --git a/Content/Shaders/Sky.flax b/Content/Shaders/Sky.flax new file mode 100644 index 000000000..19013517e --- /dev/null +++ b/Content/Shaders/Sky.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2aa068d9f425e50061c8a037136177e51dbd8f2065f37a7d0fc01388257c640 +size 3585 diff --git a/Content/Shaders/TAA.flax b/Content/Shaders/TAA.flax new file mode 100644 index 000000000..8f4291616 --- /dev/null +++ b/Content/Shaders/TAA.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee25f1de47f9d513463871c90af63fb9895118813dd6d4f96b367b2c6685258e +size 5120 diff --git a/Content/Shaders/VolumetricFog.flax b/Content/Shaders/VolumetricFog.flax new file mode 100644 index 000000000..e8a1ae9ca --- /dev/null +++ b/Content/Shaders/VolumetricFog.flax @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be3a9f6acede8a4901e9f3944b9a0ae586adee234eb3be44b343f21f21728b05 +size 16131 diff --git a/Development/Images/Logo.png b/Development/Images/Logo.png new file mode 100644 index 000000000..2e4f38db1 --- /dev/null +++ b/Development/Images/Logo.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0390523b0ed04f41402a51138486e4e4da6907a4dc76c4ca11ad02bed7e4573c +size 9894 diff --git a/Development/Images/flax-pic-1.jpg b/Development/Images/flax-pic-1.jpg new file mode 100644 index 000000000..0474c8933 --- /dev/null +++ b/Development/Images/flax-pic-1.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82d66789db0d804716c2223a31175ab3a3f10c1abdf9617a2b7a2eb2734a439f +size 458698 diff --git a/Development/Images/flax-pic-2.jpg b/Development/Images/flax-pic-2.jpg new file mode 100644 index 000000000..16dc4bd2d --- /dev/null +++ b/Development/Images/flax-pic-2.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c25789d321fc757b116ec7dca902c68a4ceea4def0058b4bfa338d227d64091a +size 348792 diff --git a/Development/Images/flax-pic-3.jpg b/Development/Images/flax-pic-3.jpg new file mode 100644 index 000000000..214751b7b --- /dev/null +++ b/Development/Images/flax-pic-3.jpg @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffc66eb61ee4b052c2d93e5a8e12cdf453679da095b6caa3e09af1955f43860 +size 501045 diff --git a/Development/Scripts/Linux/CallBuildTool.sh b/Development/Scripts/Linux/CallBuildTool.sh new file mode 100644 index 000000000..3b4568918 --- /dev/null +++ b/Development/Scripts/Linux/CallBuildTool.sh @@ -0,0 +1,11 @@ +#!/bin/bash +# Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +set -e + +# Compile the build tool. +xbuild /nologo /verbosity:quiet "Source/Tools/Flax.Build/Flax.Build.csproj" /property:Configuration=Release /property:Platform=AnyCPU /target:Build + +# Run the build tool using the provided arguments. +#mono --debug --debugger-agent=transport=dt_socket,server=y,address=127.0.0.1:55555 Binaries/Tools/Flax.Build.exe "$@" +mono Binaries/Tools/Flax.Build.exe "$@" diff --git a/Development/Scripts/Windows/CallBuildTool.bat b/Development/Scripts/Windows/CallBuildTool.bat new file mode 100644 index 000000000..1ee01db38 --- /dev/null +++ b/Development/Scripts/Windows/CallBuildTool.bat @@ -0,0 +1,94 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +rem Make sure the batch file exists in the root folder. +if not exist "Development\Scripts\Windows\GetMSBuildPath.bat" goto Error_BatchFileInWrongLocation + +rem Get the path to MSBuild executable. +call "Development\Scripts\Windows\GetMSBuildPath.bat" +if errorlevel 1 goto Error_NoVisualStudioEnvironment + +rem If using VS2017, check that NuGet package manager is installed. +if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" goto NoVsWhere + +set MSBUILD_15_EXE= +for /f "delims=" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath') do ( + for %%j in (15.0, Current) do ( + if exist "%%i\MSBuild\%%j\Bin\MSBuild.exe" ( + set MSBUILD_15_EXE="%%i\MSBuild\%%j\Bin\MSBuild.exe" + goto FoundMsBuild15 + ) + ) +) +:FoundMsBuild15 + +set MSBUILD_15_EXE_WITH_NUGET= +for /f "delims=" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere" -latest -products * -requires Microsoft.Component.MSBuild -requires Microsoft.VisualStudio.Component.NuGet -property installationPath') do ( + if exist "%%i\MSBuild\15.0\Bin\MSBuild.exe" ( + set MSBUILD_15_EXE_WITH_NUGET="%%i\MSBuild\15.0\Bin\MSBuild.exe" + goto FoundMsBuild15WithNuget + ) +) +:FoundMsBuild15WithNuget + +if not [%MSBUILD_15_EXE%] == [] ( + set MSBUILD_EXE=%MSBUILD_15_EXE% + goto NoVsWhere +) + +if not [%MSBUILD_EXE%] == [%MSBUILD_15_EXE_WITH_NUGET%] goto Error_RequireNugetPackageManager + +:NoVsWhere + +rem Check to see if the build tool source files have changed. Some can be included conditionally based on NDA access. +md Cache\Intermediate >nul 2>nul +dir /s /b Source\Tools\Flax.Build\*.cs >Cache\Intermediate\Flax.Build.Files.txt +fc /b Cache\Intermediate\Build\Flax.Build.Files.txt Cache\Intermediate\Build\Flax.Build.PrevFiles.txt >nul 2>nul +if not errorlevel 1 goto SkipClean +copy /y Cache\Intermediate\Build\Flax.Build.Files.txt Cache\Intermediate\Build\Flax.Build.PrevFiles.txt >nul +%MSBUILD_EXE% /nologo /verbosity:quiet Source\Tools\Flax.Build\Flax.Build.csproj /property:Configuration=Release /property:Platform=AnyCPU /target:Clean +:SkipClean +%MSBUILD_EXE% /nologo /verbosity:quiet Source\Tools\Flax.Build\Flax.Build.csproj /property:Configuration=Release /property:Platform=AnyCPU /target:Build +if errorlevel 1 goto Error_CompileFailed + +rem Run the build tool using the provided arguments. +Binaries\Tools\Flax.Build.exe %* +if errorlevel 1 goto Error_FlaxBuildFailed + +rem Done. +exit /B 0 + +:Error_BatchFileInWrongLocation +echo. +echo CallBuildTool ERROR: The batch file does not appear to be located in the root directory. This script must be run from within that directory. +echo. +goto Exit + +:Error_NoVisualStudioEnvironment +echo. +echo CallBuildTool ERROR: We couldn't find a valid installation of Visual Studio. This program requires Visual Studio 2015. Please check that you have Visual Studio installed, then verify that the HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\14.0\InstallDir (or HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\14.0\InstallDir on 32-bit machines) registry value is set. Visual Studio configures this value when it is installed, and this program expects it to be set to the '\Common7\IDE\' sub-folder under a valid Visual Studio installation directory. +echo. +goto Exit + +:Error_RequireNugetPackageManager +echo. +echo CallBuildTool ERROR: NuGet Package Manager is requried to be installed to use %MSBUILD_EXE%. Please run the Visual Studio Installer and add it from the individual components list (in the 'Code Tools' category). +echo. +goto Exit + +:Error_CompileFailed +echo. +echo CallBuildTool ERROR: Failed to compile Flax.Build project. +echo. +goto Exit + +:Error_FlaxBuildFailed +echo. +echo CallBuildTool ERROR: Flax.Build tool failed. +echo. +goto Exit + +:Exit +rem Exit with error. +exit /B 1 diff --git a/Development/Scripts/Windows/GetMSBuildPath.bat b/Development/Scripts/Windows/GetMSBuildPath.bat new file mode 100644 index 000000000..8d8651719 --- /dev/null +++ b/Development/Scripts/Windows/GetMSBuildPath.bat @@ -0,0 +1,74 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +set MSBUILD_EXE= + +rem Try to get the MSBuild 15 path using vswhere (see https://github.com/Microsoft/vswhere). +if not exist "%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe" goto no_vswhere +for /f "delims=" %%i in ('"%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere" -latest -products * -requires Microsoft.Component.MSBuild -property installationPath') do ( + if exist "%%i\MSBuild\15.0\Bin\MSBuild.exe" ( + set MSBUILD_EXE="%%i\MSBuild\15.0\Bin\MSBuild.exe" + goto Succeeded + ) +) +:no_vswhere + +rem Check for MSBuild 15. This is installed alongside Visual Studio 2017, so we get the path relative to that. +call :ReadInstallPath Microsoft\VisualStudio\SxS\VS7 15.0 MSBuild\15.0\bin\MSBuild.exe +if not errorlevel 1 goto Succeeded + +rem Try to get the MSBuild 14.0 path directly (see https://msdn.microsoft.com/en-us/library/hh162058(v=vs.120).aspx). +if exist "%ProgramFiles(x86)%\MSBuild\14.0\bin\MSBuild.exe" ( + set MSBUILD_EXE="%ProgramFiles(x86)%\MSBuild\14.0\bin\MSBuild.exe" + goto Succeeded +) + +rem Try to get the MSBuild 14.0 path from the registry. +call :ReadInstallPath Microsoft\MSBuild\ToolsVersions\14.0 MSBuildToolsPath MSBuild.exe +if not errorlevel 1 goto Succeeded + +rem Check for older versions of MSBuild. These are registered as separate versions in the registry. +call :ReadInstallPath Microsoft\MSBuild\ToolsVersions\12.0 MSBuildToolsPath MSBuild.exe +if not errorlevel 1 goto Succeeded +call :ReadInstallPath Microsoft\MSBuild\ToolsVersions\4.0 MSBuildToolsPath MSBuild.exe +if not errorlevel 1 goto Succeeded + +rem Searching failed. +exit /B 1 + +rem Searching done! +:Succeeded +exit /B 0 + +rem Subroutine to query the registry under HKCU/HKLM Win32/Wow64 software registry keys for a certain install directory. +rem Arguments: +rem %1 = Registry path under the 'SOFTWARE' registry key +rem %2 = Value name +rem %3 = Relative path under this directory to look for an installed executable. +:ReadInstallPath +for /f "tokens=2,*" %%A in ('REG.exe query HKCU\SOFTWARE\%1 /v %2 2^>Nul') do ( + if exist "%%B%%3" ( + set MSBUILD_EXE="%%B%3" + exit /B 0 + ) +) +for /f "tokens=2,*" %%A in ('REG.exe query HKLM\SOFTWARE\%1 /v %2 2^>Nul') do ( + if exist "%%B%3" ( + set MSBUILD_EXE="%%B%3" + exit /B 0 + ) +) +for /f "tokens=2,*" %%A in ('REG.exe query HKCU\SOFTWARE\Wow6432Node\%1 /v %2 2^>Nul') do ( + if exist "%%B%%3" ( + set MSBUILD_EXE="%%B%3" + exit /B 0 + ) +) +for /f "tokens=2,*" %%A in ('REG.exe query HKLM\SOFTWARE\Wow6432Node\%1 /v %2 2^>Nul') do ( + if exist "%%B%3" ( + set MSBUILD_EXE="%%B%3" + exit /B 0 + ) +) +exit /B 1 diff --git a/Flax.flaxproj b/Flax.flaxproj new file mode 100644 index 000000000..770de4001 --- /dev/null +++ b/Flax.flaxproj @@ -0,0 +1,12 @@ +{ + "Name": "Flax", + "Version": { + "Major": 1, + "Minor": 0, + "Build": 6213 + }, + "Company": "Flax", + "Copyright": "Copyright (c) 2012-2020 Wojciech Figat. All rights reserved.", + "GameTarget": "FlaxGame", + "EditorTarget": "FlaxEditor" +} \ No newline at end of file diff --git a/Flax.sln.DotSettings b/Flax.sln.DotSettings new file mode 100644 index 000000000..b940e9c03 --- /dev/null +++ b/Flax.sln.DotSettings @@ -0,0 +1,367 @@ + + NEXT_LINE + Double + ON_SINGLE_LINE + ON_SINGLE_LINE + + 1 + 1 + True + LINE_BREAK + False + LINE_BREAK + LINE_BREAK + LINE_BREAK + False + True + ON_SINGLE_LINE + ON_SINGLE_LINE + False + CHOP_IF_LONG + CHOP_ALWAYS + CHOP_ALWAYS + False + True + True + True + NEVER + NEVER + NEVER + False + False + False + True + <CppIncludeCategories> + <CppIncludeCategorySetting Pattern="^&quot;.*" Description="#include &quot;header&quot;" Group="0" Order="2" /> + <CppIncludeCategorySetting Pattern="^&lt;.*" Description="#include &lt;header&gt;" Group="0" Order="3" /> +</CppIncludeCategories> + 0 + 0 + CCD + GPU + ID + <NamingElement Priority="10"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="class field" /><type Name="struct field" /></Descriptor><Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /></NamingElement> + <NamingElement Priority="9"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="member function" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="11"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="PUBLIC"><type Name="class field" /><type Name="struct field" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="1"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="__interface" /><type Name="class" /><type Name="struct" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="13"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="scoped enumerator" /><type Name="unscoped enumerator" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="2"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="enum" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="15"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="True" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="global variable" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="8"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="global function" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="7"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="global variable" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="6"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="local variable" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></NamingElement> + <NamingElement Priority="16"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="namespace" /><type Name="namespace alias" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="14"><Descriptor Static="True" Constexpr="Indeterminate" Const="True" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="class field" /><type Name="local variable" /><type Name="struct field" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="5"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="function parameter" /><type Name="lambda parameter" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /></NamingElement> + <NamingElement Priority="17"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="type alias" /><type Name="typedef" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <NamingElement Priority="12"><Descriptor Static="Indeterminate" Constexpr="Indeterminate" Const="Indeterminate" Volatile="Indeterminate" Accessibility="NOT_APPLICABLE"><type Name="union member" /></Descriptor><Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /></NamingElement> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb"><ExtraRule Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="set_" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb"><ExtraRule Prefix="" Suffix="" Style="AaBb" /><ExtraRule Prefix="_" Suffix="" Style="aaBb_AaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb"><ExtraRule Prefix="" Suffix="" Style="aaBb" /></Policy> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aa_bb" /> + LO + VS + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="I" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="T" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="aaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb" /> + C:\Users\Wojtek\AppData\Local\JetBrains\Transient\ReSharperPlatformVs15\v09_f9eacea9\SolutionCaches + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + LIVE_MONITOR + DO_NOTHING + LIVE_MONITOR + Inherit + True + DO_NOT_SHOW + DO_NOT_SHOW + DO_NOT_SHOW + Tab + False + True + True + True + True + True + True + True + True + True + True + True + OPTIMAL_FILL + 0 + 0 + False + 1 + False + True + True + NEVER + NEVER + False + NEVER + False + ALWAYS + NEVER + ON_SINGLE_LINE + False + True + False + False + False + False + CHOP_ALWAYS + False + CHOP_ALWAYS + CHOP_ALWAYS + DoNotTouch + RemoveIndent + AO + API + CCD + CM + CPU + CSG + FPS + GI + GPU + GUI + HSV + IB + ID + LH + LOD + MSAA + RGB + RGBA + RH + SSR + UI + UV + UWP + VB + XZ + YZ + <Policy Inspect="True" Prefix="" Suffix="" Style="AaBb"><ExtraRule Prefix="_" Suffix="" Style="aaBb" /></Policy> + C:\Users\Wojtek\AppData\Local\JetBrains\Transient\ReSharperPlatformVs15\v08_f9eacea9\SolutionCaches + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + Blue + True + Deprecated + (?<=\W|^)(?<TAG>\[Deprecated)(\W|$)(.*) + Normal + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + True + \ No newline at end of file diff --git a/GenerateProjectFiles.bat b/GenerateProjectFiles.bat new file mode 100644 index 000000000..3c681bcaa --- /dev/null +++ b/GenerateProjectFiles.bat @@ -0,0 +1,39 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +setlocal +pushd +echo Generating Flax Engine project files... + +rem Make sure the batch file exists in the root folder. +if not exist "%~dp0\Source" goto Error_BatchFileInWrongLocation +if not exist "Development\Scripts\Windows\CallBuildTool.bat" goto Error_BatchFileInWrongLocation + +rem Run Flax.Build to generate Visual Studio solution and project files (also pass the arguments) +call "Development\Scripts\Windows\CallBuildTool.bat" -genproject %* +if errorlevel 1 goto Error_BuildToolFailed + +rem Done. +popd +echo Done! +exit /B 0 + +:Error_BatchFileInWrongLocation +echo. +echo The batch file does not appear to be located in the root directory. This script must be run from within that directory. +echo. +pause +goto Exit + +:Error_BuildToolFailed +echo. +echo Flax.Build tool failed. +echo. +pause +goto Exit + +:Exit +rem Restore original directory before exit. +popd +exit /B 1 diff --git a/GenerateProjectFiles.sh b/GenerateProjectFiles.sh new file mode 100644 index 000000000..84c275714 --- /dev/null +++ b/GenerateProjectFiles.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +set -e + +echo Generating Flax Engine project files... + +# Change the path to the script root +cd "`dirname "$0"`" + +# Run Flax.Build to generate project files (also pass the arguments) +bash ./Development/Scripts/Linux/CallBuildTool.sh --genproject "$@" diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 000000000..7f34e404d --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,19 @@ + + +**Issue description:** + + + +**Steps to reproduce:** + + + +**Minimal reproduction project:** + + + +**Flax version:** + + diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..5efaeb6f4 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1 @@ +Use of the Flax, provided source code and binary files is governed by the terms of the Flax Engine End User License Agreement, which can be found at [https://flaxengine.com/licensing](https://flaxengine.com/licensing). diff --git a/PackageAll.bat b/PackageAll.bat new file mode 100644 index 000000000..da9113aa5 --- /dev/null +++ b/PackageAll.bat @@ -0,0 +1,37 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +setlocal +pushd +echo Performing the full package... + +rem Make sure the batch file exists in the root folder. +if not exist "%~dp0\Source" goto Error_BatchFileInWrongLocation +if not exist "Development\Scripts\Windows\CallBuildTool.bat" goto Error_BatchFileInWrongLocation + +rem Run the build tool. +call "Development\Scripts\Windows\CallBuildTool.bat" -deploy -deployEditor -deployPlatforms -verbose -log -logFile="Cache\Intermediate\PackageLog.txt" %* +if errorlevel 1 goto Error_BuildToolFailed + +rem Done. +popd +echo Done! +exit /B 0 + +:Error_BatchFileInWrongLocation +echo. +echo The batch file does not appear to be located in the root directory. This script must be run from within that directory. +echo. +goto Exit + +:Error_BuildToolFailed +echo. +echo Flax.Build tool failed. +echo. +goto Exit + +:Exit +rem Restore original directory before exit. +popd +exit /B 1 diff --git a/PackageEditor.bat b/PackageEditor.bat new file mode 100644 index 000000000..7d7249e52 --- /dev/null +++ b/PackageEditor.bat @@ -0,0 +1,37 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +setlocal +pushd +echo Building and packaging Flax Editor... + +rem Make sure the batch file exists in the root folder. +if not exist "%~dp0\Source" goto Error_BatchFileInWrongLocation +if not exist "Development\Scripts\Windows\CallBuildTool.bat" goto Error_BatchFileInWrongLocation + +rem Run Flax.Build to generate Visual Studio solution and project files (also pass the arguments) +call "Development\Scripts\Windows\CallBuildTool.bat" -deploy -deployEditor -verbose -log -logFile="Cache\Intermediate\PackageLog.txt" %* +if errorlevel 1 goto Error_BuildToolFailed + +rem Done. +popd +echo Done! +exit /B 0 + +:Error_BatchFileInWrongLocation +echo. +echo The batch file does not appear to be located in the root directory. This script must be run from within that directory. +echo. +goto Exit + +:Error_BuildToolFailed +echo. +echo Flax.Build tool failed. +echo. +goto Exit + +:Exit +rem Restore original directory before exit. +popd +exit /B 1 diff --git a/PackagePlatforms.bat b/PackagePlatforms.bat new file mode 100644 index 000000000..80cbd9ec5 --- /dev/null +++ b/PackagePlatforms.bat @@ -0,0 +1,37 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +setlocal +pushd +echo Building and packaging platforms data... + +rem Make sure the batch file exists in the root folder. +if not exist "%~dp0\Source" goto Error_BatchFileInWrongLocation +if not exist "Development\Scripts\Windows\CallBuildTool.bat" goto Error_BatchFileInWrongLocation + +rem Run Flax.Build to generate Visual Studio solution and project files (also pass the arguments) +call "Development\Scripts\Windows\CallBuildTool.bat" -deploy -deployPlatforms -verbose -log -logFile="Cache\Intermediate\PackageLog.txt" %* +if errorlevel 1 goto Error_BuildToolFailed + +rem Done. +popd +echo Done! +exit /B 0 + +:Error_BatchFileInWrongLocation +echo. +echo The batch file does not appear to be located in the root directory. This script must be run from within that directory. +echo. +goto Exit + +:Error_BuildToolFailed +echo. +echo Flax.Build tool failed. +echo. +goto Exit + +:Exit +rem Restore original directory before exit. +popd +exit /B 1 diff --git a/PackagePlatforms.sh b/PackagePlatforms.sh new file mode 100644 index 000000000..83cf9f4a5 --- /dev/null +++ b/PackagePlatforms.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +set -e + +echo Building and packaging platforms data... + +# Change the path to the script root +cd "`dirname "$0"`" + +# Run Flax.Build to generate project files (also pass the arguments) +bash ./Development/Scripts/Linux/CallBuildTool.sh --deploy --deployPlatforms --verbose --log --logFile="Cache/Intermediate/PackageLog.txt" "$@" diff --git a/README.md b/README.md new file mode 100644 index 000000000..9ef2a6cbb --- /dev/null +++ b/README.md @@ -0,0 +1,90 @@ + +# Flax Engine +[![VS Extension](https://img.shields.io/badge/vs-extension-green.svg)](https://marketplace.visualstudio.com/items?itemName=Flax.FlaxVS) +[![Discord](https://discordapp.com/api/guilds/437989205315158016/widget.png)](https://flaxengine.com/discord) + +Flax Engine is a high quality modern 3D game engine written in C++ and C#. +From stunning graphics to powerful scripts - Flax can give everything for your games. Designed for fast workflow with many ready to use features waiting for you right now. To learn more see the website ([www.flaxengine.com](https://flaxengine.com)). + +This repository contains full source code of the Flax (excluding NDA-protected platforms support). Anyone is welcome to contribute or use the modified source in Flax-based games. + +# Development + +* [Homepage](https://flaxengine.com) +* [Dev Blog](https://flaxengine.com/blog) +* [Documentation](https://docs.flaxengine.com) +* [Roadmap](https://trello.com/b/NQjLXRCP/flax-roadmap) + +# Flax plugin for Visual Studio + +Flax Visual Studio extension provides better programming workflow, C# scripts debugging functionality and allows to attach to running engine instance to debug C# source. + +This extension is available to download [here](https://marketplace.visualstudio.com/items?itemName=Flax.FlaxVS). + +# Screenshots + +![rendering](Development/Images/flax-pic-1.jpg "Rendering") +![performance](Development/Images/flax-pic-3.jpg "High Performance") +![pbr-rendering](Development/Images/flax-pic-2.jpg "PBR Rendering") + +# Getting started + +Follow the instructions below to compile and run the engine from source. + +## Windows + +* Install Visual Studio 2015 or newer +* Install Windows 8.1 SDK or newer +* Install Microsoft Visual C++ 2015.3 v140 toolset for desktop (x86, x64) +* Clone repo (with LFS) +* Run **GenerateProjectFiles.bat** +* Open `Flax.sln` and set solution configuration to **Editor.Development** and solution platform to **Win64** +* Compile Flax project (hit F7 key) +* Run Flax (hit F5 key) + +## Linux + +* Install Visual Studio Code +* Install Mono ([https://www.mono-project.com/download/stable](https://www.mono-project.com/download/stable)) +* Install Git with LFS +* Install requried packages: `sudo apt-get install nuget autoconf libtool libogg-dev automake build-essential gettext cmake python curl libtool-bin libx11-dev libpulse-dev libasound2-dev libjack-dev portaudio19-dev` +* Install compiler `sudo apt-get install clang-7 lldb-7 lld-7` +* Clone repo (with LFS) +* Run `sudo bash GenerateProjectFiles.sh` +* Open workspace with Visual Code +* Build and run + +## Workspace directory + +- **Binaries/** - executable files + - **Editor/** - Flax Editor binaries + - **Tools/** - tools binaries +- **Cache/** - local data cache folder used by engine and tools + - **Intermediate/** - intermediate files and cache for engine build + - ***ProjectName*/** - per-project build cache data + - **Deps/** - Flax.Build dependencies building cache + - **Projects/** - project files location +- **Content/** - assets and binary files used by engine and editor +- **Development/** - engine development files + - **Scripts/** - utility scripts +- **packages/** - Nuget packages cache location +- **Source/** - source code lcoation + - **Editor/** - Flax Editor source code + - **Engine/** - Flax Engine source code + - **Platforms/** - per-platform sources and dependency files + - **DotNet/** - C# dependencies + - **Editor/** - Flax Editor binaries + - ***PlatformName*/** - per-platform files + - **Binaries/** - per-platform binaries + - **Game/** - Flax Game binaries + - **Mono/** - Mono runtime files and data + - **ThirdParty/** - prebuild 3rd Party binaries + - **Shaders/** - shaders source code + - **ThirdParty/** - 3rd Party source code + - **Tools/** - development tools source code + +# Licensing and Contributions + +Using Flax source code is strictly governed by the Flax Engine End User License Agreement. If you don't agree to those terms, as amended from time to time, you are not permitted to access or use Flax Engine. + +We welcome any contributions to Flax Engine development through pull requests on GitHub. Most of our active development is in the master branch, so we prefer to take pull requests there (particularly for new features). We try to make sure that all new code adheres to the Flax coding standards. All contributions are governed by the terms of the EULA. diff --git a/RegisterEngineLocation.bat b/RegisterEngineLocation.bat new file mode 100644 index 000000000..56ccc496c --- /dev/null +++ b/RegisterEngineLocation.bat @@ -0,0 +1,36 @@ +@echo off + +rem Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +setlocal +pushd +echo Registering Flax Engine project files... + +rem Check the current versions config +if not exist "%appdata%\Flax\Versions.txt" ( + echo The installed engine versions file is missing. Please ensure that Flax Launcher was installed. + pause + goto Exit +) +set EngineLocation=%cd% +find /c "%EngineLocation%" "%appdata%\Flax\Versions.txt" +if %errorlevel% equ 1 goto notfound +echo Already registered. +goto Done + +rem Register the location (append to the end) +:notfound +echo Location '%EngineLocation%' is not registered. Adding it to the lsit of engine versions. +echo %EngineLocation%>>"%appdata%\Flax\Versions.txt" +goto Done + +rem Done. +:Done +popd +echo Done! +exit /B 0 + +:Exit +rem Restore original directory before exit. +popd +exit /B 1 diff --git a/Source/.editorconfig b/Source/.editorconfig new file mode 100644 index 000000000..06e4f1454 --- /dev/null +++ b/Source/.editorconfig @@ -0,0 +1,34 @@ +root = true + +[*] +end_of_line = crlf +insert_final_newline = true +charset = utf-8 + +[*.ttinclude] +insert_final_newline = false + +# C++ files +[*.{cpp,c,h,hpp}] +indent_style = space +indent_size = 4 + +# C# files +[*.cs] +indent_style = space +indent_size = 4 + +# XAML files +[*.xaml] +indent_style = space +indent_size = 2 + +# MSBuild +[*.{csproj,proj,projitems,shproj,fsproj,target,props}] +indent_style = space +indent_size = 2 + +# Python files +[*.py] +indent_style = space +indent_size = 4 diff --git a/Source/Editor/Analytics/EditorAnalytics.cpp b/Source/Editor/Analytics/EditorAnalytics.cpp new file mode 100644 index 000000000..83c0b1f85 --- /dev/null +++ b/Source/Editor/Analytics/EditorAnalytics.cpp @@ -0,0 +1,270 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "EditorAnalytics.h" +#include "EditorAnalyticsController.h" +#include "Engine/Threading/Threading.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Core/Log.h" +#include "Engine/Core/Math/Vector2.h" +#include "Engine/Core/Types/DateTime.h" +#include "Editor/Editor.h" +#include "Engine/Engine/EngineService.h" +#include "Engine/Graphics/GPUDevice.h" +#include "Engine/Utilities/StringConverter.h" +#include "FlaxEngine.Gen.h" +#include + +#define FLAX_EDITOR_GOOGLE_ID "UA-88357703-3" + +// Helper doc: https://developers.google.com/analytics/devguides/collection/protocol/v1/parameters + +namespace EditorAnalyticsImpl +{ + UATracker Tracker = nullptr; + + StringAnsi ClientId; + StringAnsi ProjectName; + StringAnsi ScreenResolution; + StringAnsi UserLanguage; + StringAnsi GPU; + DateTime SessionStartTime; + + CriticalSection Locker; + bool IsSessionActive = false; + EditorAnalyticsController Controller; + Array TmpBuffer; +} + +using namespace EditorAnalyticsImpl; + +class EditorAnalyticsService : public EngineService +{ +public: + + EditorAnalyticsService() + : EngineService(TEXT("Editor Analytics")) + { + } + + bool Init() override; + void Dispose() override; +}; + +EditorAnalyticsService EditorAnalyticsServiceInstance; + +bool EditorAnalytics::IsSessionActive() +{ + return EditorAnalyticsImpl::IsSessionActive; +} + +void EditorAnalytics::StartSession() +{ + ScopeLock lock(Locker); + + if (EditorAnalyticsImpl::IsSessionActive) + return; + + // Prepare client metadata + if (ClientId.IsEmpty()) + { + ClientId = Platform::GetUniqueDeviceId().ToString(Guid::FormatType::N).ToStringAnsi(); + } + if (ScreenResolution.IsEmpty()) + { + const Vector2 desktopSize = Platform::GetDesktopSize(); + ScreenResolution = StringAnsi(StringUtils::ToString((int32)desktopSize.X)) + "x" + StringAnsi(StringUtils::ToString((int32)desktopSize.Y)); + } + if (UserLanguage.IsEmpty()) + { + UserLanguage = Platform::GetUserLocaleName().ToStringAnsi(); + } + if (GPU.IsEmpty()) + { + const auto gpu = GPUDevice::Instance; + if (gpu && gpu->GetState() == GPUDevice::DeviceState::Ready) + GPU = StringAsANSI<>(gpu->GetAdapter()->GetDescription().GetText()).Get(); + } + if (ProjectName.IsEmpty()) + { + ProjectName = Editor::Project->Name.ToStringAnsi(); + } + SessionStartTime = DateTime::Now(); + + // Initialize the analytics tracker + Tracker = createTracker(FLAX_EDITOR_GOOGLE_ID, ClientId.Get(), nullptr); + Tracker->user_agent = "Flax Editor"; + + // Store these options permanently (for the lifetime of the tracker) + setTrackerOption(Tracker, UA_OPTION_QUEUE, 1); + UASettings GlobalSettings = + { + { + { UA_DOCUMENT_PATH, 0, "Flax Editor" }, + { UA_DOCUMENT_TITLE, 0, "Flax Editor" }, +#if PLATFORM_WINDOWS + { UA_USER_AGENT, 0, "Windows " FLAXENGINE_VERSION_TEXT }, +#else +#error "Unknown platform" +#endif + { UA_ANONYMIZE_IP, 0, "0" }, + { UA_APP_ID, 0, "Flax Editor " FLAXENGINE_VERSION_TEXT }, + { UA_APP_INSTALLER_ID, 0, "Flax Editor" }, + { UA_APP_NAME, 0, "Flax Editor" }, + { UA_APP_VERSION, 0, FLAXENGINE_VERSION_TEXT }, + { UA_SCREEN_NAME, 0, "Flax Editor " FLAXENGINE_VERSION_TEXT }, + { UA_SCREEN_RESOLUTION, 0, ScreenResolution.Get() }, + { UA_USER_LANGUAGE, 0, UserLanguage.Get() }, + } + }; + setParameters(Tracker, &GlobalSettings); + + // Send the initial session event + UAOptions sessionViewOptions = + { + { + { UA_EVENT_CATEGORY, 0, "Session" }, + { UA_EVENT_ACTION, 0, "Start Editor" }, + { UA_EVENT_LABEL, 0, "Start Editor" }, + { UA_SESSION_CONTROL, 0, "start" }, + { UA_DOCUMENT_TITLE, 0, ProjectName.Get() }, + } + }; + sendTracking(Tracker, UA_SCREENVIEW, &sessionViewOptions); + + EditorAnalyticsImpl::IsSessionActive = true; + + Controller.Init(); + + // Report GPU model + if (GPU.HasChars()) + { + SendEvent("Telemetry", "GPU.Model", GPU.Get()); + } +} + +void EditorAnalytics::EndSession() +{ + ScopeLock lock(Locker); + + if (!EditorAnalyticsImpl::IsSessionActive) + return; + + Controller.Cleanup(); + + StringAnsi sessionLength = StringAnsi::Format("{0}", (int32)(DateTime::Now() - SessionStartTime).GetTotalSeconds()); + + // Send the end session event + UAOptions sessionEventOptions = + { + { + { UA_EVENT_CATEGORY, 0, "Session" }, + { UA_EVENT_ACTION, 0, "Session Length" }, + { UA_EVENT_LABEL, 0, "Session Length" }, + { UA_EVENT_VALUE, 0, sessionLength.Get() }, + { UA_CUSTOM_DIMENSION, 1, "Session Length" }, + { UA_CUSTOM_METRIC, 1, sessionLength.Get() }, + } + }; + sendTracking(Tracker, UA_EVENT, &sessionEventOptions); + + // Send the end session event + UAOptions sessionViewOptions = + { + { + { UA_EVENT_CATEGORY, 0, "Session" }, + { UA_EVENT_ACTION, 0, "End Editor" }, + { UA_EVENT_LABEL, 0, "End Editor" }, + { UA_EVENT_VALUE, 0, sessionLength.Get() }, + { UA_SESSION_CONTROL, 0, "end" }, + } + }; + sendTracking(Tracker, UA_SCREENVIEW, &sessionViewOptions); + + // Cleanup + removeTracker(Tracker); + Tracker = nullptr; + + EditorAnalyticsImpl::IsSessionActive = false; +} + +void EditorAnalytics::SendEvent(const char* category, const char* name, const char* label) +{ + ScopeLock lock(Locker); + + if (!EditorAnalyticsImpl::IsSessionActive) + return; + + UAOptions opts = + { + { + { UA_EVENT_CATEGORY, 0, (char*)category }, + { UA_EVENT_ACTION, 0, (char*)name }, + { UA_EVENT_LABEL, 0, (char*)label }, + } + }; + + sendTracking(Tracker, UA_EVENT, &opts); +} + +void EditorAnalytics::SendEvent(const char* category, const char* name, const StringView& label) +{ + SendEvent(category, name, label.Get()); +} + +void EditorAnalytics::SendEvent(const char* category, const char* name, const Char* label) +{ + ScopeLock lock(Locker); + + if (!EditorAnalyticsImpl::IsSessionActive) + return; + + ASSERT(category && name && label); + + const int32 labelLength = StringUtils::Length(label); + TmpBuffer.Clear(); + TmpBuffer.Resize(labelLength + 1); + StringUtils::ConvertUTF162ANSI(label, TmpBuffer.Get(), labelLength); + TmpBuffer[labelLength] = 0; + + UAOptions opts = + { + { + { UA_EVENT_CATEGORY, 0, (char*)category }, + { UA_EVENT_ACTION, 0, (char*)name }, + { UA_EVENT_LABEL, 0, (char*)TmpBuffer.Get() }, + } + }; + + sendTracking(Tracker, UA_EVENT, &opts); +} + +bool EditorAnalyticsService::Init() +{ +#if COMPILE_WITH_DEV_ENV + // Disable analytics from the dev (internal) builds + LOG(Info, "Editor analytics service is disabled in dev builds."); + return false; +#endif + + // If file '/noTracking' exists then do not use analytics (per engine instance) + // If file '%appdata/Flax/noTracking' exists then do not use analytics (globally) + String appDataPath; + FileSystem::GetSpecialFolderPath(SpecialFolder::AppData, appDataPath); + if (FileSystem::FileExists(Globals::StartupFolder / TEXT("noTracking")) || + FileSystem::FileExists(appDataPath / TEXT("Flax/noTracking"))) + { + LOG(Info, "Editor analytics service is disabled."); + return false; + } + + LOG(Info, "Editor analytics service is enabled. Curl version: {0}", TEXT(LIBCURL_VERSION)); + + EditorAnalytics::StartSession(); + + return false; +} + +void EditorAnalyticsService::Dispose() +{ + EditorAnalytics::EndSession(); +} diff --git a/Source/Editor/Analytics/EditorAnalytics.h b/Source/Editor/Analytics/EditorAnalytics.h new file mode 100644 index 000000000..bc0be7be7 --- /dev/null +++ b/Source/Editor/Analytics/EditorAnalytics.h @@ -0,0 +1,53 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Core/Types/BaseTypes.h" + +/// +/// Editor user analytics reporting and telemetry service. +/// +class EditorAnalytics +{ +public: + + /// + /// Determines whether analytics session is active. + /// + /// true if there is active analytics session running; otherwise, false. + static bool IsSessionActive(); + + /// + /// Starts the session. + /// + static void StartSession(); + + /// + /// Ends the session. + /// + static void EndSession(); + + /// + /// Sends the custom event. + /// + /// The event category name. + /// The event name. + /// The event label. + static void SendEvent(const char* category, const char* name, const char* label = nullptr); + + /// + /// Sends the custom event. + /// + /// The event category name. + /// The event name. + /// The event label. + static void SendEvent(const char* category, const char* name, const StringView& label); + + /// + /// Sends the custom event. + /// + /// The event category name. + /// The event name. + /// The event label. + static void SendEvent(const char* category, const char* name, const Char* label); +}; diff --git a/Source/Editor/Analytics/EditorAnalyticsController.cpp b/Source/Editor/Analytics/EditorAnalyticsController.cpp new file mode 100644 index 000000000..928dd37b2 --- /dev/null +++ b/Source/Editor/Analytics/EditorAnalyticsController.cpp @@ -0,0 +1,68 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "EditorAnalyticsController.h" +#include "Editor/Cooker/GameCooker.h" +#include "EditorAnalytics.h" +#include "Engine/ShadowsOfMordor/Builder.h" + +void RegisterGameCookingStart(GameCooker::EventType type) +{ + auto platform = ToString(GameCooker::GetCurrentData().Platform); + if (type == GameCooker::EventType::BuildStarted) + { + EditorAnalytics::SendEvent("Actions", "GameCooker.Start", platform); + } + else if (type == GameCooker::EventType::BuildFailed) + { + EditorAnalytics::SendEvent("Actions", "GameCooker.Failed", platform); + } + else if (type == GameCooker::EventType::BuildDone) + { + EditorAnalytics::SendEvent("Actions", "GameCooker.End", platform); + } +} + +void RegisterLightmapsBuildingStart() +{ + EditorAnalytics::SendEvent("Actions", "ShadowsOfMordor.Build", "ShadowsOfMordor.Build"); +} + +void RegisterError(LogType type, const StringView& msg) +{ + if (type == LogType::Error && false) + { + String value = msg.ToString(); + const int32 MaxLength = 300; + if (msg.Length() > MaxLength) + value = value.Substring(0, MaxLength); + value.Replace('\n', ' '); + value.Replace('\r', ' '); + + EditorAnalytics::SendEvent("Errors", "Log.Error", value); + } + else if (type == LogType::Fatal) + { + String value = msg.ToString(); + const int32 MaxLength = 300; + if (msg.Length() > MaxLength) + value = value.Substring(0, MaxLength); + value.Replace('\n', ' '); + value.Replace('\r', ' '); + + EditorAnalytics::SendEvent("Errors", "Log.Fatal", value); + } +} + +void EditorAnalyticsController::Init() +{ + GameCooker::OnEvent.Bind(); + ShadowsOfMordor::Builder::Instance()->OnBuildStarted.Bind(); + Log::Logger::OnError.Bind(); +} + +void EditorAnalyticsController::Cleanup() +{ + GameCooker::OnEvent.Unbind(); + ShadowsOfMordor::Builder::Instance()->OnBuildStarted.Unbind(); + Log::Logger::OnError.Unbind(); +} diff --git a/Source/Editor/Analytics/EditorAnalyticsController.h b/Source/Editor/Analytics/EditorAnalyticsController.h new file mode 100644 index 000000000..32516e2ae --- /dev/null +++ b/Source/Editor/Analytics/EditorAnalyticsController.h @@ -0,0 +1,21 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +/// +/// The controller object for the tracking events for the editor analytics. +/// +class EditorAnalyticsController +{ +public: + + /// + /// Starts the service (registers to event handlers). + /// + void Init(); + + /// + /// Ends the service (unregisters to event handlers). + /// + void Cleanup(); +}; diff --git a/Source/Editor/Content/AssetItemConverter.cs b/Source/Editor/Content/AssetItemConverter.cs new file mode 100644 index 000000000..7ae5ed26d --- /dev/null +++ b/Source/Editor/Content/AssetItemConverter.cs @@ -0,0 +1,43 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using Newtonsoft.Json; + +namespace FlaxEditor.Content +{ + /// + /// Serialize references to the FlaxEngine.Object as Guid (format N). + /// + /// + internal class AssetItemConverter : JsonConverter + { + /// + public override void WriteJson(JsonWriter writer, object value, Newtonsoft.Json.JsonSerializer serializer) + { + Guid id = Guid.Empty; + if (value is AssetItem obj) + id = obj.ID; + + writer.WriteValue(FlaxEngine.Json.JsonSerializer.GetStringID(id)); + } + + /// + public override object ReadJson(JsonReader reader, Type objectType, object existingValue, Newtonsoft.Json.JsonSerializer serializer) + { + if (reader.TokenType == JsonToken.String) + { + Guid id; + FlaxEngine.Json.JsonSerializer.ParseID((string)reader.Value, out id); + return Editor.Instance.ContentDatabase.Find(id); + } + + return null; + } + + /// + public override bool CanConvert(Type objectType) + { + return typeof(AssetItem).IsAssignableFrom(objectType); + } + } +} diff --git a/Source/Editor/Content/Create/CreateFileEntry.cs b/Source/Editor/Content/Create/CreateFileEntry.cs new file mode 100644 index 000000000..c0f8cc561 --- /dev/null +++ b/Source/Editor/Content/Create/CreateFileEntry.cs @@ -0,0 +1,49 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +namespace FlaxEditor.Content.Create +{ + /// + /// File create entry. + /// + public abstract class CreateFileEntry : IFileEntryAction + { + /// + public string SourceUrl { get; } + + /// + public string ResultUrl { get; } + + /// + /// Gets a value indicating whether this entry has settings to modify. + /// + public virtual bool HasSettings => Settings != null; + + /// + /// Gets or sets the settings object to modify. + /// + public virtual object Settings => null; + + /// + /// Initializes a new instance of the class. + /// + /// The output file type. + /// The result file url. + protected CreateFileEntry(string outputType, string resultUrl) + { + SourceUrl = outputType; + ResultUrl = resultUrl; + } + + /// + /// Creates the result file. + /// + /// True if failed, otherwise false. + public abstract bool Create(); + + /// + public bool Execute() + { + return Create(); + } + } +} diff --git a/Source/Editor/Content/Create/CreateFilesDialog.cs b/Source/Editor/Content/Create/CreateFilesDialog.cs new file mode 100644 index 000000000..028d14379 --- /dev/null +++ b/Source/Editor/Content/Create/CreateFilesDialog.cs @@ -0,0 +1,124 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using FlaxEditor.CustomEditors; +using FlaxEditor.GUI.Dialogs; +using FlaxEditor.GUI.Tree; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content.Create +{ + /// + /// Dialog used to edit new file settings. + /// + /// + public class CreateFilesDialog : Dialog + { + private CreateFileEntry _entry; + private CustomEditorPresenter _settingsEditor; + + /// + /// Initializes a new instance of the class. + /// + /// The entry to edit it's settings. + public CreateFilesDialog(CreateFileEntry entry) + : base("Create file settings") + { + _entry = entry ?? throw new ArgumentNullException(); + + const float TotalWidth = 520; + const float EditorHeight = 250; + Width = TotalWidth; + + // Header and help description + var headerLabel = new Label + { + Text = "Asset Options", + AnchorPreset = AnchorPresets.HorizontalStretchTop, + Offsets = new Margin(0, 0, 0, 40), + Parent = this, + Font = new FontReference(Style.Current.FontTitle) + }; + var infoLabel = new Label + { + Text = "Specify options for creating new asset", + HorizontalAlignment = TextAlignment.Near, + Margin = new Margin(7), + AnchorPreset = AnchorPresets.HorizontalStretchTop, + Offsets = new Margin(10, -20, 45, 70), + Parent = this + }; + + // Buttons + const float ButtonsWidth = 60; + const float ButtonsHeight = 24; + const float ButtonsMargin = 8; + var createButton = new Button + { + Text = "Create", + AnchorPreset = AnchorPresets.BottomRight, + Offsets = new Margin(-ButtonsWidth - ButtonsMargin, ButtonsWidth, -ButtonsHeight - ButtonsMargin, ButtonsHeight), + Parent = this + }; + createButton.Clicked += OnCreate; + var cancelButton = new Button + { + Text = "Cancel", + AnchorPreset = AnchorPresets.BottomRight, + Offsets = new Margin(-ButtonsWidth - ButtonsMargin - ButtonsWidth - ButtonsMargin, ButtonsWidth, -ButtonsHeight - ButtonsMargin, ButtonsHeight), + Parent = this + }; + cancelButton.Clicked += OnCancel; + + // Panel for settings editor + var panel = new Panel(ScrollBars.Vertical) + { + AnchorPreset = AnchorPresets.HorizontalStretchTop, + Offsets = new Margin(2, 2, infoLabel.Bottom + 2, EditorHeight), + Parent = this + }; + + // Settings editor + _settingsEditor = new CustomEditorPresenter(null); + _settingsEditor.Panel.Parent = panel; + + _dialogSize = new Vector2(TotalWidth, panel.Bottom); + + _settingsEditor.Select(_entry.Settings); + } + + private void OnCreate() + { + Editor.Instance.ContentImporting.LetThemBeCreatedxD(_entry); + Close(DialogResult.OK); + } + + private void OnCancel() + { + Close(DialogResult.Cancel); + } + + private void OnSelectedChanged(List before, List after) + { + var selection = new List(after.Count); + for (int i = 0; i < after.Count; i++) + { + if (after[i].Tag is CreateFileEntry fileEntry && fileEntry.HasSettings) + selection.Add(fileEntry.Settings); + } + + _settingsEditor.Select(selection); + } + + /// + protected override void SetupWindowSettings(ref CreateWindowSettings settings) + { + base.SetupWindowSettings(ref settings); + + settings.MinimumSize = new Vector2(300, 400); + settings.HasSizingFrame = true; + } + } +} diff --git a/Source/Editor/Content/Create/ParticleEmitterCreateEntry.cs b/Source/Editor/Content/Create/ParticleEmitterCreateEntry.cs new file mode 100644 index 000000000..a99229b6b --- /dev/null +++ b/Source/Editor/Content/Create/ParticleEmitterCreateEntry.cs @@ -0,0 +1,106 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using FlaxEngine; + +namespace FlaxEditor.Content.Create +{ + /// + /// Particle emitter asset creating handler. Allows to specify asset template. + /// + /// + public class ParticleEmitterCreateEntry : CreateFileEntry + { + /// + /// Types of the emitter templates that can be created. + /// + public enum Templates + { + /// + /// The empty asset. + /// + Empty, + + /// + /// The simple particle system that uses constant emission rate. + /// + ConstantBurst, + + /// + /// The simple periodic burst particle system. + /// + PeriodicBurst, + + /// + /// The layers and tags settings. + /// + Smoke, + + /// + /// The GPU sparks with depth-buffer collisions. + /// + Sparks, + + /// + /// The ribbon spiral particles. + /// + RibbonSpiral, + } + + /// + /// The create options. + /// + public class Options + { + /// + /// The template. + /// + [Tooltip("Particle emitter template.")] + public Templates Template = Templates.ConstantBurst; + } + + private readonly Options _options = new Options(); + + /// + public override object Settings => _options; + + /// + /// Initializes a new instance of the class. + /// + /// The result file url. + public ParticleEmitterCreateEntry(string resultUrl) + : base("Settings", resultUrl) + { + } + + /// + public override bool Create() + { + string templateName; + switch (_options.Template) + { + case Templates.Empty: + return Editor.CreateAsset(Editor.NewAssetType.ParticleEmitter, ResultUrl); + case Templates.ConstantBurst: + templateName = "Constant Burst"; + break; + case Templates.PeriodicBurst: + templateName = "Periodic Burst"; + break; + case Templates.Smoke: + templateName = "Smoke"; + break; + case Templates.Sparks: + templateName = "Sparks"; + break; + case Templates.RibbonSpiral: + templateName = "Ribbon Spiral"; + break; + default: throw new ArgumentOutOfRangeException(); + } + var templatePath = Path.Combine(Globals.EngineContentFolder, "Editor/Particles", templateName + ".flax"); + return Editor.Instance.ContentEditing.CloneAssetFile(templatePath, ResultUrl, Guid.NewGuid()); + } + } +} diff --git a/Source/Editor/Content/Create/SettingsCreateEntry.cs b/Source/Editor/Content/Create/SettingsCreateEntry.cs new file mode 100644 index 000000000..009a13b13 --- /dev/null +++ b/Source/Editor/Content/Create/SettingsCreateEntry.cs @@ -0,0 +1,156 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Settings; +using FlaxEditor.Scripting; +using FlaxEngine; + +namespace FlaxEditor.Content.Create +{ + /// + /// Engine settings asset creating handler. Allows to specify type of the settings to create (e.g. , , etc.). + /// + /// + public class SettingsCreateEntry : CreateFileEntry + { + /// + /// Types of the settings assets that can be created. + /// + public enum SettingsTypes + { + /// + /// The game settings. + /// + GameSettings, + + /// + /// The audio settings. + /// + AudioSettings, + + /// + /// The time settings. + /// + TimeSettings, + + /// + /// The layers and tags settings. + /// + LayersAndTagsSettings, + + /// + /// The physics settings. + /// + PhysicsSettings, + + /// + /// The graphics settings. + /// + GraphicsSettings, + + /// + /// The navigation settings. + /// + NavigationSettings, + + /// + /// The build settings. + /// + BuildSettings, + + /// + /// The input settings. + /// + InputSettings, + + /// + /// The Windows settings. + /// + WindowsPlatformSettings, + + /// + /// The UWP settings. + /// + UWPPlatformSettings, + + /// + /// The Linux settings. + /// + LinuxPlatformSettings, + + /// + /// The PS4 settings + /// + PS4PlatformSettings, + + /// + /// The Xbox Scarlett settings + /// + XboxScarlettPlatformSettings, + + /// + /// The Android settings + /// + AndroidPlatformSettings, + } + + private static readonly Type[] _types = + { + typeof(GameSettings), + typeof(AudioSettings), + typeof(TimeSettings), + typeof(LayersAndTagsSettings), + typeof(PhysicsSettings), + typeof(GraphicsSettings), + typeof(NavigationSettings), + typeof(BuildSettings), + typeof(InputSettings), + typeof(WindowsPlatformSettings), + typeof(UWPPlatformSettings), + typeof(LinuxPlatformSettings), + TypeUtils.GetManagedType(GameSettings.PS4PlatformSettingsTypename), + TypeUtils.GetManagedType(GameSettings.XboxScarlettPlatformSettingsTypename), + typeof(AndroidPlatformSettings), + }; + + /// + /// The create options. + /// + public class Options + { + /// + /// The type. + /// + [Tooltip("Type of the settings asset to create")] + public SettingsTypes Type = SettingsTypes.GameSettings; + } + + private readonly Options _options = new Options(); + + /// + public override object Settings => _options; + + /// + /// Initializes a new instance of the class. + /// + /// The result file url. + public SettingsCreateEntry(string resultUrl) + : base("Settings", resultUrl) + { + } + + /// + public override bool Create() + { + // Create settings asset object and serialize it to pure json asset + var type = _types[(int)_options.Type]; + if (type == null) + { + MessageBox.Show("Cannot create " + _options.Type + " settings. Platform not supported."); + return true; + } + var data = Activator.CreateInstance(type); + return Editor.SaveJsonAsset(ResultUrl, data); + } + } +} diff --git a/Source/Editor/Content/Create/VisualScriptCreateEntry.cs b/Source/Editor/Content/Create/VisualScriptCreateEntry.cs new file mode 100644 index 000000000..a1348ab51 --- /dev/null +++ b/Source/Editor/Content/Create/VisualScriptCreateEntry.cs @@ -0,0 +1,52 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content.Create +{ + /// + /// Visual Script asset creating handler. Allows to specify base class to inherit from. + /// + /// + public class VisualScriptCreateEntry : CreateFileEntry + { + /// + /// The create options. + /// + public class Options + { + /// + /// The template. + /// + [TypeReference(typeof(FlaxEngine.Object), nameof(IsValid))] + [Tooltip("The base class of the new Visual Script to inherit from.")] + public Type BaseClass = typeof(Script); + + private static bool IsValid(Type type) + { + return type.IsPublic && !type.IsSealed && !type.IsGenericType; + } + } + + private readonly Options _options = new Options(); + + /// + public override object Settings => _options; + + /// + /// Initializes a new instance of the class. + /// + /// The result file url. + public VisualScriptCreateEntry(string resultUrl) + : base("Settings", resultUrl) + { + } + + /// + public override bool Create() + { + return Editor.CreateVisualScript(ResultUrl, _options.BaseClass?.FullName); + } + } +} diff --git a/Source/Editor/Content/GUI/ContentNavigationButton.cs b/Source/Editor/Content/GUI/ContentNavigationButton.cs new file mode 100644 index 000000000..633d4957b --- /dev/null +++ b/Source/Editor/Content/GUI/ContentNavigationButton.cs @@ -0,0 +1,125 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEditor.GUI; +using FlaxEditor.GUI.Drag; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content.GUI +{ + /// + /// A navigation button for . + /// + /// + public class ContentNavigationButton : NavigationButton + { + private DragItems _dragOverItems; + + /// + /// Gets the target node. + /// + public ContentTreeNode TargetNode { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The target node. + /// The x position. + /// The y position. + /// The height. + public ContentNavigationButton(ContentTreeNode targetNode, float x, float y, float height) + : base(x, y, height) + { + TargetNode = targetNode; + Text = targetNode.NavButtonLabel + "/"; + } + + /// + protected override void OnClick() + { + // Navigate + Editor.Instance.Windows.ContentWin.Navigate(TargetNode); + + base.OnClick(); + } + + private DragDropEffect GetDragEffect(DragData data) + { + if (data is DragDataFiles) + { + if (TargetNode.CanHaveAssets) + return DragDropEffect.Copy; + } + else + { + if (_dragOverItems.HasValidDrag) + return DragDropEffect.Move; + } + + return DragDropEffect.None; + } + + private bool ValidateDragItem(ContentItem item) + { + // Reject itself and any parent + return item != TargetNode.Folder && !item.Find(TargetNode.Folder) && !TargetNode.IsRoot; + } + + /// + public override DragDropEffect OnDragEnter(ref Vector2 location, DragData data) + { + base.OnDragEnter(ref location, data); + + if (_dragOverItems == null) + _dragOverItems = new DragItems(ValidateDragItem); + + _dragOverItems.OnDragEnter(data); + var result = GetDragEffect(data); + _validDragOver = result != DragDropEffect.None; + return result; + } + + /// + public override DragDropEffect OnDragMove(ref Vector2 location, DragData data) + { + base.OnDragMove(ref location, data); + + return GetDragEffect(data); + } + + /// + public override void OnDragLeave() + { + base.OnDragLeave(); + + _dragOverItems.OnDragLeave(); + _validDragOver = false; + } + + /// + public override DragDropEffect OnDragDrop(ref Vector2 location, DragData data) + { + var result = DragDropEffect.None; + base.OnDragDrop(ref location, data); + + // Check if drop element or files + if (data is DragDataFiles files) + { + // Import files + Editor.Instance.ContentImporting.Import(files.Files, TargetNode.Folder); + result = DragDropEffect.Copy; + } + else if (_dragOverItems.HasValidDrag) + { + // Move items + Editor.Instance.ContentDatabase.Move(_dragOverItems.Objects, TargetNode.Folder); + result = DragDropEffect.Move; + } + + _dragOverItems.OnDragDrop(); + _validDragOver = false; + + return result; + } + } +} diff --git a/Source/Editor/Content/GUI/ContentView.DragDrop.cs b/Source/Editor/Content/GUI/ContentView.DragDrop.cs new file mode 100644 index 000000000..2f15daaaf --- /dev/null +++ b/Source/Editor/Content/GUI/ContentView.DragDrop.cs @@ -0,0 +1,117 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEditor.GUI.Drag; +using FlaxEditor.SceneGraph; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content.GUI +{ + public partial class ContentView + { + private bool _validDragOver; + private DragActors _dragActors; + + /// + public override DragDropEffect OnDragEnter(ref Vector2 location, DragData data) + { + var result = base.OnDragEnter(ref location, data); + if (result != DragDropEffect.None) + return result; + + // Check if drop file(s) + if (data is DragDataFiles) + { + _validDragOver = true; + return DragDropEffect.Copy; + } + + // Check if drop actor(s) + if (_dragActors == null) + _dragActors = new DragActors(ValidateDragActors); + if (_dragActors.OnDragEnter(data)) + { + _validDragOver = true; + return DragDropEffect.Move; + } + + return DragDropEffect.None; + } + + private bool ValidateDragActors(ActorNode actor) + { + return actor.CanCreatePrefab && Editor.Instance.Windows.ContentWin.CurrentViewFolder.CanHaveAssets; + } + + private void ImportActors(DragActors actors, ContentFolder location) + { + // Use only the first actor + Editor.Instance.Prefabs.CreatePrefab(actors.Objects[0].Actor); + } + + /// + public override DragDropEffect OnDragMove(ref Vector2 location, DragData data) + { + _validDragOver = false; + var result = base.OnDragMove(ref location, data); + if (result != DragDropEffect.None) + return result; + + if (data is DragDataFiles) + { + _validDragOver = true; + result = DragDropEffect.Copy; + } + else if (_dragActors.HasValidDrag) + { + _validDragOver = true; + result = DragDropEffect.Move; + } + + return result; + } + + /// + public override DragDropEffect OnDragDrop(ref Vector2 location, DragData data) + { + var result = base.OnDragDrop(ref location, data); + if (result != DragDropEffect.None) + return result; + + // Check if drop file(s) + if (data is DragDataFiles files) + { + // Import files + var currentFolder = Editor.Instance.Windows.ContentWin.CurrentViewFolder; + if (currentFolder != null) + Editor.Instance.ContentImporting.Import(files.Files, currentFolder); + result = DragDropEffect.Copy; + } + // Check if drop actor(s) + else if (_dragActors.HasValidDrag) + { + // Import actors + var currentFolder = Editor.Instance.Windows.ContentWin.CurrentViewFolder; + if (currentFolder != null) + ImportActors(_dragActors, currentFolder); + + _dragActors.OnDragDrop(); + result = DragDropEffect.Move; + } + + // Clear cache + _validDragOver = false; + + return result; + } + + /// + public override void OnDragLeave() + { + _validDragOver = false; + _dragActors?.OnDragLeave(); + + base.OnDragLeave(); + } + } +} diff --git a/Source/Editor/Content/GUI/ContentView.cs b/Source/Editor/Content/GUI/ContentView.cs new file mode 100644 index 000000000..0730ac4ca --- /dev/null +++ b/Source/Editor/Content/GUI/ContentView.cs @@ -0,0 +1,714 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using FlaxEditor.Options; +using FlaxEditor.Windows; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content.GUI +{ + /// + /// The content items view modes. + /// + [HideInEditor] + public enum ContentViewType + { + /// + /// The uniform tiles. + /// + Tiles, + + /// + /// The vertical list. + /// + List, + } + + /// + /// Main control for used to present collection of . + /// + /// + /// + [HideInEditor] + public partial class ContentView : ContainerControl, IContentItemOwner + { + private readonly List _items = new List(256); + private readonly List _selection = new List(16); + + private float _viewScale = 1.0f; + private ContentViewType _viewType = ContentViewType.Tiles; + + #region External Events + + /// + /// Called when user wants to open the item. + /// + public event Action OnOpen; + + /// + /// Called when user wants to rename the item. + /// + public event Action OnRename; + + /// + /// Called when user wants to delete the item. + /// + public event Action> OnDelete; + + /// + /// Called when user wants to paste the files/folders. + /// + public event Action OnPaste; + + /// + /// Called when user wants to duplicate the item(s). + /// + public event Action> OnDuplicate; + + /// + /// Called when user wants to navigate backward. + /// + public event Action OnNavigateBack; + + /// + /// Occurs when view scale gets changed. + /// + public event Action ViewScaleChanged; + + /// + /// Occurs when view type gets changed. + /// + public event Action ViewTypeChanged; + + #endregion + + /// + /// Gets the items. + /// + public List Items => _items; + + /// + /// Gets the items count. + /// + public int ItemsCount => _items.Count; + + /// + /// Gets the selected items. + /// + public List Selection => _selection; + + /// + /// Gets the selected count. + /// + public int SelectedCount => _selection.Count; + + /// + /// Gets a value indicating whether any item is selected. + /// + public bool HasSelection => _selection.Count > 0; + + /// + /// Gets or sets the view scale. + /// + public float ViewScale + { + get => _viewScale; + set + { + value = Mathf.Clamp(value, 0.3f, 3.0f); + if (!Mathf.NearEqual(value, _viewScale)) + { + _viewScale = value; + ViewScaleChanged?.Invoke(); + PerformLayout(); + } + } + } + + /// + /// Gets or sets the type of the view. + /// + public ContentViewType ViewType + { + get => _viewType; + set + { + if (_viewType != value) + { + _viewType = value; + ViewTypeChanged?.Invoke(); + PerformLayout(); + } + } + } + + /// + /// Flag is used to indicate if user is searching for items. Used to show a proper message to the user. + /// + public bool IsSearching; + + /// + /// Flag used to indicate whenever show full file names including extensions. + /// + public bool ShowFileExtensions; + + /// + /// The input actions collection to processed during user input. + /// + public readonly InputActionsContainer InputActions; + + /// + /// Initializes a new instance of the class. + /// + public ContentView() + { + // Setup input actions + InputActions = new InputActionsContainer(new[] + { + new InputActionsContainer.Binding(options => options.Delete, () => + { + if (HasSelection) + OnDelete?.Invoke(_selection); + }), + new InputActionsContainer.Binding(options => options.SelectAll, SelectAll), + new InputActionsContainer.Binding(options => options.Rename, () => + { + if (HasSelection && _selection[0].CanRename) + { + if (_selection.Count > 1) + Select(_selection[0]); + OnRename?.Invoke(_selection[0]); + } + }), + new InputActionsContainer.Binding(options => options.Copy, Copy), + new InputActionsContainer.Binding(options => options.Paste, Paste), + new InputActionsContainer.Binding(options => options.Duplicate, Duplicate), + }); + } + + /// + /// Clears the items in the view. + /// + public void ClearItems() + { + // Lock layout + var wasLayoutLocked = IsLayoutLocked; + IsLayoutLocked = true; + + // Deselect items first + ClearSelection(); + + // Remove references and unlink items + for (int i = 0; i < _items.Count; i++) + { + _items[i].Parent = null; + _items[i].RemoveReference(this); + } + _items.Clear(); + + // Unload and perform UI layout + IsLayoutLocked = wasLayoutLocked; + PerformLayout(); + } + + /// + /// Shows the items collection in the view. + /// + /// The items to show. + /// If set to true items will be added to the current selection. Otherwise selection will be cleared before. + public void ShowItems(List items, bool additive = false) + { + if (items == null) + throw new ArgumentNullException(); + + // Check if show nothing or not change view + if (items.Count == 0) + { + // Deselect items if need to + if (!additive) + ClearItems(); + return; + } + + // Lock layout + var wasLayoutLocked = IsLayoutLocked; + IsLayoutLocked = true; + + // Deselect items if need to + if (!additive) + ClearItems(); + + // Add references and link items + _items.AddRange(items); + for (int i = 0; i < items.Count; i++) + { + items[i].Parent = this; + items[i].AddReference(this); + } + + // Sort items + _children.Sort(); + + // Unload and perform UI layout + IsLayoutLocked = wasLayoutLocked; + PerformLayout(); + } + + /// + /// Determines whether the specified item is selected. + /// + /// The item. + /// true if the specified item is selected; otherwise, false. + public bool IsSelected(ContentItem item) + { + return _selection.Contains(item); + } + + /// + /// Clears the selected items collection. + /// + public void ClearSelection() + { + if (_selection.Count == 0) + return; + + _selection.Clear(); + } + + /// + /// Selects the specified items. + /// + /// The items. + /// If set to true items will be added to the current selection. Otherwise selection will be cleared before. + public void Select(List items, bool additive = false) + { + if (items == null) + throw new ArgumentNullException(); + + // Check if nothing to select + if (items.Count == 0) + { + // Deselect items if need to + if (!additive) + ClearSelection(); + return; + } + + // Lock layout + var wasLayoutLocked = IsLayoutLocked; + IsLayoutLocked = true; + + // Select items + if (additive) + { + for (int i = 0; i < items.Count; i++) + { + if (!_selection.Contains(items[i])) + _selection.Add(items[i]); + } + } + else + { + _selection.Clear(); + _selection.AddRange(items); + } + + // Unload and perform UI layout + IsLayoutLocked = wasLayoutLocked; + PerformLayout(); + } + + /// + /// Selects the specified item. + /// + /// The item. + /// If set to true item will be added to the current selection. Otherwise selection will be cleared before. + public void Select(ContentItem item, bool additive = false) + { + if (item == null) + throw new ArgumentNullException(); + + // Lock layout + var wasLayoutLocked = IsLayoutLocked; + IsLayoutLocked = true; + + // Select item + if (additive) + { + if (!_selection.Contains(item)) + _selection.Add(item); + } + else + { + _selection.Clear(); + _selection.Add(item); + } + + // Unload and perform UI layout + IsLayoutLocked = wasLayoutLocked; + PerformLayout(); + } + + /// + /// Selects all the items. + /// + public void SelectAll() + { + // Lock layout + var wasLayoutLocked = IsLayoutLocked; + IsLayoutLocked = true; + + // Select items + _selection.Clear(); + _selection.AddRange(_items); + + // Unload and perform UI layout + IsLayoutLocked = wasLayoutLocked; + PerformLayout(); + } + + /// + /// Deselects the specified item. + /// + /// The item. + public void Deselect(ContentItem item) + { + if (item == null) + throw new ArgumentNullException(); + + // Lock layout + var wasLayoutLocked = IsLayoutLocked; + IsLayoutLocked = true; + + // Deselect item + if (_selection.Contains(item)) + _selection.Remove(item); + + // Unload and perform UI layout + IsLayoutLocked = wasLayoutLocked; + PerformLayout(); + } + + /// + /// Duplicates the selected items. + /// + public void Duplicate() + { + OnDuplicate?.Invoke(_selection); + } + + /// + /// Copies the selected items (to the system clipboard). + /// + public void Copy() + { + if (_selection.Count == 0) + return; + + var files = _selection.ConvertAll(x => x.Path).ToArray(); + Clipboard.Files = files; + } + + /// + /// Returns true if user can paste data to the view (copied any files before). + /// + /// True if can paste files. + public bool CanPaste() + { + var files = Clipboard.Files; + return files != null && files.Length > 0; + } + + /// + /// Pastes the copied items (from the system clipboard). + /// + public void Paste() + { + var files = Clipboard.Files; + if (files == null || files.Length == 0) + return; + + OnPaste?.Invoke(files); + } + + /// + /// Gives focus and selects the first item in the view. + /// + public void SelectFirstItem() + { + if (_items.Count > 0) + { + _items[0].Focus(); + Select(_items[0]); + } + else + { + Focus(); + } + } + + /// + /// Refreshes thumbnails of all items in the . + /// + public void RefreshThumbnails() + { + for (int i = 0; i < _items.Count; i++) + _items[i].RefreshThumbnail(); + } + + #region Internal events + + /// + /// Called when user clicks on an item. + /// + /// The item. + public void OnItemClick(ContentItem item) + { + bool isSelected = _selection.Contains(item); + + // Add/remove from selection + if (Root.GetKey(KeyboardKeys.Control)) + { + if (isSelected) + Deselect(item); + else + Select(item, true); + } + // Range select + else if (Root.GetKey(KeyboardKeys.Shift)) + { + int min = _selection.Min(x => x.IndexInParent); + int max = _selection.Max(x => x.IndexInParent); + min = Mathf.Min(min, item.IndexInParent); + max = Mathf.Max(max, item.IndexInParent); + var selection = new List(_selection); + for (int i = min; i <= max; i++) + { + if (_children[i] is ContentItem cc && !selection.Contains(cc)) + { + selection.Add(cc); + } + } + Select(selection); + } + // Select + else + { + Select(item); + } + } + + /// + /// Called when user wants to rename item. + /// + /// The item. + public void OnItemDoubleClickName(ContentItem item) + { + OnRename?.Invoke(item); + } + + /// + /// Called when user wants to open item. + /// + /// The item. + public void OnItemDoubleClick(ContentItem item) + { + OnOpen?.Invoke(item); + } + + #endregion + + #region IContentItemOwner + + /// + void IContentItemOwner.OnItemDeleted(ContentItem item) + { + _selection.Remove(item); + _items.Remove(item); + } + + /// + void IContentItemOwner.OnItemRenamed(ContentItem item) + { + } + + /// + void IContentItemOwner.OnItemReimported(ContentItem item) + { + } + + /// + void IContentItemOwner.OnItemDispose(ContentItem item) + { + _selection.Remove(item); + _items.Remove(item); + } + + #endregion + + /// + public override void Draw() + { + base.Draw(); + + var style = Style.Current; + + // Check if drag is over + if (IsDragOver && _validDragOver) + { + Render2D.FillRectangle(new Rectangle(Vector2.Zero, Size), style.BackgroundSelected * 0.4f); + } + + // Check if it's an empty thing + if (_items.Count == 0) + { + Render2D.DrawText(style.FontSmall, IsSearching ? "No results" : "Empty", new Rectangle(Vector2.Zero, Size), style.ForegroundDisabled, TextAlignment.Center, TextAlignment.Center); + } + } + + /// + public override bool OnMouseWheel(Vector2 location, float delta) + { + // Check if pressing control key + if (Root.GetKey(KeyboardKeys.Control)) + { + // Zoom + ViewScale += delta * 0.05f; + + // Handled + return true; + } + + return base.OnMouseWheel(location, delta); + } + + /// + public override bool OnKeyDown(KeyboardKeys key) + { + // Navigate backward + if (key == KeyboardKeys.Backspace) + { + OnNavigateBack?.Invoke(); + return true; + } + + if (InputActions.Process(Editor.Instance, this, key)) + return true; + + // Check if sth is selected + if (HasSelection) + { + // Open + if (key == KeyboardKeys.Return && _selection.Count != 0) + { + foreach (var e in _selection) + OnOpen?.Invoke(e); + return true; + } + + // Movement with arrows + { + var root = _selection[0]; + Vector2 size = root.Size; + Vector2 offset = Vector2.Minimum; + ContentItem item = null; + if (key == KeyboardKeys.ArrowUp) + { + offset = new Vector2(0, -size.Y); + } + else if (key == KeyboardKeys.ArrowDown) + { + offset = new Vector2(0, size.Y); + } + else if (key == KeyboardKeys.ArrowRight) + { + offset = new Vector2(size.X, 0); + } + else if (key == KeyboardKeys.ArrowLeft) + { + offset = new Vector2(-size.X, 0); + } + if (offset != Vector2.Minimum) + { + item = GetChildAt(root.Location + size / 2 + offset) as ContentItem; + } + if (item != null) + { + OnItemClick(item); + return true; + } + } + } + + return base.OnKeyDown(key); + } + + /// + protected override void PerformLayoutBeforeChildren() + { + float width = GetClientArea().Width; + float x = 0, y = 0; + float viewScale = _viewScale * 0.97f; + + switch (ViewType) + { + case ContentViewType.Tiles: + { + float defaultItemsWidth = ContentItem.DefaultWidth * viewScale; + int itemsToFit = Mathf.FloorToInt(width / defaultItemsWidth); + float itemsWidth = width / Mathf.Max(itemsToFit, 1); + float itemsHeight = itemsWidth / defaultItemsWidth * (ContentItem.DefaultHeight * viewScale); + for (int i = 0; i < _children.Count; i++) + { + var c = _children[i]; + c.Bounds = new Rectangle(x, y, itemsWidth, itemsHeight); + + x += itemsWidth; + if (x + itemsWidth > width) + { + x = 0; + y += itemsHeight + 1; + } + } + if (x > 0) + y += itemsHeight; + + break; + } + case ContentViewType.List: + { + float itemsHeight = 50.0f * viewScale; + for (int i = 0; i < _children.Count; i++) + { + var c = _children[i]; + c.Bounds = new Rectangle(x, y, width, itemsHeight); + y += itemsHeight + 1; + } + y += 40.0f; + + break; + } + default: throw new ArgumentOutOfRangeException(); + } + + // Set maximum size and fit the parent container + if (HasParent) + y = Mathf.Max(y, Parent.Height); + Height = y; + + base.PerformLayoutBeforeChildren(); + } + + /// + public override void OnDestroy() + { + // Ensure to unlink all items + ClearItems(); + + base.OnDestroy(); + } + } +} diff --git a/Source/Editor/Content/IFileEntryAction.cs b/Source/Editor/Content/IFileEntryAction.cs new file mode 100644 index 000000000..d3edc5ca3 --- /dev/null +++ b/Source/Editor/Content/IFileEntryAction.cs @@ -0,0 +1,26 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +namespace FlaxEditor.Content +{ + /// + /// File entry action (import or create). + /// + public interface IFileEntryAction + { + /// + /// The source file path (may be empty or null). + /// + string SourceUrl { get; } + + /// + /// The result file path. + /// + string ResultUrl { get; } + + /// + /// Executes this action. + /// + /// True if, failed, otherwise false. + bool Execute(); + } +} diff --git a/Source/Editor/Content/Import/AssetImportEntry.cs b/Source/Editor/Content/Import/AssetImportEntry.cs new file mode 100644 index 000000000..2ca19351d --- /dev/null +++ b/Source/Editor/Content/Import/AssetImportEntry.cs @@ -0,0 +1,23 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +namespace FlaxEditor.Content.Import +{ + /// + /// Asset import entry. + /// + public class AssetImportEntry : ImportFileEntry + { + /// + public AssetImportEntry(ref Request request) + : base(ref request) + { + } + + /// + public override bool Import() + { + // Use engine backend + return Editor.Import(SourceUrl, ResultUrl); + } + } +} diff --git a/Source/Editor/Content/Import/AudioImportSettings.cs b/Source/Editor/Content/Import/AudioImportSettings.cs new file mode 100644 index 000000000..822b54a64 --- /dev/null +++ b/Source/Editor/Content/Import/AudioImportSettings.cs @@ -0,0 +1,190 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using FlaxEngine; + +namespace FlaxEditor.Content.Import +{ + /// + /// Proxy object to present audio import settings in . + /// + public class AudioImportSettings + { + /// + /// A custom set of bit depth audio import sizes. + /// + public enum CustomBitDepth + { + /// + /// The 8. + /// + _8 = 8, + + /// + /// The 16. + /// + _16 = 16, + + /// + /// The 24. + /// + _24 = 24, + + /// + /// The 32. + /// + _32 = 32, + } + + /// + /// Converts the bit depth to enum. + /// + /// The bit depth. + /// The converted enum. + public static CustomBitDepth ConvertBitDepth(int f) + { + FieldInfo[] fields = typeof(CustomBitDepth).GetFields(); + for (int i = 0; i < fields.Length; i++) + { + var field = fields[i]; + if (field.Name.Equals("value__")) + continue; + + if (f == (int)field.GetRawConstantValue()) + return (CustomBitDepth)f; + } + + return CustomBitDepth._16; + } + + /// + /// The audio data format to import the audio clip as. + /// + [EditorOrder(10), DefaultValue(AudioFormat.Vorbis), Tooltip("The audio data format to import the audio clip as.")] + public AudioFormat Format { get; set; } = AudioFormat.Vorbis; + + /// + /// The audio data compression quality. Used only if target format is using compression. Value 0 means the smallest size, value 1 means the best quality. + /// + [EditorOrder(15), DefaultValue(0.4f), Limit(0, 1, 0.01f), Tooltip("The audio data compression quality. Used only if target format is using compression. Value 0 means the smallest size, value 1 means the best quality.")] + public float CompressionQuality { get; set; } = 0.4f; + + /// + /// Disables dynamic audio streaming. The whole clip will be loaded into the memory. Useful for small clips (eg. gunfire sounds). + /// + [EditorOrder(20), DefaultValue(false), Tooltip("Disables dynamic audio streaming. The whole clip will be loaded into the memory. Useful for small clips (eg. gunfire sounds).")] + public bool DisableStreaming { get; set; } = false; + + /// + /// Checks should the clip be played as spatial (3D) audio or as normal audio. 3D audio is stored in Mono format. + /// + [EditorOrder(30), DefaultValue(false), EditorDisplay(null, "Is 3D"), Tooltip("Checks should the clip be played as spatial (3D) audio or as normal audio. 3D audio is stored in Mono format.")] + public bool Is3D { get; set; } = false; + + /// + /// The size of a single sample in bits. The clip will be converted to this bit depth on import. + /// + [EditorOrder(40), DefaultValue(CustomBitDepth._16), Tooltip("The size of a single sample in bits. The clip will be converted to this bit depth on import.")] + public CustomBitDepth BitDepth { get; set; } = CustomBitDepth._16; + + [StructLayout(LayoutKind.Sequential)] + internal struct InternalOptions + { + public AudioFormat Format; + public byte DisableStreaming; + public byte Is3D; + public int BitDepth; + public float Quality; + } + + internal void ToInternal(out InternalOptions options) + { + options = new InternalOptions + { + Format = Format, + DisableStreaming = (byte)(DisableStreaming ? 1 : 0), + Is3D = (byte)(Is3D ? 1 : 0), + Quality = CompressionQuality, + BitDepth = (int)BitDepth, + }; + } + + internal void FromInternal(ref InternalOptions options) + { + Format = options.Format; + DisableStreaming = options.DisableStreaming != 0; + Is3D = options.Is3D != 0; + CompressionQuality = options.Quality; + BitDepth = ConvertBitDepth(options.BitDepth); + } + + /// + /// Tries the restore the asset import options from the target resource file. + /// + /// The options. + /// The asset path. + /// True settings has been restored, otherwise false. + public static bool TryRestore(ref AudioImportSettings options, string assetPath) + { + if (AudioImportEntry.Internal_GetAudioImportOptions(assetPath, out var internalOptions)) + { + // Restore settings + options.FromInternal(ref internalOptions); + return true; + } + + return false; + } + } + + /// + /// Audio asset import entry. + /// + /// + public class AudioImportEntry : AssetImportEntry + { + private AudioImportSettings _settings = new AudioImportSettings(); + + /// + /// Initializes a new instance of the class. + /// + /// The import request. + public AudioImportEntry(ref Request request) + : base(ref request) + { + // Try to restore target asset Audio import options (useful for fast reimport) + AudioImportSettings.TryRestore(ref _settings, ResultUrl); + } + + /// + public override object Settings => _settings; + + /// + public override bool TryOverrideSettings(object settings) + { + if (settings is AudioImportSettings o) + { + _settings = o; + return true; + } + + return false; + } + + /// + public override bool Import() + { + return Editor.Import(SourceUrl, ResultUrl, _settings); + } + + #region Internal Calls + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern bool Internal_GetAudioImportOptions(string path, out AudioImportSettings.InternalOptions result); + + #endregion + } +} diff --git a/Source/Editor/Content/Import/FolderImportEntry.cs b/Source/Editor/Content/Import/FolderImportEntry.cs new file mode 100644 index 000000000..aaf13abc2 --- /dev/null +++ b/Source/Editor/Content/Import/FolderImportEntry.cs @@ -0,0 +1,52 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.IO; + +namespace FlaxEditor.Content.Import +{ + /// + /// Folder import entry. + /// + public class FolderImportEntry : ImportFileEntry + { + /// + /// Flag used to skip showing import settings dialog to used. Can be used for importing assets from code by plugins. + /// + public bool SkipSettingsDialog; + + /// + public FolderImportEntry(ref Request request) + : base(ref request) + { + SkipSettingsDialog = request.SkipSettingsDialog; + } + + /// + public override bool Import() + { + if (!Directory.Exists(ResultUrl)) + { + Directory.CreateDirectory(ResultUrl); + var parentPath = Path.GetDirectoryName(ResultUrl); + var parent = Editor.Instance.ContentDatabase.Find(parentPath); + if (parent == null) + { + Editor.LogWarning("Failed to find the parent folder for the imported directory."); + return true; + } + Editor.Instance.ContentDatabase.RefreshFolder(parent, true); + } + var target = (ContentFolder)Editor.Instance.ContentDatabase.Find(ResultUrl); + + // Import all sub elements + var files = Directory.GetFiles(SourceUrl); + Editor.Instance.ContentImporting.Import(files, target, SkipSettingsDialog); + + // Import all sub dirs + var folders = Directory.GetDirectories(SourceUrl); + Editor.Instance.ContentImporting.Import(folders, target, SkipSettingsDialog); + + return false; + } + } +} diff --git a/Source/Editor/Content/Import/ImportFileEntry.cs b/Source/Editor/Content/Import/ImportFileEntry.cs new file mode 100644 index 000000000..843e295e3 --- /dev/null +++ b/Source/Editor/Content/Import/ImportFileEntry.cs @@ -0,0 +1,195 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using System.IO; + +namespace FlaxEditor.Content.Import +{ + /// + /// Creates new for the given source file. + /// + /// The import request. + /// The file entry. + public delegate ImportFileEntry ImportFileEntryHandler(ref Request request); + + /// + /// File import entry. + /// + public class ImportFileEntry : IFileEntryAction + { + /// + public string SourceUrl { get; } + + /// + public string ResultUrl { get; private set; } + + /// + /// Gets a value indicating whether this entry has settings to modify. + /// + public virtual bool HasSettings => Settings != null; + + /// + /// Gets or sets the settings object to modify. + /// + public virtual object Settings => null; + + /// + /// Tries the override import settings. + /// + /// The settings. + /// True if settings override was successful and there is no need to edit them in dedicated dialog, otherwise false. + public virtual bool TryOverrideSettings(object settings) + { + return false; + } + + /// + /// Initializes a new instance of the class. + /// + /// The import request. + public ImportFileEntry(ref Request request) + { + SourceUrl = request.InputPath; + ResultUrl = request.OutputPath; + } + + /// + /// Modifies the result URL filename (keeps destination folder and extension). + /// + /// The new filename. + public void ModifyResultFilename(string filename) + { + var directory = Path.GetDirectoryName(ResultUrl) ?? string.Empty; + var extension = Path.GetExtension(ResultUrl); + ResultUrl = Path.Combine(directory, filename + extension); + } + + /// + /// Performs file importing. + /// + /// True if failed, otherwise false. + public virtual bool Import() + { + // Skip if missing + if (!Directory.Exists(SourceUrl) && !File.Exists(SourceUrl)) + return true; + + // Setup output + string folder = Path.GetDirectoryName(ResultUrl); + if (folder != null && !Directory.Exists(folder)) + Directory.CreateDirectory(folder); + + if (Directory.Exists(SourceUrl)) + { + // Copy directory + Utilities.Utils.DirectoryCopy(SourceUrl, ResultUrl, true); + return false; + } + + // Copy file + File.Copy(SourceUrl, ResultUrl, true); + return false; + } + + /// + /// The file types registered for importing. Key is a file extension (without a leading dot). + /// Allows to plug custom importing options gather for different input file types. + /// + public static readonly Dictionary FileTypes = new Dictionary(32); + + /// + /// Creates the entry. + /// + /// The import request. + /// Created file entry. + public static ImportFileEntry CreateEntry(ref Request request) + { + // Get extension (without a dot) + var extension = Path.GetExtension(request.InputPath); + if (string.IsNullOrEmpty(extension)) + return new FolderImportEntry(ref request); + if (extension[0] == '.') + extension = extension.Remove(0, 1); + extension = extension.ToLower(); + + // Check if use overriden type + ImportFileEntryHandler createDelegate; + if (FileTypes.TryGetValue(extension, out createDelegate)) + return createDelegate(ref request); + + // Use default type + return request.IsBinaryAsset ? new AssetImportEntry(ref request) : new ImportFileEntry(ref request); + } + + internal static void RegisterDefaultTypes() + { + // Textures + FileTypes["tga"] = ImportTexture; + FileTypes["png"] = ImportTexture; + FileTypes["bmp"] = ImportTexture; + FileTypes["gif"] = ImportTexture; + FileTypes["tiff"] = ImportTexture; + FileTypes["tif"] = ImportTexture; + FileTypes["jpeg"] = ImportTexture; + FileTypes["jpg"] = ImportTexture; + FileTypes["dds"] = ImportTexture; + FileTypes["hdr"] = ImportTexture; + FileTypes["raw"] = ImportTexture; + + // Models + FileTypes["obj"] = ImportModel; + FileTypes["fbx"] = ImportModel; + FileTypes["x"] = ImportModel; + FileTypes["dae"] = ImportModel; + FileTypes["gltf"] = ImportModel; + FileTypes["glb"] = ImportModel; + // + FileTypes["blend"] = ImportModel; + FileTypes["bvh"] = ImportModel; + FileTypes["ase"] = ImportModel; + FileTypes["ply"] = ImportModel; + FileTypes["dxf"] = ImportModel; + FileTypes["ifc"] = ImportModel; + FileTypes["nff"] = ImportModel; + FileTypes["smd"] = ImportModel; + FileTypes["vta"] = ImportModel; + FileTypes["mdl"] = ImportModel; + FileTypes["md2"] = ImportModel; + FileTypes["md3"] = ImportModel; + FileTypes["md5mesh"] = ImportModel; + FileTypes["q3o"] = ImportModel; + FileTypes["q3s"] = ImportModel; + FileTypes["ac"] = ImportModel; + FileTypes["stl"] = ImportModel; + FileTypes["lwo"] = ImportModel; + FileTypes["lws"] = ImportModel; + FileTypes["lxo"] = ImportModel; + + // Audio + FileTypes["wav"] = ImportAudio; + FileTypes["mp3"] = ImportAudio; + FileTypes["ogg"] = ImportAudio; + } + + private static ImportFileEntry ImportModel(ref Request request) + { + return new ModelImportEntry(ref request); + } + + private static ImportFileEntry ImportAudio(ref Request request) + { + return new AudioImportEntry(ref request); + } + + private static ImportFileEntry ImportTexture(ref Request request) + { + return new TextureImportEntry(ref request); + } + + /// + public bool Execute() + { + return Import(); + } + } +} diff --git a/Source/Editor/Content/Import/ImportFilesDialog.cs b/Source/Editor/Content/Import/ImportFilesDialog.cs new file mode 100644 index 000000000..009825ae8 --- /dev/null +++ b/Source/Editor/Content/Import/ImportFilesDialog.cs @@ -0,0 +1,272 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using FlaxEditor.CustomEditors; +using FlaxEditor.GUI; +using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Dialogs; +using FlaxEditor.GUI.Tree; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content.Import +{ + /// + /// Dialog used to edit import files settings. + /// + /// + public class ImportFilesDialog : Dialog + { + private TreeNode _rootNode; + private CustomEditorPresenter _settingsEditor; + + /// + /// Gets the entries count. + /// + public int EntriesCount + { + get + { + var result = 0; + for (int i = 0; i < _rootNode.ChildrenCount; i++) + { + if (_rootNode.Children[i].Tag is ImportFileEntry fileEntry) + result++; + } + return result; + } + } + + /// + /// Initializes a new instance of the class. + /// + /// The entries to edit settings. + public ImportFilesDialog(List entries) + : base("Import files settings") + { + if (entries == null || entries.Count < 1) + throw new ArgumentNullException(); + + const float TotalWidth = 920; + const float EditorHeight = 450; + Width = TotalWidth; + + // Header and help description + var headerLabel = new Label + { + Text = "Import settings", + AnchorPreset = AnchorPresets.HorizontalStretchTop, + Offsets = new Margin(0, 0, 0, 40), + Parent = this, + Font = new FontReference(Style.Current.FontTitle) + }; + var infoLabel = new Label + { + Text = "Specify options for importing files. Every file can have different settings. Select entries on the left panel to modify them.\nPro Tip: hold CTRL key and select entries to edit multiple at once or use CTRL+A to select them all.", + HorizontalAlignment = TextAlignment.Near, + Margin = new Margin(7), + AnchorPreset = AnchorPresets.HorizontalStretchTop, + Offsets = new Margin(10, -20, 45, 70), + Parent = this + }; + + // Buttons + const float ButtonsWidth = 60; + const float ButtonsHeight = 24; + const float ButtonsMargin = 8; + var importButton = new Button + { + Text = "Import", + AnchorPreset = AnchorPresets.BottomRight, + Offsets = new Margin(-ButtonsWidth - ButtonsMargin, ButtonsWidth, -ButtonsHeight - ButtonsMargin, ButtonsHeight), + Parent = this + }; + importButton.Clicked += OnImport; + var cancelButton = new Button + { + Text = "Cancel", + AnchorPreset = AnchorPresets.BottomRight, + Offsets = new Margin(-ButtonsWidth - ButtonsMargin - ButtonsWidth - ButtonsMargin, ButtonsWidth, -ButtonsHeight - ButtonsMargin, ButtonsHeight), + Parent = this + }; + cancelButton.Clicked += OnCancel; + + // Split panel for entries list and settings editor + var splitPanel = new SplitPanel(Orientation.Horizontal, ScrollBars.Both, ScrollBars.Vertical) + { + AnchorPreset = AnchorPresets.StretchAll, + Offsets = new Margin(2, 2, infoLabel.Bottom + 2, ButtonsHeight + ButtonsMargin + ButtonsMargin), + Parent = this + }; + + // Settings editor + _settingsEditor = new CustomEditorPresenter(null); + _settingsEditor.Panel.Parent = splitPanel.Panel2; + + // Setup tree + var tree = new Tree(true) + { + Parent = splitPanel.Panel1 + }; + tree.RightClick += OnTreeRightClick; + _rootNode = new TreeNode(false); + for (int i = 0; i < entries.Count; i++) + { + var entry = entries[i]; + + // TODO: add icons for textures/models/etc from FileEntry to tree node?? + var node = new ItemNode(entry) + { + Parent = _rootNode + }; + } + _rootNode.Expand(); + _rootNode.ChildrenIndent = 0; + _rootNode.Parent = tree; + tree.Margin = new Margin(0.0f, 0.0f, -14.0f, 2.0f); // Hide root node + tree.SelectedChanged += OnSelectedChanged; + + // Select the first item + tree.Select(_rootNode.Children[0] as TreeNode); + + _dialogSize = new Vector2(TotalWidth, EditorHeight + splitPanel.Offsets.Height); + } + + private void OnTreeRightClick(TreeNode node, Vector2 location) + { + var menu = new ContextMenu(); + menu.AddButton("Rename", OnRenameClicked); + menu.AddButton("Don't import", OnDontImportClicked); + menu.AddButton("Show in Explorer", OnShowInExplorerClicked); + menu.Tag = node; + menu.Show(node, location); + } + + private void OnRenameClicked(ContextMenuButton button) + { + var node = (ItemNode)button.ParentContextMenu.Tag; + node.StartRenaming(); + } + + private void OnDontImportClicked(ContextMenuButton button) + { + if (EntriesCount == 1) + { + OnCancel(); + return; + } + + var node = (ItemNode)button.ParentContextMenu.Tag; + if (_settingsEditor.Selection.Count == 1 && _settingsEditor.Selection[0] == node.Entry.Settings) + _settingsEditor.Deselect(); + node.Dispose(); + } + + private void OnShowInExplorerClicked(ContextMenuButton button) + { + var node = (ItemNode)button.ParentContextMenu.Tag; + FileSystem.ShowFileExplorer(Path.GetDirectoryName(node.Entry.SourceUrl)); + } + + private class ItemNode : TreeNode + { + public ImportFileEntry Entry => (ImportFileEntry)Tag; + + public ItemNode(ImportFileEntry entry) + : base(false) + { + Text = Path.GetFileName(entry.SourceUrl); + Tag = entry; + LinkTooltip(entry.SourceUrl); + } + + /// + protected override bool OnMouseDoubleClickHeader(ref Vector2 location, MouseButton button) + { + StartRenaming(); + return true; + } + + /// + /// Shows the rename popup for the item. + /// + public void StartRenaming() + { + // Start renaming the folder + var entry = (ImportFileEntry)Tag; + var shortName = Path.GetFileNameWithoutExtension(entry.ResultUrl); + var dialog = RenamePopup.Show(this, HeaderRect, shortName, false); + dialog.Tag = Tag; + dialog.Renamed += OnRenamed; + } + + private void OnRenamed(RenamePopup popup) + { + var entry = (ImportFileEntry)Tag; + entry.ModifyResultFilename(popup.Text); + Text = string.Format("{0} ({1})", Path.GetFileName(entry.SourceUrl), popup.Text); + } + } + + private void OnImport() + { + var entries = new List(_rootNode.ChildrenCount); + for (int i = 0; i < _rootNode.ChildrenCount; i++) + { + var fileEntry = _rootNode.Children[i].Tag as ImportFileEntry; + if (fileEntry != null) + entries.Add(fileEntry); + } + Editor.Instance.ContentImporting.LetThemBeImportedxD(entries); + + Close(DialogResult.OK); + } + + private void OnCancel() + { + Close(DialogResult.Cancel); + } + + private void OnSelectedChanged(List before, List after) + { + var selection = new List(after.Count); + for (int i = 0; i < after.Count; i++) + { + if (after[i].Tag is ImportFileEntry fileEntry && fileEntry.HasSettings) + selection.Add(fileEntry.Settings); + } + + _settingsEditor.Select(selection); + } + + /// + protected override void SetupWindowSettings(ref CreateWindowSettings settings) + { + base.SetupWindowSettings(ref settings); + + settings.MinimumSize = new Vector2(300, 400); + settings.HasSizingFrame = true; + } + + /// + public override bool OnKeyDown(KeyboardKeys key) + { + if (base.OnKeyDown(key)) + return true; + + switch (key) + { + case KeyboardKeys.Escape: + OnCancel(); + return true; + case KeyboardKeys.Return: + OnImport(); + return true; + } + + return false; + } + } +} diff --git a/Source/Editor/Content/Import/ModelImportEntry.cs b/Source/Editor/Content/Import/ModelImportEntry.cs new file mode 100644 index 000000000..2456826af --- /dev/null +++ b/Source/Editor/Content/Import/ModelImportEntry.cs @@ -0,0 +1,482 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using FlaxEngine; + +namespace FlaxEditor.Content.Import +{ + /// + /// Importing model lightmap UVs source + /// + [HideInEditor] + public enum ModelLightmapUVsSource : int + { + /// + /// No lightmap UVs. + /// + Disable = 0, + + /// + /// Generate lightmap UVs from model geometry. + /// + Generate = 1, + + /// + /// The texcoords channel 0. + /// + Channel0 = 2, + + /// + /// The texcoords channel 1. + /// + Channel1 = 3, + + /// + /// The texcoords channel 2. + /// + Channel2 = 4, + + /// + /// The texcoords channel 3. + /// + Channel3 = 5 + } + + /// + /// Declares the imported data type. + /// + [HideInEditor] + public enum ModelType : int + { + /// + /// The model asset. + /// + Model = 0, + + /// + /// The skinned model asset. + /// + SkinnedModel = 1, + + /// + /// The animation asset. + /// + Animation = 2, + } + + /// + /// Declares the imported animation clip duration. + /// + [HideInEditor] + public enum AnimationDuration : int + { + /// + /// The imported duration. + /// + Imported = 0, + + /// + /// The custom duration specified via keyframes range. + /// + Custom = 1, + } + + /// + /// Proxy object to present model import settings in . + /// + [HideInEditor] + public class ModelImportSettings + { + /// + /// Gets or sets the type of the imported asset. + /// + [EditorOrder(0), Tooltip("Type of the imported asset")] + public ModelType Type { get; set; } = ModelType.Model; + + /// + /// True if calculate model normals, otherwise will import them. + /// + [EditorOrder(20), DefaultValue(false), EditorDisplay("Geometry"), Tooltip("Enable model normal vectors recalculating")] + public bool CalculateNormals { get; set; } = false; + + /// + /// Calculated normals smoothing angle. + /// + [VisibleIf("CalculateNormals")] + [EditorOrder(30), DefaultValue(175.0f), Limit(0, 175, 0.1f), EditorDisplay("Geometry"), Tooltip("Specifies the maximum angle (in degrees) that may be between two face normals at the same vertex position that their are smoothed together. The default value is 175.")] + public float SmoothingNormalsAngle { get; set; } = 175.0f; + + /// + /// If checked, the imported normal vectors of the mesh will be flipped (scaled by -1). + /// + [EditorOrder(35), DefaultValue(false), EditorDisplay("Geometry"), Tooltip("If checked, the imported normal vectors of the mesh will be flipped (scaled by -1).")] + public bool FlipNormals { get; set; } = false; + + /// + /// True if calculate model tangents, otherwise will import them. + /// + [EditorOrder(40), DefaultValue(true), EditorDisplay("Geometry"), Tooltip("Enable model tangent vectors recalculating")] + public bool CalculateTangents { get; set; } = true; + + /// + /// Calculated normals smoothing angle. + /// + [VisibleIf("CalculateTangents")] + [EditorOrder(45), DefaultValue(45.0f), Limit(0, 45, 0.1f), EditorDisplay("Geometry"), Tooltip("Specifies the maximum angle (in degrees) that may be between two vertex tangents that their tangents and bi-tangents are smoothed. The default value is 45.")] + public float SmoothingTangentsAngle { get; set; } = 45.0f; + + /// + /// Enable/disable meshes geometry optimization. + /// + [EditorOrder(50), DefaultValue(true), EditorDisplay("Geometry"), Tooltip("Enable/disable meshes geometry optimization")] + public bool OptimizeMeshes { get; set; } = true; + + /// + /// Enable/disable geometry merge for meshes with the same materials. + /// + [EditorOrder(60), DefaultValue(true), EditorDisplay("Geometry"), Tooltip("Enable/disable geometry merge for meshes with the same materials")] + public bool MergeMeshes { get; set; } = true; + + /// + /// Enable/disable importing meshes Level of Details. + /// + [EditorOrder(70), DefaultValue(true), EditorDisplay("Geometry", "Import LODs"), Tooltip("Enable/disable importing meshes Level of Details")] + public bool ImportLODs { get; set; } = true; + + /// + /// Enable/disable importing vertex colors (channel 0 only). + /// + [EditorOrder(80), DefaultValue(true), EditorDisplay("Geometry"), Tooltip("Enable/disable importing vertex colors (channel 0 only)")] + public bool ImportVertexColors { get; set; } = true; + + /// + /// Enable/disable importing blend shapes (morph targets). + /// + [EditorOrder(85), DefaultValue(false), EditorDisplay("Geometry"), Tooltip("Enable/disable importing blend shapes (morph targets).")] + public bool ImportBlendShapes { get; set; } = false; + + /// + /// The lightmap UVs source. + /// + [EditorOrder(90), DefaultValue(ModelLightmapUVsSource.Disable), EditorDisplay("Geometry", "Lightmap UVs Source"), Tooltip("Model lightmap UVs source")] + public ModelLightmapUVsSource LightmapUVsSource { get; set; } = ModelLightmapUVsSource.Disable; + + /// + /// Custom uniform import scale. + /// + [EditorOrder(500), DefaultValue(1.0f), EditorDisplay("Transform"), Tooltip("Custom uniform import scale")] + public float Scale { get; set; } = 1.0f; + + /// + /// Custom import geometry rotation. + /// + [DefaultValue(typeof(Quaternion), "0,0,0,1")] + [EditorOrder(510), EditorDisplay("Transform"), Tooltip("Custom import geometry rotation")] + public Quaternion Rotation { get; set; } = Quaternion.Identity; + + /// + /// Custom import geometry offset. + /// + [DefaultValue(typeof(Vector3), "0,0,0")] + [EditorOrder(520), EditorDisplay("Transform"), Tooltip("Custom import geometry offset")] + public Vector3 Translation { get; set; } = Vector3.Zero; + + /// + /// If checked, the imported geometry will be shifted to the center of mass. + /// + [EditorOrder(530), DefaultValue(false), EditorDisplay("Transform"), Tooltip("If checked, the imported geometry will be shifted to the center of mass.")] + public bool CenterGeometry { get; set; } = false; + + /// + /// The imported animation duration mode. + /// + [EditorOrder(1000), DefaultValue(AnimationDuration.Imported), EditorDisplay("Animation"), Tooltip("Imported animation duration mode. Can use the original value or overriden by settings.")] + public AnimationDuration Duration { get; set; } = AnimationDuration.Imported; + + /// + /// The imported animation first frame index. Used only if Duration mode is set to Custom. + /// + [EditorOrder(1010), DefaultValue(0.0f), Limit(0), EditorDisplay("Animation"), Tooltip("Imported animation first frame index. Used only if Duration mode is set to Custom.")] + public float FramesRangeStart { get; set; } = 0; + + /// + /// The imported animation end frame index. Used only if Duration mode is set to Custom. + /// + [EditorOrder(1020), DefaultValue(0.0f), Limit(0), EditorDisplay("Animation"), Tooltip("Imported animation last frame index. Used only if Duration mode is set to Custom.")] + public float FramesRangeEnd { get; set; } = 0; + + /// + /// The imported animation default frame rate. Can specify the default frames per second amount for imported animation. If value is 0 then the original animation frame rate will be used. + /// + [EditorOrder(1025), DefaultValue(0.0f), Limit(0, 1000, 0.01f), EditorDisplay("Animation"), Tooltip("The imported animation default frame rate. Can specify the default frames per second amount for imported animation. If value is 0 then the original animation frame rate will be used.")] + public float DefaultFrameRate { get; set; } = 0.0f; + + /// + /// The imported animation sampling rate. If value is 0 then the original animation speed will be used. + /// + [EditorOrder(1030), DefaultValue(0.0f), Limit(0, 1000, 0.01f), EditorDisplay("Animation"), Tooltip("The imported animation sampling rate. If value is 0 then the original animation speed will be used.")] + public float SamplingRate { get; set; } = 0.0f; + + /// + /// The imported animation will have removed tracks with no keyframes or unspecified data. + /// + [EditorOrder(1040), DefaultValue(true), EditorDisplay("Animation"), Tooltip("The imported animation will have removed tracks with no keyframes or unspecified data.")] + public bool SkipEmptyCurves { get; set; } = true; + + /// + /// The imported animation channels will be optimized to remove redundant keyframes. + /// + [EditorOrder(1050), DefaultValue(true), EditorDisplay("Animation"), Tooltip("The imported animation channels will be optimized to remove redundant keyframes.")] + public bool OptimizeKeyframes { get; set; } = true; + + /// + /// Enables root motion extraction support from this animation. + /// + [EditorOrder(1060), DefaultValue(false), EditorDisplay("Animation"), Tooltip("Enables root motion extraction support from this animation.")] + public bool EnableRootMotion { get; set; } = false; + + /// + /// The custom node name to be used as a root motion source. If not specified the actual root node will be used. + /// + [EditorOrder(1070), DefaultValue(typeof(string), ""), EditorDisplay("Animation"), Tooltip("The custom node name to be used as a root motion source. If not specified the actual root node will be used.")] + public string RootNodeName { get; set; } + + /// + /// The zero-based index for the animation clip to import. If the source file has more than one animation it can be used to pick a desire clip. + /// + [EditorOrder(1080), DefaultValue(-1), EditorDisplay("Animation"), Tooltip("The zero-based index for the animation clip to import. If the source file has more than one animation it can be used to pick a desire clip.")] + public int AnimationIndex { get; set; } = -1; + + /// + /// If checked, the importer will generate a sequence of LODs based on the base LOD index. + /// + [EditorOrder(1100), DefaultValue(false), EditorDisplay("Level Of Detail", "Generate LODs"), Tooltip("If checked, the importer will generate a sequence of LODs based on the base LOD index.")] + public bool GenerateLODs { get; set; } = false; + + /// + /// The index of the LOD from the source model data to use as a reference for following LODs generation. + /// + [EditorOrder(1110), DefaultValue(0), Limit(0, Model.MaxLODs - 1), EditorDisplay("Level Of Detail", "Base LOD"), Tooltip("The index of the LOD from the source model data to use as a reference for following LODs generation.")] + public int BaseLOD { get; set; } = 0; + + /// + /// The amount of LODs to include in the model (all reaming ones starting from Base LOD will be generated). + /// + [EditorOrder(1120), DefaultValue(4), Limit(1, Model.MaxLODs), EditorDisplay("Level Of Detail", "LOD Count"), Tooltip("The amount of LODs to include in the model (all reaming ones starting from Base LOD will be generated).")] + public int LODCount { get; set; } = 4; + + /// + /// The target amount of triangles for the generated LOD (based on the higher LOD). Normalized to range 0-1. For instance 0.4 cuts the triangle count to 40%. + /// + [EditorOrder(1130), DefaultValue(0.5f), Limit(0, 1, 0.001f), EditorDisplay("Level Of Detail"), Tooltip("The target amount of triangles for the generated LOD (based on the higher LOD). Normalized to range 0-1. For instance 0.4 cuts the triangle count to 40%.")] + public float TriangleReduction { get; set; } = 0.5f; + + /// + /// If checked, the importer will create materials for model meshes as specified in the file. + /// + [EditorOrder(400), DefaultValue(true), EditorDisplay("Materials"), Tooltip("If checked, the importer will create materials for model meshes as specified in the file.")] + public bool ImportMaterials { get; set; } = true; + + /// + /// If checked, the importer will import texture files used by the model and any embedded texture resources. + /// + [EditorOrder(410), DefaultValue(true), EditorDisplay("Materials"), Tooltip("If checked, the importer will import texture files used by the model and any embedded texture resources.")] + public bool ImportTextures { get; set; } = true; + + /// + /// If checked, the importer will try to restore the model material slots. + /// + [EditorOrder(420), DefaultValue(true), EditorDisplay("Materials", "Restore Materials On Reimport"), Tooltip("If checked, the importer will try to restore the assigned materials to the model slots.")] + public bool RestoreMaterialsOnReimport { get; set; } = true; + + [StructLayout(LayoutKind.Sequential)] + internal struct InternalOptions + { + public ModelType Type; + + // Geometry + public byte CalculateNormals; + public float SmoothingNormalsAngle; + public byte FlipNormals; + public float SmoothingTangentsAngle; + public byte CalculateTangents; + public byte OptimizeMeshes; + public byte MergeMeshes; + public byte ImportLODs; + public byte ImportVertexColors; + public byte ImportBlendShapes; + public ModelLightmapUVsSource LightmapUVsSource; + + // Transform + public float Scale; + public Quaternion Rotation; + public Vector3 Translation; + public byte CenterGeometry; + + // Animation + public AnimationDuration Duration; + public float FramesRangeStart; + public float FramesRangeEnd; + public float DefaultFrameRate; + public float SamplingRate; + public byte SkipEmptyCurves; + public byte OptimizeKeyframes; + public byte EnableRootMotion; + public string RootNodeName; + public int AnimationIndex; + + // Level Of Detail + public byte GenerateLODs; + public int BaseLOD; + public int LODCount; + public float TriangleReduction; + + // Misc + public byte ImportMaterials; + public byte ImportTextures; + public byte RestoreMaterialsOnReimport; + } + + internal void ToInternal(out InternalOptions options) + { + options = new InternalOptions + { + Type = Type, + CalculateNormals = (byte)(CalculateNormals ? 1 : 0), + SmoothingNormalsAngle = SmoothingNormalsAngle, + FlipNormals = (byte)(FlipNormals ? 1 : 0), + SmoothingTangentsAngle = SmoothingTangentsAngle, + CalculateTangents = (byte)(CalculateTangents ? 1 : 0), + OptimizeMeshes = (byte)(OptimizeMeshes ? 1 : 0), + MergeMeshes = (byte)(MergeMeshes ? 1 : 0), + ImportLODs = (byte)(ImportLODs ? 1 : 0), + ImportVertexColors = (byte)(ImportVertexColors ? 1 : 0), + ImportBlendShapes = (byte)(ImportBlendShapes ? 1 : 0), + LightmapUVsSource = LightmapUVsSource, + Scale = Scale, + Rotation = Rotation, + Translation = Translation, + CenterGeometry = (byte)(CenterGeometry ? 1 : 0), + Duration = Duration, + FramesRangeStart = FramesRangeStart, + FramesRangeEnd = FramesRangeEnd, + DefaultFrameRate = DefaultFrameRate, + SamplingRate = SamplingRate, + SkipEmptyCurves = (byte)(SkipEmptyCurves ? 1 : 0), + OptimizeKeyframes = (byte)(OptimizeKeyframes ? 1 : 0), + EnableRootMotion = (byte)(EnableRootMotion ? 1 : 0), + RootNodeName = RootNodeName, + AnimationIndex = AnimationIndex, + GenerateLODs = (byte)(GenerateLODs ? 1 : 0), + BaseLOD = BaseLOD, + LODCount = LODCount, + TriangleReduction = TriangleReduction, + ImportMaterials = (byte)(ImportMaterials ? 1 : 0), + ImportTextures = (byte)(ImportTextures ? 1 : 0), + RestoreMaterialsOnReimport = (byte)(RestoreMaterialsOnReimport ? 1 : 0), + }; + } + + internal void FromInternal(ref InternalOptions options) + { + Type = options.Type; + CalculateNormals = options.CalculateNormals != 0; + SmoothingNormalsAngle = options.SmoothingNormalsAngle; + FlipNormals = options.FlipNormals != 0; + SmoothingTangentsAngle = options.SmoothingTangentsAngle; + CalculateTangents = options.CalculateTangents != 0; + OptimizeMeshes = options.OptimizeMeshes != 0; + MergeMeshes = options.MergeMeshes != 0; + ImportLODs = options.ImportLODs != 0; + ImportVertexColors = options.ImportVertexColors != 0; + ImportBlendShapes = options.ImportBlendShapes != 0; + LightmapUVsSource = options.LightmapUVsSource; + Scale = options.Scale; + Rotation = options.Rotation; + Translation = options.Translation; + CenterGeometry = options.CenterGeometry != 0; + FramesRangeStart = options.FramesRangeStart; + FramesRangeEnd = options.FramesRangeEnd; + DefaultFrameRate = options.DefaultFrameRate; + SamplingRate = options.SamplingRate; + SkipEmptyCurves = options.SkipEmptyCurves != 0; + OptimizeKeyframes = options.OptimizeKeyframes != 0; + EnableRootMotion = options.EnableRootMotion != 0; + RootNodeName = options.RootNodeName; + AnimationIndex = options.AnimationIndex; + GenerateLODs = options.GenerateLODs != 0; + BaseLOD = options.BaseLOD; + LODCount = options.LODCount; + TriangleReduction = options.TriangleReduction; + ImportMaterials = options.ImportMaterials != 0; + ImportTextures = options.ImportTextures != 0; + RestoreMaterialsOnReimport = options.RestoreMaterialsOnReimport != 0; + } + + /// + /// Tries the restore the asset import options from the target resource file. + /// + /// The options. + /// The asset path. + /// True settings has been restored, otherwise false. + public static bool TryRestore(ref ModelImportSettings options, string assetPath) + { + if (ModelImportEntry.Internal_GetModelImportOptions(assetPath, out var internalOptions)) + { + // Restore settings + options.FromInternal(ref internalOptions); + return true; + } + return false; + } + } + + /// + /// Model asset import entry. + /// + /// + public class ModelImportEntry : AssetImportEntry + { + private ModelImportSettings _settings = new ModelImportSettings(); + + /// + /// Initializes a new instance of the class. + /// + /// The import request. + public ModelImportEntry(ref Request request) + : base(ref request) + { + // Try to restore target asset model import options (useful for fast reimport) + ModelImportSettings.TryRestore(ref _settings, ResultUrl); + } + + /// + public override object Settings => _settings; + + /// + public override bool TryOverrideSettings(object settings) + { + if (settings is ModelImportSettings o) + { + _settings = o; + return true; + } + return false; + } + + /// + public override bool Import() + { + return Editor.Import(SourceUrl, ResultUrl, _settings); + } + + #region Internal Calls + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern bool Internal_GetModelImportOptions(string path, out ModelImportSettings.InternalOptions result); + + #endregion + } +} diff --git a/Source/Editor/Content/Import/Request.cs b/Source/Editor/Content/Import/Request.cs new file mode 100644 index 000000000..ab2614eab --- /dev/null +++ b/Source/Editor/Content/Import/Request.cs @@ -0,0 +1,38 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content.Import +{ + /// + /// The content item import request data container. + /// + [HideInEditor] + public struct Request + { + /// + /// The input item path (folder or file). + /// + public string InputPath; + + /// + /// The output path (folder or file). + /// + public string OutputPath; + + /// + /// Flag set to true for binary assets handled by the engine internally. + /// + public bool IsBinaryAsset; + + /// + /// Flag used to skip showing import settings dialog to used. Can be used for importing assets from code by plugins. + /// + public bool SkipSettingsDialog; + + /// + /// The custom settings object. + /// + public object Settings; + } +} diff --git a/Source/Editor/Content/Import/TextureImportEntry.cs b/Source/Editor/Content/Import/TextureImportEntry.cs new file mode 100644 index 000000000..0aec0df9d --- /dev/null +++ b/Source/Editor/Content/Import/TextureImportEntry.cs @@ -0,0 +1,505 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using System.ComponentModel; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using FlaxEngine; + +// ReSharper disable InconsistentNaming + +namespace FlaxEditor.Content.Import +{ + /// + /// Texture format types. + /// + [HideInEditor] + public enum TextureFormatType : byte + { + /// + /// The unknown. + /// + Unknown = 0, + + /// + /// The color with RGB channels. + /// + ColorRGB = 1, + + /// + /// The color with RGBA channels. + /// + ColorRGBA = 2, + + /// + /// The normal map (packed and compressed). + /// + NormalMap = 3, + + /// + /// The gray scale (R channel). + /// + GrayScale = 4, + + /// + /// The HDR color (RGBA channels). + /// + HdrRGBA = 5, + + /// + /// The HDR color (RGB channels). + /// + HdrRGB = 6 + } + + /// + /// Proxy object to present texture import settings in . + /// + [HideInEditor] + public class TextureImportSettings + { + /// + /// A custom version of for GUI. + /// + public enum CustomTextureFormatType + { + /// + /// The color with RGB channels. + /// + ColorRGB = 1, + + /// + /// The color with RGBA channels. + /// + ColorRGBA = 2, + + /// + /// The normal map (packed and compressed). + /// + NormalMap = 3, + + /// + /// The gray scale (R channel). + /// + GrayScale = 4, + + /// + /// The HDR color (RGBA channels). + /// + HdrRGBA = 5, + + /// + /// The HDR color (RGB channels). + /// + HdrRGB = 6 + } + + /// + /// A custom set of max texture import sizes. + /// + public enum CustomMaxSizeType + { + /// + /// The 32. + /// + _32 = 32, + + /// + /// The 64. + /// + _64 = 64, + + /// + /// The 128. + /// + _128 = 128, + + /// + /// The 256. + /// + _256 = 256, + + /// + /// The 512. + /// + _512 = 512, + + /// + /// The 1024. + /// + _1024 = 1024, + + /// + /// The 2048. + /// + _2048 = 2048, + + /// + /// The 4096. + /// + _4096 = 4096, + + /// + /// The 8192. + /// + _8192 = 8192, + } + + /// + /// Converts the maximum size to enum. + /// + /// The max size. + /// The converted enum. + public static CustomMaxSizeType ConvertMaxSize(int f) + { + if (!Mathf.IsPowerOfTwo(f)) + f = Mathf.NextPowerOfTwo(f); + + FieldInfo[] fields = typeof(CustomMaxSizeType).GetFields(); + for (int i = 0; i < fields.Length; i++) + { + var field = fields[i]; + if (field.Name.Equals("value__")) + continue; + + if (f == (int)field.GetRawConstantValue()) + return (CustomMaxSizeType)f; + } + + return CustomMaxSizeType._8192; + } + + /// + /// The sprite info. + /// + [StructLayout(LayoutKind.Sequential)] + public struct SpriteInfo + { + /// + /// The sprite area. + /// + public Rectangle Area; + + /// + /// The sprite name. + /// + public string Name; + + /// + /// Initializes a new instance of the struct. + /// + /// The area. + /// The name. + public SpriteInfo(Rectangle area, string name) + { + Area = area; + Name = name; + } + } + + /// + /// Texture format type + /// + [EditorOrder(0), DefaultValue(CustomTextureFormatType.ColorRGB), Tooltip("Texture import format type")] + public CustomTextureFormatType Type { get; set; } = CustomTextureFormatType.ColorRGB; + + /// + /// True if texture should be imported as a texture atlas resource + /// + [EditorOrder(10), DefaultValue(false), Tooltip("True if texture should be imported as a texture atlas (with sprites)")] + public bool IsAtlas { get; set; } + + /// + /// True if disable dynamic texture streaming + /// + [EditorOrder(20), DefaultValue(false), Tooltip("True if disable dynamic texture streaming")] + public bool NeverStream { get; set; } + + /// + /// Enables/disables texture data compression. + /// + [EditorOrder(30), DefaultValue(true), Tooltip("True if compress texture data")] + public bool Compress { get; set; } = true; + + /// + /// True if texture channels have independent data + /// + [EditorOrder(40), DefaultValue(false), Tooltip("True if texture channels have independent data (for compression methods)")] + public bool IndependentChannels { get; set; } + + /// + /// True if use sRGB format for texture data. Recommended for color maps and diffuse color textures. + /// + [EditorOrder(50), DefaultValue(false), EditorDisplay(null, "sRGB"), Tooltip("True if use sRGB format for texture data. Recommended for color maps and diffuse color textures.")] + public bool sRGB { get; set; } + + /// + /// True if generate mip maps chain for the texture. + /// + [EditorOrder(60), DefaultValue(true), Tooltip("True if generate mip maps chain for the texture")] + public bool GenerateMipMaps { get; set; } = true; + + /// + /// True if flip Y coordinate of the texture. + /// + [EditorOrder(65), DefaultValue(false), EditorDisplay(null, "Flip Y"), Tooltip("True if flip Y coordinate of the texture.")] + public bool FlipY { get; set; } = false; + + /// + /// The import texture scale. + /// + [EditorOrder(70), DefaultValue(1.0f), Tooltip("Texture scale. Default is 1.")] + public float Scale { get; set; } = 1.0f; + + /// + /// Maximum size of the texture (for both width and height). + /// Higher resolution textures will be resized during importing process. + /// + [EditorOrder(80), DefaultValue(CustomMaxSizeType._8192), Tooltip("Maximum texture size (will be resized if need to)")] + public CustomMaxSizeType MaxSize { get; set; } = CustomMaxSizeType._8192; + + /// + /// True if resize texture on import. Use Size property to define texture width and height. Texture scale property will be ignored. + /// + [EditorOrder(90), DefaultValue(false), Tooltip("True if resize texture on import. Use Size property to define texture width and height. Texture scale property will be ignored.")] + public bool Resize { get; set; } = false; + + /// + /// Gets or sets the size of the imported texture. If Resize property is set to true then texture will be resized during the import to this value. Otherwise it will be ignored. + /// + [EditorOrder(100), VisibleIf("Resize"), DefaultValue(typeof(Int2), "1024,1024"), Tooltip("The size of the imported texture. If Resize property is set to true then texture will be resized during the import to this value. Otherwise it will be ignored.")] + public Int2 Size { get; set; } = new Int2(1024, 1024); + + /// + /// True if preserve alpha coverage in generated mips for alpha test reference. Scales mipmap alpha values to preserve alpha coverage based on an alpha test reference value. + /// + [EditorOrder(240), DefaultValue(false), Tooltip("Check to preserve alpha coverage in generated mips for alpha test reference. Scales mipmap alpha values to preserve alpha coverage based on an alpha test reference value.")] + public bool PreserveAlphaCoverage { get; set; } = false; + + /// + /// The reference value for the alpha coverage preserving. + /// + [EditorOrder(250), VisibleIf("PreserveAlphaCoverage"), DefaultValue(0.5f), Tooltip("The reference value for the alpha coverage preserving.")] + public float PreserveAlphaCoverageReference { get; set; } = 0.5f; + + /// + /// The sprites. Used to keep created sprites on sprite atlas reimport. + /// + [HideInEditor] + public List Sprites = new List(); + + [StructLayout(LayoutKind.Sequential)] + internal struct InternalOptions + { + public TextureFormatType Type; + public byte IsAtlas; + public byte NeverStream; + public byte Compress; + public byte IndependentChannels; + public byte sRGB; + public byte GenerateMipMaps; + public byte FlipY; + public byte Resize; + public byte PreserveAlphaCoverage; + public float PreserveAlphaCoverageReference; + public float Scale; + public int MaxSize; + public Int2 Size; + public Rectangle[] SpriteAreas; + public string[] SpriteNames; + } + + internal void ToInternal(out InternalOptions options) + { + options = new InternalOptions + { + Type = (TextureFormatType)(int)Type, + IsAtlas = (byte)(IsAtlas ? 1 : 0), + NeverStream = (byte)(NeverStream ? 1 : 0), + Compress = (byte)(Compress ? 1 : 0), + IndependentChannels = (byte)(IndependentChannels ? 1 : 0), + sRGB = (byte)(sRGB ? 1 : 0), + GenerateMipMaps = (byte)(GenerateMipMaps ? 1 : 0), + FlipY = (byte)(FlipY ? 1 : 0), + Resize = (byte)(Resize ? 1 : 0), + PreserveAlphaCoverage = (byte)(PreserveAlphaCoverage ? 1 : 0), + PreserveAlphaCoverageReference = PreserveAlphaCoverageReference, + Scale = Scale, + Size = Size, + MaxSize = (int)MaxSize + }; + if (Sprites != null && Sprites.Count > 0) + { + int count = Sprites.Count; + options.SpriteAreas = new Rectangle[count]; + options.SpriteNames = new string[count]; + for (int i = 0; i < count; i++) + { + options.SpriteAreas[i] = Sprites[i].Area; + options.SpriteNames[i] = Sprites[i].Name; + } + } + else + { + options.SpriteAreas = null; + options.SpriteNames = null; + } + } + + internal void FromInternal(ref InternalOptions options) + { + Type = (CustomTextureFormatType)(int)options.Type; + IsAtlas = options.IsAtlas != 0; + NeverStream = options.NeverStream != 0; + Compress = options.Compress != 0; + IndependentChannels = options.IndependentChannels != 0; + sRGB = options.sRGB != 0; + GenerateMipMaps = options.GenerateMipMaps != 0; + FlipY = options.FlipY != 0; + Resize = options.Resize != 0; + PreserveAlphaCoverage = options.PreserveAlphaCoverage != 0; + PreserveAlphaCoverageReference = options.PreserveAlphaCoverageReference; + Scale = options.Scale; + MaxSize = ConvertMaxSize(options.MaxSize); + Size = options.Size; + if (options.SpriteAreas != null) + { + int spritesCount = options.SpriteAreas.Length; + Sprites.Capacity = spritesCount; + for (int i = 0; i < spritesCount; i++) + { + Sprites.Add(new SpriteInfo(options.SpriteAreas[i], options.SpriteNames[i])); + } + } + } + + /// + /// Tries the restore the asset import options from the target resource file. + /// + /// The options. + /// The asset path. + /// True settings has been restored, otherwise false. + public static bool TryRestore(ref TextureImportSettings options, string assetPath) + { + if (TextureImportEntry.Internal_GetTextureImportOptions(assetPath, out var internalOptions)) + { + // Restore settings + options.FromInternal(ref internalOptions); + return true; + } + return false; + } + } + + /// + /// Texture asset import entry. + /// + /// + public class TextureImportEntry : AssetImportEntry + { + private TextureImportSettings _settings = new TextureImportSettings(); + + /// + /// Initializes a new instance of the class. + /// + /// The import request. + public TextureImportEntry(ref Request request) + : base(ref request) + { + // Try to guess format type based on file name + var snl = System.IO.Path.GetFileNameWithoutExtension(SourceUrl).ToLower(); + var extension = System.IO.Path.GetExtension(SourceUrl).ToLower(); + if (extension == ".raw") + { + // Raw image data in 16bit gray-scale, preserve the quality + _settings.Type = TextureImportSettings.CustomTextureFormatType.HdrRGBA; + _settings.Compress = false; + } + else if (extension == ".hdr") + { + // HDR sky texture + _settings.Type = TextureImportSettings.CustomTextureFormatType.HdrRGB; + } + else if (_settings.Type != TextureImportSettings.CustomTextureFormatType.ColorRGB) + { + // Skip checking + } + else if (snl.EndsWith("_n") + || snl.EndsWith("nrm") + || snl.EndsWith("nm") + || snl.EndsWith("norm") + || snl.Contains("normal") + || snl.EndsWith("normals")) + { + // Normal map + _settings.Type = TextureImportSettings.CustomTextureFormatType.NormalMap; + } + else if (snl.EndsWith("_d") + || snl.Contains("diffuse") + || snl.Contains("diff") + || snl.Contains("color") + || snl.Contains("_col") + || snl.Contains("basecolor") + || snl.Contains("albedo")) + { + // Albedo or diffuse map + _settings.Type = TextureImportSettings.CustomTextureFormatType.ColorRGB; + _settings.sRGB = true; + } + else if (snl.EndsWith("ao") + || snl.EndsWith("ambientocclusion") + || snl.EndsWith("gloss") + || snl.EndsWith("_r") + || snl.EndsWith("_displ") + || snl.EndsWith("_disp") + || snl.EndsWith("roughness") + || snl.EndsWith("_rgh") + || snl.EndsWith("_met") + || snl.EndsWith("metalness") + || snl.EndsWith("displacement") + || snl.EndsWith("spec") + || snl.EndsWith("specular") + || snl.EndsWith("occlusion") + || snl.EndsWith("height") + || snl.EndsWith("heights") + || snl.EndsWith("cavity") + || snl.EndsWith("metalic") + || snl.EndsWith("metallic")) + { + // Glossiness, metalness, ambient occlusion, displacement, height, cavity or specular + _settings.Type = TextureImportSettings.CustomTextureFormatType.GrayScale; + } + + // Try to restore target asset texture import options (useful for fast reimport) + TextureImportSettings.TryRestore(ref _settings, ResultUrl); + } + + /// + public override object Settings => _settings; + + /// + public override bool TryOverrideSettings(object settings) + { + if (settings is TextureImportSettings o) + { + _settings = o; + return true; + } + return false; + } + + /// + public override bool Import() + { + return Editor.Import(SourceUrl, ResultUrl, _settings); + } + + #region Internal Calls + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern bool Internal_GetTextureImportOptions(string path, out TextureImportSettings.InternalOptions result); + + #endregion + } +} diff --git a/Source/Editor/Content/Items/AssetItem.cs b/Source/Editor/Content/Items/AssetItem.cs new file mode 100644 index 000000000..437c556fc --- /dev/null +++ b/Source/Editor/Content/Items/AssetItem.cs @@ -0,0 +1,126 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using System.Text; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// Asset item object. + /// + /// + [HideInEditor] + public abstract class AssetItem : ContentItem + { + /// + /// Gets the asset unique identifier. + /// + public Guid ID { get; protected set; } + + /// + /// Gets the asset type identifier. + /// + public string TypeName { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset type name. + /// The asset identifier. + protected AssetItem(string path, string typeName, ref Guid id) + : base(path) + { + TypeName = typeName; + ID = id; + } + + /// + protected override void UpdateTooltipText() + { + var sb = new StringBuilder(); + OnBuildTooltipText(sb); + TooltipText = sb.ToString(); + } + + private sealed class TooltipDoubleClickHook : Control + { + public AssetItem Item; + + public TooltipDoubleClickHook() + { + AnchorPreset = AnchorPresets.StretchAll; + Offsets = Margin.Zero; + } + + public override bool OnMouseDoubleClick(Vector2 location, MouseButton button) + { + return Item.OnMouseDoubleClick(Item.ScreenToClient(ClientToScreen(location)), button); + } + } + + /// + public override void OnTooltipShown(Tooltip tooltip) + { + base.OnTooltipShown(tooltip); + + // Inject the hook control for the double-click event (if user double-clicks on tooltip over the asset item it will open that item - helps on small screens) + var hook = tooltip.GetChild(); + if (hook == null) + hook = tooltip.AddChild(); + hook.Item = this; + } + + /// + /// Called when building tooltip text. + /// + /// The String Builder. + protected virtual void OnBuildTooltipText(StringBuilder sb) + { + sb.Append("Type: ").Append(TypeName).AppendLine(); + sb.Append("Size: ").Append(Utilities.Utils.FormatBytesCount((int)new FileInfo(Path).Length)).AppendLine(); + sb.Append("Path: ").Append(Path).AppendLine(); + } + + /// + public override ContentItemType ItemType => ContentItemType.Asset; + + /// + /// Determines whether asset is of the specified type (included inheritance checks). + /// + /// The type to check. + /// true if asset is of the specified type (including inherited types); otherwise, false. + public bool IsOfType() + { + return IsOfType(typeof(T)); + } + + /// + /// Determines whether asset is of the specified type (included inheritance checks). + /// + /// The type to check. + /// true if asset is of the specified type (including inherited types); otherwise, false. + public virtual bool IsOfType(Type type) + { + return false; + } + + /// + protected override bool DrawShadow => true; + + /// + public override ContentItem Find(Guid id) + { + return id == ID ? this : null; + } + + /// + public override string ToString() + { + return Path + ":" + ID; + } + } +} diff --git a/Source/Editor/Content/Items/BinaryAssetItem.cs b/Source/Editor/Content/Items/BinaryAssetItem.cs new file mode 100644 index 000000000..b851df352 --- /dev/null +++ b/Source/Editor/Content/Items/BinaryAssetItem.cs @@ -0,0 +1,181 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Text; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Represents binary asset item. + /// + /// + public class BinaryAssetItem : AssetItem + { + /// + /// The type of the asset (the same as but cached as type reference). + /// + public readonly Type Type; + + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + /// The asset type name identifier. + /// The asset type. + /// The asset type search filter type. + public BinaryAssetItem(string path, ref Guid id, string typeName, Type type, ContentItemSearchFilter searchFilter) + : base(path, typeName, ref id) + { + Type = type; + SearchFilter = searchFilter; + } + + /// + /// Gets the asset import path. + /// + /// The import path. + /// True if fails, otherwise false. + public bool GetImportPath(out string importPath) + { + // TODO: add internal call to content backend with fast import asset metadata gather (without asset loading) + + var asset = FlaxEngine.Content.Load(ID, 100); + if (asset) + { + // Get meta from loaded asset + importPath = asset.ImportPath; + return string.IsNullOrEmpty(importPath); + } + + importPath = string.Empty; + return true; + } + + internal void OnReimport(ref Guid id) + { + ID = id; + OnReimport(); + } + + /// + public override ContentItemSearchFilter SearchFilter { get; } + + /// + public override bool IsOfType(Type type) + { + return type.IsAssignableFrom(Type); + } + } + + /// + /// Implementation of for assets. + /// + /// + public class TextureAssetItem : BinaryAssetItem + { + /// + public TextureAssetItem(string path, ref Guid id, string typeName, Type type) + : base(path, ref id, typeName, type, ContentItemSearchFilter.Texture) + { + } + + /// + protected override void OnBuildTooltipText(StringBuilder sb) + { + base.OnBuildTooltipText(sb); + + var asset = FlaxEngine.Content.Load(ID, 100); + if (asset) + { + sb.Append("Format: ").Append(asset.Format).AppendLine(); + sb.Append("Size: ").Append(asset.Width).Append('x').Append(asset.Height); + if (asset.ArraySize != 1) + sb.Append('[').Append(asset.ArraySize).Append(']'); + sb.AppendLine(); + sb.Append("Mip Levels: ").Append(asset.MipLevels).AppendLine(); + } + } + } + + /// + /// Implementation of for assets. + /// + /// + public class ModelAssetItem : BinaryAssetItem + { + /// + public ModelAssetItem(string path, ref Guid id, string typeName, Type type) + : base(path, ref id, typeName, type, ContentItemSearchFilter.Model) + { + } + + /// + protected override void OnBuildTooltipText(StringBuilder sb) + { + base.OnBuildTooltipText(sb); + + var asset = FlaxEngine.Content.Load(ID, 100); + if (asset) + { + var lods = asset.LODs; + int triangleCount = 0, vertexCount = 0; + for (int lodIndex = 0; lodIndex < lods.Length; lodIndex++) + { + var lod = lods[lodIndex]; + for (int meshIndex = 0; meshIndex < lod.Meshes.Length; meshIndex++) + { + var mesh = lod.Meshes[meshIndex]; + triangleCount += mesh.TriangleCount; + vertexCount += mesh.VertexCount; + } + } + sb.Append("LODs: ").Append(lods.Length).AppendLine(); + sb.Append("Triangles: ").Append(triangleCount.ToString("N0")).AppendLine(); + sb.Append("Vertices: ").Append(vertexCount.ToString("N0")).AppendLine(); + } + } + } + + /// + /// Implementation of for assets. + /// + /// + public class SkinnedModelAssetItem : BinaryAssetItem + { + /// + public SkinnedModelAssetItem(string path, ref Guid id, string typeName, Type type) + : base(path, ref id, typeName, type, ContentItemSearchFilter.Model) + { + } + + /// + protected override void OnBuildTooltipText(StringBuilder sb) + { + base.OnBuildTooltipText(sb); + + var asset = FlaxEngine.Content.Load(ID, 100); + if (asset) + { + var lods = asset.LODs; + int triangleCount = 0, vertexCount = 0; + for (int lodIndex = 0; lodIndex < lods.Length; lodIndex++) + { + var lod = lods[lodIndex]; + for (int meshIndex = 0; meshIndex < lod.Meshes.Length; meshIndex++) + { + var mesh = lod.Meshes[meshIndex]; + triangleCount += mesh.TriangleCount; + vertexCount += mesh.VertexCount; + } + } + sb.Append("LODs: ").Append(lods.Length).AppendLine(); + sb.Append("Triangles: ").Append(triangleCount.ToString("N0")).AppendLine(); + sb.Append("Vertices: ").Append(vertexCount.ToString("N0")).AppendLine(); + sb.Append("Skeleton Nodes: ").Append(asset.Nodes.Length).AppendLine(); + sb.Append("Blend Shapes: ").Append(asset.BlendShapes.Length).AppendLine(); + } + } + } +} diff --git a/Source/Editor/Content/Items/CSharpScriptItem.cs b/Source/Editor/Content/Items/CSharpScriptItem.cs new file mode 100644 index 000000000..5b372922e --- /dev/null +++ b/Source/Editor/Content/Items/CSharpScriptItem.cs @@ -0,0 +1,25 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains C# script file with source code. + /// + /// + public class CSharpScriptItem : ScriptItem + { + /// + /// Initializes a new instance of the class. + /// + /// The path to the item. + public CSharpScriptItem(string path) + : base(path) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.CSharpScript64; + } +} diff --git a/Source/Editor/Content/Items/ContentFolder.cs b/Source/Editor/Content/Items/ContentFolder.cs new file mode 100644 index 000000000..e5ddd62a2 --- /dev/null +++ b/Source/Editor/Content/Items/ContentFolder.cs @@ -0,0 +1,305 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using FlaxEditor.GUI.Drag; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// Types of content directories. + /// + [HideInEditor] + public enum ContentFolderType + { + /// + /// The directory with assets. + /// + Content, + + /// + /// The directory with source files. + /// + Source, + + /// + /// The other type of directory. + /// + Other, + } + + /// + /// Represents workspace directory item. + /// + [HideInEditor] + public class ContentFolder : ContentItem + { + private DragItems _dragOverItems; + private bool _validDragOver; + + /// + /// Gets the type of the folder. + /// + public ContentFolderType FolderType { get; } + + /// + /// Returns true if that folder can import/manage scripts. + /// + public bool CanHaveScripts => FolderType == ContentFolderType.Source; + + /// + /// Returns true if that folder can import/manage assets. + /// + public bool CanHaveAssets => FolderType == ContentFolderType.Content; + + /// + /// Gets the content node. + /// + public ContentTreeNode Node { get; } + + /// + /// The subitems of this folder. + /// + public readonly List Children = new List(); + + /// + /// Initializes a new instance of the class. + /// + /// The folder type. + /// The path to the item. + /// The folder parent node. + internal ContentFolder(ContentFolderType type, string path, ContentTreeNode node) + : base(path) + { + FolderType = type; + Node = node; + ShortName = System.IO.Path.GetFileName(path); + } + + /// + /// Tries to find child element with given path + /// + /// Element path to find + /// Found element of null + public ContentItem FindChild(string path) + { + for (int i = 0; i < Children.Count; i++) + { + if (Children[i].Path == path) + return Children[i]; + } + + return null; + } + + /// + /// Check if folder contains child element with given path + /// + /// Element path to find + /// True if contains that element, otherwise false + public bool ContainsChild(string path) + { + return FindChild(path) != null; + } + + /// + public override ContentItemType ItemType => ContentItemType.Folder; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Other; + + /// + public override bool CanRename => ParentFolder != null; // Deny rename action for root folders + + /// + public override bool CanDrag => ParentFolder != null; // Deny rename action for root folders + + /// + public override bool Exists => Directory.Exists(Path); + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Folder64; + + /// + internal override void UpdatePath(string value) + { + base.UpdatePath(value); + + ShortName = System.IO.Path.GetFileName(value); + + // Update node text + Node.Text = ShortName; + } + + /// + protected override void UpdateTooltipText() + { + TooltipText = Path; + } + + /// + protected override void OnParentFolderChanged() + { + // Update tree nodes structure + Node.Parent = ParentFolder?.Node; + + base.OnParentFolderChanged(); + } + + /// + public override ContentItem Find(string path) + { + // TODO: split name into parts and check each going tree structure level down - make it faster + + if (Path == path) + return this; + + for (int i = 0; i < Children.Count; i++) + { + var result = Children[i].Find(path); + if (result != null) + return result; + } + + return null; + } + + /// + public override bool Find(ContentItem item) + { + if (item == this) + return true; + + for (int i = 0; i < Children.Count; i++) + { + if (Children[i].Find(item)) + return true; + } + + return false; + } + + /// + public override ContentItem Find(Guid id) + { + for (int i = 0; i < Children.Count; i++) + { + var result = Children[i].Find(id); + if (result != null) + return result; + } + + return null; + } + + /// + public override ScriptItem FindScriptWitScriptName(string scriptName) + { + for (int i = 0; i < Children.Count; i++) + { + var result = Children[i].FindScriptWitScriptName(scriptName); + if (result != null) + return result; + } + + return null; + } + + /// + public override int Compare(Control other) + { + if (other is ContentItem otherItem) + { + if (!otherItem.IsFolder) + return -1; + return string.Compare(ShortName, otherItem.ShortName, StringComparison.InvariantCulture); + } + + return base.Compare(other); + } + + /// + public override void Draw() + { + base.Draw(); + + // Check if drag is over + if (IsDragOver && _validDragOver) + Render2D.FillRectangle(new Rectangle(Vector2.Zero, Size), Style.Current.BackgroundSelected * 0.6f); + } + + private bool ValidateDragItem(ContentItem item) + { + // Reject itself and any parent + return item != this && !item.Find(this); + } + + /// + public override DragDropEffect OnDragEnter(ref Vector2 location, DragData data) + { + base.OnDragEnter(ref location, data); + + // Check if drop file(s) + if (data is DragDataFiles) + { + _validDragOver = true; + return DragDropEffect.Copy; + } + + // Check if drop asset(s) + if (_dragOverItems == null) + _dragOverItems = new DragItems(ValidateDragItem); + _dragOverItems.OnDragEnter(data); + _validDragOver = _dragOverItems.HasValidDrag; + return _dragOverItems.Effect; + } + + /// + public override DragDropEffect OnDragMove(ref Vector2 location, DragData data) + { + base.OnDragMove(ref location, data); + + if (data is DragDataFiles) + return DragDropEffect.Copy; + return _dragOverItems.Effect; + } + + /// + public override DragDropEffect OnDragDrop(ref Vector2 location, DragData data) + { + var result = base.OnDragDrop(ref location, data); + + // Check if drop file(s) + if (data is DragDataFiles files) + { + // Import files + Editor.Instance.ContentImporting.Import(files.Files, this); + result = DragDropEffect.Copy; + } + else if (_dragOverItems.HasValidDrag) + { + // Move items + Editor.Instance.ContentDatabase.Move(_dragOverItems.Objects, this); + result = DragDropEffect.Move; + } + + // Clear cache + _dragOverItems?.OnDragDrop(); + _validDragOver = false; + + return result; + } + + /// + public override void OnDragLeave() + { + _dragOverItems?.OnDragLeave(); + _validDragOver = false; + + base.OnDragLeave(); + } + } +} diff --git a/Source/Editor/Content/Items/ContentItem.cs b/Source/Editor/Content/Items/ContentItem.cs new file mode 100644 index 000000000..36c5ee7e3 --- /dev/null +++ b/Source/Editor/Content/Items/ContentItem.cs @@ -0,0 +1,772 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using FlaxEditor.Content.GUI; +using FlaxEditor.GUI.Drag; +using FlaxEngine; +using FlaxEngine.Assertions; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// Content item types. + /// + [HideInEditor] + public enum ContentItemType + { + /// + /// The binary or text asset. + /// + Asset, + + /// + /// The directory. + /// + Folder, + + /// + /// The script file. + /// + Script, + + /// + /// The scene file. + /// + Scene, + + /// + /// The other type. + /// + Other, + } + + /// + /// Content item filter types used for searching. + /// + [HideInEditor] + public enum ContentItemSearchFilter + { + /// + /// The model. + /// + Model, + + /// + /// The skinned model. + /// + SkinnedModel, + + /// + /// The material. + /// + Material, + + /// + /// The texture. + /// + Texture, + + /// + /// The scene. + /// + Scene, + + /// + /// The prefab. + /// + Prefab, + + /// + /// The script. + /// + Script, + + /// + /// The audio. + /// + Audio, + + /// + /// The animation. + /// + Animation, + + /// + /// The json. + /// + Json, + + /// + /// The particles. + /// + Particles, + + /// + /// The shader source files. + /// + Shader, + + /// + /// The other. + /// + Other, + } + + /// + /// Interface for objects that can reference the content items in order to receive events from them. + /// + [HideInEditor] + public interface IContentItemOwner + { + /// + /// Called when referenced item gets deleted (asset unloaded, file deleted, etc.). + /// Item should not be used after that. + /// + /// The item. + void OnItemDeleted(ContentItem item); + + /// + /// Called when referenced item gets renamed (filename change, path change, etc.) + /// + /// The item. + void OnItemRenamed(ContentItem item); + + /// + /// Called when item gets reimported or reloaded. + /// + /// The item. + void OnItemReimported(ContentItem item); + + /// + /// Called when referenced item gets disposed (editor closing, database internal changes, etc.). + /// Item should not be used after that. + /// + /// The item. + void OnItemDispose(ContentItem item); + } + + /// + /// Base class for all content items. + /// Item parent GUI control is always or null if not in a view. + /// + /// + [HideInEditor] + public abstract class ContentItem : Control + { + /// + /// The default margin size. + /// + public const int DefaultMarginSize = 4; + + /// + /// The default text height. + /// + public const int DefaultTextHeight = 42; + + /// + /// The default thumbnail size. + /// + public const int DefaultThumbnailSize = PreviewsCache.AssetIconSize; + + /// + /// The default width. + /// + public const int DefaultWidth = (DefaultThumbnailSize + 2 * DefaultMarginSize); + + /// + /// The default height. + /// + public const int DefaultHeight = (DefaultThumbnailSize + 2 * DefaultMarginSize + DefaultTextHeight); + + private ContentFolder _parentFolder; + + private bool _isMouseDown; + private Vector2 _mouseDownStartPos; + private readonly List _references = new List(4); + + private SpriteHandle _thumbnail; + private SpriteHandle _shadowIcon; + + /// + /// Gets the type of the item. + /// + public abstract ContentItemType ItemType { get; } + + /// + /// Gets the type of the item searching filter to use. + /// + public abstract ContentItemSearchFilter SearchFilter { get; } + + /// + /// Gets a value indicating whether this instance is asset. + /// + public bool IsAsset => ItemType == ContentItemType.Asset; + + /// + /// Gets a value indicating whether this instance is folder. + /// + public bool IsFolder => ItemType == ContentItemType.Folder; + + /// + /// Gets a value indicating whether this instance can have children. + /// + public bool CanHaveChildren => ItemType == ContentItemType.Folder; + + /// + /// Determines whether this item can be renamed. + /// + public virtual bool CanRename => true; + + /// + /// Gets a value indicating whether this item can be dragged and dropped. + /// + public virtual bool CanDrag => true; + + /// + /// Gets a value indicating whether this exists on drive. + /// + public virtual bool Exists => System.IO.File.Exists(Path); + + /// + /// Gets the parent folder. + /// + public ContentFolder ParentFolder + { + get => _parentFolder; + set + { + if (_parentFolder == value) + return; + + // Remove from old + _parentFolder?.Children.Remove(this); + + // Link + _parentFolder = value; + + // Add to new + _parentFolder?.Children.Add(this); + + OnParentFolderChanged(); + } + } + + /// + /// Gets the path to the item. + /// + public string Path { get; private set; } + + /// + /// Gets the item file name (filename with extension). + /// + public string FileName { get; internal set; } + + /// + /// Gets the item short name (filename without extension). + /// + public string ShortName { get; internal set; } + + /// + /// Gets the asset name relative to the project root folder (without asset file extension) + /// + public string NamePath + { + get + { + string result = Path; + if (result.StartsWith(Globals.ProjectFolder)) + { + result = result.Substring(Globals.ProjectFolder.Length + 1); + } + return StringUtils.GetPathWithoutExtension(result); + } + } + + /// + /// Gets the default name of the content item thumbnail. Returns null if not used. + /// + public virtual SpriteHandle DefaultThumbnail => SpriteHandle.Invalid; + + /// + /// Gets a value indicating whether this item has default thumbnail. + /// + public bool HasDefaultThumbnail => DefaultThumbnail.IsValid; + + /// + /// Gets or sets the item thumbnail. Warning, thumbnail may not be available if item has no references (). + /// + public SpriteHandle Thumbnail + { + get => _thumbnail; + set => _thumbnail = value; + } + + /// + /// True if force show file extension. + /// + public bool ShowFileExtension; + + /// + /// Initializes a new instance of the class. + /// + /// The path to the item. + protected ContentItem(string path) + : base(0, 0, DefaultWidth, DefaultHeight) + { + // Set path + Path = path; + FileName = System.IO.Path.GetFileName(path); + ShortName = System.IO.Path.GetFileNameWithoutExtension(path); + } + + /// + /// Updates the item path. Use with caution or even don't use it. It's dangerous. + /// + /// The new path. + internal virtual void UpdatePath(string value) + { + Assert.AreNotEqual(Path, value); + + // Set path + Path = StringUtils.NormalizePath(value); + FileName = System.IO.Path.GetFileName(value); + ShortName = System.IO.Path.GetFileNameWithoutExtension(value); + + // Fire event + OnPathChanged(); + for (int i = 0; i < _references.Count; i++) + { + _references[i].OnItemRenamed(this); + } + } + + /// + /// Refreshes the item thumbnail. + /// + public virtual void RefreshThumbnail() + { + // Skip if item has default thumbnail + if (HasDefaultThumbnail) + return; + + var thumbnails = Editor.Instance.Thumbnails; + + // Delete old thumbnail and remove it from the cache + thumbnails.DeletePreview(this); + + // Request new one (if need to) + if (_references.Count > 0) + { + thumbnails.RequestPreview(this); + } + } + + /// + /// Updates the tooltip text text. + /// + protected virtual void UpdateTooltipText() + { + TooltipText = "Path: " + Path; + } + + /// + /// Tries to find the item at the specified path. + /// + /// The path. + /// Found item or null if missing. + public virtual ContentItem Find(string path) + { + return Path == path ? this : null; + } + + /// + /// Tries to find a specified item in the assets tree. + /// + /// The item. + /// True if has been found, otherwise false. + public virtual bool Find(ContentItem item) + { + return this == item; + } + + /// + /// Tries to find the item with the specified id. + /// + /// The id. + /// Found item or null if missing. + public virtual ContentItem Find(Guid id) + { + return null; + } + + /// + /// Tries to find script with the given name. + /// + /// Name of the script. + /// Found script or null if missing. + public virtual ScriptItem FindScriptWitScriptName(string scriptName) + { + return null; + } + + /// + /// Gets a value indicating whether draw item shadow. + /// + protected virtual bool DrawShadow => false; + + /// + /// Gets the local space rectangle for element name text area. + /// + public Rectangle TextRectangle + { + get + { + var view = Parent as ContentView; + var size = Size; + switch (view?.ViewType ?? ContentViewType.Tiles) + { + case ContentViewType.Tiles: + { + var textHeight = DefaultTextHeight * size.X / DefaultWidth; + return new Rectangle(0, size.Y - textHeight, size.X, textHeight); + } + case ContentViewType.List: + { + var thumbnailSize = size.Y - 2 * DefaultMarginSize; + var textHeight = Mathf.Min(size.Y, 24.0f); + return new Rectangle(thumbnailSize + DefaultMarginSize * 2, (size.Y - textHeight) * 0.5f, size.X - textHeight - DefaultMarginSize * 3.0f, textHeight); + } + default: throw new ArgumentOutOfRangeException(); + } + } + } + + /// + /// Draws the item thumbnail. + /// + /// The thumbnail rectangle. + public void DrawThumbnail(ref Rectangle rectangle) + { + // Draw shadow + if (DrawShadow) + { + const float thumbnailInShadowSize = 50.0f; + var shadowRect = rectangle.MakeExpanded((DefaultThumbnailSize - thumbnailInShadowSize) * rectangle.Width / DefaultThumbnailSize * 1.3f); + if (!_shadowIcon.IsValid) + _shadowIcon = Editor.Instance.Icons.AssetShadow; + Render2D.DrawSprite(_shadowIcon, shadowRect); + } + + // Draw thumbnail + if (_thumbnail.IsValid) + Render2D.DrawSprite(_thumbnail, rectangle); + else + Render2D.FillRectangle(rectangle, Color.Black); + } + + /// + /// Gets the amount of references to that item. + /// + public int ReferencesCount => _references.Count; + + /// + /// Adds the reference to the item. + /// + /// The object. + public void AddReference(IContentItemOwner obj) + { + Assert.IsNotNull(obj); + Assert.IsFalse(_references.Contains(obj)); + + _references.Add(obj); + + // Check if need to generate preview + if (_references.Count == 1 && !_thumbnail.IsValid) + { + RequestThumbnail(); + } + } + + /// + /// Removes the reference from the item. + /// + /// The object. + public void RemoveReference(IContentItemOwner obj) + { + if (_references.Remove(obj)) + { + // Check if need to release the preview + if (_references.Count == 0 && _thumbnail.IsValid) + { + ReleaseThumbnail(); + } + } + } + + /// + /// Called when item gets renamed or location gets changed (path modification). + /// + public virtual void OnPathChanged() + { + } + + /// + /// Called when content item gets removed (by the user or externally). + /// + public virtual void OnDelete() + { + // Fire event + while (_references.Count > 0) + { + var reference = _references[0]; + reference.OnItemDeleted(this); + RemoveReference(reference); + } + + // Release thumbnail + if (_thumbnail.IsValid) + { + ReleaseThumbnail(); + } + } + + /// + /// Called when item parent folder gets changed. + /// + protected virtual void OnParentFolderChanged() + { + } + + /// + /// Requests the thumbnail. + /// + protected void RequestThumbnail() + { + Editor.Instance.Thumbnails.RequestPreview(this); + } + + /// + /// Releases the thumbnail. + /// + protected void ReleaseThumbnail() + { + // Simply unlink sprite + _thumbnail = SpriteHandle.Invalid; + } + + /// + /// Called when item gets reimported or reloaded. + /// + protected virtual void OnReimport() + { + for (int i = 0; i < _references.Count; i++) + _references[i].OnItemReimported(this); + RefreshThumbnail(); + } + + /// + /// Does the drag and drop operation with this asset. + /// + protected virtual void DoDrag() + { + if (!CanDrag) + return; + + DragData data; + + // Check if is selected + if (Parent is ContentView view && view.IsSelected(this)) + { + // Drag selected item + data = DragItems.GetDragData(view.Selection); + } + else + { + // Drag single item + data = DragItems.GetDragData(this); + } + + // Start drag operation + DoDragDrop(data); + } + + /// + protected override bool ShowTooltip => true; + + /// + public override bool OnShowTooltip(out string text, out Vector2 location, out Rectangle area) + { + UpdateTooltipText(); + var result = base.OnShowTooltip(out text, out location, out area); + location = Size * new Vector2(0.9f, 0.5f); + return result; + } + + /// + public override void Draw() + { + // Cache data + var size = Size; + var style = Style.Current; + var view = Parent as ContentView; + var isSelected = view.IsSelected(this); + var clientRect = new Rectangle(Vector2.Zero, size); + var textRect = TextRectangle; + Rectangle thumbnailRect; + TextAlignment nameAlignment; + switch (view.ViewType) + { + case ContentViewType.Tiles: + { + var thumbnailSize = size.X - 2 * DefaultMarginSize; + thumbnailRect = new Rectangle(DefaultMarginSize, DefaultMarginSize, thumbnailSize, thumbnailSize); + nameAlignment = TextAlignment.Center; + break; + } + case ContentViewType.List: + { + var thumbnailSize = size.Y - 2 * DefaultMarginSize; + thumbnailRect = new Rectangle(DefaultMarginSize, DefaultMarginSize, thumbnailSize, thumbnailSize); + nameAlignment = TextAlignment.Near; + break; + } + default: throw new ArgumentOutOfRangeException(); + } + + // Draw background + if (isSelected) + Render2D.FillRectangle(clientRect, Parent.ContainsFocus ? style.BackgroundSelected : style.LightBackground); + else if (IsMouseOver) + Render2D.FillRectangle(clientRect, style.BackgroundHighlighted); + + // Draw preview + DrawThumbnail(ref thumbnailRect); + + // Draw short name + Render2D.PushClip(ref textRect); + Render2D.DrawText(style.FontMedium, ShowFileExtension || view.ShowFileExtensions ? FileName : ShortName, textRect, style.Foreground, nameAlignment, TextAlignment.Center, TextWrapping.WrapWords, 0.75f, 0.95f); + Render2D.PopClip(); + } + + /// + public override bool OnMouseDown(Vector2 location, MouseButton button) + { + Focus(); + + if (button == MouseButton.Left) + { + // Cache data + _isMouseDown = true; + _mouseDownStartPos = location; + } + + return true; + } + + /// + public override bool OnMouseUp(Vector2 location, MouseButton button) + { + if (button == MouseButton.Left && _isMouseDown) + { + // Clear flag + _isMouseDown = false; + + // Fire event + (Parent as ContentView).OnItemClick(this); + } + + return base.OnMouseUp(location, button); + } + + /// + public override bool OnMouseDoubleClick(Vector2 location, MouseButton button) + { + Focus(); + + // Check if clicked on name area (and can be renamed) + if (CanRename && TextRectangle.Contains(ref location)) + { + // Rename + (Parent as ContentView).OnItemDoubleClickName(this); + } + else + { + // Open + (Parent as ContentView).OnItemDoubleClick(this); + } + + return true; + } + + /// + public override void OnMouseMove(Vector2 location) + { + // Check if start drag and drop + if (_isMouseDown && Vector2.Distance(_mouseDownStartPos, location) > 10.0f) + { + // Clear flag + _isMouseDown = false; + + // Start drag drop + DoDrag(); + } + } + + /// + public override void OnMouseLeave() + { + // Check if start drag and drop + if (_isMouseDown) + { + // Clear flag + _isMouseDown = false; + + // Start drag drop + DoDrag(); + } + + base.OnMouseLeave(); + } + + /// + public override int Compare(Control other) + { + if (other is ContentItem otherItem) + { + if (otherItem.IsFolder) + return 1; + return string.Compare(ShortName, otherItem.ShortName, StringComparison.InvariantCulture); + } + + return base.Compare(other); + } + + /// + public override void OnDestroy() + { + // Fire event + while (_references.Count > 0) + { + var reference = _references[0]; + reference.OnItemDispose(this); + RemoveReference(reference); + } + + // Release thumbnail + if (_thumbnail.IsValid) + { + ReleaseThumbnail(); + } + + base.OnDestroy(); + } + + /// + public override string ToString() + { + return Path; + } + } +} diff --git a/Source/Editor/Content/Items/CppScriptItem.cs b/Source/Editor/Content/Items/CppScriptItem.cs new file mode 100644 index 000000000..3490cb4c6 --- /dev/null +++ b/Source/Editor/Content/Items/CppScriptItem.cs @@ -0,0 +1,25 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains C++ script file with source code. + /// + /// + public class CppScriptItem : ScriptItem + { + /// + /// Initializes a new instance of the class. + /// + /// The path to the item. + public CppScriptItem(string path) + : base(path) + { + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.CppScript64; + } +} diff --git a/Source/Editor/Content/Items/FileItem.cs b/Source/Editor/Content/Items/FileItem.cs new file mode 100644 index 000000000..f7ba3c9bc --- /dev/null +++ b/Source/Editor/Content/Items/FileItem.cs @@ -0,0 +1,31 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item for the auxiliary files. + /// + /// + public class FileItem : ContentItem + { + /// + /// Initializes a new instance of the class. + /// + /// The path to the file. + public FileItem(string path) + : base(path) + { + } + + /// + public override ContentItemType ItemType => ContentItemType.Other; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Other; + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + } +} diff --git a/Source/Editor/Content/Items/JsonAssetItem.cs b/Source/Editor/Content/Items/JsonAssetItem.cs new file mode 100644 index 000000000..b217aa8bc --- /dev/null +++ b/Source/Editor/Content/Items/JsonAssetItem.cs @@ -0,0 +1,34 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Asset item stored in a Json format file. + /// + /// + public class JsonAssetItem : AssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The path. + /// The identifier. + /// Name of the resource type. + public JsonAssetItem(string path, Guid id, string typeName) + : base(path, typeName, ref id) + { + } + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Json; + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + + /// + protected override bool DrawShadow => false; + } +} diff --git a/Source/Editor/Content/Items/NewItem.cs b/Source/Editor/Content/Items/NewItem.cs new file mode 100644 index 000000000..49e459067 --- /dev/null +++ b/Source/Editor/Content/Items/NewItem.cs @@ -0,0 +1,48 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Helper content item used to mock UI during creating new assets by . + /// + /// + public sealed class NewItem : ContentItem + { + /// + /// Gets the proxy object related to the created asset. + /// + public ContentProxy Proxy { get; } + + /// + /// Gets the argument passed to the proxy for the item creation. In most cases it is null. + /// + public object Argument { get; } + + /// + /// Initializes a new instance of the class. + /// + /// The path for the new item. + /// The content proxy object. + /// The argument passed to the proxy for the item creation. In most cases it is null. + public NewItem(string path, ContentProxy proxy, object arg) + : base(path) + { + Proxy = proxy; + Argument = arg; + } + + /// + public override ContentItemType ItemType => ContentItemType.Other; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Other; + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + + /// + protected override bool DrawShadow => true; + } +} diff --git a/Source/Editor/Content/Items/PrefabItem.cs b/Source/Editor/Content/Items/PrefabItem.cs new file mode 100644 index 000000000..eea4a2406 --- /dev/null +++ b/Source/Editor/Content/Items/PrefabItem.cs @@ -0,0 +1,39 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class PrefabItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + public PrefabItem(string path, Guid id) + : base(path, id, PrefabProxy.AssetTypename) + { + } + + /// + public override ContentItemType ItemType => ContentItemType.Asset; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Prefab; + + /// + public override SpriteHandle DefaultThumbnail => SpriteHandle.Invalid; + + /// + public override bool IsOfType(Type type) + { + return type.IsAssignableFrom(typeof(Prefab)); + } + } +} diff --git a/Source/Editor/Content/Items/SceneItem.cs b/Source/Editor/Content/Items/SceneItem.cs new file mode 100644 index 000000000..819567598 --- /dev/null +++ b/Source/Editor/Content/Items/SceneItem.cs @@ -0,0 +1,39 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains data. + /// + /// + public sealed class SceneItem : JsonAssetItem + { + /// + /// Initializes a new instance of the class. + /// + /// The asset path. + /// The asset identifier. + public SceneItem(string path, Guid id) + : base(path, id, Scene.EditorPickerTypename) + { + } + + /// + public override ContentItemType ItemType => ContentItemType.Scene; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Scene; + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Scene64; + + /// + public override bool IsOfType(Type type) + { + return type.IsAssignableFrom(typeof(SceneAsset)); + } + } +} diff --git a/Source/Editor/Content/Items/ScriptItem.cs b/Source/Editor/Content/Items/ScriptItem.cs new file mode 100644 index 000000000..b366ebe15 --- /dev/null +++ b/Source/Editor/Content/Items/ScriptItem.cs @@ -0,0 +1,97 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Text; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains script file with source code. + /// + /// + public abstract class ScriptItem : ContentItem + { + /// + /// Gets the name of the script (deducted from the asset name). + /// + public string ScriptName => FilterScriptName(ShortName); + + /// + /// Checks if the script item references the valid use script type that can be used in a gameplay. + /// + public bool IsValid => ScriptsBuilder.FindScript(ScriptName) != null; + + /// + /// Initializes a new instance of the class. + /// + /// The path to the item. + protected ScriptItem(string path) + : base(path) + { + ShowFileExtension = true; + } + + private static string FilterScriptName(string input) + { + var length = input.Length; + var sb = new StringBuilder(length); + + // Skip leading '0-9' characters + for (int i = 0; i < length; i++) + { + var c = input[i]; + + if (char.IsLetterOrDigit(c) && !char.IsDigit(c)) + break; + } + + // Remove all characters that are not '_' or 'a-z' or 'A-Z' or '0-9' + for (int i = 0; i < length; i++) + { + var c = input[i]; + + if (c == '_' || char.IsLetterOrDigit(c)) + sb.Append(c); + } + + return sb.ToString(); + } + + /// + /// Creates the name of the script for the given file. + /// + /// The path. + /// Script name + public static string CreateScriptName(string path) + { + return FilterScriptName(System.IO.Path.GetFileNameWithoutExtension(path)); + } + + /// + public override ContentItemType ItemType => ContentItemType.Script; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Script; + + /// + public override ScriptItem FindScriptWitScriptName(string scriptName) + { + return scriptName == ScriptName ? this : null; + } + + /// + public override void OnPathChanged() + { + ScriptsBuilder.MarkWorkspaceDirty(); + + base.OnPathChanged(); + } + + /// + public override void OnDelete() + { + ScriptsBuilder.MarkWorkspaceDirty(); + + base.OnDelete(); + } + } +} diff --git a/Source/Editor/Content/Items/ShaderSourceItem.cs b/Source/Editor/Content/Items/ShaderSourceItem.cs new file mode 100644 index 000000000..0358eff77 --- /dev/null +++ b/Source/Editor/Content/Items/ShaderSourceItem.cs @@ -0,0 +1,32 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content item that contains shader source code. + /// + /// + public class ShaderSourceItem : ContentItem + { + /// + /// Initializes a new instance of the class. + /// + /// The path to the item. + public ShaderSourceItem(string path) + : base(path) + { + ShowFileExtension = true; + } + + /// + public override ContentItemType ItemType => ContentItemType.Asset; + + /// + public override ContentItemSearchFilter SearchFilter => ContentItemSearchFilter.Shader; + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.Document64; + } +} diff --git a/Source/Editor/Content/Items/VisualScriptItem.cs b/Source/Editor/Content/Items/VisualScriptItem.cs new file mode 100644 index 000000000..3fa3b463b --- /dev/null +++ b/Source/Editor/Content/Items/VisualScriptItem.cs @@ -0,0 +1,552 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using FlaxEditor.Scripting; +using FlaxEngine; +using FlaxEngine.Json; +using Object = FlaxEngine.Object; + +namespace FlaxEditor.Content +{ + sealed class VisualScriptParameterInfo : IScriptMemberInfo + { + private readonly VisualScriptType _type; + private readonly VisjectGraphParameter _parameter; + + internal VisualScriptParameterInfo(VisualScriptType type, VisjectGraphParameter parameter) + { + _type = type; + _parameter = parameter; + } + + /// + public string Name => _parameter.Name; + + /// + public bool IsPublic => _parameter.IsPublic; + + /// + public bool IsStatic => false; + + /// + public bool IsVirtual => false; + + /// + public bool IsAbstract => false; + + /// + public bool IsGeneric => false; + + /// + public bool IsField => true; + + /// + public bool IsProperty => false; + + /// + public bool IsMethod => false; + + /// + public bool HasGet => true; + + /// + public bool HasSet => true; + + /// + public int ParametersCount => 0; + + /// + public ScriptType DeclaringType => new ScriptType(_type); + + /// + public ScriptType ValueType + { + get + { + var type = TypeUtils.GetType(_parameter.TypeTypeName); + return type ? type : new ScriptType(_parameter.Type); + } + } + + /// + public bool HasAttribute(Type attributeType, bool inherit) + { + return Surface.SurfaceMeta.HasAttribute(_parameter, attributeType); + } + + /// + public object[] GetAttributes(bool inherit) + { + return Surface.SurfaceMeta.GetAttributes(_parameter); + } + + /// + public ScriptMemberInfo.Parameter[] GetParameters() + { + return null; + } + + /// + public object GetValue(object obj) + { + return _type.Asset.GetScriptInstanceParameterValue(_parameter.Name, (Object)obj); + } + + /// + public void SetValue(object obj, object value) + { + _type.Asset.SetScriptInstanceParameterValue(_parameter.Name, (Object)obj, value); + } + } + + sealed class VisualScriptMethodInfo : IScriptMemberInfo + { + [Flags] + private enum Flags + { + None = 0, + Static = 1, + Virtual = 2, + Override = 4, + } + + private readonly VisualScriptType _type; + private readonly int _index; + private readonly string _name; + private readonly byte _flags; + private readonly ScriptType _returnType; + private readonly ScriptMemberInfo.Parameter[] _parameters; + private object[] _attributes; + + internal VisualScriptMethodInfo(VisualScriptType type, int index) + { + _type = type; + _index = index; + type.Asset.GetMethodSignature(index, out _name, out _flags, out var returnTypeName, out var paramNames, out var paramTypeNames, out var paramOuts); + _returnType = TypeUtils.GetType(returnTypeName); + if (paramNames.Length != 0) + { + _parameters = new ScriptMemberInfo.Parameter[paramNames.Length]; + for (int i = 0; i < _parameters.Length; i++) + { + _parameters[i] = new ScriptMemberInfo.Parameter + { + Name = paramNames[i], + Type = TypeUtils.GetType(paramTypeNames[i]), + IsOut = paramOuts[i], + }; + } + } + else + { + _parameters = Utils.GetEmptyArray(); + } + } + + /// + public string Name => _name; + + /// + public bool IsPublic => true; + + /// + public bool IsStatic => (_flags & (byte)Flags.Static) != 0; + + /// + public bool IsVirtual => (_flags & (byte)Flags.Virtual) != 0; + + /// + public bool IsAbstract => false; + + /// + public bool IsGeneric => false; + + /// + public bool IsField => false; + + /// + public bool IsProperty => false; + + /// + public bool IsMethod => true; + + /// + public bool HasGet => false; + + /// + public bool HasSet => false; + + /// + public int ParametersCount => _parameters.Length; + + /// + public ScriptType DeclaringType => (_flags & (byte)Flags.Override) != 0 ? _type.BaseType : new ScriptType(_type); + + /// + public ScriptType ValueType => _returnType; + + /// + public bool HasAttribute(Type attributeType, bool inherit) + { + return GetAttributes(inherit).Any(x => x.GetType() == attributeType); + } + + /// + public object[] GetAttributes(bool inherit) + { + if (_attributes == null) + { + var data = _type.Asset.GetMethodMetaData(_index, Surface.SurfaceMeta.AttributeMetaTypeID); + _attributes = Surface.SurfaceMeta.GetAttributes(data); + } + return _attributes; + } + + /// + public ScriptMemberInfo.Parameter[] GetParameters() + { + return _parameters; + } + + /// + public object GetValue(object obj) + { + throw new NotSupportedException(); + } + + /// + public void SetValue(object obj, object value) + { + throw new NotSupportedException(); + } + } + + /// + /// The implementation of the + /// + /// + [HideInEditor] + public sealed class VisualScriptType : IScriptType + { + private VisualScript _asset; + private ScriptMemberInfo[] _parameters; + private ScriptMemberInfo[] _methods; + private object[] _attributes; + + /// + /// Gets the Visual Script asset that contains this type. + /// + public VisualScript Asset => _asset; + + internal VisualScriptType(VisualScript asset) + { + _asset = asset; + } + + private void CacheData() + { + if (_parameters != null) + return; + if (_asset.WaitForLoaded()) + return; + FlaxEngine.Content.AssetReloading += OnAssetReloading; + + // Cache Visual Script parameters info + var parameters = _asset.Parameters; + if (parameters.Length != 0) + { + _parameters = new ScriptMemberInfo[parameters.Length]; + for (int i = 0; i < parameters.Length; i++) + _parameters[i] = new ScriptMemberInfo(new VisualScriptParameterInfo(this, parameters[i])); + } + else + _parameters = Utils.GetEmptyArray(); + + // Cache Visual Script methods info + var methodsCount = _asset.GetMethodsCount(); + if (methodsCount != 0) + { + _methods = new ScriptMemberInfo[methodsCount]; + for (int i = 0; i < methodsCount; i++) + _methods[i] = new ScriptMemberInfo(new VisualScriptMethodInfo(this, i)); + } + else + _methods = Utils.GetEmptyArray(); + + // Cache Visual Script attributes + var attributesData = _asset.GetMetaData(Surface.SurfaceMeta.AttributeMetaTypeID); + if (attributesData != null && attributesData.Length != 0) + { + _attributes = Surface.SurfaceMeta.GetAttributes(attributesData); + } + else + _attributes = Utils.GetEmptyArray(); + } + + private void OnAssetReloading(Asset asset) + { + if (asset == _asset) + { + _parameters = null; + _methods = null; + FlaxEngine.Content.AssetReloading -= OnAssetReloading; + } + } + + internal void Dispose() + { + OnAssetReloading(_asset); + _asset = null; + } + + /// + public string Name => Path.GetFileNameWithoutExtension(_asset.Path); + + /// + public string Namespace => string.Empty; + + /// + public string TypeName => JsonSerializer.GetStringID(_asset.ID); + + /// + public bool IsPublic => true; + + /// + public bool IsAbstract => _asset && !_asset.WaitForLoaded() && (_asset.Meta.Flags & VisualScript.Flags.Abstract) != 0; + + /// + public bool IsSealed => _asset && !_asset.WaitForLoaded() && (_asset.Meta.Flags & VisualScript.Flags.Sealed) != 0; + + /// + public bool IsEnum => false; + + /// + public bool IsClass => true; + + /// + public bool IsArray => false; + + /// + public bool IsValueType => false; + + /// + public bool IsGenericType => false; + + /// + public bool IsReference => false; + + /// + public bool IsPointer => false; + + /// + public bool IsStatic => false; + + /// + public bool CanCreateInstance => !IsAbstract; + + /// + public ScriptType BaseType => _asset && !_asset.WaitForLoaded() ? TypeUtils.GetType(_asset.Meta.BaseTypename) : ScriptType.Null; + + /// + public ContentItem ContentItem => _asset ? Editor.Instance.ContentDatabase.FindAsset(_asset.ID) : null; + + /// + public object CreateInstance() + { + return Object.New(TypeName); + } + + /// + public bool HasAttribute(Type attributeType, bool inherit) + { + if (inherit && BaseType.HasAttribute(attributeType, true)) + return true; + CacheData(); + return _attributes.Any(x => x.GetType() == attributeType); + } + + /// + public object[] GetAttributes(bool inherit) + { + CacheData(); + if (inherit) + { + var thisAttributes = _attributes; + var baseAttributes = BaseType.GetAttributes(true); + if (thisAttributes.Length != 0) + { + if (baseAttributes.Length != 0) + { + var resultAttributes = new object[thisAttributes.Length + baseAttributes.Length]; + Array.Copy(thisAttributes, 0, resultAttributes, 0, thisAttributes.Length); + Array.Copy(baseAttributes, 0, resultAttributes, thisAttributes.Length, baseAttributes.Length); + return resultAttributes; + } + return thisAttributes; + } + return baseAttributes; + } + return _attributes; + } + + /// + public ScriptMemberInfo[] GetMembers(string name, MemberTypes type, BindingFlags bindingAttr) + { + var members = new List(); + if ((bindingAttr & BindingFlags.DeclaredOnly) == 0) + { + var baseType = BaseType; + if (baseType) + members.AddRange(baseType.GetMembers(name, type, bindingAttr)); + } + CacheData(); + if ((type & MemberTypes.Field) != 0) + { + foreach (var parameter in _parameters) + { + if (parameter.Filter(name, bindingAttr)) + members.Add(parameter); + } + } + if ((type & MemberTypes.Method) != 0) + { + foreach (var method in _methods) + { + if (method.Filter(name, bindingAttr)) + members.Add(method); + } + } + return members.ToArray(); + } + + /// + public ScriptMemberInfo[] GetMembers(BindingFlags bindingAttr) + { + var members = new List(); + if ((bindingAttr & BindingFlags.DeclaredOnly) == 0) + { + var baseType = BaseType; + if (baseType) + members.AddRange(baseType.GetMembers(bindingAttr)); + } + CacheData(); + foreach (var parameter in _parameters) + { + if (parameter.Filter(bindingAttr)) + members.Add(parameter); + } + foreach (var method in _methods) + { + if (method.Filter(bindingAttr)) + members.Add(method); + } + return members.ToArray(); + } + + /// + public ScriptMemberInfo[] GetFields(BindingFlags bindingAttr) + { + CacheData(); + var baseType = BaseType; + if (baseType) + { + var baseFields = baseType.GetFields(bindingAttr); + var newArray = new ScriptMemberInfo[_parameters.Length + baseFields.Length]; + Array.Copy(_parameters, newArray, _parameters.Length); + Array.Copy(baseFields, 0, newArray, _parameters.Length, baseFields.Length); + return newArray; + } + return _parameters; + } + + /// + public ScriptMemberInfo[] GetProperties(BindingFlags bindingAttr) + { + var baseType = BaseType; + if (baseType) + return baseType.GetProperties(bindingAttr); + return Utils.GetEmptyArray(); + } + + /// + public ScriptMemberInfo[] GetMethods(BindingFlags bindingAttr) + { + CacheData(); + var baseType = BaseType; + if (baseType) + { + var baseMethods = baseType.GetMethods(bindingAttr); + var newArray = new ScriptMemberInfo[_methods.Length + baseMethods.Length]; + Array.Copy(_methods, newArray, _methods.Length); + Array.Copy(baseMethods, 0, newArray, _methods.Length, baseMethods.Length); + return newArray; + } + return _methods; + } + } + + /// + /// Implementation of for assets. + /// + /// + public class VisualScriptItem : BinaryAssetItem + { + /// + /// The cached list of all Visual Script assets found in the workspace (engine, game and plugin projects). Updated on workspace modifications. + /// + public static readonly List VisualScripts = new List(); + + private VisualScriptType _scriptType; + + /// + /// The Visual Script type. Can be null if failed to load asset. + /// + public ScriptType ScriptType + { + get + { + if (_scriptType == null) + { + var asset = FlaxEngine.Content.LoadAsync(ID); + if (asset) + _scriptType = new VisualScriptType(asset); + } + return new ScriptType(_scriptType); + } + } + + /// + public VisualScriptItem(string path, ref Guid id, string typeName, Type type) + : base(path, ref id, typeName, type, ContentItemSearchFilter.Script) + { + VisualScripts.Add(this); + Editor.Instance.CodeEditing.ClearTypes(); + } + + /// + public override SpriteHandle DefaultThumbnail => Editor.Instance.Icons.CodeScript64; + + /// + protected override bool DrawShadow => false; + + /// + public override void OnDestroy() + { + if (IsDisposing) + return; + if (_scriptType != null) + { + Editor.Instance.CodeEditing.ClearTypes(); + _scriptType.Dispose(); + _scriptType = null; + } + VisualScripts.Remove(this); + + base.OnDestroy(); + } + } +} diff --git a/Source/Editor/Content/PreviewsCache.cpp b/Source/Editor/Content/PreviewsCache.cpp new file mode 100644 index 000000000..ca99bf07c --- /dev/null +++ b/Source/Editor/Content/PreviewsCache.cpp @@ -0,0 +1,275 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "PreviewsCache.h" +#include "Engine/Core/Log.h" +#include "Engine/Graphics/GPUContext.h" +#include "Engine/Threading/Threading.h" +#include "Engine/Graphics/RenderTools.h" +#include "Engine/Content/Factories/BinaryAssetFactory.h" +#include "Engine/ContentImporters/AssetsImportingManager.h" +#include "Engine/Content/Upgraders/TextureAssetUpgrader.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Graphics/GPUDevice.h" + +// Default asset preview icon size (both width and height since it's a square) +#define ASSET_ICON_SIZE 64 + +// Default assets previews atlas size +#define ASSETS_ICONS_ATLAS_SIZE 1024 + +// Default assets previews atlas margin between icons +#define ASSETS_ICONS_ATLAS_MARGIN 4 + +// Default format for assets previews atlas texture +#define ASSETS_ICONS_ATLAS_FORMAT PixelFormat::R8G8B8A8_UNorm + +// Util macros +#define ASSETS_ICONS_PER_ROW (int)((float)ASSETS_ICONS_ATLAS_SIZE / (ASSET_ICON_SIZE + ASSETS_ICONS_ATLAS_MARGIN)) +#define ASSETS_ICONS_PER_ATLAS (ASSETS_ICONS_PER_ROW*ASSETS_ICONS_PER_ROW) + +bool PreviewsCache::FlushTask::Run() +{ + // Check if has valid data downloaded + if (_data.GetMipLevels() != 1) + { + LOG(Warning, "Failed to flush asset previews atlas \'{0}\'.", _cache->ToString()); + return true; + } + auto mipData = _data.GetData(0, 0); + ASSERT(mipData->DepthPitch == CalculateTextureMemoryUsage(_cache->GetTexture()->Format(), _cache->Width(), _cache->Height(), 1)); + + ScopeLock lock(_cache->Locker); + + // Link chunks (don't allocate additional memory) + auto mipChunk = _cache->GetOrCreateChunk(0); + auto dataChunk = _cache->GetOrCreateChunk(15); + mipChunk->Data.Link(mipData->Data); + dataChunk->Data.Link((byte*)_cache->_assets.Get(), sizeof(Guid) * _cache->_assets.Count()); + + // Prepare asset data + AssetInitData data; + data.SerializedVersion = 4; + data.CustomData.Copy(_cache->_texture.GetHeader()); + + // Save (use silent mode to prevent asset reloading) + bool saveResult = _cache->SaveAsset(data, true); + mipChunk->Data.Release(); + dataChunk->Data.Release(); + if (saveResult) + { + LOG(Warning, "Failed to save asset previews atlas \'{0}\'.", _cache->ToString()); + return true; + } + + // Clear flag + _cache->_isDirty = false; + + return false; +} + +void PreviewsCache::FlushTask::OnEnd() +{ + ASSERT(_cache->_flushTask == this); + _cache->_flushTask = nullptr; + + // Base + ThreadPoolTask::OnEnd(); +} + +REGISTER_BINARY_ASSET(PreviewsCache, "FlaxEditor.PreviewsCache", ::New(), false); + +PreviewsCache::PreviewsCache(const SpawnParams& params, const AssetInfo* info) + : SpriteAtlas(params, info) +{ +} + +bool PreviewsCache::IsReady() const +{ + return IsLoaded() && GetTexture()->MipLevels() > 0; +} + +SpriteHandle PreviewsCache::FindSlot(const Guid& id) +{ + if (WaitForLoaded()) + return SpriteHandle::Invalid; + + // Find entry + int32 index; + if (_assets.Find(id, index)) + { + const String spriteName = StringUtils::ToString(index); + return FindSprite(spriteName); + } + + return SpriteHandle::Invalid; +} + +Asset::LoadResult PreviewsCache::load() +{ + // Load previews data + auto previewsMetaChunk = GetChunk(15); + if (previewsMetaChunk == nullptr || previewsMetaChunk->IsMissing()) + return LoadResult::MissingDataChunk; + if (previewsMetaChunk->Size() != ASSETS_ICONS_PER_ATLAS * sizeof(Guid)) + return LoadResult::Failed; + _assets.Set(previewsMetaChunk->Get(), ASSETS_ICONS_PER_ATLAS); + + // Setup atlas sprites array + Sprite sprite; + sprite.Area.Size = static_cast(ASSET_ICON_SIZE) / ASSETS_ICONS_ATLAS_SIZE; + const float positionScale = static_cast(ASSET_ICON_SIZE + ASSETS_ICONS_ATLAS_MARGIN) / ASSETS_ICONS_ATLAS_SIZE; + const float positionOffset = static_cast(ASSETS_ICONS_ATLAS_MARGIN) / ASSETS_ICONS_ATLAS_SIZE; + for (int32 i = 0; i < ASSETS_ICONS_PER_ATLAS; i++) + { + sprite.Area.Location = Vector2(static_cast(i % ASSETS_ICONS_PER_ROW), static_cast(i / ASSETS_ICONS_PER_ROW)) * positionScale + positionOffset; + sprite.Name = StringUtils::ToString(i); + Sprites.Add(sprite); + } + + _isDirty = false; + return TextureBase::load(); +} + +void PreviewsCache::unload(bool isReloading) +{ + // Wait for flush end + if (IsFlushing()) + { + _flushTask->Cancel(); + } + + // Release data + _assets.Clear(); + + SpriteAtlas::unload(isReloading); +} + +AssetChunksFlag PreviewsCache::getChunksToPreload() const +{ + // Preload previews ids data chunk + return GET_CHUNK_FLAG(15); +} + +bool PreviewsCache::HasFreeSlot() const +{ + // Unused slot is which ID is Empty + // (Search from back to front since slots are allocated from front to back - it will be faster) + return _assets.FindLast(Guid::Empty) != INVALID_INDEX; +} + +SpriteHandle PreviewsCache::OccupySlot(GPUTexture* source, const Guid& id) +{ + if (WaitForLoaded()) + return SpriteHandle::Invalid; + + // Find free slot and for that asset + int32 index = _assets.Find(id); + if (index == INVALID_INDEX) + index = _assets.Find(Guid::Empty); + if (index == INVALID_INDEX) + { + LOG(Warning, "Cannot find free slot in the asset previews atlas."); + return SpriteHandle::Invalid; + } + + ASSERT(IsReady()); + + // Copy texture region + uint32 x = ASSETS_ICONS_ATLAS_MARGIN + index % ASSETS_ICONS_PER_ROW * (ASSET_ICON_SIZE + ASSETS_ICONS_ATLAS_MARGIN); + uint32 y = ASSETS_ICONS_ATLAS_MARGIN + index / ASSETS_ICONS_PER_ROW * (ASSET_ICON_SIZE + ASSETS_ICONS_ATLAS_MARGIN); + GPUDevice::Instance->GetMainContext()->CopyTexture(GetTexture(), 0, x, y, 0, source, 0); + + // Occupy slot + _assets[index] = id; + + // Get sprite handle + const String spriteName = StringUtils::ToString(index); + const auto slot = FindSprite(spriteName); + if (!slot.IsValid()) + { + LOG(Warning, "Cannot create sprite handle for asset preview."); + return SpriteHandle::Invalid; + } + + // Set dirty flag + _isDirty = true; + + return slot; +} + +bool PreviewsCache::ReleaseSlot(const Guid& id) +{ + bool result = false; + ScopeLock lock(Locker); + + int32 index = _assets.Find(id); + if (index != INVALID_INDEX) + { + _assets[index] = Guid::Empty; + result = true; + } + + return result; +} + +void PreviewsCache::Flush() +{ + ScopeLock lock(Locker); + + // Check if is fully loaded and is dirty and is not during downloading + if (_isDirty && !IsFlushing() && IsReady()) + { + // Spawn flushing tasks sequence + _flushTask = New(this); + auto downloadDataTask = GetTexture()->DownloadDataAsync(_flushTask->GetData()); + downloadDataTask->ContinueWith(_flushTask); + downloadDataTask->Start(); + } +} + +#if COMPILE_WITH_ASSETS_IMPORTER + +bool PreviewsCache::Create(const StringView& outputPath) +{ + LOG(Info, "Creating new atlas '{0}' for assets previews cache. Size: {1}, capacity: {2}", outputPath, ASSETS_ICONS_ATLAS_SIZE, ASSETS_ICONS_PER_ATLAS); + return AssetsImportingManager::Create(&create, outputPath); +} + +CreateAssetResult PreviewsCache::create(CreateAssetContext& context) +{ + // Base + IMPORT_SETUP(PreviewsCache, 4); + + // Create texture header (custom data) + TextureHeader header; + header.Width = ASSETS_ICONS_ATLAS_SIZE; + header.Height = ASSETS_ICONS_ATLAS_SIZE; + header.Format = ASSETS_ICONS_ATLAS_FORMAT; + header.IsSRGB = false; + header.IsCubeMap = false; + header.MipLevels = 1; + header.NeverStream = true; + header.Type = TextureFormatType::Unknown; + context.Data.CustomData.Copy(&header); + + // Create blank image (chunk 0) + uint64 imageSize = CalculateTextureMemoryUsage(ASSETS_ICONS_ATLAS_FORMAT, ASSETS_ICONS_ATLAS_SIZE, ASSETS_ICONS_ATLAS_SIZE, 1); + ASSERT(imageSize <= MAX_int32); + if (context.AllocateChunk(0)) + return CreateAssetResult::CannotAllocateChunk; + auto mipChunk = context.Data.Header.Chunks[0]; + mipChunk->Data.Allocate((int32)imageSize); + Platform::MemoryClear(mipChunk->Get(), mipChunk->Size()); + + // Create IDs cache array (chunk 15) + int32 idsSize = sizeof(Guid) * ASSETS_ICONS_PER_ATLAS; + if (context.AllocateChunk(15)) + return CreateAssetResult::CannotAllocateChunk; + auto dataChunk = context.Data.Header.Chunks[15]; + dataChunk->Data.Allocate(idsSize); + Platform::MemoryClear(dataChunk->Get(), dataChunk->Size()); + + return CreateAssetResult::Ok; +} + +#endif diff --git a/Source/Editor/Content/PreviewsCache.cs b/Source/Editor/Content/PreviewsCache.cs new file mode 100644 index 000000000..acca11589 --- /dev/null +++ b/Source/Editor/Content/PreviewsCache.cs @@ -0,0 +1,40 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor +{ + [HideInEditor] + partial class PreviewsCache + { + /// + /// The default asset previews icon size (both width and height since it's a square). + /// + public const int AssetIconSize = 64; + + /// + /// The default assets previews atlas size + /// + public const int AssetIconsAtlasSize = 1024; + + /// + /// The default assets previews atlas margin (between icons) + /// + public const int AssetIconsAtlasMargin = 4; + + /// + /// The amount of asset icons per atlas row. + /// + public const int AssetIconsPerRow = (int)((float)AssetIconsAtlasSize / (AssetIconSize + AssetIconsAtlasMargin)); + + /// + /// The amount of asset icons per atlas. + /// + public const int AssetIconsPerAtlas = AssetIconsPerRow * AssetIconsPerRow; + + /// + /// The default format of previews atlas. + /// + public const PixelFormat AssetIconsAtlasFormat = PixelFormat.R8G8B8A8_UNorm; + } +} diff --git a/Source/Editor/Content/PreviewsCache.h b/Source/Editor/Content/PreviewsCache.h new file mode 100644 index 000000000..63ffb8c6e --- /dev/null +++ b/Source/Editor/Content/PreviewsCache.h @@ -0,0 +1,128 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Render2D/SpriteAtlas.h" +#include "Engine/Content/Asset.h" +#include "Engine/ContentImporters/Types.h" +#include "Engine/Graphics/Textures/GPUTexture.h" +#include "Engine/Threading/ThreadPoolTask.h" +#include "Engine/Graphics/Textures/TextureData.h" + +/// +/// Asset which contains set of asset items thumbnails (cached previews). +/// +API_CLASS(Sealed, NoSpawn, Namespace="FlaxEditor") class PreviewsCache : public SpriteAtlas +{ +DECLARE_BINARY_ASSET_HEADER(PreviewsCache, TexturesSerializedVersion); +private: + + class FlushTask : public ThreadPoolTask + { + private: + + PreviewsCache* _cache; + TextureData _data; + + public: + + FlushTask(PreviewsCache* cache) + : _cache(cache) + { + } + + public: + + /// + /// Gets the texture data container. + /// + TextureData& GetData() + { + return _data; + } + + protected: + + // [ThreadPoolTask] + bool Run() override; + void OnEnd() override; + }; + +private: + + Array _assets; + bool _isDirty = false; + FlushTask* _flushTask = nullptr; + +public: + + /// + /// Determines whether this atlas is ready (is loaded and has texture streamed). + /// + API_PROPERTY() bool IsReady() const; + + /// + /// Finds the preview icon for given asset ID. + /// + /// The asset id to find preview for it. + /// The output sprite slot handle or invalid if invalid in nothing found. + API_FUNCTION() SpriteHandle FindSlot(const Guid& id); + + /// + /// Determines whether this atlas has one or more free slots for the asset preview. + /// + API_PROPERTY() bool HasFreeSlot() const; + + /// + /// Occupies the atlas slot. + /// + /// The source texture to insert. + /// The asset identifier. + /// The added sprite slot handle or invalid if invalid in failed to occupy slot. + API_FUNCTION() SpriteHandle OccupySlot(GPUTexture* source, const Guid& id); + + /// + /// Releases the used slot. + /// + /// The asset identifier. + /// True if slot has been release, otherwise it was not found. + API_FUNCTION() bool ReleaseSlot(const Guid& id); + + /// + /// Flushes atlas data from the GPU to the asset storage (saves data). + /// + API_FUNCTION() void Flush(); + + /// + /// Determines whether this instance is flushing. + /// + /// True if this previews cache is flushing, otherwise false. + FORCE_INLINE bool IsFlushing() const + { + return _flushTask != nullptr; + } + +public: + +#if COMPILE_WITH_ASSETS_IMPORTER + + /// + /// Creates a new atlas. + /// + /// The output asset file path. + /// True if this previews cache is flushing, otherwise false. + API_FUNCTION() static bool Create(const StringView& outputPath); + +private: + + static CreateAssetResult create(CreateAssetContext& context); + +#endif + +protected: + + // [BinaryAsset] + LoadResult load() override; + void unload(bool isReloading) override; + AssetChunksFlag getChunksToPreload() const override; +}; diff --git a/Source/Editor/Content/Proxy/AnimationGraphFunctionProxy.cs b/Source/Editor/Content/Proxy/AnimationGraphFunctionProxy.cs new file mode 100644 index 000000000..9ac2c407e --- /dev/null +++ b/Source/Editor/Content/Proxy/AnimationGraphFunctionProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class AnimationGraphFunctionProxy : BinaryAssetProxy + { + /// + public override string Name => "Animation Graph Function"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new AnimationGraphFunctionWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x991597); + + /// + public override Type AssetType => typeof(AnimationGraphFunction); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.AnimationGraphFunction, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/AnimationGraphProxy.cs b/Source/Editor/Content/Proxy/AnimationGraphProxy.cs new file mode 100644 index 000000000..b5e197bf3 --- /dev/null +++ b/Source/Editor/Content/Proxy/AnimationGraphProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class AnimationGraphProxy : BinaryAssetProxy + { + /// + public override string Name => "Animation Graph"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new AnimationGraphWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x00B371); + + /// + public override Type AssetType => typeof(AnimationGraph); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.AnimationGraph, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/AnimationProxy.cs b/Source/Editor/Content/Proxy/AnimationProxy.cs new file mode 100644 index 000000000..0b5a43e38 --- /dev/null +++ b/Source/Editor/Content/Proxy/AnimationProxy.cs @@ -0,0 +1,52 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class AnimationProxy : BinaryAssetProxy + { + /// + public override string Name => "Animation"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new AnimationWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xB37200); + + /// + public override Type AssetType => typeof(Animation); + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + guiRoot.AddChild(new Label + { + Text = Path.GetFileNameWithoutExtension(request.Asset.Path), + Offsets = Margin.Zero, + AnchorPreset = AnchorPresets.StretchAll, + Wrapping = TextWrapping.WrapWords + }); + } + } +} diff --git a/Source/Editor/Content/Proxy/AssetProxy.cs b/Source/Editor/Content/Proxy/AssetProxy.cs new file mode 100644 index 000000000..fa0a878af --- /dev/null +++ b/Source/Editor/Content/Proxy/AssetProxy.cs @@ -0,0 +1,97 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// Base class for all asset proxy objects used to manage . + /// + /// + [HideInEditor] + public abstract class AssetProxy : ContentProxy + { + /// + public override bool IsAsset => true; + + /// + /// Gets the full name of the asset type (stored data format). + /// + public abstract string TypeName { get; } + + /// + /// Checks if this proxy supports the given asset type id at the given path. + /// + /// The asset type identifier. + /// The asset path. + /// True if proxy supports assets of the given type id and path. + public virtual bool AcceptsAsset(string typeName, string path) + { + return typeName == TypeName && path.EndsWith(FileExtension, StringComparison.OrdinalIgnoreCase); + } + + /// + /// Constructs the item for the asset. + /// + /// The asset path. + /// The asset type name identifier. + /// The asset identifier. + /// Created item. + public abstract AssetItem ConstructItem(string path, string typeName, ref Guid id); + + /// + /// Called when thumbnail request gets prepared for drawing. + /// + /// The request. + public virtual void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + } + + /// + /// Determines whether thumbnail can be drawn for the specified item. + /// + /// The request. + /// true if this thumbnail can be drawn for the specified item; otherwise, false. + public virtual bool CanDrawThumbnail(ThumbnailRequest request) + { + return true; + } + + /// + /// Called when thumbnail drawing begins. Proxy should setup scene GUI for guiRoot. + /// + /// The request to render thumbnail. + /// The GUI root container control. + /// GPU context. + public virtual void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + guiRoot.AddChild(new Label + { + Text = Name, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + Wrapping = TextWrapping.WrapWords + }); + } + + /// + /// Called when thumbnail drawing ends. Proxy should clear custom GUI from guiRoot from that should be not destroyed. + /// + /// The request to render thumbnail. + /// The GUI root container control. + public virtual void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + } + + /// + /// Called when thumbnail requests cleans data after drawing. + /// + /// The request. + public virtual void OnThumbnailDrawCleanup(ThumbnailRequest request) + { + } + } +} diff --git a/Source/Editor/Content/Proxy/AudioClipProxy.cs b/Source/Editor/Content/Proxy/AudioClipProxy.cs new file mode 100644 index 000000000..ec1444366 --- /dev/null +++ b/Source/Editor/Content/Proxy/AudioClipProxy.cs @@ -0,0 +1,123 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class AudioClipProxy : BinaryAssetProxy + { + private List _previews; + + /// + public override string Name => "Audio Clip"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new AudioClipWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0xB3452B); + + /// + public override Type AssetType => typeof(AudioClip); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + AudioClipPreview preview; + if (_previews != null && _previews.Count > 0) + { + // Reuse preview control + preview = _previews[_previews.Count - 1]; + _previews.RemoveAt(_previews.Count - 1); + } + else + { + // Create new preview control + preview = new AudioClipPreview + { + DrawMode = AudioClipPreview.DrawModes.Fill, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + } + + // Cached used preview in request data + request.Tag = preview; + + // Start loading the audio buffers + preview.Asset = (AudioClip)request.Asset; + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + // Check if asset is loaded and has audio buffer ready to draw + var asset = (AudioClip)request.Asset; + var preview = (AudioClipPreview)request.Tag; + return asset.IsLoaded && preview.HasData; + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + var preview = (AudioClipPreview)request.Tag; + preview.Parent = guiRoot; + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + var preview = (AudioClipPreview)request.Tag; + preview.Parent = null; + } + + /// + public override void OnThumbnailDrawCleanup(ThumbnailRequest request) + { + // Unlink asset + var preview = (AudioClipPreview)request.Tag; + preview.Asset = null; + + // Return the preview control back to the pool + if (_previews == null) + _previews = new List(8); + _previews.Add(preview); + } + + /// + public override void Dispose() + { + if (_previews != null) + { + for (int i = 0; i < _previews.Count; i++) + { + _previews[i].Dispose(); + } + _previews.Clear(); + } + _previews = null; + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/BinaryAssetProxy.cs b/Source/Editor/Content/Proxy/BinaryAssetProxy.cs new file mode 100644 index 000000000..124e3696a --- /dev/null +++ b/Source/Editor/Content/Proxy/BinaryAssetProxy.cs @@ -0,0 +1,72 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Base class for all binary asset proxy objects used to manage . + /// + /// + public abstract class BinaryAssetProxy : AssetProxy + { + /// + /// The binary asset files extension. + /// + public static readonly string Extension = "flax"; + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is BinaryAssetItem binaryAssetItem && TypeName == binaryAssetItem.TypeName; + } + + /// + public override string FileExtension => Extension; + + /// + public override string TypeName => AssetType.FullName; + + /// + public override bool IsProxyFor() + { + return typeof(T) == AssetType; + } + + /// + /// Gets the type of the asset. + /// + public abstract Type AssetType { get; } + + /// + public override AssetItem ConstructItem(string path, string typeName, ref Guid id) + { + var type = Scripting.TypeUtils.GetType(typeName).Type; + + if (typeof(TextureBase).IsAssignableFrom(type)) + return new TextureAssetItem(path, ref id, typeName, type); + if (typeof(Model).IsAssignableFrom(type)) + return new ModelAssetItem(path, ref id, typeName, type); + if (typeof(SkinnedModel).IsAssignableFrom(type)) + return new SkinnedModelAssetItem(path, ref id, typeName, type); + + ContentItemSearchFilter searchFilter; + if (typeof(MaterialBase).IsAssignableFrom(type)) + searchFilter = ContentItemSearchFilter.Material; + else if (typeof(Prefab).IsAssignableFrom(type)) + searchFilter = ContentItemSearchFilter.Prefab; + else if (typeof(SceneAsset).IsAssignableFrom(type)) + searchFilter = ContentItemSearchFilter.Scene; + else if (typeof(AudioClip).IsAssignableFrom(type)) + searchFilter = ContentItemSearchFilter.Audio; + else if (typeof(Animation).IsAssignableFrom(type)) + searchFilter = ContentItemSearchFilter.Animation; + else if (typeof(ParticleEmitter).IsAssignableFrom(type) || typeof(ParticleSystem).IsAssignableFrom(type)) + searchFilter = ContentItemSearchFilter.Particles; + else + searchFilter = ContentItemSearchFilter.Other; + return new BinaryAssetItem(path, ref id, typeName, type, searchFilter); + } + } +} diff --git a/Source/Editor/Content/Proxy/CSharpScriptProxy.cs b/Source/Editor/Content/Proxy/CSharpScriptProxy.cs new file mode 100644 index 000000000..3754b73d8 --- /dev/null +++ b/Source/Editor/Content/Proxy/CSharpScriptProxy.cs @@ -0,0 +1,65 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using System.Text; +using FlaxEditor.Content.Settings; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Context proxy object for C# script files. + /// + /// + public class CSharpScriptProxy : ScriptProxy + { + /// + /// The script files extension filter. + /// + public static readonly string ExtensionFiler = "*.cs"; + + /// + public override string Name => "C# Script"; + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is CSharpScriptItem; + } + + /// + public override void Create(string outputPath, object arg) + { + // Load template + var templatePath = StringUtils.CombinePaths(Globals.EngineContentFolder, "Editor/Scripting/ScriptTemplate.cs"); + var scriptTemplate = File.ReadAllText(templatePath); + + // Find the module that this script is being added (based on the path) + var scriptNamespace = Editor.Instance.GameProject.Name; + var project = TryGetProjectAtFolder(outputPath, out var moduleName); + if (project != null) + { + scriptNamespace = moduleName.Length != 0 ? moduleName : project.Name; + } + scriptNamespace = scriptNamespace.Replace(" ", ""); + + // Format + var gameSettings = GameSettings.Load(); + var scriptName = ScriptItem.CreateScriptName(outputPath); + var copyrightComment = string.IsNullOrEmpty(gameSettings.CopyrightNotice) ? string.Empty : string.Format("// {0}{1}{1}", gameSettings.CopyrightNotice, Environment.NewLine); + scriptTemplate = scriptTemplate.Replace("%copyright%", copyrightComment); + scriptTemplate = scriptTemplate.Replace("%class%", scriptName); + scriptTemplate = scriptTemplate.Replace("%namespace%", scriptNamespace); + + // Save + File.WriteAllText(outputPath, scriptTemplate, Encoding.UTF8); + } + + /// + public override string FileExtension => "cs"; + + /// + public override Color AccentColor => Color.FromRGB(0x1c9c2b); + } +} diff --git a/Source/Editor/Content/Proxy/CollisionDataProxy.cs b/Source/Editor/Content/Proxy/CollisionDataProxy.cs new file mode 100644 index 000000000..64b3aa62f --- /dev/null +++ b/Source/Editor/Content/Proxy/CollisionDataProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class CollisionDataProxy : BinaryAssetProxy + { + /// + public override string Name => "Collision Data"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new CollisionDataWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x2c3e50); + + /// + public override Type AssetType => typeof(CollisionData); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.CollisionData, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/ContentProxy.cs b/Source/Editor/Content/Proxy/ContentProxy.cs new file mode 100644 index 000000000..460a3721f --- /dev/null +++ b/Source/Editor/Content/Proxy/ContentProxy.cs @@ -0,0 +1,127 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.Windows; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Base class for assets proxy objects used to manage . + /// + [HideInEditor] + public abstract class ContentProxy + { + /// + /// Gets the asset type name (used by GUI, should be localizable). + /// + public abstract string Name { get; } + + /// + /// Gets the default name for the new items created by this proxy. + /// + public virtual string NewItemName => Name; + + /// + /// Determines whether this proxy is for the specified item. + /// + /// The item. + /// true if is proxy for asset item; otherwise, false. + public abstract bool IsProxyFor(ContentItem item); + + /// + /// Determines whether this proxy is for the specified asset. + /// + /// true if is proxy for asset item; otherwise, false. + public virtual bool IsProxyFor() where T : Asset + { + return false; + } + + /// + /// Gets a value indicating whether this proxy if for assets. + /// + public virtual bool IsAsset => false; + + /// + /// Gets the file extension used by the items managed by this proxy. + /// ALL LOWERCASE! WITHOUT A DOT! example: for 'myFile.TxT' proper extension is 'txt' + /// + public abstract string FileExtension { get; } + + /// + /// Opens the specified item. + /// + /// + /// The item. + /// Opened window or null if cannot do it. + public abstract EditorWindow Open(Editor editor, ContentItem item); + + /// + /// Gets a value indicating whether content items used by this proxy can be exported. + /// + public virtual bool CanExport => false; + + /// + /// Exports the specified item. + /// + /// The item. + /// The output path. + public virtual void Export(ContentItem item, string outputPath) + { + throw new NotImplementedException(); + } + + /// + /// Determines whether this proxy can create items in the specified target location. + /// + /// The target location. + /// true if this proxy can create items in the specified target location; otherwise, false. + public virtual bool CanCreate(ContentFolder targetLocation) + { + return false; + } + + /// + /// Determines whether this proxy can reimport specified item. + /// + /// The item. + /// true if this proxy can reimport given item; otherwise, false. + public virtual bool CanReimport(ContentItem item) + { + return CanCreate(item.ParentFolder); + } + + /// + /// Creates new item at the specified output path. + /// + /// The output path. + /// The custom argument provided for the item creation. Can be used as a source of data or null. + public virtual void Create(string outputPath, object arg) + { + throw new NotImplementedException(); + } + + /// + /// Called when content window wants to show the context menu. Allows to add custom functions for the given asset type. + /// + /// The menu. + /// The item. + public virtual void OnContentWindowContextMenu(ContextMenu menu, ContentItem item) + { + } + + /// + /// Gets the unique accent color for that asset type. + /// + public abstract Color AccentColor { get; } + + /// + /// Releases resources and unregisters the proxy utilities. Called during editor closing. For custom proxies from game/plugin modules it should be called before scripting reload. + /// + public virtual void Dispose() + { + } + } +} diff --git a/Source/Editor/Content/Proxy/CppScriptProxy.cs b/Source/Editor/Content/Proxy/CppScriptProxy.cs new file mode 100644 index 000000000..9958fa187 --- /dev/null +++ b/Source/Editor/Content/Proxy/CppScriptProxy.cs @@ -0,0 +1,65 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using System.Text; +using FlaxEditor.Content.Settings; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Context proxy object for C++ script files. + /// + /// + public class CppScriptProxy : ScriptProxy + { + /// + public override string Name => "C++ Script"; + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is CppScriptItem; + } + + /// + public override void Create(string outputPath, object arg) + { + // Load templates + var headerTemplate = File.ReadAllText(StringUtils.CombinePaths(Globals.EngineContentFolder, "Editor/Scripting/ScriptTemplate.h")); + var sourceTemplate = File.ReadAllText(StringUtils.CombinePaths(Globals.EngineContentFolder, "Editor/Scripting/ScriptTemplate.cpp")); + + // Find the module that this script is being added (based on the path) + var module = string.Empty; + var project = TryGetProjectAtFolder(outputPath, out var moduleName); + if (project != null) + { + module = moduleName.ToUpperInvariant() + "_API "; + } + + // Format + var gameSettings = GameSettings.Load(); + var scriptName = ScriptItem.CreateScriptName(outputPath); + var filename = Path.GetFileNameWithoutExtension(outputPath); + var copyrightComment = string.IsNullOrEmpty(gameSettings.CopyrightNotice) ? string.Empty : string.Format("// {0}{1}{1}", gameSettings.CopyrightNotice, Environment.NewLine); + headerTemplate = headerTemplate.Replace("%copyright%", copyrightComment); + headerTemplate = headerTemplate.Replace("%class%", scriptName); + headerTemplate = headerTemplate.Replace("%module%", module); + sourceTemplate = sourceTemplate.Replace("%filename%", filename); + sourceTemplate = sourceTemplate.Replace("%copyright%", copyrightComment); + sourceTemplate = sourceTemplate.Replace("%class%", scriptName); + sourceTemplate = sourceTemplate.Replace("%filename%", filename); + + // Save + File.WriteAllText(Path.ChangeExtension(outputPath, ".h"), headerTemplate, Encoding.UTF8); + File.WriteAllText(outputPath, sourceTemplate, Encoding.UTF8); + } + + /// + public override string FileExtension => "cpp"; + + /// + public override Color AccentColor => Color.FromRGB(0x9c1c9c); + } +} diff --git a/Source/Editor/Content/Proxy/CubeTextureProxy.cs b/Source/Editor/Content/Proxy/CubeTextureProxy.cs new file mode 100644 index 000000000..8d3920040 --- /dev/null +++ b/Source/Editor/Content/Proxy/CubeTextureProxy.cs @@ -0,0 +1,104 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class CubeTextureProxy : BinaryAssetProxy + { + private CubeTexturePreview _preview; + + /// + public override string Name => "Cube Texture"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new CubeTextureWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x3498db); + + /// + public override Type AssetType => typeof(CubeTexture); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new CubeTexturePreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + if (!_preview.HasLoadedAssets) + return false; + + // Check if all mip maps are streamed + var asset = (CubeTexture)request.Asset; + return asset.ResidentMipLevels >= Mathf.Max(1, (int)(asset.MipLevels * ThumbnailsModule.MinimumRequiredResourcesQuality)); + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.CubeTexture = (CubeTexture)request.Asset; + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.CubeTexture = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/FileProxy.cs b/Source/Editor/Content/Proxy/FileProxy.cs new file mode 100644 index 000000000..6e94f6a31 --- /dev/null +++ b/Source/Editor/Content/Proxy/FileProxy.cs @@ -0,0 +1,35 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEditor.Windows; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// File proxy object. + /// + /// + public class FileProxy : ContentProxy + { + /// + public override string Name => "File"; + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is FileItem; + } + + /// + public override string FileExtension => string.Empty; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return null; + } + + /// + public override Color AccentColor => Color.FromRGB(0x441c9c); + } +} diff --git a/Source/Editor/Content/Proxy/FontProxy.cs b/Source/Editor/Content/Proxy/FontProxy.cs new file mode 100644 index 000000000..7985e3b92 --- /dev/null +++ b/Source/Editor/Content/Proxy/FontProxy.cs @@ -0,0 +1,52 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class FontProxy : BinaryAssetProxy + { + /// + public override string Name => "Font"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new FontAssetWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0x2D74B2); + + /// + public override Type AssetType => typeof(FontAsset); + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + var asset = FlaxEngine.Content.LoadAsync(request.Item.ID); + guiRoot.AddChild(new Label + { + Text = asset.FamilyName, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + Wrapping = TextWrapping.WrapWords + }); + } + } +} diff --git a/Source/Editor/Content/Proxy/GameplayGlobalsProxy.cs b/Source/Editor/Content/Proxy/GameplayGlobalsProxy.cs new file mode 100644 index 000000000..8ac6e70ce --- /dev/null +++ b/Source/Editor/Content/Proxy/GameplayGlobalsProxy.cs @@ -0,0 +1,46 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class GameplayGlobalsProxy : BinaryAssetProxy + { + /// + public override string Name => "Gameplay Globals"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new GameplayGlobalsWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0xccff33); + + /// + public override Type AssetType => typeof(GameplayGlobals); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + var asset = FlaxEngine.Content.CreateVirtualAsset(); + if (asset.Save(outputPath)) + throw new Exception("Failed to create new asset."); + FlaxEngine.Object.Destroy(asset); + } + } +} diff --git a/Source/Editor/Content/Proxy/IESProfileProxy.cs b/Source/Editor/Content/Proxy/IESProfileProxy.cs new file mode 100644 index 000000000..1beb6130e --- /dev/null +++ b/Source/Editor/Content/Proxy/IESProfileProxy.cs @@ -0,0 +1,91 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class IESProfileProxy : BinaryAssetProxy + { + private IESProfilePreview _preview; + + /// + public override string Name => "IES Profile"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new IESProfileWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0x695C7F); + + /// + public override Type AssetType => typeof(IESProfile); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new IESProfilePreview + { + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + // Check if asset is streamed enough + var asset = (IESProfile)request.Asset; + return asset.ResidentMipLevels >= Mathf.Max(1, (int)(asset.MipLevels * ThumbnailsModule.MinimumRequiredResourcesQuality)); + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Asset = (IESProfile)request.Asset; + _preview.Parent = guiRoot; + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Asset = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/JsonAssetProxy.cs b/Source/Editor/Content/Proxy/JsonAssetProxy.cs new file mode 100644 index 000000000..1f96e6b2c --- /dev/null +++ b/Source/Editor/Content/Proxy/JsonAssetProxy.cs @@ -0,0 +1,183 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Create; +using FlaxEditor.Content.Settings; +using FlaxEditor.CustomEditors; +using FlaxEditor.CustomEditors.Editors; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Base class for all Json asset proxy objects used to manage . + /// + /// + public abstract class JsonAssetBaseProxy : AssetProxy + { + } + + /// + /// Json assets proxy. + /// + /// + public abstract class JsonAssetProxy : JsonAssetBaseProxy + { + /// + /// The json files extension. + /// + public static readonly string Extension = "json"; + + /// + public override string Name => "Json Asset"; + + /// + public override string FileExtension => Extension; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new JsonAssetWindow(editor, (JsonAssetItem)item); + } + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is JsonAssetItem; + } + + /// + public override Color AccentColor => Color.FromRGB(0xd14f67); + + /// + public override bool AcceptsAsset(string typeName, string path) + { + return typeName == TypeName && base.AcceptsAsset(typeName, path); + } + + /// + public override AssetItem ConstructItem(string path, string typeName, ref Guid id) + { + return new JsonAssetItem(path, id, typeName); + } + } + + /// + /// Generic Json asset creating handler. Allows to specify type of the archetype class to use for the asset data object. + /// + /// + public class GenericJsonCreateEntry : CreateFileEntry + { + /// + /// The create options. + /// + public class Options + { + /// + /// The type of the archetype class to use for the asset data object to create. + /// + [CustomEditor(typeof(Editor))] + [Tooltip("The type of the archetype class to use for the asset data object to create.")] + public System.Type Type; + + private sealed class Editor : TypeEditor + { + /// + internal override void Initialize(CustomEditorPresenter presenter, LayoutElementsContainer layout, ValueContainer values) + { + base.Initialize(presenter, layout, values); + + if (_element != null) + { + // Define the rule for the types that can be used to create a json data asset + _element.CustomControl.CheckValid += type => + type.Type != null && + type.IsClass && + type.Type.IsVisible && + !type.IsAbstract && + !type.IsGenericType && + type.Type.GetConstructor(Type.EmptyTypes) != null && + !typeof(FlaxEngine.Object).IsAssignableFrom(type.Type); + } + } + } + } + + private readonly Options _options = new Options(); + + /// + public override object Settings => _options; + + /// + /// Initializes a new instance of the class. + /// + /// The result file url. + public GenericJsonCreateEntry(string resultUrl) + : base("Json Asset", resultUrl) + { + } + + /// + public override bool Create() + { + // Create settings asset object and serialize it to pure json asset + var data = Activator.CreateInstance(_options.Type); + return Editor.SaveJsonAsset(ResultUrl, data); + } + } + + /// + /// Generic Json assets proxy (supports all json assets that don't have dedicated proxy). + /// + /// + public sealed class GenericJsonAssetProxy : JsonAssetProxy + { + /// + public override string TypeName => typeof(JsonAsset).FullName; + + /// + public override bool AcceptsAsset(string typeName, string path) + { + return path.EndsWith(FileExtension, StringComparison.OrdinalIgnoreCase); + } + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + Editor.Instance.ContentImporting.Create(new GenericJsonCreateEntry(outputPath)); + } + } + + /// + /// Content proxy for a json assets of the given type that can be spawned in the editor. + /// + /// + public sealed class SpawnableJsonAssetProxy : JsonAssetProxy where T : new() + { + /// + public override string Name { get; } = CustomEditors.CustomEditorsUtil.GetPropertyNameUI(typeof(T).Name); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + Editor.SaveJsonAsset(outputPath, new T()); + } + + /// + public override string TypeName { get; } = typeof(T).FullName; + } +} diff --git a/Source/Editor/Content/Proxy/MaterialFunctionProxy.cs b/Source/Editor/Content/Proxy/MaterialFunctionProxy.cs new file mode 100644 index 000000000..c794d6118 --- /dev/null +++ b/Source/Editor/Content/Proxy/MaterialFunctionProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class MaterialFunctionProxy : BinaryAssetProxy + { + /// + public override string Name => "Material Function"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new MaterialFunctionWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x6da016); + + /// + public override Type AssetType => typeof(MaterialFunction); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.MaterialFunction, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs b/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs new file mode 100644 index 000000000..2ab4e0ac2 --- /dev/null +++ b/Source/Editor/Content/Proxy/MaterialInstanceProxy.cs @@ -0,0 +1,106 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class MaterialInstanceProxy : BinaryAssetProxy + { + private MaterialPreview _preview; + + /// + public override string Name => "Material Instance"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new MaterialInstanceWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x2c3e50); + + /// + public override Type AssetType => typeof(MaterialInstance); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.MaterialInstance, outputPath)) + throw new Exception("Failed to create new asset."); + } + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new MaterialPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // TODO: disable streaming for dependant assets during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + return _preview.HasLoadedAssets; + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Material = (MaterialInstance)request.Asset; + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Material = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/MaterialProxy.cs b/Source/Editor/Content/Proxy/MaterialProxy.cs new file mode 100644 index 000000000..0c30ae2af --- /dev/null +++ b/Source/Editor/Content/Proxy/MaterialProxy.cs @@ -0,0 +1,152 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class MaterialProxy : BinaryAssetProxy + { + private MaterialPreview _preview; + + /// + public override string Name => "Material"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new MaterialWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x16a085); + + /// + public override Type AssetType => typeof(Material); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.Material, outputPath)) + throw new Exception("Failed to create new asset."); + } + + /// + public override void OnContentWindowContextMenu(ContextMenu menu, ContentItem item) + { + base.OnContentWindowContextMenu(menu, item); + + if (item is BinaryAssetItem binaryAssetItem) + { + var button = menu.AddButton("Create Material Instance", CreateMaterialInstanceClicked); + button.Tag = binaryAssetItem; + } + } + + private void CreateMaterialInstanceClicked(ContextMenuButton obj) + { + var binaryAssetItem = (BinaryAssetItem)obj.Tag; + CreateMaterialInstance(binaryAssetItem); + } + + /// + /// Creates the material instance from the given material. + /// + /// The material item to use as a base material. + public static void CreateMaterialInstance(BinaryAssetItem materialItem) + { + if (materialItem == null) + throw new ArgumentNullException(); + + var materialInstanceProxy = Editor.Instance.ContentDatabase.GetProxy(); + Editor.Instance.Windows.ContentWin.NewItem(materialInstanceProxy, null, item => OnMaterialInstanceCreated(item, materialItem)); + } + + private static void OnMaterialInstanceCreated(ContentItem item, BinaryAssetItem materialItem) + { + var assetItem = (AssetItem)item; + var materialInstance = FlaxEngine.Content.LoadAsync(assetItem.ID); + if (materialInstance == null || materialInstance.WaitForLoaded()) + { + Editor.LogError("Failed to load created material instance."); + return; + } + + materialInstance.BaseMaterial = FlaxEngine.Content.LoadAsync(materialItem.ID); + materialInstance.Save(); + } + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new MaterialPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // TODO: disable streaming for dependant assets during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + return _preview.HasLoadedAssets; + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Material = (Material)request.Asset; + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Material = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/ModelProxy.cs b/Source/Editor/Content/Proxy/ModelProxy.cs new file mode 100644 index 000000000..b0e78ced8 --- /dev/null +++ b/Source/Editor/Content/Proxy/ModelProxy.cs @@ -0,0 +1,104 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class ModelProxy : BinaryAssetProxy + { + private ModelPreview _preview; + + /// + public override string Name => "Model"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new ModelWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xe67e22); + + /// + public override Type AssetType => typeof(Model); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new ModelPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + if (!_preview.HasLoadedAssets) + return false; + + // Check if asset is streamed enough + var asset = (Model)request.Asset; + return asset.LoadedLODs >= Mathf.Max(1, (int)(asset.LODs.Length * ThumbnailsModule.MinimumRequiredResourcesQuality)); + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Model = (Model)request.Asset; + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Model = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/ParticleEmitterFunctionProxy.cs b/Source/Editor/Content/Proxy/ParticleEmitterFunctionProxy.cs new file mode 100644 index 000000000..26f594a37 --- /dev/null +++ b/Source/Editor/Content/Proxy/ParticleEmitterFunctionProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class ParticleEmitterFunctionProxy : BinaryAssetProxy + { + /// + public override string Name => "Particle Emitter Function"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new ParticleEmitterFunctionWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x1795a3); + + /// + public override Type AssetType => typeof(ParticleEmitterFunction); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.ParticleEmitterFunction, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs b/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs new file mode 100644 index 000000000..107569294 --- /dev/null +++ b/Source/Editor/Content/Proxy/ParticleEmitterProxy.cs @@ -0,0 +1,153 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Create; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class ParticleEmitterProxy : BinaryAssetProxy + { + private ParticleEmitterPreview _preview; + private ThumbnailRequest _warmupRequest; + + /// + public override string Name => "Particle Emitter"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new ParticleEmitterWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xFF79D2B0); + + /// + public override Type AssetType => typeof(ParticleEmitter); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + Editor.Instance.ContentImporting.Create(new ParticleEmitterCreateEntry(outputPath)); + } + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new ParticleEmitterPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // Mark for initial warmup + request.Tag = 0; + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + var state = (int)request.Tag; + if (state == 2) + return true; + + // Allow only one request at once during warmup time + if (_warmupRequest != null && _warmupRequest != request) + return false; + + // Ensure assets are ready to be used + if (!_preview.HasLoadedAssets) + return false; + var asset = (ParticleEmitter)request.Asset; + if (!asset.IsLoaded) + return false; + + if (state == 0) + { + // Start the warmup + _warmupRequest = request; + request.Tag = 1; + _preview.Emitter = asset; + } + else if (_preview.PreviewActor.Time >= 0.6f) + { + // End the warmup + request.Tag = 2; + _preview.FitIntoView(); + return true; + } + + // Handle warmup time for the preview + _preview.PreviewActor.UpdateSimulation(); + return false; + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + if (_warmupRequest == request) + { + _warmupRequest = null; + } + + _preview.Emitter = null; + _preview.Parent = null; + } + + /// + public override void OnThumbnailDrawCleanup(ThumbnailRequest request) + { + if (_warmupRequest == request) + { + _warmupRequest = null; + } + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/ParticleSystemProxy.cs b/Source/Editor/Content/Proxy/ParticleSystemProxy.cs new file mode 100644 index 000000000..853b76690 --- /dev/null +++ b/Source/Editor/Content/Proxy/ParticleSystemProxy.cs @@ -0,0 +1,153 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class ParticleSystemProxy : BinaryAssetProxy + { + private ParticleSystemPreview _preview; + private ThumbnailRequest _warmupRequest; + + /// + public override string Name => "Particle System"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new ParticleSystemWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xFF790200); + + /// + public override Type AssetType => typeof(ParticleSystem); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.ParticleSystem, outputPath)) + throw new Exception("Failed to create new asset."); + } + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new ParticleEmitterPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // Mark for initial warmup + request.Tag = 0; + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + var state = (int)request.Tag; + if (state == 2) + return true; + + // Allow only one request at once during warmup time + if (_warmupRequest != null && _warmupRequest != request) + return false; + + // Ensure assets are ready to be used + if (!_preview.HasLoadedAssets) + return false; + var asset = (ParticleSystem)request.Asset; + if (!asset.IsLoaded) + return false; + + if (state == 0) + { + // Start the warmup + _warmupRequest = request; + request.Tag = 1; + _preview.System = asset; + } + else if (_preview.PreviewActor.Time >= Mathf.Min(0.2f * asset.Duration, 0.6f)) + { + // End the warmup + request.Tag = 2; + _preview.FitIntoView(); + return true; + } + + // Handle warmup time for the preview + _preview.PreviewActor.UpdateSimulation(); + return false; + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + if (_warmupRequest == request) + { + _warmupRequest = null; + } + + _preview.System = null; + _preview.Parent = null; + } + + /// + public override void OnThumbnailDrawCleanup(ThumbnailRequest request) + { + if (_warmupRequest == request) + { + _warmupRequest = null; + } + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/PrefabProxy.cs b/Source/Editor/Content/Proxy/PrefabProxy.cs new file mode 100644 index 000000000..e5338d52f --- /dev/null +++ b/Source/Editor/Content/Proxy/PrefabProxy.cs @@ -0,0 +1,194 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; +using Object = FlaxEngine.Object; + +namespace FlaxEditor.Content +{ + /// + /// Content proxy for . + /// + /// + public sealed class PrefabProxy : JsonAssetBaseProxy + { + private PrefabPreview _preview; + + /// + /// The prefab files extension. + /// + public static readonly string Extension = "prefab"; + + /// + /// The prefab asset data typename. + /// + public static readonly string AssetTypename = typeof(Prefab).FullName; + + /// + public override string Name => "Prefab"; + + /// + public override string FileExtension => Extension; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new PrefabWindow(editor, (AssetItem)item); + } + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is PrefabItem; + } + + /// + public override bool IsProxyFor() + { + return typeof(T) == typeof(Prefab); + } + + /// + public override Color AccentColor => Color.FromRGB(0x7eef21); + + /// + public override string TypeName => AssetTypename; + + /// + public override AssetItem ConstructItem(string path, string typeName, ref Guid id) + { + return new PrefabItem(path, id); + } + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + var actor = arg as Actor; + if (actor == null) + { + // Create default prefab root object + actor = new EmptyActor(); + actor.Name = "Root"; + + // Cleanup it after usage + Object.Destroy(actor, 20.0f); + } + + PrefabManager.CreatePrefab(actor, outputPath, true); + } + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new PrefabPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + if (!_preview.HasLoadedAssets) + return false; + + // Check if asset is streamed enough + var asset = (Prefab)request.Asset; + return asset.IsLoaded; + } + + private void Prepare(Actor actor) + { + if (actor is TextRender textRender) + { + textRender.UpdateLayout(); + } + + for (int i = 0; i < actor.ChildrenCount; i++) + { + Prepare(actor.GetChild(i)); + } + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Prefab = (Prefab)request.Asset; + _preview.Parent = guiRoot; + _preview.Scale = Vector2.One; + _preview.ShowDefaultSceneActors = true; + _preview.SyncBackbufferSize(); + + // Special case for UI prefabs + if (_preview.Instance is UIControl uiControl && uiControl.HasControl) + { + // Ensure to place UI in a proper way + uiControl.Control.Location = Vector2.Zero; + uiControl.Control.Scale *= PreviewsCache.AssetIconSize / uiControl.Control.Size.MaxValue; + uiControl.Control.AnchorPreset = AnchorPresets.TopLeft; + uiControl.Control.AnchorPreset = AnchorPresets.MiddleCenter; + + // Tweak preview + _preview.ShowDefaultSceneActors = false; + } + else + { + // Update some actors data (some actor types update bounds/data later but its required to be done before rendering) + Prepare(_preview.Instance); + + // Auto fit actor to camera + float targetSize = 30.0f; + BoundingBox bounds; + Editor.GetActorEditorBox(_preview.Instance, out bounds); + float maxSize = Mathf.Max(0.001f, bounds.Size.MaxValue); + _preview.Instance.Scale = new Vector3(targetSize / maxSize); + _preview.Instance.Position = Vector3.Zero; + } + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Prefab = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/PreviewsCacheProxy.cs b/Source/Editor/Content/Proxy/PreviewsCacheProxy.cs new file mode 100644 index 000000000..16e59ad4d --- /dev/null +++ b/Source/Editor/Content/Proxy/PreviewsCacheProxy.cs @@ -0,0 +1,31 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class PreviewsCacheProxy : BinaryAssetProxy + { + /// + public override string Name => "Previews Cache"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new PreviewsCacheWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0x80FFAE); + + /// + public override Type AssetType => typeof(PreviewsCache); + } +} diff --git a/Source/Editor/Content/Proxy/SceneAnimationProxy.cs b/Source/Editor/Content/Proxy/SceneAnimationProxy.cs new file mode 100644 index 000000000..9e18a86e2 --- /dev/null +++ b/Source/Editor/Content/Proxy/SceneAnimationProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class SceneAnimationProxy : BinaryAssetProxy + { + /// + public override string Name => "Scene Animation"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new SceneAnimationWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xff5c4a87); + + /// + public override Type AssetType => typeof(SceneAnimation); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.SceneAnimation, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/SceneProxy.cs b/Source/Editor/Content/Proxy/SceneProxy.cs new file mode 100644 index 000000000..b5fc63943 --- /dev/null +++ b/Source/Editor/Content/Proxy/SceneProxy.cs @@ -0,0 +1,65 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Content proxy for . + /// + /// + public sealed class SceneProxy : JsonAssetBaseProxy + { + /// + /// The scene files extension. + /// + public static readonly string Extension = "scene"; + + /// + public override string Name => "Scene"; + + /// + public override string FileExtension => Extension; + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is SceneItem; + } + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + Editor.Instance.Scene.CreateSceneFile(outputPath); + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + // Load scene + Editor.Instance.Scene.OpenScene(((SceneItem)item).ID); + + return null; + } + + /// + public override Color AccentColor => Color.FromRGB(0xbb37ef); + + /// + public override string TypeName => Scene.AssetTypename; + + /// + public override AssetItem ConstructItem(string path, string typeName, ref Guid id) + { + return new SceneItem(path, id); + } + } +} diff --git a/Source/Editor/Content/Proxy/ScriptProxy.cs b/Source/Editor/Content/Proxy/ScriptProxy.cs new file mode 100644 index 000000000..0220fe67c --- /dev/null +++ b/Source/Editor/Content/Proxy/ScriptProxy.cs @@ -0,0 +1,144 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using System.Text; +using FlaxEditor.Content.Settings; +using FlaxEditor.Windows; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Context proxy object for script files (represented by ). + /// + /// + public abstract class ScriptProxy : ContentProxy + { + /// + /// Tries the get project that is related to the given source file path. Works only for source files located under Source folder of the project. + /// + /// The path. + /// The name of the module where the source file lays. Computed from path. Might be invalid.. + /// The found project or null. + protected ProjectInfo TryGetProjectAtFolder(string path, out string moduleName) + { + moduleName = string.Empty; + var projects = Editor.Instance.GameProject.GetAllProjects(); + foreach (var project in projects) + { + var projectSourceFolderPath = StringUtils.CombinePaths(project.ProjectFolderPath, "Source"); + if (path == projectSourceFolderPath) + return project; + if (path.StartsWith(projectSourceFolderPath)) + { + var localProjectPath = path.Substring(projectSourceFolderPath.Length + 1); + var split = localProjectPath.IndexOf('/'); + if (split != -1) + { + moduleName = localProjectPath.Substring(0, split); + } + return project; + } + } + return null; + } + + /// + public override string NewItemName => "Script"; + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + if (targetLocation.CanHaveScripts) + { + var path = targetLocation.Path; + var projects = Editor.Instance.GameProject.GetAllProjects(); + foreach (var project in projects) + { + var projectSourceFolderPath = StringUtils.CombinePaths(project.ProjectFolderPath, "Source"); + if (path == projectSourceFolderPath) + return false; + if (path.StartsWith(projectSourceFolderPath)) + return true; + } + } + return false; + } + + /// + public override void Create(string outputPath, object arg) + { + // Load template + var templatePath = StringUtils.CombinePaths(Globals.EngineContentFolder, "Editor/Scripting/ScriptTemplate.cs"); + var scriptTemplate = File.ReadAllText(templatePath); + var scriptNamespace = Editor.Instance.GameProject.Name.Replace(" ", "") + ".Source"; + + // Get directories + var sourceDirectory = Globals.ProjectFolder.Replace('\\', '/') + "/Source/"; + var outputDirectory = new FileInfo(outputPath).DirectoryName.Replace('\\', '/'); + + // Generate "sub" namespace from relative path between source root and output path + // NOTE: Could probably use Replace instead substring, but this is faster :) + var subNamespaceStr = outputDirectory.Substring(sourceDirectory.Length - 1).Replace(" ", "").Replace(".", "").Replace('/', '.'); + + // Replace all namespace invalid characters + // NOTE: Need to handle number sequence at the beginning since namespace which begin with numeric sequence are invalid + string subNamespace = string.Empty; + bool isStart = true; + for (int pos = 0; pos < subNamespaceStr.Length; pos++) + { + var c = subNamespaceStr[pos]; + + if (isStart) + { + // Skip characters that cannot start the sub namespace + if (char.IsLetter(c)) + { + isStart = false; + subNamespace += '.'; + subNamespace += c; + } + } + else + { + // Add only valid characters + if (char.IsLetterOrDigit(c) || c == '_') + { + subNamespace += c; + } + // Check for sub namespace start + else if (c == '.') + { + isStart = true; + } + } + } + + // Append if valid + if (subNamespace.Length > 1) + scriptNamespace += subNamespace; + + // Format + var gameSettings = GameSettings.Load(); + var scriptName = ScriptItem.CreateScriptName(outputPath); + var copyrightComment = string.IsNullOrEmpty(gameSettings.CopyrightNotice) ? string.Empty : string.Format("// {0}{1}{1}", gameSettings.CopyrightNotice, Environment.NewLine); + scriptTemplate = scriptTemplate.Replace("%copyright%", copyrightComment); + scriptTemplate = scriptTemplate.Replace("%class%", scriptName); + scriptTemplate = scriptTemplate.Replace("%namespace%", scriptNamespace); + + // Save + File.WriteAllText(outputPath, scriptTemplate, Encoding.UTF8); + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + Editor.Instance.CodeEditing.OpenFile(item.Path); + return null; + } + + /// + public override Color AccentColor => Color.FromRGB(0x1c9c2b); + } +} diff --git a/Source/Editor/Content/Proxy/SettingsProxy.cs b/Source/Editor/Content/Proxy/SettingsProxy.cs new file mode 100644 index 000000000..604f5ca0a --- /dev/null +++ b/Source/Editor/Content/Proxy/SettingsProxy.cs @@ -0,0 +1,56 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Create; +using FlaxEditor.Content.Settings; + +namespace FlaxEditor.Content +{ + /// + /// Content proxy for json settings assets (e.g or ). + /// + /// + public sealed class SettingsProxy : JsonAssetProxy + { + private readonly Type _type; + + /// + /// Initializes a new instance of the class. + /// + /// The settings asset type (must be subclass of SettingsBase type). + public SettingsProxy(Type type) + { + _type = type; + TypeName = type.FullName; + } + + /// + public override string Name => "Settings"; + //public override string Name { get; } = CustomEditors.CustomEditorsUtil.GetPropertyNameUI(_type.Name); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + // Use proxy only for GameSettings for creating + if (_type != typeof(GameSettings)) + return false; + + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + Editor.Instance.ContentImporting.Create(new SettingsCreateEntry(outputPath)); + } + + /// + public override bool IsProxyFor() + { + return typeof(T) == _type; + } + + /// + public override string TypeName { get; } + } +} diff --git a/Source/Editor/Content/Proxy/ShaderProxy.cs b/Source/Editor/Content/Proxy/ShaderProxy.cs new file mode 100644 index 000000000..2a0630d94 --- /dev/null +++ b/Source/Editor/Content/Proxy/ShaderProxy.cs @@ -0,0 +1,43 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public sealed class ShaderProxy : BinaryAssetProxy + { + /// + public override string Name => "Shader"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + var assetItem = (BinaryAssetItem)item; + var asset = FlaxEngine.Content.Load(assetItem.ID); + if (asset) + { + var source = Editor.GetShaderSourceCode(asset); + Utilities.Utils.ShowSourceCodeWindow(source, "Shader Source"); + } + return null; + } + + /// + public override Color AccentColor => Color.FromRGB(0x7542f5); + + /// + public override Type AssetType => typeof(Shader); + } +} diff --git a/Source/Editor/Content/Proxy/ShaderSourceProxy.cs b/Source/Editor/Content/Proxy/ShaderSourceProxy.cs new file mode 100644 index 000000000..806b3ac2f --- /dev/null +++ b/Source/Editor/Content/Proxy/ShaderSourceProxy.cs @@ -0,0 +1,68 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.IO; +using System.Text; +using FlaxEditor.Content.Settings; +using FlaxEditor.Windows; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// Context proxy object for shader source files (represented by ). + /// + /// + public class ShaderSourceProxy : ContentProxy + { + /// + public override bool CanCreate(ContentFolder targetLocation) + { + // Allow to create shaders only under '/Source/Shaders' directory and it's sub-dirs + var prevTargetLocation = targetLocation; + while (targetLocation.ParentFolder?.ParentFolder != null) + { + prevTargetLocation = targetLocation; + targetLocation = targetLocation.ParentFolder; + } + return targetLocation.ShortName == "Source" && prevTargetLocation.ShortName == "Shaders"; + } + + /// + public override void Create(string outputPath, object arg) + { + // Load template + var shaderTemplate = File.ReadAllText(StringUtils.CombinePaths(Globals.EngineContentFolder, "Editor/Scripting/ShaderTemplate.shader")); + + // Format + var gameSettings = GameSettings.Load(); + var copyrightComment = string.IsNullOrEmpty(gameSettings.CopyrightNotice) ? string.Empty : string.Format("// {0}{1}{1}", gameSettings.CopyrightNotice, Environment.NewLine); + shaderTemplate = shaderTemplate.Replace("%copyright%", copyrightComment); + + // Save + File.WriteAllText(outputPath, shaderTemplate, Encoding.UTF8); + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + Editor.Instance.CodeEditing.OpenFile(item.Path); + return null; + } + + /// + public override Color AccentColor => Color.FromRGB(0x7542f5); + + /// + public override string FileExtension => "shader"; + + /// + public override string Name => "Shader Source"; + + /// + public override bool IsProxyFor(ContentItem item) + { + return item is ShaderSourceItem; + } + } +} diff --git a/Source/Editor/Content/Proxy/SkeletonMaskProxy.cs b/Source/Editor/Content/Proxy/SkeletonMaskProxy.cs new file mode 100644 index 000000000..194892f99 --- /dev/null +++ b/Source/Editor/Content/Proxy/SkeletonMaskProxy.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class SkeletonMaskProxy : BinaryAssetProxy + { + /// + public override string Name => "Skeleton Mask"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new SkeletonMaskWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0x00B31C); + + /// + public override Type AssetType => typeof(SkeletonMask); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + if (Editor.CreateAsset(Editor.NewAssetType.SkeletonMask, outputPath)) + throw new Exception("Failed to create new asset."); + } + } +} diff --git a/Source/Editor/Content/Proxy/SkinnedModelProxy.cs b/Source/Editor/Content/Proxy/SkinnedModelProxy.cs new file mode 100644 index 000000000..ed42a3f16 --- /dev/null +++ b/Source/Editor/Content/Proxy/SkinnedModelProxy.cs @@ -0,0 +1,104 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class SkinnedModelProxy : BinaryAssetProxy + { + private AnimatedModelPreview _preview; + + /// + public override string Name => "Skinned Model"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new SkinnedModelWindow(editor, item as AssetItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xB30031); + + /// + public override Type AssetType => typeof(SkinnedModel); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new AnimatedModelPreview(false) + { + RenderOnlyWithWindow = false, + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + _preview.Task.Enabled = false; + + var eyeAdaptation = _preview.PostFxVolume.EyeAdaptation; + eyeAdaptation.Mode = EyeAdaptationMode.None; + eyeAdaptation.OverrideFlags |= EyeAdaptationSettingsOverride.Mode; + _preview.PostFxVolume.EyeAdaptation = eyeAdaptation; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + if (!_preview.HasLoadedAssets) + return false; + + // Check if asset is streamed enough + var asset = (SkinnedModel)request.Asset; + return asset.LoadedLODs >= Mathf.Max(1, (int)(asset.LODs.Length * ThumbnailsModule.MinimumRequiredResourcesQuality)); + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.SkinnedModel = (SkinnedModel)request.Asset; + _preview.Parent = guiRoot; + _preview.SyncBackbufferSize(); + + _preview.Task.OnDraw(); + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.SkinnedModel = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/SpriteAtlasProxy.cs b/Source/Editor/Content/Proxy/SpriteAtlasProxy.cs new file mode 100644 index 000000000..9cd6f39cd --- /dev/null +++ b/Source/Editor/Content/Proxy/SpriteAtlasProxy.cs @@ -0,0 +1,91 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public sealed class SpriteAtlasProxy : BinaryAssetProxy + { + private SimpleSpriteAtlasPreview _preview; + + /// + public override string Name => "Sprite Atlas"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new SpriteAtlasWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0x5C7F69); + + /// + public override Type AssetType => typeof(SpriteAtlas); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new SimpleSpriteAtlasPreview + { + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + // Check if asset is streamed enough + var asset = (SpriteAtlas)request.Asset; + return asset.ResidentMipLevels >= Mathf.Max(1, (int)(asset.MipLevels * ThumbnailsModule.MinimumRequiredResourcesQuality)); + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Asset = (SpriteAtlas)request.Asset; + _preview.Parent = guiRoot; + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Asset = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/TextureProxy.cs b/Source/Editor/Content/Proxy/TextureProxy.cs new file mode 100644 index 000000000..2f67c78bb --- /dev/null +++ b/Source/Editor/Content/Proxy/TextureProxy.cs @@ -0,0 +1,93 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEditor.Content.Thumbnails; +using FlaxEditor.Viewport.Previews; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public sealed class TextureProxy : BinaryAssetProxy + { + private SimpleTexturePreview _preview; + + /// + public override string Name => "Texture"; + + /// + public override bool CanReimport(ContentItem item) + { + return true; + } + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new TextureWindow(editor, (AssetItem)item); + } + + /// + public override Color AccentColor => Color.FromRGB(0x25B84C); + + /// + public override Type AssetType => typeof(Texture); + + /// + public override void OnThumbnailDrawPrepare(ThumbnailRequest request) + { + if (_preview == null) + { + _preview = new SimpleTexturePreview + { + AnchorPreset = AnchorPresets.StretchAll, + Offsets = Margin.Zero, + }; + } + + // TODO: disable streaming for asset during thumbnail rendering (and restore it after) + } + + /// + public override bool CanDrawThumbnail(ThumbnailRequest request) + { + // Check if asset is streamed enough + var asset = (Texture)request.Asset; + var mipLevels = asset.MipLevels; + var minMipLevels = Mathf.Min(mipLevels, 7); + return asset.ResidentMipLevels >= Mathf.Max(minMipLevels, (int)(mipLevels * ThumbnailsModule.MinimumRequiredResourcesQuality)); + } + + /// + public override void OnThumbnailDrawBegin(ThumbnailRequest request, ContainerControl guiRoot, GPUContext context) + { + _preview.Asset = (Texture)request.Asset; + _preview.Parent = guiRoot; + } + + /// + public override void OnThumbnailDrawEnd(ThumbnailRequest request, ContainerControl guiRoot) + { + _preview.Asset = null; + _preview.Parent = null; + } + + /// + public override void Dispose() + { + if (_preview != null) + { + _preview.Dispose(); + _preview = null; + } + + base.Dispose(); + } + } +} diff --git a/Source/Editor/Content/Proxy/VisualScriptProxy.cs b/Source/Editor/Content/Proxy/VisualScriptProxy.cs new file mode 100644 index 000000000..38b30808e --- /dev/null +++ b/Source/Editor/Content/Proxy/VisualScriptProxy.cs @@ -0,0 +1,94 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using FlaxEditor.Content.Create; +using FlaxEditor.Scripting; +using FlaxEditor.Windows; +using FlaxEditor.Windows.Assets; +using FlaxEngine; +using FlaxEngine.Json; + +namespace FlaxEditor.Content +{ + /// + /// A asset proxy object. + /// + /// + public class VisualScriptProxy : BinaryAssetProxy, IScriptTypesContainer + { + internal VisualScriptProxy() + { + TypeUtils.CustomTypes.Add(this); + } + + /// + public override string Name => "Visual Script"; + + /// + public override EditorWindow Open(Editor editor, ContentItem item) + { + return new VisualScriptWindow(editor, item as VisualScriptItem); + } + + /// + public override Color AccentColor => Color.FromRGB(0xf5cb42); + + /// + public override Type AssetType => typeof(VisualScript); + + /// + public override bool CanCreate(ContentFolder targetLocation) + { + return targetLocation.CanHaveAssets; + } + + /// + public override void Create(string outputPath, object arg) + { + Editor.Instance.ContentImporting.Create(new VisualScriptCreateEntry(outputPath)); + } + + /// + public override AssetItem ConstructItem(string path, string typeName, ref Guid id) + { + return new VisualScriptItem(path, ref id, typeName, AssetType); + } + + /// + public override void Dispose() + { + TypeUtils.CustomTypes.Remove(this); + + base.Dispose(); + } + + /// + public ScriptType GetType(string typeName) + { + // For Visual Script types the typeName is an asset id as Guid string + if (typeName.Length == 32) + { + JsonSerializer.ParseID(typeName, out var id); + if (Editor.Instance.ContentDatabase.FindAsset(id) is VisualScriptItem visualScriptItem) + { + return visualScriptItem.ScriptType; + } + } + + return ScriptType.Null; + } + + /// + public void GetDerivedTypes(ScriptType baseType, List result, Func checkFunc) + { + var visualScripts = VisualScriptItem.VisualScripts; + for (var i = 0; i < visualScripts.Count; i++) + { + var t = visualScripts[i].ScriptType; + if (baseType.IsAssignableFrom(t) && t != baseType && checkFunc(t)) + result.Add(t); + } + } + } +} diff --git a/Source/Editor/Content/Settings/AndroidPlatformSettings.cs b/Source/Editor/Content/Settings/AndroidPlatformSettings.cs new file mode 100644 index 000000000..d8f2d2963 --- /dev/null +++ b/Source/Editor/Content/Settings/AndroidPlatformSettings.cs @@ -0,0 +1,30 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The Android platform settings asset archetype. Allows to edit asset via editor. + /// + public class AndroidPlatformSettings : SettingsBase + { + /// + /// The application package name (eg. com.company.product). Custom tokens: ${PROJECT_NAME}, ${COMPANY_NAME}. + /// + [EditorOrder(0), EditorDisplay("General"), Tooltip("The application package name (eg. com.company.product). Custom tokens: ${PROJECT_NAME}, ${COMPANY_NAME}.")] + public string PackageName = "com.${COMPANY_NAME}.${PROJECT_NAME}"; + + /// + /// The application permissions list (eg. android.media.action.IMAGE_CAPTURE). Added to the generated manifest file. + /// + [EditorOrder(100), EditorDisplay("General"), Tooltip("The application permissions list (eg. android.media.action.IMAGE_CAPTURE). Added to the generated manifest file.")] + public string[] Permissions; + + /// + /// Custom icon texture to use for the application (overrides the default one). + /// + [EditorOrder(1030), EditorDisplay("Other"), Tooltip("Custom icon texture to use for the application (overrides the default one).")] + public Texture OverrideIcon; + } +} diff --git a/Source/Editor/Content/Settings/AudioSettings.cs b/Source/Editor/Content/Settings/AudioSettings.cs new file mode 100644 index 000000000..3c1060a2e --- /dev/null +++ b/Source/Editor/Content/Settings/AudioSettings.cs @@ -0,0 +1,34 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The audio payback engine settings container. Allows to edit asset via editor. + /// + public sealed class AudioSettings : SettingsBase + { + /// + /// If checked, audio playback will be disabled in build game. Can be used if game uses custom audio playback engine. + /// + [DefaultValue(false)] + [EditorOrder(0), EditorDisplay("General"), Tooltip("If checked, audio playback will be disabled in build game. Can be used if game uses custom audio playback engine.")] + public bool DisableAudio; + + /// + /// The doppler doppler effect factor. Scale for source and listener velocities. Default is 1. + /// + [DefaultValue(1.0f)] + [EditorOrder(100), EditorDisplay("General"), Limit(0, 10.0f, 0.01f), Tooltip("The doppler doppler effect factor. Scale for source and listener velocities. Default is 1.")] + public float DopplerFactor = 1.0f; + + /// + /// True if mute all audio playback when game has no use focus. + /// + [DefaultValue(true)] + [EditorOrder(200), EditorDisplay("General", "Mute On Focus Loss"), Tooltip("If checked, engine will mute all audio playback when game has no use focus.")] + public bool MuteOnFocusLoss = true; + } +} diff --git a/Source/Editor/Content/Settings/BuildPreset.cs b/Source/Editor/Content/Settings/BuildPreset.cs new file mode 100644 index 000000000..b5d8f986c --- /dev/null +++ b/Source/Editor/Content/Settings/BuildPreset.cs @@ -0,0 +1,44 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// A game building preset with set of build targets. + /// + [Serializable] + public class BuildPreset + { + /// + /// The name of the preset. + /// + [EditorOrder(10), Tooltip("Name of the preset")] + public string Name; + + /// + /// The target configurations. + /// + [EditorOrder(20), Tooltip("Target configurations")] + public BuildTarget[] Targets; + + /// + /// Gets the target of the given name (ignore case search) or returns null if cannot find it. + /// + /// The target name. + /// Found target or null if is missing. + public BuildTarget GetTarget(string name) + { + if (Targets != null) + { + for (int i = 0; i < Targets.Length; i++) + { + if (string.Equals(Targets[i].Name, name, StringComparison.OrdinalIgnoreCase)) + return Targets[i]; + } + } + return null; + } + } +} diff --git a/Source/Editor/Content/Settings/BuildSettings.cs b/Source/Editor/Content/Settings/BuildSettings.cs new file mode 100644 index 000000000..059ade72d --- /dev/null +++ b/Source/Editor/Content/Settings/BuildSettings.cs @@ -0,0 +1,143 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The game building settings container. Allows to edit asset via editor. + /// + public sealed class BuildSettings : SettingsBase + { + /// + /// The maximum amount of assets to include into a single assets package. Assets will be split into several packages if need to. + /// + [DefaultValue(4096)] + [EditorOrder(10), Limit(32, short.MaxValue), EditorDisplay("General", "Max assets per package"), Tooltip("The maximum amount of assets to include into a single assets package. Assets will be split into several packages if need to.")] + public int MaxAssetsPerPackage = 4096; + + /// + /// The maximum size of the single assets package (in megabytes). Assets will be split into several packages if need to. + /// + [DefaultValue(1024)] + [EditorOrder(20), Limit(16, short.MaxValue), EditorDisplay("General", "Max package size (in MB)"), Tooltip("The maximum size of the single assets package (in megabytes). Assets will be split into several packages if need to.")] + public int MaxPackageSizeMB = 1024; + + /// + /// The game content cooking Keys. Use the same value for a game and DLC packages to support loading them by the build game. Use 0 to randomize it during building. + /// + [DefaultValue(0)] + [EditorOrder(30), EditorDisplay("General"), Tooltip("The game content cooking Keys. Use the same value for a game and DLC packages to support loading them by the build game. Use 0 to randomize it during building.")] + public int ContentKey = 0; + + /// + /// If checked, the builds produced by the Game Cooker will be treated as for final game distribution (eg. for game store upload). Builds done this way cannot be tested on console devkits (eg. Xbox One, Xbox Scarlett). + /// + [DefaultValue(false)] + [EditorOrder(40), EditorDisplay("General"), Tooltip("If checked, the builds produced by the Game Cooker will be treated as for final game distribution (eg. for game store upload). Builds done this way cannot be tested on console devkits (eg. Xbox One, Xbox Scarlett).")] + public bool ForDistribution; + + /// + /// If checked, the output build files won't be packaged for the destination platform. Useful when debugging build from local PC. + /// + [DefaultValue(false)] + [EditorOrder(50), EditorDisplay("General"), Tooltip("If checked, the output build files won't be packaged for the destination platform. Useful when debugging build from local PC.")] + public bool SkipPackaging; + + /// + /// The additional assets to include into build (into root assets set). + /// + [EditorOrder(1000), EditorDisplay("Additional Data"), Tooltip("The additional assets to include into build (into root assets set).")] + public Asset[] AdditionalAssets; + + /// + /// The additional folders with assets to include into build (into root assets set). List of paths relative to the project directory (or absolute). + /// + [EditorOrder(1010), EditorDisplay("Additional Data"), Tooltip("The additional folders with assets to include into build (to root assets set). List of paths relative to the project directory (or absolute).")] + public string[] AdditionalAssetFolders; + + /// + /// Disables shaders compiler optimizations in cooked game. Can be used to debug shaders on a target platform or to speed up the shaders compilation time. + /// + [DefaultValue(false)] + [EditorOrder(2000), EditorDisplay("Content", "Shaders No Optimize"), Tooltip("Disables shaders compiler optimizations in cooked game. Can be used to debug shaders on a target platform or to speed up the shaders compilation time.")] + public bool ShadersNoOptimize; + + /// + /// Enables shader debug data generation for shaders in cooked game (depends on the target platform rendering backend). + /// + [DefaultValue(false)] + [EditorOrder(2010), EditorDisplay("Content"), Tooltip("Enables shader debug data generation for shaders in cooked game (depends on the target platform rendering backend).")] + public bool ShadersGenerateDebugData; + + /// + /// The build presets. + /// + [EditorOrder(5000), EditorDisplay("Presets", EditorDisplayAttribute.InlineStyle), Tooltip("Build presets configuration")] + public BuildPreset[] Presets = + { + new BuildPreset + { + Name = "Development", + Targets = new[] + { + new BuildTarget + { + Name = "Windows 64bit", + Output = "Output\\Win64", + Platform = BuildPlatform.Windows64, + Mode = BuildConfiguration.Development, + }, + new BuildTarget + { + Name = "Windows 32bit", + Output = "Output\\Win32", + Platform = BuildPlatform.Windows32, + Mode = BuildConfiguration.Development, + }, + } + }, + new BuildPreset + { + Name = "Release", + Targets = new[] + { + new BuildTarget + { + Name = "Windows 64bit", + Output = "Output\\Win64", + Platform = BuildPlatform.Windows64, + Mode = BuildConfiguration.Development, + }, + new BuildTarget + { + Name = "Windows 32bit", + Output = "Output\\Win32", + Platform = BuildPlatform.Windows32, + Mode = BuildConfiguration.Development, + }, + } + }, + }; + + /// + /// Gets the preset of the given name (ignore case search) or returns null if cannot find it. + /// + /// The preset name. + /// Found preset or null if is missing. + public BuildPreset GetPreset(string name) + { + if (Presets != null) + { + for (int i = 0; i < Presets.Length; i++) + { + if (string.Equals(Presets[i].Name, name, StringComparison.OrdinalIgnoreCase)) + return Presets[i]; + } + } + return null; + } + } +} diff --git a/Source/Editor/Content/Settings/BuildTarget.cs b/Source/Editor/Content/Settings/BuildTarget.cs new file mode 100644 index 000000000..43ad328f3 --- /dev/null +++ b/Source/Editor/Content/Settings/BuildTarget.cs @@ -0,0 +1,56 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// A game building target with configuration properties. + /// + [Serializable, HideInEditor] + public class BuildTarget + { + /// + /// The name of the target. + /// + [EditorOrder(10), Tooltip("Name of the target")] + public string Name; + + /// + /// The output folder path. + /// + [EditorOrder(20), Tooltip("Output folder path")] + public string Output; + + /// + /// The target platform. + /// + [EditorOrder(30), Tooltip("Target platform")] + public BuildPlatform Platform; + + /// + /// The configuration mode. + /// + [EditorOrder(30), Tooltip("Configuration build mode")] + public BuildConfiguration Mode; + + /// + /// The pre-build action command line. + /// + [EditorOrder(100)] + public string PreBuildAction; + + /// + /// The post-build action command line. + /// + [EditorOrder(110)] + public string PostBuildAction; + + /// + /// Gets the build options computed from the target configuration. + /// + [HideInEditor, NoSerialize] + public virtual BuildOptions Options => BuildOptions.None; + } +} diff --git a/Source/Editor/Content/Settings/GameSettings.cs b/Source/Editor/Content/Settings/GameSettings.cs new file mode 100644 index 000000000..498efb127 --- /dev/null +++ b/Source/Editor/Content/Settings/GameSettings.cs @@ -0,0 +1,362 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The game settings asset archetype. Allows to edit asset via editor. + /// + public sealed class GameSettings : SettingsBase + { + internal const string PS4PlatformSettingsTypename = "FlaxEditor.Content.Settings.PS4PlatformSettings"; + internal const string XboxScarlettPlatformSettingsTypename = "FlaxEditor.Content.Settings.XboxScarlettPlatformSettings"; + + /// + /// The product full name. + /// + [EditorOrder(0), EditorDisplay("General"), Tooltip("The name of your product.")] + public string ProductName; + + /// + /// The company full name. + /// + [EditorOrder(10), EditorDisplay("General"), Tooltip("The name of your company or organization.")] + public string CompanyName; + + /// + /// The copyright note used for content signing (eg. source code header). + /// + [EditorOrder(15), EditorDisplay("General"), Tooltip("The copyright note used for content signing (eg. source code header).")] + public string CopyrightNotice; + + /// + /// The default application icon. + /// + [EditorOrder(30), EditorDisplay("General"), Tooltip("The default icon of the application.")] + public Texture Icon; + + /// + /// Reference to the first scene to load on a game startup. + /// + [EditorOrder(900), EditorDisplay("Startup"), Tooltip("Reference to the first scene to load on a game startup.")] + public SceneReference FirstScene; + + /// + /// True if skip showing splash screen image on the game startup. + /// + [EditorOrder(910), EditorDisplay("Startup", "No Splash Screen"), Tooltip("True if skip showing splash screen image on the game startup.")] + public bool NoSplashScreen; + + /// + /// Reference to the splash screen image to show on a game startup. + /// + [EditorOrder(920), EditorDisplay("Startup"), Tooltip("Reference to the splash screen image to show on a game startup.")] + public Texture SplashScreen; + + /// + /// Reference to asset. + /// + [EditorOrder(1010), EditorDisplay("Other Settings"), AssetReference(typeof(TimeSettings), true), Tooltip("Reference to Time Settings asset")] + public JsonAsset Time; + + /// + /// Reference to asset. + /// + [EditorOrder(1015), EditorDisplay("Other Settings"), AssetReference(typeof(AudioSettings), true), Tooltip("Reference to Audio Settings asset")] + public JsonAsset Audio; + + /// + /// Reference to asset. + /// + [EditorOrder(1020), EditorDisplay("Other Settings"), AssetReference(typeof(LayersAndTagsSettings), true), Tooltip("Reference to Layers & Tags Settings asset")] + public JsonAsset LayersAndTags; + + /// + /// Reference to asset. + /// + [EditorOrder(1030), EditorDisplay("Other Settings"), AssetReference(typeof(PhysicsSettings), true), Tooltip("Reference to Physics Settings asset")] + public JsonAsset Physics; + + /// + /// Reference to asset. + /// + [EditorOrder(1035), EditorDisplay("Other Settings"), AssetReference(typeof(InputSettings), true), Tooltip("Reference to Input Settings asset")] + public JsonAsset Input; + + /// + /// Reference to asset. + /// + [EditorOrder(1040), EditorDisplay("Other Settings"), AssetReference(typeof(GraphicsSettings), true), Tooltip("Reference to Graphics Settings asset")] + public JsonAsset Graphics; + + /// + /// Reference to asset. + /// + [EditorOrder(1045), EditorDisplay("Other Settings"), AssetReference(typeof(NavigationSettings), true), Tooltip("Reference to Navigation Settings asset")] + public JsonAsset Navigation; + + /// + /// Reference to asset. + /// + [EditorOrder(1050), EditorDisplay("Other Settings"), AssetReference(typeof(BuildSettings), true), Tooltip("Reference to Build Settings asset")] + public JsonAsset GameCooking; + + /// + /// The custom settings to use with a game. Can be specified by the user to define game-specific options and be used by the external plugins (used as key-value pair). + /// + [EditorOrder(1100), EditorDisplay("Other Settings"), Tooltip("The custom settings to use with a game. Can be specified by the user to define game-specific options and be used by the external plugins (used as key-value pair).")] + public Dictionary CustomSettings; + + /// + /// Reference to asset. Used to apply configuration on Windows platform. + /// + [EditorOrder(2010), EditorDisplay("Platform Settings", "Windows"), AssetReference(typeof(WindowsPlatformSettings), true), Tooltip("Reference to Windows Platform Settings asset")] + public JsonAsset WindowsPlatform; + + /// + /// Reference to asset. Used to apply configuration on Universal Windows Platform. + /// + [EditorOrder(2020), EditorDisplay("Platform Settings", "Universal Windows Platform"), AssetReference(typeof(UWPPlatformSettings), true), Tooltip("Reference to Universal Windows Platform Settings asset")] + public JsonAsset UWPPlatform; + + /// + /// Reference to asset. Used to apply configuration on Linux platform. + /// + [EditorOrder(2030), EditorDisplay("Platform Settings", "Linux"), AssetReference(typeof(LinuxPlatformSettings), true), Tooltip("Reference to Linux Platform Settings asset")] + public JsonAsset LinuxPlatform; + + /// + /// Reference to PS4 Platform Settings asset. Used to apply configuration on PS4 platform. + /// + [EditorOrder(2040), EditorDisplay("Platform Settings", "PlayStation 4"), AssetReference(PS4PlatformSettingsTypename, true), Tooltip("Reference to PS4 Platform Settings asset")] + public JsonAsset PS4Platform; + + /// + /// Reference to Xbox Scarlett Platform Settings asset. Used to apply configuration on Xbox Scarlett platform. + /// + [EditorOrder(2050), EditorDisplay("Platform Settings", "Xbox Scarlett"), AssetReference(XboxScarlettPlatformSettingsTypename, true), Tooltip("Reference to Xbox Scarlett Platform Settings asset")] + public JsonAsset XboxScarlettPlatform; + + /// + /// Reference to asset. Used to apply configuration on Android platform. + /// + [EditorOrder(2060), EditorDisplay("Platform Settings", "Android"), AssetReference(typeof(AndroidPlatformSettings), true), Tooltip("Reference to Android Platform Settings asset")] + public JsonAsset AndroidPlatform; + + /// + /// Gets the absolute path to the game settings asset file. + /// + public static string GameSettingsAssetPath + { + get { return StringUtils.CombinePaths(Globals.ProjectContentFolder, "GameSettings.json"); } + } + + /// + /// Loads the game settings asset. + /// + /// The loaded game settings. + public static GameSettings Load() + { + var asset = FlaxEngine.Content.LoadAsync(GameSettingsAssetPath); + if (asset && !asset.WaitForLoaded()) + { + if (asset.CreateInstance() is GameSettings result) + return result; + } + return new GameSettings(); + } + + private static T LoadAsset(JsonAsset asset) where T : new() + { + if (asset && !asset.WaitForLoaded()) + { + if (asset.CreateInstance() is T result) + return result; + } + return new T(); + } + + private static SettingsBase LoadAsset(JsonAsset asset, string typename) + { + if (asset && !asset.WaitForLoaded() && asset.DataTypeName == typename) + { + if (asset.CreateInstance() is SettingsBase result) + return result; + } + return null; + } + + /// + /// Loads the settings of the given type. + /// + /// + /// Supports loading game settings, any sub settings container (e.g. ) and custom settings (see ). + /// + /// + /// var time = GameSettings.Load&ltTimeSettings&gt;(); + /// + /// The game settings type (e.g. ). + /// Loaded settings object or null if fails. + public static T Load() where T : SettingsBase + { + var gameSettings = Load(); + var type = typeof(T); + + if (type == typeof(GameSettings)) + return gameSettings as T; + + if (type == typeof(TimeSettings)) + return LoadAsset(gameSettings.Time) as T; + if (type == typeof(LayersAndTagsSettings)) + return LoadAsset(gameSettings.LayersAndTags) as T; + if (type == typeof(PhysicsSettings)) + return LoadAsset(gameSettings.Physics) as T; + if (type == typeof(GraphicsSettings)) + return LoadAsset(gameSettings.Graphics) as T; + if (type == typeof(NavigationSettings)) + return LoadAsset(gameSettings.Navigation) as T; + if (type == typeof(BuildSettings)) + return LoadAsset(gameSettings.GameCooking) as T; + if (type == typeof(InputSettings)) + return LoadAsset(gameSettings.Input) as T; + if (type == typeof(WindowsPlatformSettings)) + return LoadAsset(gameSettings.WindowsPlatform) as T; + if (type == typeof(UWPPlatformSettings)) + return LoadAsset(gameSettings.UWPPlatform) as T; + if (type == typeof(LinuxPlatformSettings)) + return LoadAsset(gameSettings.LinuxPlatform) as T; + if (type.FullName == PS4PlatformSettingsTypename) + return LoadAsset(gameSettings.PS4Platform, PS4PlatformSettingsTypename) as T; + if (type.FullName == XboxScarlettPlatformSettingsTypename) + return LoadAsset(gameSettings.XboxScarlettPlatform, XboxScarlettPlatformSettingsTypename) as T; + if (type == typeof(AndroidPlatformSettings)) + return LoadAsset(gameSettings.AndroidPlatform) as T; + if (type == typeof(AudioSettings)) + return LoadAsset(gameSettings.Audio) as T; + + if (gameSettings.CustomSettings != null) + { + foreach (var e in gameSettings.CustomSettings) + { + if (e.Value && !e.Value.WaitForLoaded() && e.Value.DataTypeName == type.FullName) + { + var custom = e.Value.CreateInstance(); + if (custom is T result) + return result; + } + } + } + + return null; + } + + private static bool SaveAsset(GameSettings gameSettings, ref JsonAsset asset, T obj) where T : SettingsBase + { + if (asset) + { + // Override settings + return Editor.SaveJsonAsset(asset.Path, obj); + } + + // Create new settings asset and link it to the game settings + var path = StringUtils.CombinePaths(Globals.ProjectContentFolder, CustomEditors.CustomEditorsUtil.GetPropertyNameUI(typeof(T).Name) + ".json"); + if (Editor.SaveJsonAsset(path, obj)) + return true; + asset = FlaxEngine.Content.LoadAsync(path); + return Editor.SaveJsonAsset(GameSettingsAssetPath, gameSettings); + } + + /// + /// Saves the settings of the given type. + /// + /// + /// Supports saving game settings, any sub settings container (e.g. ). + /// + /// + /// var time = GameSettings.Load&ltTimeSettings&gt;(); + /// time.TimeScale = 0.5f; + /// GameSettings.Save&ltTimeSettings&gt;(time); + /// + /// The game settings type (e.g. ). + /// True if failed otherwise false. + public static bool Save(T obj) where T : SettingsBase + { + var type = typeof(T); + + if (type == typeof(GameSettings)) + { + return Editor.SaveJsonAsset(GameSettingsAssetPath, obj); + } + + var gameSettings = Load(); + + if (type == typeof(TimeSettings)) + return SaveAsset(gameSettings, ref gameSettings.Time, obj); + if (type == typeof(LayersAndTagsSettings)) + return SaveAsset(gameSettings, ref gameSettings.LayersAndTags, obj); + if (type == typeof(PhysicsSettings)) + return SaveAsset(gameSettings, ref gameSettings.Physics, obj); + if (type == typeof(GraphicsSettings)) + return SaveAsset(gameSettings, ref gameSettings.Graphics, obj); + if (type == typeof(NavigationSettings)) + return SaveAsset(gameSettings, ref gameSettings.Navigation, obj); + if (type == typeof(BuildSettings)) + return SaveAsset(gameSettings, ref gameSettings.GameCooking, obj); + if (type == typeof(InputSettings)) + return SaveAsset(gameSettings, ref gameSettings.Input, obj); + if (type == typeof(WindowsPlatformSettings)) + return SaveAsset(gameSettings, ref gameSettings.WindowsPlatform, obj); + if (type == typeof(UWPPlatformSettings)) + return SaveAsset(gameSettings, ref gameSettings.UWPPlatform, obj); + if (type == typeof(LinuxPlatformSettings)) + return SaveAsset(gameSettings, ref gameSettings.LinuxPlatform, obj); + if (type.FullName == PS4PlatformSettingsTypename) + return SaveAsset(gameSettings, ref gameSettings.PS4Platform, obj); + if (type.FullName == XboxScarlettPlatformSettingsTypename) + return SaveAsset(gameSettings, ref gameSettings.XboxScarlettPlatform, obj); + if (type == typeof(AndroidPlatformSettings)) + return SaveAsset(gameSettings, ref gameSettings.AndroidPlatform, obj); + if (type == typeof(AudioSettings)) + return SaveAsset(gameSettings, ref gameSettings.Audio, obj); + + return true; + } + + /// + /// Sets the custom settings (or unsets if provided asset is null). + /// + /// The custom key (must be unique per context). + /// The custom settings asset. + /// True if failed otherwise false. + public static bool SetCustomSettings(string key, JsonAsset customSettingsAsset) + { + if (key == null) + throw new ArgumentNullException(nameof(key)); + + var gameSettings = Load(); + + if (customSettingsAsset == null && gameSettings.CustomSettings != null) + { + gameSettings.CustomSettings.Remove(key); + } + else + { + if (gameSettings.CustomSettings == null) + gameSettings.CustomSettings = new Dictionary(); + gameSettings.CustomSettings[key] = customSettingsAsset; + } + + return Editor.SaveJsonAsset(GameSettingsAssetPath, gameSettings); + } + + /// + /// Loads the current game settings asset and applies it to the engine runtime configuration. + /// + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern void Apply(); + } +} diff --git a/Source/Editor/Content/Settings/GraphicsSettings.cs b/Source/Editor/Content/Settings/GraphicsSettings.cs new file mode 100644 index 000000000..d488fef46 --- /dev/null +++ b/Source/Editor/Content/Settings/GraphicsSettings.cs @@ -0,0 +1,61 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The graphics rendering settings container. Allows to edit asset via editor. To modify those settings at runtime use . + /// + /// + public sealed class GraphicsSettings : SettingsBase + { + /// + /// Enables rendering synchronization with the refresh rate of the display device to avoid "tearing" artifacts. + /// + [EditorOrder(20), EditorDisplay("General", "Use V-Sync"), Tooltip("Enables rendering synchronization with the refresh rate of the display device to avoid \"tearing\" artifacts.")] + public bool UseVSync = false; + + /// + /// Anti Aliasing quality setting. + /// + [EditorOrder(1000), EditorDisplay("Quality", "AA Quality"), Tooltip("Anti Aliasing quality.")] + public Quality AAQuality = Quality.Medium; + + /// + /// Screen Space Reflections quality. + /// + [EditorOrder(1100), EditorDisplay("Quality", "SSR Quality"), Tooltip("Screen Space Reflections quality.")] + public Quality SSRQuality = Quality.Medium; + + /// + /// Screen Space Ambient Occlusion quality setting. + /// + [EditorOrder(1200), EditorDisplay("Quality", "SSAO Quality"), Tooltip("Screen Space Ambient Occlusion quality setting.")] + public Quality SSAOQuality = Quality.Medium; + + /// + /// Volumetric Fog quality setting. + /// + [EditorOrder(1250), EditorDisplay("Quality", "Volumetric Fog Quality"), Tooltip("Volumetric Fog quality setting.")] + public Quality VolumetricFogQuality = Quality.High; + + /// + /// The shadows quality. + /// + [EditorOrder(1300), EditorDisplay("Quality", "Shadows Quality"), Tooltip("The shadows quality.")] + public Quality ShadowsQuality = Quality.Medium; + + /// + /// The shadow maps quality (textures resolution). + /// + [EditorOrder(1310), EditorDisplay("Quality", "Shadow Maps Quality"), Tooltip("The shadow maps quality (textures resolution).")] + public Quality ShadowMapsQuality = Quality.Medium; + + /// + /// Enables cascades splits blending for directional light shadows. + /// + [EditorOrder(1320), EditorDisplay("Quality", "Allow CSM Blending"), Tooltip("Enables cascades splits blending for directional light shadows.")] + public bool AllowCSMBlending = false; + } +} diff --git a/Source/Editor/Content/Settings/InputSettings.cs b/Source/Editor/Content/Settings/InputSettings.cs new file mode 100644 index 000000000..dc074bb3c --- /dev/null +++ b/Source/Editor/Content/Settings/InputSettings.cs @@ -0,0 +1,28 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The input settings container. Allows to edit asset via editor. + /// + public sealed class InputSettings : SettingsBase + { + /// + /// Maps a discrete button or key press events to a "friendly name" that will later be bound to event-driven behavior. The end effect is that pressing (and/or releasing) a key, mouse button, or keypad button. + /// + /// + [Collection(Spacing = 10)] + [EditorOrder(100), EditorDisplay("Input Map"), Tooltip("Maps a discrete button or key press events to a \"friendly name\" that will later be bound to event-driven behavior. The end effect is that pressing (and/or releasing) a key, mouse button, or keypad button.")] + public ActionConfig[] ActionMappings; + + /// + /// Maps keyboard, controller, or mouse inputs to a "friendly name" that will later be bound to continuous game behavior, such as movement. The inputs mapped in AxisMappings are continuously polled, even if they are just reporting that their input value. + /// + /// + [Collection(Spacing = 10)] + [EditorOrder(200), EditorDisplay("Input Map"), Tooltip("Maps keyboard, controller, or mouse inputs to a \"friendly name\" that will later be bound to continuous game behavior, such as movement. The inputs mapped in AxisMappings are continuously polled, even if they are just reporting that their input value.")] + public AxisConfig[] AxisMappings; + } +} diff --git a/Source/Editor/Content/Settings/LayersAndTagsSettings.cs b/Source/Editor/Content/Settings/LayersAndTagsSettings.cs new file mode 100644 index 000000000..7c376d503 --- /dev/null +++ b/Source/Editor/Content/Settings/LayersAndTagsSettings.cs @@ -0,0 +1,40 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using System.Runtime.CompilerServices; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The layers and objects tags settings. Allows to edit asset via editor. + /// + public sealed class LayersAndTagsSettings : SettingsBase + { + /// + /// The tag names. + /// + [EditorOrder(10), EditorDisplay("Tags", EditorDisplayAttribute.InlineStyle)] + public List Tags = new List(); + + /// + /// The layers names. + /// + [EditorOrder(10), EditorDisplay("Layers", EditorDisplayAttribute.InlineStyle), Collection(ReadOnly = true)] + public string[] Layers = new string[32]; + + /// + /// Gets the current tags collection. + /// + /// The tags collection. + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern string[] GetCurrentTags(); + + /// + /// Gets the current layer names (max 32 items but trims last empty items). + /// + /// The layers. + [MethodImpl(MethodImplOptions.InternalCall)] + public static extern string[] GetCurrentLayers(); + } +} diff --git a/Source/Editor/Content/Settings/LinuxPlatformSettings.cs b/Source/Editor/Content/Settings/LinuxPlatformSettings.cs new file mode 100644 index 000000000..c1a30963d --- /dev/null +++ b/Source/Editor/Content/Settings/LinuxPlatformSettings.cs @@ -0,0 +1,60 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The Linux platform settings asset archetype. Allows to edit asset via editor. + /// + public class LinuxPlatformSettings : SettingsBase + { + /// + /// The default game window mode. + /// + [EditorOrder(10), EditorDisplay("Window"), Tooltip("The default game window mode.")] + public GameWindowMode WindowMode = GameWindowMode.Windowed; + + /// + /// The default game window width (in pixels). + /// + [EditorOrder(20), EditorDisplay("Window"), Tooltip("The default game window width (in pixels).")] + public int ScreenWidth = 1280; + + /// + /// The default game window height (in pixels). + /// + [EditorOrder(30), EditorDisplay("Window"), Tooltip("The default game window height (in pixels).")] + public int ScreenHeight = 720; + + /// + /// Enables resizing the game window by the user. + /// + [EditorOrder(40), EditorDisplay("Window"), Tooltip("Enables resizing the game window by the user.")] + public bool ResizableWindow = false; + + /// + /// Enables game running when application window loses focus. + /// + [EditorOrder(1010), EditorDisplay("Other", "Run In Background"), Tooltip("Enables game running when application window loses focus.")] + public bool RunInBackground = false; + + /// + /// Limits maximum amount of concurrent game instances running to one, otherwise user may launch application more than once. + /// + [EditorOrder(1020), EditorDisplay("Other"), Tooltip("Limits maximum amount of concurrent game instances running to one, otherwise user may launch application more than once.")] + public bool ForceSingleInstance = false; + + /// + /// Custom icon texture to use for the application (overrides the default one). + /// + [EditorOrder(1030), EditorDisplay("Other"), Tooltip("Custom icon texture to use for the application (overrides the default one).")] + public Texture OverrideIcon; + + /// + /// Enables support for Vulkan. Disabling it reduces compiled shaders count. + /// + [EditorOrder(2020), EditorDisplay("Graphics", "Support Vulkan"), Tooltip("Enables support for Vulkan. Disabling it reduces compiled shaders count.")] + public bool SupportVulkan = true; + } +} diff --git a/Source/Editor/Content/Settings/NavigationSettings.cs b/Source/Editor/Content/Settings/NavigationSettings.cs new file mode 100644 index 000000000..f4e0e3a02 --- /dev/null +++ b/Source/Editor/Content/Settings/NavigationSettings.cs @@ -0,0 +1,106 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The navigation system settings container. + /// + public sealed class NavigationSettings : SettingsBase + { + /// + /// The height of a grid cell in the navigation mesh building steps using heightfields. + /// A lower number means higher precision on the vertical axis but longer build times. + /// + [DefaultValue(10.0f), Limit(1, 400)] + [EditorOrder(10), EditorDisplay("Nav Mesh Options"), Tooltip("The height of a grid cell in the navigation mesh building steps using heightfields. A lower number means higher precision on the vertical axis but longer build times.")] + public float CellHeight = 10.0f; + + /// + /// The width/height of a grid cell in the navigation mesh building steps using heightfields. + /// A lower number means higher precision on the horizontal axes but longer build times. + /// + [DefaultValue(30.0f), Limit(1, 400)] + [EditorOrder(20), EditorDisplay("Nav Mesh Options"), Tooltip("The width/height of a grid cell in the navigation mesh building steps using heightfields. A lower number means higher precision on the vertical axis but longer build times.")] + public float CellSize = 30.0f; + + /// + /// Tile size used for Navigation mesh tiles, the final size of a tile is CellSize*TileSize. + /// + [DefaultValue(64), Limit(8, 4096)] + [EditorOrder(30), EditorDisplay("Nav Mesh Options"), Tooltip("Tile size used for Navigation mesh tiles, the final size of a tile is CellSize*TileSize.")] + public int TileSize = 64; + + /// + /// The minimum number of cells allowed to form isolated island areas. + /// + [DefaultValue(0), Limit(0, 100)] + [EditorOrder(40), EditorDisplay("Nav Mesh Options"), Tooltip("The minimum number of cells allowed to form isolated island areas.")] + public int MinRegionArea = 0; + + /// + /// Any regions with a span count smaller than this value will, if possible, be merged with larger regions. + /// + [DefaultValue(20), Limit(0, 100)] + [EditorOrder(50), EditorDisplay("Nav Mesh Options"), Tooltip("Any regions with a span count smaller than this value will, if possible, be merged with larger regions.")] + public int MergeRegionArea = 20; + + /// + /// The maximum allowed length for contour edges along the border of the mesh. + /// + [DefaultValue(1200.0f), Limit(100)] + [EditorOrder(60), EditorDisplay("Nav Mesh Options", "Max Edge Length"), Tooltip("The maximum allowed length for contour edges along the border of the mesh.")] + public float MaxEdgeLen = 1200.0f; + + /// + /// The maximum distance a simplified contour's border edges should deviate from the original raw contour. + /// + [DefaultValue(1.3f), Limit(0.1f, 4)] + [EditorOrder(70), EditorDisplay("Nav Mesh Options"), Tooltip("The maximum distance a simplified contour's border edges should deviate from the original raw contour.")] + public float MaxEdgeError = 1.3f; + + /// + /// The sampling distance to use when generating the detail mesh. For height detail only. + /// + [DefaultValue(600.0f), Limit(1)] + [EditorOrder(80), EditorDisplay("Nav Mesh Options", "Detail Sampling Distance"), Tooltip("The sampling distance to use when generating the detail mesh.")] + public float DetailSamplingDist = 600.0f; + + /// + /// The maximum distance the detail mesh surface should deviate from heightfield data. For height detail only. + /// + [DefaultValue(1.0f), Limit(0, 3)] + [EditorOrder(90), EditorDisplay("Nav Mesh Options"), Tooltip("The maximum distance the detail mesh surface should deviate from heightfield data.")] + public float MaxDetailSamplingError = 1.0f; + + /// + /// The radius of the smallest objects to traverse this nav mesh. Objects can't pass through gaps of less than twice the radius. + /// + [DefaultValue(34.0f), Limit(0)] + [EditorOrder(1000), EditorDisplay("Agent Options"), Tooltip("The radius of the smallest objects to traverse this nav mesh. Objects can't pass through gaps of less than twice the radius.")] + public float WalkableRadius = 34.0f; + + /// + /// The height of the smallest objects to traverse this nav mesh. Objects can't enter areas with ceilings lower than this value. + /// + [DefaultValue(144.0f), Limit(0)] + [EditorOrder(1010), EditorDisplay("Agent Options"), Tooltip("The height of the smallest objects to traverse this nav mesh. Objects can't enter areas with ceilings lower than this value.")] + public float WalkableHeight = 144.0f; + + /// + /// The maximum ledge height that is considered to still be traversable. + /// + [DefaultValue(35.0f), Limit(0)] + [EditorOrder(1020), EditorDisplay("Agent Options"), Tooltip("The maximum ledge height that is considered to still be traversable.")] + public float WalkableMaxClimb = 35.0f; + + /// + /// The maximum slope that is considered walkable (in degrees). Objects can't go up or down slopes higher than this value. + /// + [DefaultValue(60.0f), Limit(0, 89.0f)] + [EditorOrder(1030), EditorDisplay("Agent Options"), Tooltip("The maximum slope that is considered walkable (in degrees). Objects can't go up or down slopes higher than this value.")] + public float WalkableMaxSlopeAngle = 60.0f; + } +} diff --git a/Source/Editor/Content/Settings/PhysicsSettings.cs b/Source/Editor/Content/Settings/PhysicsSettings.cs new file mode 100644 index 000000000..b6b08f053 --- /dev/null +++ b/Source/Editor/Content/Settings/PhysicsSettings.cs @@ -0,0 +1,121 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The physics simulation settings container. Allows to edit asset via editor. + /// + public sealed class PhysicsSettings : SettingsBase + { + /// + /// The default gravity force value (in cm^2/s). + /// + [DefaultValue(typeof(Vector3), "0,-981.0,0")] + [EditorOrder(0), EditorDisplay("Simulation"), Tooltip("The default gravity force value (in cm^2/s).")] + public Vector3 DefaultGravity = new Vector3(0, -981.0f, 0); + + /// + /// If enabled, any Raycast or other scene query that intersects with a Collider marked as a Trigger will returns with a hit. Individual raycasts can override this behavior. + /// + [DefaultValue(true)] + [EditorOrder(10), EditorDisplay("Simulation"), Tooltip("If enabled, any Raycast or other scene query that intersects with a Collider marked as a Trigger will returns with a hit. Individual raycasts can override this behavior.")] + public bool QueriesHitTriggers = true; + + /// + /// Triangles from triangle meshes (CSG) with an area less than or equal to this value will be removed from physics collision data. Set to less than or equal 0 to disable. + /// + [DefaultValue(5.0f)] + [EditorOrder(20), EditorDisplay("Simulation"), Limit(-1, 10), Tooltip("Triangles from triangle meshes (CSG) with an area less than or equal to this value will be removed from physics collision data. Set to less than or equal 0 to disable.")] + public float TriangleMeshTriangleMinAreaThreshold = 5.0f; + + /// + /// Minimum relative velocity required for an object to bounce. A typical value for simulation stability is about 0.2 * gravity + /// + [DefaultValue(200.0f)] + [EditorOrder(30), EditorDisplay("Simulation"), Limit(0), Tooltip("Minimum relative velocity required for an object to bounce. A typical value for simulation stability is about 0.2 * gravity")] + public float BounceThresholdVelocity = 200.0f; + + /// + /// Default friction combine mode, controls how friction is computed for multiple materials. + /// + [DefaultValue(PhysicsCombineMode.Average)] + [EditorOrder(40), EditorDisplay("Simulation"), Tooltip("Default friction combine mode, controls how friction is computed for multiple materials.")] + public PhysicsCombineMode FrictionCombineMode = PhysicsCombineMode.Average; + + /// + /// Default restitution combine mode, controls how restitution is computed for multiple materials. + /// + [DefaultValue(PhysicsCombineMode.Average)] + [EditorOrder(50), EditorDisplay("Simulation"), Tooltip("Default restitution combine mode, controls how restitution is computed for multiple materials.")] + public PhysicsCombineMode RestitutionCombineMode = PhysicsCombineMode.Average; + + /// + /// If true CCD will be ignored. This is an optimization when CCD is never used which removes the need for PhysX to check it internally. + /// + [DefaultValue(false)] + [EditorOrder(70), EditorDisplay("Simulation", "Disable CCD"), Tooltip("If true CCD will be ignored. This is an optimization when CCD is never used which removes the need for PhysX to check it internally.")] + public bool DisableCCD; + + /// + /// Enables adaptive forces to accelerate convergence of the solver. Can improve physics simulation performance but lead to artifacts. + /// + [DefaultValue(false)] + [EditorOrder(80), EditorDisplay("Simulation"), Tooltip("Enables adaptive forces to accelerate convergence of the solver. Can improve physics simulation performance but lead to artifacts.")] + public bool EnableAdaptiveForce; + + /// + /// The maximum allowed delta time (in seconds) for the physics simulation step. + /// + [DefaultValue(1.0f / 10.0f)] + [EditorOrder(1000), EditorDisplay("Framerate"), Limit(0.0013f, 2.0f), Tooltip("The maximum allowed delta time (in seconds) for the physics simulation step.")] + public float MaxDeltaTime = 1.0f / 10.0f; + + /// + /// Whether to substep the physics simulation. + /// + [DefaultValue(false)] + [EditorOrder(1005), EditorDisplay("Framerate"), Tooltip("Whether to substep the physics simulation.")] + public bool EnableSubstepping; + + /// + /// Delta time (in seconds) for an individual simulation substep. + /// + [DefaultValue(1.0f / 120.0f)] + [EditorOrder(1010), EditorDisplay("Framerate"), Limit(0.0013f, 1.0f), Tooltip("Delta time (in seconds) for an individual simulation substep.")] + public float SubstepDeltaTime = 1.0f / 120.0f; + + /// + /// The maximum number of substeps for physics simulation. + /// + [DefaultValue(5)] + [EditorOrder(1020), EditorDisplay("Framerate"), Limit(1, 16), Tooltip("The maximum number of substeps for physics simulation.")] + public int MaxSubsteps = 5; + + /// + /// The collision layers masks. Used to define layer-based collision detection. + /// + [EditorOrder(1040), EditorDisplay("Layers Matrix"), CustomEditor(typeof(FlaxEditor.CustomEditors.Dedicated.LayersMatrixEditor))] + public uint[] LayerMasks = new uint[32]; + + /// + /// Enables support for cooking physical collision shapes geometry at runtime. Use it to enable generating runtime terrain collision or convex mesh colliders. + /// + [DefaultValue(false)] + [EditorOrder(1100), EditorDisplay("Other", "Support Cooking At Runtime"), Tooltip("Enables support for cooking physical collision shapes geometry at runtime. Use it to enable generating runtime terrain collision or convex mesh colliders.")] + public bool SupportCookingAtRuntime; + + /// + /// Initializes a new instance of the class. + /// + public PhysicsSettings() + { + for (int i = 0; i < 32; i++) + { + LayerMasks[i] = uint.MaxValue; + } + } + } +} diff --git a/Source/Editor/Content/Settings/TimeSettings.cs b/Source/Editor/Content/Settings/TimeSettings.cs new file mode 100644 index 000000000..f346139f4 --- /dev/null +++ b/Source/Editor/Content/Settings/TimeSettings.cs @@ -0,0 +1,48 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The time settings asset archetype. Allows to edit asset via editor. + /// + public sealed class TimeSettings : SettingsBase + { + /// + /// The target amount of the game logic updates per second (script updates frequency). Use 0 for infinity. + /// + [DefaultValue(30.0f)] + [EditorOrder(1), Limit(0, 1000), EditorDisplay(null, "Update FPS"), Tooltip("Target amount of the game logic updates per second (script updates frequency). Use 0 for infinity.")] + public float UpdateFPS = 30.0f; + + /// + /// The target amount of the physics simulation updates per second (also fixed updates frequency). Use 0 for infinity. + /// + [DefaultValue(60.0f)] + [EditorOrder(2), Limit(0, 1000), EditorDisplay(null, "Physics FPS"), Tooltip("Target amount of the physics simulation updates per second (also fixed updates frequency). Use 0 for infinity.")] + public float PhysicsFPS = 60.0f; + + /// + /// The target amount of the frames rendered per second (actual game FPS). Use 0 for infinity. + /// + [DefaultValue(60.0f)] + [EditorOrder(3), Limit(0, 1000), EditorDisplay(null, "Draw FPS"), Tooltip("Target amount of the frames rendered per second (actual game FPS). Use 0 for infinity.")] + public float DrawFPS = 60.0f; + + /// + /// The game time scale factor. Default is 1. + /// + [DefaultValue(1.0f)] + [EditorOrder(10), Limit(0, 1000.0f, 0.1f), Tooltip("Game time scaling factor. Default is 1 for real-time simulation.")] + public float TimeScale = 1.0f; + + /// + /// The maximum allowed delta time (in seconds) for the game logic update step. + /// + [DefaultValue(1.0f / 10.0f)] + [EditorOrder(20), Limit(0.1f, 1000.0f, 0.01f), Tooltip("The maximum allowed delta time (in seconds) for the game logic update step.")] + public float MaxUpdateDeltaTime = 1.0f / 10.0f; + } +} diff --git a/Source/Editor/Content/Settings/UWPPlatformSettings.cs b/Source/Editor/Content/Settings/UWPPlatformSettings.cs new file mode 100644 index 000000000..db00f3061 --- /dev/null +++ b/Source/Editor/Content/Settings/UWPPlatformSettings.cs @@ -0,0 +1,97 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The Universal Windows Platform (UWP) platform settings asset archetype. Allows to edit asset via editor. + /// + public class UWPPlatformSettings : SettingsBase + { + /// + /// The preferred launch windowing mode. + /// + public enum WindowMode + { + /// + /// The full screen mode + /// + FullScreen = 0, + + /// + /// The view size. + /// + ViewSize = 1, + } + + /// + /// The display orientation modes. Can be combined as flags. + /// + [Flags] + public enum DisplayOrientations + { + /// + /// The none. + /// + None = 0, + + /// + /// The landscape. + /// + Landscape = 1, + + /// + /// The landscape flipped. + /// + LandscapeFlipped = 2, + + /// + /// The portrait. + /// + Portrait = 4, + + /// + /// The portrait flipped. + /// + PortraitFlipped = 8, + } + + /// + /// The preferred launch windowing mode. Always fullscreen on Xbox. + /// + [DefaultValue(WindowMode.FullScreen)] + [EditorOrder(10), EditorDisplay("Window"), Tooltip("The preferred launch windowing mode. Always fullscreen on Xbox.")] + public WindowMode PreferredLaunchWindowingMode = WindowMode.FullScreen; + + /// + /// The display orientation modes. Can be combined as flags. + /// + [DefaultValue(DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped | DisplayOrientations.Portrait | DisplayOrientations.PortraitFlipped)] + [EditorOrder(20), EditorDisplay("Window"), Tooltip("The display orientation modes. Can be combined as flags.")] + public DisplayOrientations AutoRotationPreferences = DisplayOrientations.Landscape | DisplayOrientations.LandscapeFlipped | DisplayOrientations.Portrait | DisplayOrientations.PortraitFlipped; + + /// + /// The location of the package certificate (relative to the project). + /// + [DefaultValue("")] + [EditorOrder(1010), EditorDisplay("Other"), Tooltip("The location of the package certificate (relative to the project).")] + public string CertificateLocation = string.Empty; + + /// + /// Enables support for DirectX 11. Disabling it reduces compiled shaders count. + /// + [DefaultValue(true)] + [EditorOrder(2000), EditorDisplay("Graphics", "Support DirectX 11"), Tooltip("Enables support for DirectX 11. Disabling it reduces compiled shaders count.")] + public bool SupportDX11 = true; + + /// + /// Enables support for DirectX 10 and DirectX 10.1. Disabling it reduces compiled shaders count. + /// + [DefaultValue(false)] + [EditorOrder(2010), EditorDisplay("Graphics", "Support DirectX 10"), Tooltip("Enables support for DirectX 10 and DirectX 10.1. Disabling it reduces compiled shaders count.")] + public bool SupportDX10 = false; + } +} diff --git a/Source/Editor/Content/Settings/WindowsPlatformSettings.cs b/Source/Editor/Content/Settings/WindowsPlatformSettings.cs new file mode 100644 index 000000000..f0e3bf4bf --- /dev/null +++ b/Source/Editor/Content/Settings/WindowsPlatformSettings.cs @@ -0,0 +1,90 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.ComponentModel; +using FlaxEngine; + +namespace FlaxEditor.Content.Settings +{ + /// + /// The Windows platform settings asset archetype. Allows to edit asset via editor. + /// + public class WindowsPlatformSettings : SettingsBase + { + /// + /// The default game window mode. + /// + [DefaultValue(GameWindowMode.Windowed)] + [EditorOrder(10), EditorDisplay("Window"), Tooltip("The default game window mode.")] + public GameWindowMode WindowMode = GameWindowMode.Windowed; + + /// + /// The default game window width (in pixels). + /// + [DefaultValue(1280)] + [EditorOrder(20), EditorDisplay("Window"), Tooltip("The default game window width (in pixels).")] + public int ScreenWidth = 1280; + + /// + /// The default game window height (in pixels). + /// + [DefaultValue(720)] + [EditorOrder(30), EditorDisplay("Window"), Tooltip("The default game window height (in pixels).")] + public int ScreenHeight = 720; + + /// + /// Enables resizing the game window by the user. + /// + [DefaultValue(false)] + [EditorOrder(40), EditorDisplay("Window"), Tooltip("Enables resizing the game window by the user.")] + public bool ResizableWindow = false; + + /// + /// Enables game running when application window loses focus. + /// + [DefaultValue(false)] + [EditorOrder(1010), EditorDisplay("Other", "Run In Background"), Tooltip("Enables game running when application window loses focus.")] + public bool RunInBackground = false; + + /// + /// Limits maximum amount of concurrent game instances running to one, otherwise user may launch application more than once. + /// + [DefaultValue(false)] + [EditorOrder(1020), EditorDisplay("Other"), Tooltip("Limits maximum amount of concurrent game instances running to one, otherwise user may launch application more than once.")] + public bool ForceSingleInstance = false; + + /// + /// Custom icon texture to use for the application (overrides the default one). + /// + [DefaultValue(null)] + [EditorOrder(1030), EditorDisplay("Other"), Tooltip("Custom icon texture to use for the application (overrides the default one).")] + public Texture OverrideIcon; + + /// + /// Enables support for DirectX 12. Disabling it reduces compiled shaders count. + /// + [DefaultValue(false)] + [EditorOrder(2000), EditorDisplay("Graphics", "Support DirectX 12"), Tooltip("Enables support for DirectX 12. Disabling it reduces compiled shaders count.")] + public bool SupportDX12 = false; + + /// + /// Enables support for DirectX 11. Disabling it reduces compiled shaders count. + /// + [DefaultValue(true)] + [EditorOrder(2010), EditorDisplay("Graphics", "Support DirectX 11"), Tooltip("Enables support for DirectX 11. Disabling it reduces compiled shaders count.")] + public bool SupportDX11 = true; + + /// + /// Enables support for DirectX 10 and DirectX 10.1. Disabling it reduces compiled shaders count. + /// + [DefaultValue(false)] + [EditorOrder(2020), EditorDisplay("Graphics", "Support DirectX 10"), Tooltip("Enables support for DirectX 10 and DirectX 10.1. Disabling it reduces compiled shaders count.")] + public bool SupportDX10 = false; + + /// + /// Enables support for Vulkan. Disabling it reduces compiled shaders count. + /// + [DefaultValue(false)] + [EditorOrder(2030), EditorDisplay("Graphics", "Support Vulkan"), Tooltip("Enables support for Vulkan. Disabling it reduces compiled shaders count.")] + public bool SupportVulkan = false; + } +} diff --git a/Source/Editor/Content/Thumbnails/ThumbnailRequest.cs b/Source/Editor/Content/Thumbnails/ThumbnailRequest.cs new file mode 100644 index 000000000..8ec88a6a7 --- /dev/null +++ b/Source/Editor/Content/Thumbnails/ThumbnailRequest.cs @@ -0,0 +1,129 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using FlaxEngine; + +namespace FlaxEditor.Content.Thumbnails +{ + /// + /// Contains information about asset thumbnail rendering. + /// + [HideInEditor] + public class ThumbnailRequest + { + /// + /// The request state types. + /// + public enum States + { + /// + /// The initial state. + /// + Created, + + /// + /// Request has been prepared for the rendering but still may wait for resources to load fully. + /// + Prepared, + + /// + /// The thumbnail has been rendered. Request can be finalized. + /// + Rendered, + + /// + /// The finalized state. + /// + Disposed, + }; + + /// + /// Gets the state. + /// + public States State { get; private set; } = States.Created; + + /// + /// The item. + /// + public readonly AssetItem Item; + + /// + /// The proxy object for the asset item. + /// + public readonly AssetProxy Proxy; + + /// + /// The asset reference. May be null if not cached yet. + /// + public Asset Asset; + + /// + /// The custom tag object used by the thumbnails rendering pipeline. Can be used to store the data related to the thumbnail rendering by the asset proxy. + /// + public object Tag; + + /// + /// Determines whether thumbnail can be drawn for the item. + /// + public bool IsReady => State == States.Prepared && Asset && Asset.IsLoaded && Proxy.CanDrawThumbnail(this); + + /// + /// Initializes a new instance of the class. + /// + /// The item. + /// The proxy. + public ThumbnailRequest(AssetItem item, AssetProxy proxy) + { + Item = item; + Proxy = proxy; + } + + /// + /// Prepares this request. + /// + public void Prepare() + { + if (State != States.Created) + throw new InvalidOperationException(); + + // Prepare + Asset = FlaxEngine.Content.LoadAsync(Item.Path); + Proxy.OnThumbnailDrawPrepare(this); + + State = States.Prepared; + } + + /// + /// Finishes the rendering and updates the item thumbnail. + /// + /// The icon. + public void FinishRender(ref SpriteHandle icon) + { + if (State != States.Prepared) + throw new InvalidOperationException(); + + Item.Thumbnail = icon; + + State = States.Rendered; + } + + /// + /// Finalizes this request. + /// + public void Dispose() + { + if (State == States.Disposed) + throw new InvalidOperationException(); + + if (State != States.Created) + { + // Cleanup + Proxy.OnThumbnailDrawCleanup(this); + Asset = null; + } + + Tag = null; + State = States.Disposed; + } + } +} diff --git a/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs b/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs new file mode 100644 index 000000000..689cad248 --- /dev/null +++ b/Source/Editor/Content/Thumbnails/ThumbnailsModule.cs @@ -0,0 +1,523 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.IO; +using FlaxEditor.Modules; +using FlaxEngine; +using FlaxEngine.GUI; +using Object = FlaxEngine.Object; + +namespace FlaxEditor.Content.Thumbnails +{ + /// + /// Manages asset thumbnails rendering and presentation. + /// + /// + public sealed class ThumbnailsModule : EditorModule, IContentItemOwner + { + /// + /// The minimum required quality (in range [0;1]) for content streaming resources to be loaded in order to generate thumbnail for them. + /// + public const float MinimumRequiredResourcesQuality = 0.8f; + + // TODO: free atlas slots for deleted assets + + private readonly List _cache = new List(4); + private readonly string _cacheFolder; + + private DateTime _lastFlushTime; + + private readonly List _requests = new List(128); + private readonly PreviewRoot _guiRoot = new PreviewRoot(); + private RenderTask _task; + private GPUTexture _output; + + internal ThumbnailsModule(Editor editor) + : base(editor) + { + _cacheFolder = StringUtils.CombinePaths(Globals.ProjectCacheFolder, "Thumbnails"); + _lastFlushTime = DateTime.UtcNow; + } + + /// + /// Requests the item preview. + /// + /// The item. + /// + public void RequestPreview(ContentItem item) + { + if (item == null) + throw new ArgumentNullException(); + + // Check if use default icon + var defaultThumbnail = item.DefaultThumbnail; + if (defaultThumbnail.IsValid) + { + item.Thumbnail = defaultThumbnail; + return; + } + + // We cache previews only for items with 'ID', for now we support only AssetItems + var assetItem = item as AssetItem; + if (assetItem == null) + return; + + // Ensure that there is valid proxy for that item + var proxy = Editor.ContentDatabase.GetProxy(item) as AssetProxy; + if (proxy == null) + { + Editor.LogWarning($"Cannot generate preview for item {item.Path}. Cannot find proxy for it."); + return; + } + + lock (_requests) + { + // Check if element hasn't been already processed for generating preview + if (FindRequest(assetItem) == null) + { + // Check each cache atlas + for (int i = 0; i < _cache.Count; i++) + { + var sprite = _cache[i].FindSlot(assetItem.ID); + if (sprite.IsValid) + { + // Found! + item.Thumbnail = sprite; + return; + } + } + + // Add request + AddRequest(assetItem, proxy); + } + } + } + + /// + /// Deletes the item preview from the cache. + /// + /// The item. + /// + public void DeletePreview(ContentItem item) + { + if (item == null) + throw new ArgumentNullException(); + + // We cache previews only for items with 'ID', for now we support only AssetItems + var assetItem = item as AssetItem; + if (assetItem == null) + return; + + lock (_requests) + { + // Cancel loading + RemoveRequest(assetItem); + + // Find atlas with preview and remove it + for (int i = 0; i < _cache.Count; i++) + { + if (_cache[i].ReleaseSlot(assetItem.ID)) + { + break; + } + } + } + } + + #region IContentItemOwner + + /// + void IContentItemOwner.OnItemDeleted(ContentItem item) + { + if (item is AssetItem assetItem) + { + lock (_requests) + { + RemoveRequest(assetItem); + } + } + } + + /// + void IContentItemOwner.OnItemRenamed(ContentItem item) + { + } + + /// + void IContentItemOwner.OnItemReimported(ContentItem item) + { + } + + /// + void IContentItemOwner.OnItemDispose(ContentItem item) + { + if (item is AssetItem assetItem) + { + lock (_requests) + { + RemoveRequest(assetItem); + } + } + } + + #endregion + + /// + public override void OnInit() + { + // Create cache folder + if (!Directory.Exists(_cacheFolder)) + { + Directory.CreateDirectory(_cacheFolder); + } + + // Find atlases in a Editor cache directory + var files = Directory.GetFiles(_cacheFolder, "cache_*.flax", SearchOption.TopDirectoryOnly); + int atlases = 0; + for (int i = 0; i < files.Length; i++) + { + // Load asset + var asset = FlaxEngine.Content.LoadAsync(files[i]); + if (asset == null) + continue; + + // Validate type + if (asset is PreviewsCache atlas) + { + // Cache atlas + atlases++; + _cache.Add(atlas); + } + else + { + // Skip asset + Editor.LogWarning(string.Format("Asset \'{0}\' is inside Editor\'s private directory for Assets Thumbnails Cache. Please move it.", asset.Path)); + } + } + Editor.Log(string.Format("Previews cache count: {0} (capacity for {1} icons)", atlases, atlases * PreviewsCache.AssetIconsPerAtlas)); + + // Prepare at least one atlas + if (_cache.Count == 0) + { + GetValidAtlas(); + } + + // Create render task but disabled for now + _output = GPUDevice.Instance.CreateTexture("ThumbnailsOutput"); + var desc = GPUTextureDescription.New2D(PreviewsCache.AssetIconSize, PreviewsCache.AssetIconSize, PreviewsCache.AssetIconsAtlasFormat); + _output.Init(ref desc); + _task = Object.New(); + _task.Order = 50; // Render this task later + _task.Enabled = false; + _task.Render += OnRender; + } + + private void OnRender(RenderTask task, GPUContext context) + { + lock (_requests) + { + // Check if there is ready next asset to render thumbnail for it + // But don't check whole queue, only a few items + var request = GetReadyRequest(10); + if (request == null) + { + // Disable task + _task.Enabled = false; + return; + } + + // Find atlas with an free slot + var atlas = GetValidAtlas(); + if (atlas == null) + { + // Error + _task.Enabled = false; + _requests.Clear(); + Editor.LogError("Failed to get atlas."); + return; + } + + // Wait for atlas being loaded + if (!atlas.IsReady) + return; + + // Setup + _guiRoot.RemoveChildren(); + _guiRoot.AccentColor = request.Proxy.AccentColor; + + // Call proxy to prepare for thumbnail rendering + request.Proxy.OnThumbnailDrawBegin(request, _guiRoot, context); + _guiRoot.UnlockChildrenRecursive(); + + // Draw preview + context.Clear(_output.View(), Color.Black); + Render2D.CallDrawing(_guiRoot, context, _output); + + // Call proxy and cleanup UI (delete create controls, shared controls should be unlinked during OnThumbnailDrawEnd event) + request.Proxy.OnThumbnailDrawEnd(request, _guiRoot); + _guiRoot.DisposeChildren(); + + // Copy backbuffer with rendered preview into atlas + SpriteHandle icon = atlas.OccupySlot(_output, request.Item.ID); + if (!icon.IsValid) + { + // Error + _task.Enabled = false; + _requests.Clear(); + Editor.LogError("Failed to occupy previews cache atlas slot."); + return; + } + + // End + request.FinishRender(ref icon); + RemoveRequest(request); + } + } + + private void StartPreviewsQueue() + { + // Ensure to have valid atlas + GetValidAtlas(); + + // Enable task + _task.Enabled = true; + } + + #region Requests Management + + private ThumbnailRequest FindRequest(AssetItem item) + { + for (int i = 0; i < _requests.Count; i++) + { + if (_requests[i].Item == item) + return _requests[i]; + } + return null; + } + + private void AddRequest(AssetItem item, AssetProxy proxy) + { + var request = new ThumbnailRequest(item, proxy); + _requests.Add(request); + item.AddReference(this); + } + + private void RemoveRequest(ThumbnailRequest request) + { + request.Dispose(); + _requests.Remove(request); + request.Item.RemoveReference(this); + } + + private void RemoveRequest(AssetItem item) + { + var request = FindRequest(item); + if (request != null) + RemoveRequest(request); + } + + private ThumbnailRequest GetReadyRequest(int maxChecks) + { + maxChecks = Mathf.Min(maxChecks, _requests.Count); + for (int i = 0; i < maxChecks; i++) + { + var request = _requests[i]; + + try + { + if (request.IsReady) + { + return request; + } + } + catch (Exception ex) + { + Editor.LogWarning(ex); + Editor.LogWarning($"Failed to prepare thumbnail rendering for {request.Item.ShortName}."); + } + } + + return null; + } + + #endregion + + #region Atlas Management + + private PreviewsCache CreateAtlas() + { + // Create atlas path + var path = StringUtils.CombinePaths(_cacheFolder, string.Format("cache_{0:N}.flax", Guid.NewGuid())); + + // Create atlas + if (PreviewsCache.Create(path)) + { + // Error + Editor.LogError("Failed to create thumbnails atlas."); + return null; + } + + // Load atlas + var atlas = FlaxEngine.Content.LoadAsync(path); + if (atlas == null) + { + // Error + Editor.LogError("Failed to load thumbnails atlas."); + return null; + } + + // Register new atlas + _cache.Add(atlas); + + return atlas; + } + + private void Flush() + { + for (int i = 0; i < _cache.Count; i++) + { + _cache[i].Flush(); + } + } + + private bool HasAllAtlasesLoaded() + { + for (int i = 0; i < _cache.Count; i++) + { + if (!_cache[i].IsReady) + { + return false; + } + } + return true; + } + + private PreviewsCache GetValidAtlas() + { + // Check if has no free slots + for (int i = 0; i < _cache.Count; i++) + { + if (_cache[i].HasFreeSlot) + { + return _cache[i]; + } + } + + // Create new atlas + return CreateAtlas(); + } + + #endregion + + /// + public override void OnUpdate() + { + // Wait some frames before start generating previews (late init feature) + if (Time.TimeSinceStartup < 1.0f || HasAllAtlasesLoaded() == false) + { + // Back + return; + } + + lock (_requests) + { + var now = DateTime.UtcNow; + + // Check if has any request pending + int count = _requests.Count; + if (count > 0) + { + // Prepare requests + bool isAnyReady = false; + int checks = Mathf.Min(10, _requests.Count); + for (int i = 0; i < checks; i++) + { + var request = _requests[i]; + + try + { + if (request.IsReady) + { + isAnyReady = true; + } + else if (request.State == ThumbnailRequest.States.Created) + { + request.Prepare(); + } + } + catch (Exception ex) + { + Editor.LogWarning(ex); + Editor.LogWarning($"Failed to prepare thumbnail rendering for {request.Item.ShortName}."); + } + } + + // Check if has no rendering task enabled but should be + if (isAnyReady && _task.Enabled == false) + { + // Start generating preview + StartPreviewsQueue(); + } + } + // Don't flush every frame + else if (now - _lastFlushTime >= TimeSpan.FromSeconds(1)) + { + // Flush data + _lastFlushTime = now; + Flush(); + } + } + } + + /// + public override void OnExit() + { + if (_task) + _task.Enabled = false; + + lock (_requests) + { + // Clear data + while (_requests.Count > 0) + RemoveRequest(_requests[0]); + _cache.Clear(); + } + + _guiRoot.Dispose(); + Object.Destroy(ref _task); + Object.Destroy(ref _output); + } + + /// + /// Thumbnails GUI root control. + /// + /// + private class PreviewRoot : ContainerControl + { + /// + /// The item accent color to draw. + /// + public Color AccentColor; + + /// + public PreviewRoot() + : base(0, 0, PreviewsCache.AssetIconSize, PreviewsCache.AssetIconSize) + { + AutoFocus = false; + AccentColor = Color.Pink; + IsLayoutLocked = false; + } + + /// + public override void Draw() + { + base.Draw(); + + // Draw accent + const float accentHeight = 2; + Render2D.FillRectangle(new Rectangle(0, Height - accentHeight, Width, accentHeight), AccentColor); + } + } + } +} diff --git a/Source/Editor/Content/Tree/ContentTreeNode.cs b/Source/Editor/Content/Tree/ContentTreeNode.cs new file mode 100644 index 000000000..909162c11 --- /dev/null +++ b/Source/Editor/Content/Tree/ContentTreeNode.cs @@ -0,0 +1,315 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using FlaxEditor.GUI; +using FlaxEditor.GUI.Drag; +using FlaxEditor.GUI.Tree; +using FlaxEditor.Utilities; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// Content folder tree node. + /// + /// + public class ContentTreeNode : TreeNode + { + private DragItems _dragOverItems; + private List _highlights; + + /// + /// The folder. + /// + protected ContentFolder _folder; + + /// + /// Gets the content folder item. + /// + public ContentFolder Folder => _folder; + + /// + /// Gets the type of the folder. + /// + public ContentFolderType FolderType => _folder.FolderType; + + /// + /// Returns true if that folder can import/manage scripts. + /// + public bool CanHaveScripts => _folder.CanHaveScripts; + + /// + /// Returns true if that folder can import/manage assets. + /// + /// True if can contain assets for project, otherwise false + public bool CanHaveAssets => _folder.CanHaveAssets; + + /// + /// Gets the parent node. + /// + public ContentTreeNode ParentNode => Parent as ContentTreeNode; + + /// + /// Gets the folder path. + /// + public string Path => _folder.Path; + + /// + /// Gets the navigation button label. + /// + public virtual string NavButtonLabel => _folder.ShortName; + + /// + /// Initializes a new instance of the class. + /// + /// The parent node. + /// The folder path. + public ContentTreeNode(ContentTreeNode parent, string path) + : this(parent, parent?.FolderType ?? ContentFolderType.Other, path) + { + } + + /// + /// Initializes a new instance of the class. + /// + /// The parent node. + /// The folder type. + /// The folder path. + protected ContentTreeNode(ContentTreeNode parent, ContentFolderType type, string path) + : base(false, Editor.Instance.Icons.FolderClosed12, Editor.Instance.Icons.FolderOpened12) + { + _folder = new ContentFolder(type, path, this); + Text = _folder.ShortName; + if (parent != null) + { + Folder.ParentFolder = parent.Folder; + Parent = parent; + } + } + + /// + /// Shows the rename popup for the item. + /// + public void StartRenaming() + { + if (!_folder.CanRename) + return; + + // Start renaming the folder + var dialog = RenamePopup.Show(this, HeaderRect, _folder.ShortName, false); + dialog.Tag = _folder; + dialog.Renamed += popup => Editor.Instance.Windows.ContentWin.Rename((ContentFolder)popup.Tag, popup.Text); + } + + /// + /// Updates the query search filter. + /// + /// The filter text. + public void UpdateFilter(string filterText) + { + bool noFilter = string.IsNullOrWhiteSpace(filterText); + + // Update itself + bool isThisVisible; + if (noFilter) + { + // Clear filter + _highlights?.Clear(); + isThisVisible = true; + } + else + { + QueryFilterHelper.Range[] ranges; + var text = Text; + if (QueryFilterHelper.Match(filterText, text, out ranges)) + { + // Update highlights + if (_highlights == null) + _highlights = new List(ranges.Length); + else + _highlights.Clear(); + var style = Style.Current; + var font = style.FontSmall; + var textRect = TextRect; + for (int i = 0; i < ranges.Length; i++) + { + var start = font.GetCharPosition(text, ranges[i].StartIndex); + var end = font.GetCharPosition(text, ranges[i].EndIndex); + _highlights.Add(new Rectangle(start.X + textRect.X, textRect.Y, end.X - start.X, textRect.Height)); + } + isThisVisible = true; + } + else + { + // Hide + _highlights?.Clear(); + isThisVisible = false; + } + } + + // Update children + bool isAnyChildVisible = false; + for (int i = 0; i < _children.Count; i++) + { + if (_children[i] is ContentTreeNode child) + { + child.UpdateFilter(filterText); + isAnyChildVisible |= child.Visible; + } + } + + bool isExpanded = isAnyChildVisible; + + if (isExpanded) + { + Expand(true); + } + else + { + Collapse(true); + } + + Visible = isThisVisible | isAnyChildVisible; + } + + /// + public override void Draw() + { + base.Draw(); + + // Draw all highlights + if (_highlights != null) + { + var style = Style.Current; + var color = style.ProgressNormal * 0.6f; + for (int i = 0; i < _highlights.Count; i++) + Render2D.FillRectangle(_highlights[i], color); + } + } + + /// + public override void OnDestroy() + { + // Delete folder item + _folder.Dispose(); + + base.OnDestroy(); + } + + private DragDropEffect GetDragEffect(DragData data) + { + if (data is DragDataFiles) + { + if (_folder.CanHaveAssets) + return DragDropEffect.Copy; + } + else + { + if (_dragOverItems.HasValidDrag) + return DragDropEffect.Move; + } + + return DragDropEffect.None; + } + + private bool ValidateDragItem(ContentItem item) + { + // Reject itself and any parent + return item != _folder && !item.Find(_folder); + } + + /// + protected override DragDropEffect OnDragEnterHeader(DragData data) + { + if (_dragOverItems == null) + _dragOverItems = new DragItems(ValidateDragItem); + + _dragOverItems.OnDragEnter(data); + return GetDragEffect(data); + } + + /// + protected override DragDropEffect OnDragMoveHeader(DragData data) + { + return GetDragEffect(data); + } + + /// + protected override void OnDragLeaveHeader() + { + _dragOverItems.OnDragLeave(); + base.OnDragLeaveHeader(); + } + + /// + protected override DragDropEffect OnDragDropHeader(DragData data) + { + var result = DragDropEffect.None; + + // Check if drop element or files + if (data is DragDataFiles files) + { + // Import files + Editor.Instance.ContentImporting.Import(files.Files, _folder); + result = DragDropEffect.Copy; + + Expand(); + } + else if (_dragOverItems.HasValidDrag) + { + // Move items + Editor.Instance.ContentDatabase.Move(_dragOverItems.Objects, _folder); + result = DragDropEffect.Move; + + Expand(); + } + + _dragOverItems.OnDragDrop(); + + return result; + } + + /// + protected override void DoDragDrop() + { + DoDragDrop(DragItems.GetDragData(_folder)); + } + + /// + protected override void OnLongPress() + { + Select(); + + StartRenaming(); + } + + /// + public override bool OnKeyDown(KeyboardKeys key) + { + if (IsFocused) + { + switch (key) + { + case KeyboardKeys.F2: + StartRenaming(); + return true; + case KeyboardKeys.Delete: + Editor.Instance.Windows.ContentWin.Delete(Folder); + return true; + } + if (RootWindow.GetKey(KeyboardKeys.Control)) + { + switch (key) + { + case KeyboardKeys.D: + Editor.Instance.Windows.ContentWin.Duplicate(Folder); + return true; + } + } + } + + return base.OnKeyDown(key); + } + } +} diff --git a/Source/Editor/Content/Tree/MainContentTreeNode.cs b/Source/Editor/Content/Tree/MainContentTreeNode.cs new file mode 100644 index 000000000..22f67b99e --- /dev/null +++ b/Source/Editor/Content/Tree/MainContentTreeNode.cs @@ -0,0 +1,56 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.IO; + +namespace FlaxEditor.Content +{ + /// + /// Content tree node used for main directories. + /// + /// + public class MainContentTreeNode : ContentTreeNode + { + private FileSystemWatcher _watcher; + + /// + /// Initializes a new instance of the class. + /// + /// The parent project. + /// The folder type. + /// The folder path. + public MainContentTreeNode(ProjectTreeNode parent, ContentFolderType type, string path) + : base(parent, type, path) + { + _watcher = new FileSystemWatcher(path) + { + IncludeSubdirectories = true, + EnableRaisingEvents = true + }; + //_watcher.Changed += OnEvent; + _watcher.Created += OnEvent; + _watcher.Deleted += OnEvent; + //_watcher.Renamed += OnEvent; + } + + private void OnEvent(object sender, FileSystemEventArgs e) + { + Editor.Instance.ContentDatabase.OnDirectoryEvent(this, e); + } + + /// + protected override void DoDragDrop() + { + // No drag for root nodes + } + + /// + public override void OnDestroy() + { + _watcher.EnableRaisingEvents = false; + _watcher.Dispose(); + _watcher = null; + + base.OnDestroy(); + } + } +} diff --git a/Source/Editor/Content/Tree/ProjectTreeNode.cs b/Source/Editor/Content/Tree/ProjectTreeNode.cs new file mode 100644 index 000000000..6ab5ac432 --- /dev/null +++ b/Source/Editor/Content/Tree/ProjectTreeNode.cs @@ -0,0 +1,57 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine.GUI; + +namespace FlaxEditor.Content +{ + /// + /// Root tree node for the project workspace. + /// + /// + public sealed class ProjectTreeNode : ContentTreeNode + { + /// + /// The project/ + /// + public readonly ProjectInfo Project; + + /// + /// The project content directory. + /// + public MainContentTreeNode Content; + + /// + /// The project source code directory. + /// + public MainContentTreeNode Source; + + /// + /// Initializes a new instance of the class. + /// + /// The project. + public ProjectTreeNode(ProjectInfo project) + : base(null, project.ProjectFolderPath) + { + Project = project; + Folder.FileName = Folder.ShortName = Text = project.Name; + } + + /// + public override string NavButtonLabel => Project.Name; + + /// + protected override void DoDragDrop() + { + // No drag for root nodes + } + + /// + public override int Compare(Control other) + { + // Move the main game project to the top + if (Project.Name == Editor.Instance.GameProject.Name) + return -1; + return base.Compare(other); + } + } +} diff --git a/Source/Editor/Content/Tree/RootContentTreeNode.cs b/Source/Editor/Content/Tree/RootContentTreeNode.cs new file mode 100644 index 000000000..612da4fa8 --- /dev/null +++ b/Source/Editor/Content/Tree/RootContentTreeNode.cs @@ -0,0 +1,22 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +namespace FlaxEditor.Content +{ + /// + /// Root tree node for the content workspace. + /// + /// + public sealed class RootContentTreeNode : ContentTreeNode + { + /// + /// Initializes a new instance of the class. + /// + public RootContentTreeNode() + : base(null, string.Empty) + { + } + + /// + public override string NavButtonLabel => string.Empty; + } +} diff --git a/Source/Editor/Cooker/CookingData.h b/Source/Editor/Cooker/CookingData.h new file mode 100644 index 000000000..39a20e894 --- /dev/null +++ b/Source/Editor/Cooker/CookingData.h @@ -0,0 +1,373 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Core/Log.h" +#include "Engine/Core/Enums.h" +#include "Engine/Core/Collections/Array.h" +#include "Engine/Core/Collections/HashSet.h" +#include "Engine/Core/Collections/Dictionary.h" + +class GameCooker; +class PlatformTools; + +/// +/// Game building options. Used as flags. +/// +API_ENUM(Attributes="Flags") enum class BuildOptions +{ + /// + /// No special options declared. + /// + None = 0, + + /// + /// Shows the output directory folder on building end. + /// + ShowOutput = 1 << 0, +}; + +DECLARE_ENUM_OPERATORS(BuildOptions); + +/// +/// Game build target platform. +/// +API_ENUM() enum class BuildPlatform +{ + /// + /// Windows (32-bit architecture) + /// + API_ENUM(Attributes="EditorDisplay(null, \"Windows 32bit\")") + Windows32 = 1, + + /// + /// Windows (64-bit architecture) + /// + API_ENUM(Attributes="EditorDisplay(null, \"Windows 64bit\")") + Windows64 = 2, + + /// + /// Universal Windows Platform (UWP) (x86 architecture) + /// + API_ENUM(Attributes="EditorDisplay(null, \"Windows Store x86\")") + UWPx86 = 3, + + /// + /// Universal Windows Platform (UWP) (x64 architecture) + /// + API_ENUM(Attributes="EditorDisplay(null, \"Windows Store x64\")") + UWPx64 = 4, + + /// + /// Xbox One + /// + API_ENUM(Attributes="EditorDisplay(null, \"Xbox One\")") + XboxOne = 5, + + /// + /// Linux (64-bit architecture) + /// + API_ENUM(Attributes="EditorDisplay(null, \"Linux x64\")") + LinuxX64 = 6, + + /// + /// PlayStation 4 + /// + API_ENUM(Attributes="EditorDisplay(null, \"PlayStation 4\")") + PS4 = 7, + + /// + /// Xbox Series X. + /// + API_ENUM(Attributes="EditorDisplay(null, \"Xbox Scarlett\")") + XboxScarlett = 8, + + /// + /// Android ARM64 (arm64-v8a). + /// + API_ENUM(Attributes="EditorDisplay(null, \"Android ARM64 (arm64-v8a)\")") + AndroidARM64 = 9, +}; + +inline const Char* ToString(const BuildPlatform platform) +{ + switch (platform) + { + case BuildPlatform::Windows32: + return TEXT("Windows x86"); + case BuildPlatform::Windows64: + return TEXT("Windows x64"); + case BuildPlatform::UWPx86: + return TEXT("Windows Store x86"); + case BuildPlatform::UWPx64: + return TEXT("Windows Store x64"); + case BuildPlatform::XboxOne: + return TEXT("Xbox One"); + case BuildPlatform::LinuxX64: + return TEXT("Linux x64"); + case BuildPlatform::PS4: + return TEXT("PlayStation 4"); + case BuildPlatform::XboxScarlett: + return TEXT("Xbox Scarlett"); + case BuildPlatform::AndroidARM64: + return TEXT("Android ARM64"); + default: + return TEXT("?"); + } +} + +/// +/// Game build configuration modes. +/// +API_ENUM() enum class BuildConfiguration +{ + /// + /// Debug configuration. Without optimizations but with full debugging information. + /// + Debug = 0, + + /// + /// Development configuration. With basic optimizations and partial debugging data. + /// + Development = 1, + + /// + /// Shipping configuration. With full optimization and no debugging data. + /// + Release = 2, +}; + +inline const Char* ToString(const BuildConfiguration configuration) +{ + switch (configuration) + { + case BuildConfiguration::Debug: + return TEXT("Debug"); + case BuildConfiguration::Development: + return TEXT("Development"); + case BuildConfiguration::Release: + return TEXT("Release"); + default: + return TEXT("?"); + } +} + +#define BUILD_STEP_CANCEL_CHECK if (GameCooker::IsCancelRequested()) return true + +/// +/// Game cooking temporary data. +/// +struct FLAXENGINE_API CookingData +{ + /// + /// The platform. + /// + BuildPlatform Platform; + + /// + /// The configuration. + /// + BuildConfiguration Configuration; + + /// + /// The options. + /// + BuildOptions Options; + + /// + /// The original output path (actual OutputPath could be modified by the Platform Tools or a plugin for additional layout customizations or packaging). This path is preserved. + /// + String OriginalOutputPath; + + /// + /// The output path. + /// + String OutputPath; + + /// + /// The platform tools. + /// + PlatformTools* Tools; + +public: + + /// + /// The asset type build stats storage. + /// + struct AssetTypeStatistics + { + /// + /// The asset type name. + /// + String TypeName; + + /// + /// The amount of assets of that type in a build. + /// + int32 Count = 0; + + /// + /// The final output size of the assets of that type in a build. + /// + uint64 ContentSize = 0; + + bool operator<(const AssetTypeStatistics& other) const; + }; + + /// + /// The build stats storage. + /// + struct Statistics + { + /// + /// The total assets amount in the build. + /// + int32 TotalAssets; + + /// + /// The cooked assets (TotalAssets - CookedAssets is amount of reused cached assets). + /// + int32 CookedAssets; + + /// + /// The final output content size in MB. + /// + int32 ContentSizeMB; + + /// + /// The asset type stats. Key is the asset typename, value is the stats container. + /// + Dictionary AssetStats; + + Statistics(); + }; + + /// + /// The build stats. + /// + Statistics Stats; + +public: + + /// + /// The temporary directory used for the building cache. Can be used for the incremental building. + /// + String CacheDirectory; + + /// + /// The root assets collection to include in build in the first place (can be used only before CollectAssetsStep). + /// Game cooker will find dependant assets and deploy them as well. + /// + HashSet RootAssets; + + /// + /// The final assets collection to include in build (valid only after CollectAssetsStep). + /// + HashSet Assets; + + struct BinaryModule + { + String Name; + String NativePath; + String ManagedPath; + }; + + /// + /// The binary modules used in the build. Valid after scripts compilation step. This list includes game, all plugins modules and engine module. + /// + Array> BinaryModules; + +public: + + void Init() + { + RootAssets.Clear(); + Assets.Clear(); + Stats = Statistics(); + } + + /// + /// Gets the absolute path to the Platform Data folder that contains the binary files used by the current build configuration. + /// + /// The platform data folder path. + String GetGameBinariesPath() const; + + /// + /// Gets the absolute path to the platform folder that contains the dependency files used by the current build configuration. + /// + /// The platform deps folder path. + String GetPlatformBinariesRoot() const; + +public: + + /// + /// The total amount of baking steps to perform. + /// + int32 StepsCount; + + /// + /// The current step index. + /// + int32 CurrentStepIndex; + + /// + /// Initializes the progress. + /// + /// The total steps count. + void InitProgress(const int32 stepsCount) + { + StepsCount = stepsCount; + CurrentStepIndex = 0; + } + + /// + /// Moves the progress reporting to the next step + /// + void NextStep() + { + CurrentStepIndex++; + } + + /// + /// Reports the current step progress (normalized 0-1 value) + /// + /// The step info message. + /// The step progress. + void StepProgress(const String& info, const float stepProgress) const; + +public: + + /// + /// Adds the asset to the build. + /// + /// The asset id. + void AddRootAsset(const Guid& id); + + /// + /// Adds the asset to the build. + /// + /// The absolute asset path. + void AddRootAsset(const String& path); + + /// + /// Adds the internal engine asset to the build. + /// + /// The internal path (relative to the engine content path). + void AddRootEngineAsset(const String& internalPath); + +public: + + void Error(const String& msg); + + void Error(const Char* msg) + { + Error(String(msg)); + } + + template + void Error(const Char* format, const Args& ... args) + { + const String msg = String::Format(format, args...); + Error(msg); + } +}; diff --git a/Source/Editor/Cooker/GameCooker.cpp b/Source/Editor/Cooker/GameCooker.cpp new file mode 100644 index 000000000..19bd0f90a --- /dev/null +++ b/Source/Editor/Cooker/GameCooker.cpp @@ -0,0 +1,555 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "GameCooker.h" +#include "FlaxEngine.Gen.h" +#include "Engine/Scripting/MainThreadManagedInvokeAction.h" +#include "Engine/Scripting/ManagedCLR/MClass.h" +#include "Engine/Scripting/Scripting.h" +#include "Engine/Scripting/ScriptingType.h" +#include "Engine/Scripting/BinaryModule.h" +#include "Engine/Serialization/JsonTools.h" +#include "Engine/Content/Content.h" +#include "Engine/Engine/EngineService.h" +#include "Engine/Threading/ThreadSpawner.h" +#include "Engine/Platform/FileSystem.h" +#include "Steps/ValidateStep.h" +#include "Steps/CompileScriptsStep.h" +#include "Steps/PrecompileAssembliesStep.h" +#include "Steps/DeployDataStep.h" +#include "Steps/CollectAssetsStep.h" +#include "Steps/CookAssetsStep.h" +#include "Steps/PostProcessStep.h" +#include "Engine/Platform/ConditionVariable.h" +#include "Engine/Scripting/ManagedCLR/MDomain.h" +#include "Engine/Scripting/ManagedCLR/MCore.h" +#include "Engine/Scripting/ManagedCLR/MAssembly.h" +#include "Engine/Content/JsonAsset.h" +#include "Engine/Content/AssetReference.h" +#if PLATFORM_TOOLS_WINDOWS +#include "Platform/Windows/WindowsPlatformTools.h" +#include "Engine/Platform/Windows/WindowsPlatformSettings.h" +#endif +#if PLATFORM_TOOLS_UWP || PLATFORM_TOOLS_XBOX_ONE +#include "Platform/UWP/UWPPlatformTools.h" +#include "Engine/Platform/UWP/UWPPlatformSettings.h" +#endif +#if PLATFORM_TOOLS_LINUX +#include "Platform/Linux/LinuxPlatformTools.h" +#include "Engine/Platform/Linux/LinuxPlatformSettings.h" +#endif +#if PLATFORM_TOOLS_PS4 +#include "Platforms/PS4/Editor/PlatformTools/PS4PlatformTools.h" +#include "Platforms/PS4/Engine/Platform/PS4PlatformSettings.h" +#endif +#if PLATFORM_TOOLS_XBOX_SCARLETT +#include "Platforms/XboxScarlett/Editor/PlatformTools/XboxScarlettPlatformTools.h" +#include "Platforms/XboxScarlett/Engine/Platform/XboxScarlettPlatformSettings.h" +#endif +#if PLATFORM_TOOLS_ANDROID +#include "Platform/Android/AndroidPlatformTools.h" +#include "Engine/Platform/Android/AndroidPlatformSettings.h" +#endif + +void LoadPlatformSettingsEditor(ISerializable::DeserializeStream& data) +{ +#define LOAD_SETTINGS(nodeName, settingsType) \ + { \ + Guid id = JsonTools::GetGuid(data, nodeName); \ + if (id.IsValid()) \ + { \ + AssetReference subAsset = Content::LoadAsync(id); \ + if (subAsset) \ + { \ + if (!subAsset->WaitForLoaded()) \ + { \ + settingsType::Instance()->Deserialize(*subAsset->Data, nullptr); \ + settingsType::Instance()->Apply(); \ + } \ + } \ + else \ + { LOG(Warning, "Cannot load " nodeName " settings"); } \ + } \ + } +#if PLATFORM_TOOLS_WINDOWS + LOAD_SETTINGS("WindowsPlatform", WindowsPlatformSettings); +#endif +#if PLATFORM_TOOLS_UWP || PLATFORM_TOOLS_XBOX_ONE + LOAD_SETTINGS("UWPPlatform", UWPPlatformSettings); +#endif +#if PLATFORM_TOOLS_LINUX + LOAD_SETTINGS("LinuxPlatform", LinuxPlatformSettings); +#endif +#if PLATFORM_TOOLS_PS4 + LOAD_SETTINGS("PS4Platform", PS4PlatformSettings); +#endif +#if PLATFORM_TOOLS_XBOX_SCARLETT + LOAD_SETTINGS("XboxScarlettPlatform", XboxScarlettPlatformSettings); +#endif +#if PLATFORM_TOOLS_ANDROID + LOAD_SETTINGS("AndroidPlatform", AndroidPlatformSettings); +#endif +} + +namespace GameCookerImpl +{ + MMethod* Internal_OnEvent = nullptr; + MMethod* Internal_OnProgress = nullptr; + MMethod* Internal_CanDeployPlugin = nullptr; + + bool IsRunning = false; + bool IsThreadRunning = false; + int64 CancelFlag = 0; + int64 CancelThreadFlag = 0; + ConditionVariable ThreadCond; + + CriticalSection ProgressLocker; + String ProgressMsg; + float ProgressValue; + + CookingData Data; + Array Steps; + Dictionary Tools; + + BuildPlatform PluginDeployPlatform; + MAssembly* PluginDeployAssembly; + bool PluginDeployResult; + + void CallEvent(GameCooker::EventType type); + void ReportProgress(const String& info, float totalProgress); + bool Build(); + int32 ThreadFunction(); + + void OnEditorAssemblyUnloading(MAssembly* assembly) + { + Internal_OnEvent = nullptr; + Internal_OnProgress = nullptr; + } +} + +using namespace GameCookerImpl; + +Delegate GameCooker::OnEvent; +Delegate GameCooker::OnProgress; + +bool CookingData::AssetTypeStatistics::operator<(const AssetTypeStatistics& other) const +{ + if (ContentSize != other.ContentSize) + return ContentSize > other.ContentSize; + return Count > other.Count; +} + +CookingData::Statistics::Statistics() +{ + TotalAssets = 0; + CookedAssets = 0; + ContentSizeMB = 0; +} + +String CookingData::GetGameBinariesPath() const +{ + const Char* archDir; + switch (Tools->GetArchitecture()) + { + case ArchitectureType::AnyCPU: + archDir = TEXT("AnyCPU"); + break; + case ArchitectureType::x86: + archDir = TEXT("x86"); + break; + case ArchitectureType::x64: + archDir = TEXT("x64"); + break; + case ArchitectureType::ARM: + archDir = TEXT("ARM"); + break; + case ArchitectureType::ARM64: + archDir = TEXT("ARM64"); + break; + default: + CRASH; + return String::Empty; + } + + return GetPlatformBinariesRoot() / TEXT("Game") / archDir / ToString(Configuration); +} + +String CookingData::GetPlatformBinariesRoot() const +{ + return Globals::StartupFolder / TEXT("Source/Platforms") / Tools->GetName() / TEXT("Binaries"); +} + +void CookingData::StepProgress(const String& info, const float stepProgress) const +{ + const float singleStepProgress = 1.0f / (StepsCount + 1); + const float totalProgress = (CurrentStepIndex + stepProgress) * singleStepProgress; + ReportProgress(info, totalProgress); +} + +void CookingData::AddRootAsset(const Guid& id) +{ + RootAssets.Add(id); +} + +void CookingData::AddRootAsset(const String& path) +{ + AssetInfo info; + if (Content::GetAssetInfo(path, info)) + { + RootAssets.Add(info.ID); + } +} + +void CookingData::AddRootEngineAsset(const String& internalPath) +{ + const String path = Globals::EngineContentFolder / internalPath + ASSET_FILES_EXTENSION_WITH_DOT; + AssetInfo info; + if (Content::GetAssetInfo(path, info)) + { + RootAssets.Add(info.ID); + } +} + +void CookingData::Error(const String& msg) +{ + LOG_STR(Error, msg); +} + +class GameCookerService : public EngineService +{ +public: + + GameCookerService() + : EngineService(TEXT("Game Cooker")) + { + } + + bool Init() override; + void Update() override; + void Dispose() override; +}; + +GameCookerService GameCookerServiceInstance; + +const CookingData& GameCooker::GetCurrentData() +{ + return Data; +} + +bool GameCooker::IsRunning() +{ + return GameCookerImpl::IsRunning; +} + +bool GameCooker::IsCancelRequested() +{ + return Platform::AtomicRead(&CancelFlag) != 0; +} + +PlatformTools* GameCooker::GetTools(BuildPlatform platform) +{ + PlatformTools* result = nullptr; + if (!Tools.TryGet(platform, result)) + { + switch (platform) + { +#if PLATFORM_TOOLS_WINDOWS + case BuildPlatform::Windows32: + result = New(ArchitectureType::x86); + break; + case BuildPlatform::Windows64: + result = New(ArchitectureType::x64); + break; +#endif +#if PLATFORM_TOOLS_UWP + case BuildPlatform::UWPx86: + result = New(ArchitectureType::x86); + break; + case BuildPlatform::UWPx64: + result = New(ArchitectureType::x64); + break; +#endif +#if PLATFORM_TOOLS_XBOX_ONE + case BuildPlatform::XboxOne: + result = New(); + break; +#endif +#if PLATFORM_TOOLS_LINUX + case BuildPlatform::LinuxX64: + result = New(); + break; +#endif +#if PLATFORM_TOOLS_PS4 + case BuildPlatform::PS4: + result = New(); + break; +#endif +#if PLATFORM_TOOLS_XBOX_SCARLETT + case BuildPlatform::XboxScarlett: + result = New(); + break; +#endif +#if PLATFORM_TOOLS_ANDROID + case BuildPlatform::AndroidARM64: + result = New(ArchitectureType::ARM64); + break; +#endif + } + Tools.Add(platform, result); + } + return result; +} + +void GameCooker::Build(BuildPlatform platform, BuildConfiguration configuration, const StringView& outputPath, BuildOptions options) +{ + if (IsRunning()) + { + LOG(Warning, "Cannot start a build. Already running."); + return; + } + PlatformTools* tools = GetTools(platform); + if (tools == nullptr) + { + LOG(Error, "Build platform {0} is not suppoerd.", ::ToString(platform)); + return; + } + + // Setup + CancelFlag = 0; + ProgressMsg.Clear(); + ProgressValue = 1.0f; + CookingData& data = Data; + data.Init(); + data.Tools = tools; + data.Platform = platform; + data.Configuration = configuration; + data.Options = options; + data.OutputPath = outputPath; + FileSystem::NormalizePath(data.OutputPath); + data.OutputPath = data.OriginalOutputPath = FileSystem::ConvertRelativePathToAbsolute(Globals::ProjectFolder, data.OutputPath); + data.CacheDirectory = Globals::ProjectCacheFolder / TEXT("Cooker") / tools->GetName(); + if (!FileSystem::DirectoryExists(data.CacheDirectory)) + { + if (FileSystem::CreateDirectory(data.CacheDirectory)) + { + LOG(Error, "Cannot setup game building cache directory."); + return; + } + } + + // Start + GameCookerImpl::IsRunning = true; + + // Start thread if need to + if (!IsThreadRunning) + { + Function f; + f.Bind(ThreadFunction); + const auto thread = ThreadSpawner::Start(f, GameCookerServiceInstance.Name, ThreadPriority::Highest); + if (thread == nullptr) + { + GameCookerImpl::IsRunning = false; + LOG(Error, "Failed to start a build thread."); + return; + } + } + else + { + ThreadCond.NotifyOne(); + } +} + +void GameCooker::Cancel(bool waitForEnd) +{ + if (!IsRunning()) + return; + + // Set flag + Platform::InterlockedIncrement(&CancelFlag); + + if (waitForEnd) + { + LOG(Warning, "Waiting for the Game Cooker end..."); + + // Wait for the end + while (GameCookerImpl::IsRunning) + { + Platform::Sleep(10); + } + } +} + +void GameCookerImpl::CallEvent(GameCooker::EventType type) +{ + if (Internal_OnEvent == nullptr) + { + auto c = GameCooker::GetStaticClass(); + if (c) + Internal_OnEvent = c->GetMethod("Internal_OnEvent", 1); + ASSERT(GameCookerImpl::Internal_OnEvent); + } + + MainThreadManagedInvokeAction::ParamsBuilder params; + params.AddParam((int32)type); + MainThreadManagedInvokeAction::Invoke(Internal_OnEvent, params); + + GameCooker::OnEvent(type); +} + +void GameCookerImpl::ReportProgress(const String& info, float totalProgress) +{ + ScopeLock lock(ProgressLocker); + + ProgressMsg = info; + ProgressValue = totalProgress; +} + +bool GameCookerImpl::Build() +{ + CookingData& data = Data; + LOG(Info, "Starting Game Cooker..."); + LOG(Info, "Platform: {0}, Configuration: {2}, Options: {1}", ::ToString(data.Platform), (int32)data.Options, ::ToString(data.Configuration)); + LOG(Info, "Output Path: {0}", data.OutputPath); + + // Late init feature + if (Steps.IsEmpty()) + { + // Create steps + Steps.Add(New()); + Steps.Add(New()); + Steps.Add(New()); + Steps.Add(New()); + Steps.Add(New()); + Steps.Add(New()); + Steps.Add(New()); + } + + MCore::Instance()->AttachThread(); + + // Build Started + CallEvent(GameCooker::EventType::BuildStarted); + for (int32 stepIndex = 0; stepIndex < Steps.Count(); stepIndex++) + Steps[stepIndex]->OnBuildStarted(data); + Data.Tools->OnBuildStarted(data); + data.InitProgress(Steps.Count()); + + // Execute all steps in a sequence + bool failed = false; + for (int32 stepIndex = 0; stepIndex < Steps.Count(); stepIndex++) + { + if (GameCooker::IsCancelRequested()) + break; + auto step = Steps[stepIndex]; + data.NextStep(); + + // Execute step + failed = step->Perform(data); + if (failed) + break; + } + + // Process result + if (GameCooker::IsCancelRequested()) + { + LOG(Warning, "Game building cancelled!"); + failed = true; + } + else if (failed) + { + LOG(Error, "Game building failed!"); + } + else + { + LOG(Info, "Game building done!"); + + if (data.Options & BuildOptions::ShowOutput) + { + FileSystem::ShowFileExplorer(data.OriginalOutputPath); + } + } + IsRunning = false; + CancelFlag = 0; + Data.Tools->OnBuildEnded(data, failed); + for (int32 stepIndex = 0; stepIndex < Steps.Count(); stepIndex++) + Steps[stepIndex]->OnBuildEnded(data, failed); + CallEvent(failed ? GameCooker::EventType::BuildFailed : GameCooker::EventType::BuildDone); + + return failed; +} + +int32 GameCookerImpl::ThreadFunction() +{ + IsThreadRunning = true; + + CriticalSection mutex; + while (Platform::AtomicRead(&CancelThreadFlag) == 0) + { + if (IsRunning) + { + Build(); + } + + ThreadCond.Wait(mutex); + } + + IsThreadRunning = false; + return 0; +} + +bool GameCookerService::Init() +{ + auto editorAssembly = GetBinaryModuleFlaxEngine()->Assembly; + editorAssembly->Unloading.Bind(OnEditorAssemblyUnloading); + + return false; +} + +void GameCookerService::Update() +{ + if (IsRunning) + { + ScopeLock lock(ProgressLocker); + + if (ProgressMsg.HasChars()) + { + if (Internal_OnProgress == nullptr) + { + auto c = GameCooker::GetStaticClass(); + if (c) + Internal_OnProgress = c->GetMethod("Internal_OnProgress", 2); + ASSERT(GameCookerImpl::Internal_OnProgress); + } + + MainThreadManagedInvokeAction::ParamsBuilder params; + params.AddParam(ProgressMsg, Scripting::GetScriptsDomain()->GetNative()); + params.AddParam(ProgressValue); + MainThreadManagedInvokeAction::Invoke(Internal_OnProgress, params); + GameCooker::OnProgress(ProgressMsg, ProgressValue); + + ProgressMsg.Clear(); + ProgressValue = 1.0f; + } + } +} + +void GameCookerService::Dispose() +{ + // Always stop on exit + GameCooker::Cancel(true); + + // End thread + if (IsThreadRunning) + { + LOG(Warning, "Waiting for the Game Cooker thread end..."); + + Platform::AtomicStore(&CancelThreadFlag, 1); + ThreadCond.NotifyOne(); + while (IsThreadRunning) + { + Platform::Sleep(1); + } + } + + // Cleanup + Steps.ClearDelete(); + Tools.ClearDelete(); +} diff --git a/Source/Editor/Cooker/GameCooker.cs b/Source/Editor/Cooker/GameCooker.cs new file mode 100644 index 000000000..0f5d25fe6 --- /dev/null +++ b/Source/Editor/Cooker/GameCooker.cs @@ -0,0 +1,113 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using FlaxEngine; + +namespace FlaxEditor +{ + partial class GameCooker + { + /// + /// Build options data. + /// + public struct Options + { + /// + /// The platform. + /// + public BuildPlatform Platform; + + /// + /// The build configuration. + /// + public BuildConfiguration Configuration; + + /// + /// The options. + /// + public BuildOptions Flags; + + /// + /// The output path (normalized, absolute). + /// + public string OutputPath; + } + + /// + /// Building event type. + /// + public enum EventType + { + /// + /// The build started. + /// + BuildStarted = 0, + + /// + /// The build failed. + /// + BuildFailed = 1, + + /// + /// The build done. + /// + BuildDone = 2, + } + + /// + /// Game building event delegate. + /// + /// The type. + public delegate void BuildEventDelegate(EventType type); + + /// + /// Game building progress reporting delegate type. + /// + /// The information text. + /// The total progress percentage (normalized to 0-1). + public delegate void BuildProgressDelegate(string info, float totalProgress); + + /// + /// Occurs when building event rises. + /// + public static event BuildEventDelegate Event; + + /// + /// Occurs when building game progress fires. + /// + public static event BuildProgressDelegate Progress; + + /// + /// Gets the type of the platform from the game build platform type. + /// + /// The build platform. + /// The run-type platform type. + public static PlatformType GetPlatformType(BuildPlatform buildPlatform) + { + switch (buildPlatform) + { + case BuildPlatform.Windows32: + case BuildPlatform.Windows64: return PlatformType.Windows; + case BuildPlatform.UWPx86: + case BuildPlatform.UWPx64: return PlatformType.UWP; + case BuildPlatform.XboxOne: return PlatformType.XboxOne; + case BuildPlatform.LinuxX64: return PlatformType.Linux; + case BuildPlatform.PS4: return PlatformType.PS4; + default: throw new ArgumentOutOfRangeException(nameof(buildPlatform), buildPlatform, null); + } + } + + internal static void Internal_OnEvent(EventType type) + { + Event?.Invoke(type); + } + + internal static void Internal_OnProgress(string info, float totalProgress) + { + Progress?.Invoke(info, totalProgress); + } + } +} diff --git a/Source/Editor/Cooker/GameCooker.h b/Source/Editor/Cooker/GameCooker.h new file mode 100644 index 000000000..a7282d1aa --- /dev/null +++ b/Source/Editor/Cooker/GameCooker.h @@ -0,0 +1,125 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "CookingData.h" +#include "Engine/Scripting/ScriptingType.h" + +/// +/// Game building service. Processes project files and outputs build game for a target platform. +/// +API_CLASS(Static, Namespace="FlaxEditor") class FLAXENGINE_API GameCooker +{ +DECLARE_SCRIPTING_TYPE_NO_SPAWN(GameCooker); + friend CookingData; +public: + + /// + /// Single build step. + /// + class FLAXENGINE_API BuildStep + { + public: + + /// + /// Finalizes an instance of the class. + /// + virtual ~BuildStep() = default; + + /// + /// Called when building starts. + /// + /// The data. + virtual void OnBuildStarted(CookingData& data) + { + } + + /// + /// Performs this step. + /// + /// The data. + /// True if failed, otherwise false. + virtual bool Perform(CookingData& data) = 0; + + /// + /// Called when building ends. + /// + /// The cooking data. + /// True if build failed, otherwise false. + virtual void OnBuildEnded(CookingData& data, bool failed) + { + } + }; + +public: + + /// + /// Gets the current build data. Valid only during active build process. + /// + static const CookingData& GetCurrentData(); + + /// + /// Determines whether game building is running. + /// + /// true if game building is running; otherwise, false. + API_PROPERTY() static bool IsRunning(); + + /// + /// Determines whether building cancel has been requested. + /// + /// true if building cancel has been requested; otherwise, false. + API_PROPERTY() static bool IsCancelRequested(); + + /// + /// Gets the tools for the given platform. + /// + /// The platform. + /// The platform tools implementation or null if not supported. + static PlatformTools* GetTools(BuildPlatform platform); + + /// + /// Starts building game for the specified platform. + /// + /// The target platform. + /// The build configuration. + /// The output path (output directory). + /// The build options. + API_FUNCTION() static void Build(BuildPlatform platform, BuildConfiguration configuration, const StringView& outputPath, BuildOptions options); + + /// + /// Sends a cancel event to the game building service. + /// + /// If set to true wait for the stopped building end. + API_FUNCTION() static void Cancel(bool waitForEnd = false); + + /// + /// Building event type. + /// + enum class EventType + { + /// + /// The build started. + /// + BuildStarted = 0, + + /// + /// The build failed. + /// + BuildFailed = 1, + + /// + /// The build done. + /// + BuildDone = 2, + }; + + /// + /// Occurs when building event rises. + /// + static Delegate OnEvent; + + /// + /// Occurs when building game progress fires. + /// + static Delegate OnProgress; +}; diff --git a/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp b/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp new file mode 100644 index 000000000..bce6aa860 --- /dev/null +++ b/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.cpp @@ -0,0 +1,311 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#if PLATFORM_TOOLS_ANDROID + +#include "AndroidPlatformTools.h" +#include "Editor/Editor.h" +#include "Engine/Platform/File.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Platform/Android/AndroidPlatformSettings.h" +#include "Engine/Graphics/PixelFormatExtensions.h" +#include "Engine/Graphics/Textures/TextureData.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Engine/Core/Config/BuildSettings.h" +#include "Editor/Utilities/EditorUtilities.h" + +namespace +{ + void DeployIcon(const CookingData& data, const TextureData& iconData, const Char* subDir, int32 iconSize, int32 adaptiveIconSize) + { + const String mipmapPath = data.OriginalOutputPath / TEXT("app/src/main/res") / subDir; + const String iconPath = mipmapPath / TEXT("icon.png"); + if (!FileSystem::DirectoryExists(mipmapPath)) + FileSystem::CreateDirectory(mipmapPath); + EditorUtilities::ExportApplicationImage(iconData, iconSize, iconSize, PixelFormat::B8G8R8A8_UNorm, iconPath); + } +} + +const Char* AndroidPlatformTools::GetDisplayName() const +{ + return TEXT("Android"); +} + +const Char* AndroidPlatformTools::GetName() const +{ + return TEXT("Android"); +} + +PlatformType AndroidPlatformTools::GetPlatform() const +{ + return PlatformType::Android; +} + +ArchitectureType AndroidPlatformTools::GetArchitecture() const +{ + return _arch; +} + +PixelFormat AndroidPlatformTools::GetTextureFormat(CookingData& data, TextureBase* texture, PixelFormat format) +{ + // TODO: add ETC compression support for Android + // TODO: add ASTC compression support for Android + + // BC formats are not widely supported on Android + if (PixelFormatExtensions::IsCompressedBC(format)) + { + switch (format) + { + case PixelFormat::BC1_Typeless: + case PixelFormat::BC2_Typeless: + case PixelFormat::BC3_Typeless: + return PixelFormat::R8G8B8A8_Typeless; + case PixelFormat::BC1_UNorm: + case PixelFormat::BC2_UNorm: + case PixelFormat::BC3_UNorm: + return PixelFormat::R8G8B8A8_UNorm; + case PixelFormat::BC1_UNorm_sRGB: + case PixelFormat::BC2_UNorm_sRGB: + case PixelFormat::BC3_UNorm_sRGB: + return PixelFormat::R8G8B8A8_UNorm_sRGB; + case PixelFormat::BC4_Typeless: + return PixelFormat::R8_Typeless; + case PixelFormat::BC4_UNorm: + return PixelFormat::R8_UNorm; + case PixelFormat::BC4_SNorm: + return PixelFormat::R8_SNorm; + case PixelFormat::BC5_Typeless: + return PixelFormat::R16G16_Typeless; + case PixelFormat::BC5_UNorm: + return PixelFormat::R16G16_UNorm; + case PixelFormat::BC5_SNorm: + return PixelFormat::R16G16_SNorm; + case PixelFormat::BC7_Typeless: + case PixelFormat::BC6H_Typeless: + return PixelFormat::R16G16B16A16_Typeless; + case PixelFormat::BC7_UNorm: + case PixelFormat::BC6H_Uf16: + case PixelFormat::BC6H_Sf16: + return PixelFormat::R16G16B16A16_Float; + case PixelFormat::BC7_UNorm_sRGB: + return PixelFormat::R16G16B16A16_UNorm; + default: + return format; + } + } + + return format; +} + +void AndroidPlatformTools::OnBuildStarted(CookingData& data) +{ + // Adjust the cooking output folder to be located inside the Gradle assets directory + data.OutputPath /= TEXT("app/assets"); + + PlatformTools::OnBuildStarted(data); +} + +bool AndroidPlatformTools::OnPostProcess(CookingData& data) +{ + const auto platformSettings = AndroidPlatformSettings::Instance(); + const auto platformDataPath = data.GetPlatformBinariesRoot(); + const auto assetsPath = data.OutputPath; + const auto jniLibsPath = data.OriginalOutputPath / TEXT("app/jniLibs"); + const auto projectVersion = Editor::Project->Version.ToString(); + const Char* abi; + switch (data.Platform) + { + case BuildPlatform::AndroidARM64: + abi = TEXT("arm64-v8a"); + break; + default: + LOG(Error, "Invalid platform."); + return true; + } + + // Setup package name (eg. com.company.project) + String packageName = platformSettings->PackageName; + { + String productName = GameSettings::ProductName; + productName.Replace(TEXT(" "), TEXT("")); + productName.Replace(TEXT("."), TEXT("")); + productName.Replace(TEXT("-"), TEXT("")); + String companyName = GameSettings::CompanyName; + companyName.Replace(TEXT(" "), TEXT("")); + companyName.Replace(TEXT("."), TEXT("")); + companyName.Replace(TEXT("-"), TEXT("")); + packageName.Replace(TEXT("${PROJECT_NAME}"), *productName, StringSearchCase::IgnoreCase); + packageName.Replace(TEXT("${COMPANY_NAME}"), *companyName, StringSearchCase::IgnoreCase); + packageName = packageName.ToLower(); + for (int32 i = 0; i < packageName.Length(); i++) + { + const auto c = packageName[i]; + if (c != '_' && c != '.' && !StringUtils::IsAlnum(c)) + { + LOG(Error, "Android Package Name \'{0}\' contains invalid chaarcter. Only letters, numbers, dots and underscore characters are allowed.", packageName); + return true; + } + } + if (packageName.IsEmpty()) + { + LOG(Error, "Android Package Name is empty.", packageName); + return true; + } + } + + // Setup Android application permissions + HashSet permissionsList; + for (auto& e : platformSettings->Permissions) + { + permissionsList.Add(e); + } + { + // Access game files + permissionsList.Add(TEXT("android.permission.READ_EXTERNAL_STORAGE")); + permissionsList.Add(TEXT("android.permission.WRITE_EXTERNAL_STORAGE")); + + // TODO: expose event to collect android permissions + + // Access sockets for C# debugging + if (data.Configuration != BuildConfiguration::Release) + { + permissionsList.Add(TEXT("android.permission.INTERNET")); + } + } + String permissions; + LOG(Info, "Android permissions:"); + for (auto& e : permissionsList) + { + LOG(Info, " {0}", e.Item); + permissions += String::Format(TEXT("\n "), e.Item); + } + + // Setup Android application attributes + String attributes; + if (data.Configuration != BuildConfiguration::Release) + { + attributes += TEXT("\n android:debuggable=\"true\""); + } + + // Copy fresh Gradle project template + if (FileSystem::CopyDirectory(data.OriginalOutputPath, platformDataPath / TEXT("Project"), true)) + { + LOG(Error, "Failed to deploy Gradle project to {0} from {1}", data.OriginalOutputPath, platformDataPath); + return true; + } + + // Deploy app icons + TextureData iconData; + if (!EditorUtilities::GetApplicationImage(platformSettings->OverrideIcon, iconData)) + { + // TODO: add support for adaptive icons (separate background and foreground with additional margin) + const bool useAdaptiveIcons = false; + DeployIcon(data, iconData, TEXT("mipmap"), 192, 108); + DeployIcon(data, iconData, TEXT("mipmap-hdpi"), 72, 162); + DeployIcon(data, iconData, TEXT("mipmap-mdpi"), 48, 108); + DeployIcon(data, iconData, TEXT("mipmap-xhdpi"), 96, 216); + DeployIcon(data, iconData, TEXT("mipmap-xxhdpi"), 144, 324); + DeployIcon(data, iconData, TEXT("mipmap-xxxhdpi"), 192, 432); + const String mipmapPath = data.OriginalOutputPath / TEXT("app/src/main/res/mipmap-anydpi-v26"); + if (useAdaptiveIcons) + { + if (!FileSystem::DirectoryExists(mipmapPath)) + FileSystem::CreateDirectory(mipmapPath); + const Char* iconConfig = TEXT("\n" + "\n" + " \n" + " \n" + "\n" + "\n"); + File::WriteAllText(mipmapPath / TEXT("icon.xml"), iconConfig, Encoding::ANSI); + } + else + { + FileSystem::DeleteFile(mipmapPath / TEXT("icon.xml")); + } + } + + // Format project template files + const String buildGradlePath = data.OriginalOutputPath / TEXT("app/build.gradle"); + EditorUtilities::ReplaceInFile(buildGradlePath, TEXT("${PackageName}"), packageName); + EditorUtilities::ReplaceInFile(buildGradlePath, TEXT("${ProjectVersion}"), projectVersion); + EditorUtilities::ReplaceInFile(buildGradlePath, TEXT("${PackageAbi}"), abi); + const String manifestPath = data.OriginalOutputPath / TEXT("app/src/main/AndroidManifest.xml"); + EditorUtilities::ReplaceInFile(manifestPath, TEXT("${PackageName}"), packageName); + EditorUtilities::ReplaceInFile(manifestPath, TEXT("${ProjectVersion}"), projectVersion); + EditorUtilities::ReplaceInFile(manifestPath, TEXT("${AndroidPermissions}"), permissions); + EditorUtilities::ReplaceInFile(manifestPath, TEXT("${AndroidAttributes}"), attributes); + const String stringsPath = data.OriginalOutputPath / TEXT("app/src/main/res/values/strings.xml"); + EditorUtilities::ReplaceInFile(stringsPath, TEXT("${ProjectName}"), GameSettings::ProductName); + + // Deploy native binaries to the output location (per-ABI) + const String abiBinariesPath = jniLibsPath / abi; + FileSystem::CreateDirectory(abiBinariesPath); + Array abiBinaries; + FileSystem::DirectoryGetFiles(abiBinaries, assetsPath, TEXT("*.so")); + for (auto& e : abiBinaries) + { + if (FileSystem::MoveFile(abiBinariesPath / StringUtils::GetFileName(e), e, true)) + { + LOG(Error, "Failed to deploy binary file {0} to {1}", e, abiBinariesPath); + return true; + } + } + + // Generate Mono files hash id used to skip deploying Mono files if already extracted on device (Mono cannot access files packed into .apk via unix file access) + File::WriteAllText(assetsPath / TEXT("hash.txt"), Guid::New().ToString(), Encoding::ANSI); + + // TODO: expose event to inject custom gradle and manifest options or custom binaries into app + + if (BuildSettings::Instance()->SkipPackaging) + { + return false; + } + + // Validate environment variables + Dictionary envVars; + Platform::GetEnvironmentVariables(envVars); + String javaHome; + if (!envVars.TryGet(TEXT("JAVA_HOME"), javaHome) || !FileSystem::DirectoryExists(javaHome)) + { + LOG(Error, "Missing or invalid JAVA_HOME env variable. {0}", javaHome); + return true; + } + String androidSdk; + if (!envVars.TryGet(TEXT("ANDROID_SDK"), androidSdk) || !FileSystem::DirectoryExists(androidSdk)) + { + LOG(Error, "Missing or invalid ANDROID_SDK env variable. {0}", androidSdk); + return true; + } + if (!envVars.ContainsKey(TEXT("ANDROID_SDK_ROOT"))) + envVars[TEXT("ANDROID_SDK_ROOT")] = androidSdk; + + // Build Gradle project into package + LOG(Info, "Building Gradle project into package..."); +#if PLATFORM_WINDOWS + const Char* gradlew = TEXT("gradlew.bat"); +#else + const Char* gradlew = TEXT("gradlew"); +#endif + const bool distributionPackage = BuildSettings::Instance()->ForDistribution; + const String gradleCommand = String::Format(TEXT("\"{0}\" {1}"), data.OriginalOutputPath / gradlew, distributionPackage ? TEXT("assemble") : TEXT("assembleDebug")); + const int32 result = Platform::RunProcess(gradleCommand, data.OriginalOutputPath, envVars, true); + if (result != 0) + { + data.Error(TEXT("Failed to build Gradle project into package (result code: {0}). See log for more info."), result); + return true; + } + + // Copy result package + const String apk = data.OriginalOutputPath / (distributionPackage ? TEXT("app/build/outputs/apk/release/app-release-unsigned.apk") : TEXT("app/build/outputs/apk/debug/app-debug.apk")); + const String outputApk = data.OriginalOutputPath / GameSettings::ProductName + TEXT(".apk"); + if (FileSystem::CopyFile(outputApk, apk)) + { + LOG(Error, "Failed to copy package from {0} to {1}", apk, outputApk); + return true; + } + LOG(Info, "Output Android application package: {0} (size: {1} MB)", outputApk, FileSystem::GetFileSize(outputApk) / 1024 / 1024); + + return false; +} + +#endif diff --git a/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.h b/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.h new file mode 100644 index 000000000..527c95769 --- /dev/null +++ b/Source/Editor/Cooker/Platform/Android/AndroidPlatformTools.h @@ -0,0 +1,37 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#pragma once + +#if PLATFORM_TOOLS_ANDROID + +#include "../../PlatformTools.h" + +/// +/// The Android platform support tools. +/// +class AndroidPlatformTools : public PlatformTools +{ +private: + + ArchitectureType _arch; + +public: + + AndroidPlatformTools(ArchitectureType arch) + : _arch(arch) + { + } + +public: + + // [PlatformTools] + const Char* GetDisplayName() const override; + const Char* GetName() const override; + PlatformType GetPlatform() const override; + ArchitectureType GetArchitecture() const override; + PixelFormat GetTextureFormat(CookingData& data, TextureBase* texture, PixelFormat format) override; + void OnBuildStarted(CookingData& data) override; + bool OnPostProcess(CookingData& data) override; +}; + +#endif diff --git a/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp b/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp new file mode 100644 index 000000000..eccc299bb --- /dev/null +++ b/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.cpp @@ -0,0 +1,92 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#if PLATFORM_TOOLS_LINUX + +#include "LinuxPlatformTools.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Platform/Linux/LinuxPlatformSettings.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Editor/Utilities/EditorUtilities.h" +#include "Engine/Tools/TextureTool/TextureTool.h" +#include "Engine/Graphics/Textures/TextureData.h" + +const Char* LinuxPlatformTools::GetDisplayName() const +{ + return TEXT("Linux"); +} + +const Char* LinuxPlatformTools::GetName() const +{ + return TEXT("Linux"); +} + +PlatformType LinuxPlatformTools::GetPlatform() const +{ + return PlatformType::Linux; +} + +ArchitectureType LinuxPlatformTools::GetArchitecture() const +{ + return ArchitectureType::x64; +} + +bool LinuxPlatformTools::OnDeployBinaries(CookingData& data) +{ + const auto platformSettings = LinuxPlatformSettings::Instance(); + const auto outputPath = data.OutputPath; + + // Copy binaries + { + if (!FileSystem::DirectoryExists(outputPath)) + FileSystem::CreateDirectory(outputPath); + const auto binPath = data.GetGameBinariesPath(); + + // Gather files to deploy + Array files; + files.Add(binPath / TEXT("FlaxGame")); + FileSystem::DirectoryGetFiles(files, binPath, TEXT("*.a"), DirectorySearchOption::TopDirectoryOnly); + + // Copy data + for (int32 i = 0; i < files.Count(); i++) + { + if (FileSystem::CopyFile(outputPath / StringUtils::GetFileName(files[i]), files[i])) + { + data.Error(TEXT("Failed to setup output directory.")); + return true; + } + } + } + + // Apply game executable file name +#if !BUILD_DEBUG + const String outputExePath = outputPath / TEXT("FlaxGame"); + const String gameExePath = outputPath / GameSettings::ProductName; + if (FileSystem::FileExists(outputExePath) && gameExePath.Compare(outputExePath, StringSearchCase::IgnoreCase) == 0) + { + if (FileSystem::MoveFile(gameExePath, outputExePath, true)) + { + data.Error(TEXT("Failed to rename output executable file.")); + return true; + } + } +#else + // Don't change application name on a DEBUG build (for build game debugging) + const String gameExePath = outputPath / TEXT("FlaxGame"); +#endif + + // Apply game icon + TextureData iconData; + if (!EditorUtilities::GetApplicationImage(platformSettings->OverrideIcon, iconData)) + { + const String iconPath = outputPath / TEXT("Content/icon.png"); + if (TextureTool::ExportTexture(iconPath, iconData)) + { + data.Error(TEXT("Failed to export game icon.")); + return true; + } + } + + return false; +} + +#endif diff --git a/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.h b/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.h new file mode 100644 index 000000000..9b6dcb9b8 --- /dev/null +++ b/Source/Editor/Cooker/Platform/Linux/LinuxPlatformTools.h @@ -0,0 +1,24 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#pragma once + +#if PLATFORM_TOOLS_LINUX + +#include "../../PlatformTools.h" + +/// +/// The Linux platform support tools. +/// +class LinuxPlatformTools : public PlatformTools +{ +public: + + // [PlatformTools] + const Char* GetDisplayName() const override; + const Char* GetName() const override; + PlatformType GetPlatform() const override; + ArchitectureType GetArchitecture() const override; + bool OnDeployBinaries(CookingData& data) override; +}; + +#endif diff --git a/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp b/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp new file mode 100644 index 000000000..f6c846fed --- /dev/null +++ b/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.cpp @@ -0,0 +1,547 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#if PLATFORM_TOOLS_UWP || PLATFORM_TOOLS_XBOX_ONE + +#include "UWPPlatformTools.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Platform/File.h" +#include "Engine/Platform/UWP/UWPPlatformSettings.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Engine/Core/Types/StringBuilder.h" +#include "Engine/Serialization/FileWriteStream.h" +#include "Editor/Utilities/EditorUtilities.h" +#include "Engine/Engine/Globals.h" + +bool UWPPlatformTools::UseAOT() const +{ + return true; +} + +bool UWPPlatformTools::OnScriptsStepDone(CookingData& data) +{ + // Override Newtonsoft.Json.dll for some platforms (that don't support runtime code generation) + const String customBinPath = data.GetPlatformBinariesRoot() / TEXT("Newtonsoft.Json.dll"); + const String assembliesPath = data.OutputPath; + if (FileSystem::CopyFile(assembliesPath / TEXT("Newtonsoft.Json.dll"), customBinPath)) + { + data.Error(TEXT("Failed to copy deloy custom assembly.")); + return true; + } + FileSystem::DeleteFile(assembliesPath / TEXT("Newtonsoft.Json.pdb")); + + return false; +} + +bool UWPPlatformTools::OnDeployBinaries(CookingData& data) +{ + bool isXboxOne = data.Platform == BuildPlatform::XboxOne; + const auto platformDataPath = Globals::StartupFolder / TEXT("Source/Platforms"); + const auto uwpDataPath = platformDataPath / (isXboxOne ? TEXT("XboxOne") : TEXT("UWP")) / TEXT("Binaries"); + const auto platformSettings = UWPPlatformSettings::Instance(); + Array fileTemplate; + + // Copy binaries + const auto binPath = data.GetGameBinariesPath(); + Array files; + files.Add(binPath / TEXT("FlaxEngine.pri")); + files.Add(binPath / TEXT("FlaxEngine.winmd")); + files.Add(binPath / TEXT("FlaxEngine.xml")); + FileSystem::DirectoryGetFiles(files, binPath, TEXT("*.dll"), DirectorySearchOption::TopDirectoryOnly); + if (data.Configuration != BuildConfiguration::Release) + { + FileSystem::DirectoryGetFiles(files, binPath, TEXT("*.pdb"), DirectorySearchOption::TopDirectoryOnly); + } + for (int32 i = 0; i < files.Count(); i++) + { + if (!FileSystem::FileExists(files[i])) + { + data.Error(TEXT("Missing source file {0}."), files[i]); + return true; + } + + if (FileSystem::CopyFile(data.OutputPath / StringUtils::GetFileName(files[i]), files[i])) + { + data.Error(TEXT("Failed to setup output directory.")); + return true; + } + } + + const auto projectName = GameSettings::ProductName; + auto defaultNamespace = projectName; + ScriptsBuilder::FilterNamespaceText(defaultNamespace); + const StringAnsi projectGuid = "{3A9A2246-71DD-4567-9ABF-3E040310E30E}"; + const String productId = Guid::New().ToString(Guid::FormatType::D); + const char* mode; + switch (data.Platform) + { + case BuildPlatform::UWPx86: + mode = "x86"; + break; + case BuildPlatform::UWPx64: + case BuildPlatform::XboxOne: + mode = "x64"; + break; + default: + return true; + } + + // Prepare certificate + const auto srcCertificatePath = Globals::ProjectFolder / platformSettings->CertificateLocation; + const auto dstCertificatePath = data.OutputPath / TEXT("WSACertificate.pfx"); + if (platformSettings->CertificateLocation.HasChars() && FileSystem::FileExists(srcCertificatePath)) + { + // Use cert from settings + if (FileSystem::CopyFile(dstCertificatePath, srcCertificatePath)) + { + data.Error(TEXT("Failed to copy WSACertificate.pfx file.")); + return true; + } + } + else + { + // Generate new temp cert if missing + if (!FileSystem::FileExists(dstCertificatePath)) + { + if (EditorUtilities::GenerateCertificate(GameSettings::CompanyName, dstCertificatePath)) + { + LOG(Warning, "Failed to create certificate."); + } + } + } + + // Copy assets + const auto dstAssetsPath = data.OutputPath / TEXT("Assets"); + const auto srcAssetsPath = uwpDataPath / TEXT("Assets"); + if (!FileSystem::DirectoryExists(dstAssetsPath)) + { + if (FileSystem::CopyDirectory(dstAssetsPath, srcAssetsPath, true)) + { + data.Error(TEXT("Failed to copy Assets directory.")); + return true; + } + } + const auto dstPropertiesPath = data.OutputPath / TEXT("Properties"); + if (!FileSystem::DirectoryExists(dstPropertiesPath)) + { + if (FileSystem::CreateDirectory(dstPropertiesPath)) + { + data.Error(TEXT("Failed to create Properties directory.")); + return true; + } + } + const auto dstDefaultRdXmlPath = dstPropertiesPath / TEXT("Default.rd.xml"); + const auto srcDefaultRdXmlPath = uwpDataPath / TEXT("Default.rd.xml"); + if (!FileSystem::FileExists(dstDefaultRdXmlPath)) + { + if (FileSystem::CopyFile(dstDefaultRdXmlPath, srcDefaultRdXmlPath)) + { + data.Error(TEXT("Failed to copy Default.rd.xml file.")); + return true; + } + } + const auto dstAssemblyInfoPath = dstPropertiesPath / TEXT("AssemblyInfo.cs"); + const auto srcAssemblyInfoPath = uwpDataPath / TEXT("AssemblyInfo.cs"); + if (!FileSystem::FileExists(dstAssemblyInfoPath)) + { + // Get template + if (File::ReadAllBytes(srcAssemblyInfoPath, fileTemplate)) + { + data.Error(TEXT("Failed to load AssemblyInfo.cs template.")); + return true; + } + fileTemplate[fileTemplate.Count() - 1] = 0; + + // Write data to file + auto file = FileWriteStream::Open(dstAssemblyInfoPath); + bool hasError = true; + if (file) + { + auto now = DateTime::Now(); + file->WriteTextFormatted( + (char*)fileTemplate.Get() + , GameSettings::ProductName.ToStringAnsi() + , GameSettings::CompanyName.ToStringAnsi() + , now.GetYear() + ); + hasError = file->HasError(); + Delete(file); + } + if (hasError) + { + data.Error(TEXT("Failed to create AssemblyInfo.cs.")); + return true; + } + } + const auto dstAppPath = data.OutputPath / TEXT("App.cs"); + const auto srcAppPath = uwpDataPath / TEXT("App.cs"); + if (!FileSystem::FileExists(dstAppPath)) + { + // Get template + if (File::ReadAllBytes(srcAppPath, fileTemplate)) + { + data.Error(TEXT("Failed to load App.cs template.")); + return true; + } + fileTemplate[fileTemplate.Count() - 1] = 0; + + // Write data to file + auto file = FileWriteStream::Open(dstAppPath); + bool hasError = true; + if (file) + { + file->WriteTextFormatted( + (char*)fileTemplate.Get() + , defaultNamespace.ToStringAnsi() // {0} Default Namespace + ); + hasError = file->HasError(); + Delete(file); + } + if (hasError) + { + data.Error(TEXT("Failed to create App.cs.")); + return true; + } + } + const auto dstFlaxGeneratedPath = data.OutputPath / TEXT("FlaxGenerated.cs"); + const auto srcFlaxGeneratedPath = uwpDataPath / TEXT("FlaxGenerated.cs"); + { + // Get template + if (File::ReadAllBytes(srcFlaxGeneratedPath, fileTemplate)) + { + data.Error(TEXT("Failed to load FlaxGenerated.cs template.")); + return true; + } + fileTemplate[fileTemplate.Count() - 1] = 0; + + // Prepare + StringAnsi autoRotationPreferences; + if ((int)platformSettings->AutoRotationPreferences & (int)UWPPlatformSettings::DisplayOrientations::Landscape) + { + autoRotationPreferences += "DisplayOrientations.Landscape"; + } + if ((int)platformSettings->AutoRotationPreferences & (int)UWPPlatformSettings::DisplayOrientations::LandscapeFlipped) + { + if (autoRotationPreferences.HasChars()) + autoRotationPreferences += " | "; + autoRotationPreferences += "DisplayOrientations.LandscapeFlipped"; + } + if ((int)platformSettings->AutoRotationPreferences & (int)UWPPlatformSettings::DisplayOrientations::Portrait) + { + if (autoRotationPreferences.HasChars()) + autoRotationPreferences += " | "; + autoRotationPreferences += "DisplayOrientations.Portrait"; + } + if ((int)platformSettings->AutoRotationPreferences & (int)UWPPlatformSettings::DisplayOrientations::PortraitFlipped) + { + if (autoRotationPreferences.HasChars()) + autoRotationPreferences += " | "; + autoRotationPreferences += "DisplayOrientations.PortraitFlipped"; + } + StringAnsi preferredLaunchWindowingMode = platformSettings->PreferredLaunchWindowingMode == UWPPlatformSettings::WindowMode::FullScreen ? "FullScreen" : "PreferredLaunchViewSize"; + if (isXboxOne) + preferredLaunchWindowingMode = "FullScreen"; + + // Write data to file + auto file = FileWriteStream::Open(dstFlaxGeneratedPath); + bool hasError = true; + if (file) + { + file->WriteTextFormatted( + (char*)fileTemplate.Get() + , autoRotationPreferences.Get() + , preferredLaunchWindowingMode.Get() + ); + hasError = file->HasError(); + Delete(file); + } + if (hasError) + { + data.Error(TEXT("Failed to create FlaxGenerated.cs.")); + return true; + } + } + + // Create solution + const auto dstSolutionPath = data.OutputPath / projectName + TEXT(".sln"); + const auto srcSolutionPath = uwpDataPath / TEXT("Solution.sln"); + if (!FileSystem::FileExists(dstSolutionPath)) + { + // Get template + if (File::ReadAllBytes(srcSolutionPath, fileTemplate)) + { + data.Error(TEXT("Failed to load Solution.sln template.")); + return true; + } + fileTemplate[fileTemplate.Count() - 1] = 0; + + // Write data to file + auto file = FileWriteStream::Open(dstSolutionPath); + bool hasError = true; + if (file) + { + file->WriteTextFormatted( + (char*)fileTemplate.Get() + , projectName.ToStringAnsi() // {0} Project Name + , mode // {1} Platform Mode + , projectGuid.ToStringAnsi() // {2} Project ID + ); + hasError = file->HasError(); + Delete(file); + } + if (hasError) + { + data.Error(TEXT("Failed to create Solution.sln.")); + return true; + } + } + + // Create project + const auto dstProjectPath = data.OutputPath / projectName + TEXT(".csproj"); + const auto srcProjectPath = uwpDataPath / TEXT("Project.csproj"); + { + // Get template + if (File::ReadAllBytes(srcProjectPath, fileTemplate)) + { + data.Error(TEXT("Failed to load Project.csproj template.")); + return true; + } + fileTemplate[fileTemplate.Count() - 1] = 0; + + // Build included files data + StringBuilder filesInclude(2048); + for (int32 i = 0; i < files.Count(); i++) + { + // Link dlls (except FlaxEngine.dll because it's linked as a reference) + if (files[i].EndsWith(TEXT(".dll")) && !files[i].EndsWith(TEXT("FlaxEngine.dll"))) + { + String filename = StringUtils::GetFileName(files[i]); + filename.Replace(TEXT('/'), TEXT('\\'), StringSearchCase::CaseSensitive); + + filesInclude.Append(TEXT("\n ")); + } + } + + // Write data to file + auto file = FileWriteStream::Open(dstProjectPath); + bool hasError = true; + if (file) + { + file->WriteTextFormatted( + (char*)fileTemplate.Get() + , projectName.ToStringAnsi() // {0} Project Name + , mode // {1} Platform Mode + , projectGuid.Get() // {2} Project ID + , filesInclude.ToString().ToStringAnsi() // {3} Files to include + , defaultNamespace.ToStringAnsi() // {4} Default Namespace + ); + hasError = file->HasError(); + Delete(file); + } + if (hasError) + { + data.Error(TEXT("Failed to create Project.csproj.")); + return true; + } + } + + // Create manifest + const auto dstManifestPath = data.OutputPath / TEXT("Package.appxmanifest"); + const auto srcManifestPath = uwpDataPath / TEXT("Package.appxmanifest"); + if (!FileSystem::FileExists(dstManifestPath)) + { + // Get template + if (File::ReadAllBytes(srcManifestPath, fileTemplate)) + { + data.Error(TEXT("Failed to load Package.appxmanifest template.")); + return true; + } + fileTemplate[fileTemplate.Count() - 1] = 0; + + // Build included files data + StringBuilder filesInclude(2048); + for (int32 i = 0; i < files.Count(); i++) + { + if (files[i].EndsWith(TEXT(".dll"))) + { + String filename = StringUtils::GetFileName(files[i]); + filename.Replace(TEXT('/'), TEXT('\\'), StringSearchCase::CaseSensitive); + + filesInclude.Append(TEXT("\n ")); + } + } + + // Write data to file + auto file = FileWriteStream::Open(dstManifestPath); + bool hasError = true; + if (file) + { + file->WriteTextFormatted( + (char*)fileTemplate.Get() + , projectName.ToStringAnsi() // {0} Display Name + , GameSettings::CompanyName.ToStringAnsi() // {1} Company Name + , productId.ToStringAnsi() // {2} Product ID + , defaultNamespace.ToStringAnsi() // {3} Default Namespace + ); + hasError = file->HasError(); + Delete(file); + } + if (hasError) + { + data.Error(TEXT("Failed to create Package.appxmanifest.")); + return true; + } + } + + return false; +} + +void UWPPlatformTools::OnConfigureAOT(CookingData& data, AotConfig& config) +{ + const auto platformDataPath = data.GetPlatformBinariesRoot(); + const bool useInterpreter = true; // TODO: support using Full AOT instead of interpreter + const bool enableDebug = data.Configuration != BuildConfiguration::Release; + const Char* aotMode = useInterpreter ? TEXT("full,interp") : TEXT("full"); + const Char* debugMode = enableDebug ? TEXT("soft-debug") : TEXT("nodebug"); + config.AotCompilerArgs = String::Format(TEXT("--aot={0},verbose,stats,print-skipped,{1} -O=all"), + aotMode, + debugMode); + if (enableDebug) + config.AotCompilerArgs = TEXT("--debug ") + config.AotCompilerArgs; + config.AotCompilerPath = platformDataPath / TEXT("Tools/mono.exe"); +} + +bool UWPPlatformTools::OnPerformAOT(CookingData& data, AotConfig& config, const String& assemblyPath) +{ + // Skip .dll.dll which could be a false result from the previous AOT which could fail + if (assemblyPath.EndsWith(TEXT(".dll.dll"))) + { + LOG(Warning, "Skip AOT for file '{0}' as it can be a result from the previous task", assemblyPath); + return false; + } + + // Check if skip this assembly (could be already processed) + const String filename = StringUtils::GetFileName(assemblyPath); + const String outputPath = config.AotCachePath / filename + TEXT(".dll"); + if (FileSystem::FileExists(outputPath) && FileSystem::GetFileLastEditTime(assemblyPath) < FileSystem::GetFileLastEditTime(outputPath)) + return false; + LOG(Info, "Calling AOT tool for \"{0}\"", assemblyPath); + + // Cleanup temporary results (fromm the previous AT that fail or sth) + const String resultPath = assemblyPath + TEXT(".dll"); + const String resultPathExp = resultPath + TEXT(".exp"); + const String resultPathLib = resultPath + TEXT(".lib"); + const String resultPathPdb = resultPath + TEXT(".pdb"); + if (FileSystem::FileExists(resultPath)) + FileSystem::DeleteFile(resultPath); + if (FileSystem::FileExists(resultPathExp)) + FileSystem::DeleteFile(resultPathExp); + if (FileSystem::FileExists(resultPathLib)) + FileSystem::DeleteFile(resultPathLib); + if (FileSystem::FileExists(resultPathPdb)) + FileSystem::DeleteFile(resultPathPdb); + + // Call tool + String workingDir = StringUtils::GetDirectoryName(config.AotCompilerPath); + String command = String::Format(TEXT("\"{0}\" {1} \"{2}\""), config.AotCompilerPath, config.AotCompilerArgs, assemblyPath); + const int32 result = Platform::RunProcess(command, workingDir, config.EnvVars); + if (result != 0) + { + data.Error(TEXT("AOT tool execution failed with result code {1} for assembly \"{0}\". See log for more info."), assemblyPath, result); + return true; + } + + // Copy result + if (FileSystem::CopyFile(outputPath, resultPath)) + { + data.Error(TEXT("Failed to copy the AOT tool result file. It can be missing.")); + return true; + } + + // Copy pdb file if exists + if (data.Configuration != BuildConfiguration::Release && FileSystem::FileExists(resultPathPdb)) + { + FileSystem::CopyFile(config.AotCachePath / StringUtils::GetFileName(resultPathPdb), resultPathPdb); + } + + // Clean intermediate results + if (FileSystem::DeleteFile(resultPath) + || (FileSystem::FileExists(resultPathExp) && FileSystem::DeleteFile(resultPathExp)) + || (FileSystem::FileExists(resultPathLib) && FileSystem::DeleteFile(resultPathLib)) + || (FileSystem::FileExists(resultPathPdb) && FileSystem::DeleteFile(resultPathPdb)) + ) + { + LOG(Warning, "Failed to remove the AOT tool result file(s)."); + } + + return false; +} + +bool UWPPlatformTools::OnPostProcess(CookingData& data) +{ + // Special case for UWP + // FlaxEngine.dll cannot be added to the solution as `Content` item (due to conflicts with C++ /CX FlaxEngine.dll) + // Use special directory for it (generated UWP project handles this case and copies lib to the output) + const String assembliesPath = data.OutputPath; + const auto dstPath1 = data.OutputPath / TEXT("DataSecondary"); + if (!FileSystem::DirectoryExists(dstPath1)) + { + if (FileSystem::CreateDirectory(dstPath1)) + { + data.Error(TEXT("Failed to create DataSecondary directory.")); + return true; + } + } + if (FileSystem::MoveFile(dstPath1 / TEXT("FlaxEngine.dll"), assembliesPath / TEXT("FlaxEngine.dll"), true)) + { + data.Error(TEXT("Failed to move FlaxEngine.dll to DataSecondary directory.")); + return true; + } + + return false; +} + +const Char* WSAPlatformTools::GetDisplayName() const +{ + return TEXT("Windows Store"); +} + +const Char* WSAPlatformTools::GetName() const +{ + return TEXT("UWP"); +} + +PlatformType WSAPlatformTools::GetPlatform() const +{ + return PlatformType::UWP; +} + +ArchitectureType WSAPlatformTools::GetArchitecture() const +{ + return _arch; +} + +const Char* XboxOnePlatformTools::GetDisplayName() const +{ + return TEXT("Xbox One"); +} + +const Char* XboxOnePlatformTools::GetName() const +{ + return TEXT("XboxOne"); +} + +PlatformType XboxOnePlatformTools::GetPlatform() const +{ + return PlatformType::XboxOne; +} + +ArchitectureType XboxOnePlatformTools::GetArchitecture() const +{ + return ArchitectureType::x64; +} + +#endif diff --git a/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.h b/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.h new file mode 100644 index 000000000..83cbfa2a3 --- /dev/null +++ b/Source/Editor/Cooker/Platform/UWP/UWPPlatformTools.h @@ -0,0 +1,64 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#pragma once + +#if PLATFORM_TOOLS_UWP || PLATFORM_TOOLS_XBOX_ONE + +#include "../../PlatformTools.h" + +/// +/// The Universal Windows Platform (UWP) platform support tools. +/// +class UWPPlatformTools : public PlatformTools +{ +public: + + // [PlatformTools] + bool UseAOT() const override; + bool OnScriptsStepDone(CookingData& data) override; + bool OnDeployBinaries(CookingData& data) override; + void OnConfigureAOT(CookingData& data, AotConfig& config) override; + bool OnPerformAOT(CookingData& data, AotConfig& config, const String& assemblyPath) override; + bool OnPostProcess(CookingData& data) override; +}; + +/// +/// The Windows Store platform support tools. +/// +class WSAPlatformTools : public UWPPlatformTools +{ +private: + + ArchitectureType _arch; + +public: + + WSAPlatformTools(ArchitectureType arch) + : _arch(arch) + { + } + +public: + + // [PlatformTools] + const Char* GetDisplayName() const override; + const Char* GetName() const override; + PlatformType GetPlatform() const override; + ArchitectureType GetArchitecture() const override; +}; + +/// +/// The Xbox One platform support tools. +/// +class XboxOnePlatformTools : public UWPPlatformTools +{ +public: + + // [PlatformTools] + const Char* GetDisplayName() const override; + const Char* GetName() const override; + PlatformType GetPlatform() const override; + ArchitectureType GetArchitecture() const override; +}; + +#endif diff --git a/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp b/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp new file mode 100644 index 000000000..35ed27639 --- /dev/null +++ b/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.cpp @@ -0,0 +1,56 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#if PLATFORM_TOOLS_WINDOWS + +#include "WindowsPlatformTools.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Platform/Windows/WindowsPlatformSettings.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Editor/Utilities/EditorUtilities.h" +#include "Engine/Graphics/Textures/TextureData.h" + +const Char* WindowsPlatformTools::GetDisplayName() const +{ + return TEXT("Windows"); +} + +const Char* WindowsPlatformTools::GetName() const +{ + return TEXT("Windows"); +} + +PlatformType WindowsPlatformTools::GetPlatform() const +{ + return PlatformType::Windows; +} + +ArchitectureType WindowsPlatformTools::GetArchitecture() const +{ + return _arch; +} + +bool WindowsPlatformTools::OnDeployBinaries(CookingData& data) +{ + const auto platformSettings = WindowsPlatformSettings::Instance(); + const auto& outputPath = data.OutputPath; + + // Apply executable icon + Array files; + FileSystem::DirectoryGetFiles(files, outputPath, TEXT("*.exe"), DirectorySearchOption::TopDirectoryOnly); + if (files.HasItems()) + { + TextureData iconData; + if (!EditorUtilities::GetApplicationImage(platformSettings->OverrideIcon, iconData)) + { + if (EditorUtilities::UpdateExeIcon(files[0], iconData)) + { + data.Error(TEXT("Failed to change output executable file icon.")); + return true; + } + } + } + + return false; +} + +#endif diff --git a/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.h b/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.h new file mode 100644 index 000000000..a6ae40fd4 --- /dev/null +++ b/Source/Editor/Cooker/Platform/Windows/WindowsPlatformTools.h @@ -0,0 +1,35 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#pragma once + +#if PLATFORM_TOOLS_WINDOWS + +#include "../../PlatformTools.h" + +/// +/// The Windows platform support tools. +/// +class WindowsPlatformTools : public PlatformTools +{ +private: + + ArchitectureType _arch; + +public: + + WindowsPlatformTools(ArchitectureType arch) + : _arch(arch) + { + } + +public: + + // [PlatformTools] + const Char* GetDisplayName() const override; + const Char* GetName() const override; + PlatformType GetPlatform() const override; + ArchitectureType GetArchitecture() const override; + bool OnDeployBinaries(CookingData& data) override; +}; + +#endif diff --git a/Source/Editor/Cooker/PlatformTools.h b/Source/Editor/Cooker/PlatformTools.h new file mode 100644 index 000000000..28f6346ca --- /dev/null +++ b/Source/Editor/Cooker/PlatformTools.h @@ -0,0 +1,193 @@ +// Copyright (c) 2012-2019 Wojciech Figat. All rights reserved. + +#pragma once + +#include "CookingData.h" +#include "Engine/Core/Collections/Dictionary.h" +#include "Editor/Scripting/ScriptsBuilder.h" +#include "Engine/Graphics/PixelFormat.h" + +class TextureBase; + +/// +/// The platform support tools base interface. +/// +class FLAXENGINE_API PlatformTools +{ +public: + + /// + /// Finalizes an instance of the class. + /// + virtual ~PlatformTools() = default; + + /// + /// Gets the name of the platform for UI and logging. + /// + /// The name. + virtual const Char* GetDisplayName() const = 0; + + /// + /// Gets the name of the platform for filesystem cache directories, deps folder. + /// + /// The name. + virtual const Char* GetName() const = 0; + + /// + /// Gets the type of the platform. + /// + /// The platform type. + virtual PlatformType GetPlatform() const = 0; + + /// + /// Gets the architecture of the platform. + /// + /// The architecture type. + virtual ArchitectureType GetArchitecture() const = 0; + + /// + /// Gets the value indicating whenever platform requires AOT. + /// + /// True if platform uses AOT and needs C# assemblies to be be precompiled, otherwise false. + virtual bool UseAOT() const + { + return false; + } + + /// + /// Gets the texture format that is supported by the platform for a given texture. + /// + /// The cooking data. + /// The texture. + /// The texture format. + /// The target texture format for the platform. + virtual PixelFormat GetTextureFormat(CookingData& data, TextureBase* texture, PixelFormat format) + { + return format; + } + +public: + + /// + /// Called when game building starts. + /// + /// The cooking data. + virtual void OnBuildStarted(CookingData& data) + { + } + + /// + /// Called when game building ends. + /// + /// The cooking data. + /// True if build failed, otherwise false. + virtual void OnBuildEnded(CookingData& data, bool failed) + { + } + + /// + /// Called before scripts compilation. Can be used to inject custom configuration or prepare data. + /// + /// The cooking data. + /// True if failed, otherwise false. + virtual bool OnScriptsCompilationStart(CookingData& data) + { + return false; + } + + /// + /// Called after scripts compilation. Can be used to cleanup or prepare data. + /// + /// The cooking data. + /// True if failed, otherwise false. + virtual bool OnScriptsCompilationEnd(CookingData& data) + { + return false; + } + + /// + /// Called after compiled scripts deploy. Can be used to override or patch the output files. + /// + /// The cooking data. + /// True if failed, otherwise false. + virtual bool OnScriptsStepDone(CookingData& data) + { + return false; + } + + /// + /// Called during binaries deployment. + /// + /// The cooking data. + /// True if failed, otherwise false. + virtual bool OnDeployBinaries(CookingData& data) + { + return false; + } + + /// + /// The C# scripts AOT configuration options. + /// + struct AotConfig + { + String AotCompilerPath; + String AotCompilerArgs; + String AssemblerPath; + String AssemblerArgs; + String ArchiverPath; + String ArchiverArgs; + String AotCachePath; + Dictionary EnvVars; + Array AssembliesSearchDirs; + Array Assemblies; + + AotConfig(CookingData& data) + { + Platform::GetEnvironmentVariables(EnvVars); + EnvVars[TEXT("MONO_PATH")] = data.OutputPath / TEXT("Mono/lib/mono/4.5"); + AssembliesSearchDirs.Add(data.OutputPath / TEXT("Mono/lib/mono/4.5")); + } + }; + + /// + /// Called to configure AOT options. + /// + /// The cooking data. + /// The configuration. + virtual void OnConfigureAOT(CookingData& data, AotConfig& config) + { + } + + /// + /// Called to execute AOT for the given assembly. + /// + /// The cooking data. + /// The configuration. + /// The input managed library file path. + /// True if failed, otherwise false. + virtual bool OnPerformAOT(CookingData& data, AotConfig& config, const String& assemblyPath) + { + return false; + } + + /// + /// Called after AOT execution for the assemblies. + /// + /// The cooking data. + /// The configuration. + /// True if failed, otherwise false. + virtual bool OnPostProcessAOT(CookingData& data, AotConfig& config) + { + return false; + } + + /// + /// Called during staged build post-processing. + /// + /// The cooking data. + /// True if failed, otherwise false. + virtual bool OnPostProcess(CookingData& data) + { + return false; + } +}; diff --git a/Source/Editor/Cooker/Steps/CollectAssetsStep.cpp b/Source/Editor/Cooker/Steps/CollectAssetsStep.cpp new file mode 100644 index 000000000..2a742e6f0 --- /dev/null +++ b/Source/Editor/Cooker/Steps/CollectAssetsStep.cpp @@ -0,0 +1,86 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "CollectAssetsStep.h" +#include "Engine/Content/Content.h" +#include "Engine/Content/Asset.h" +#include "Engine/Content/AssetReference.h" +#include "Engine/Content/Assets/Texture.h" +#include "Engine/Core/Log.h" +#include "Engine/Content/Assets/CubeTexture.h" +#include "Engine/Content/Assets/Shader.h" +#include "Engine/Content/Cache/AssetsCache.h" + +bool CollectAssetsStep::Process(CookingData& data, Asset* asset) +{ + // Skip virtual/temporary assets + if (asset->IsVirtual()) + return false; + + // Keep reference to the asset + AssetReference ref(asset); + + // Asset should have loaded data + if (asset->WaitForLoaded()) + return false; + + // Gather asset references + _references.Clear(); + asset->Locker.Lock(); + asset->GetReferences(_references); + asset->Locker.Unlock(); + _assetsQueue.Add(_references); + + return false; +} + +bool CollectAssetsStep::Perform(CookingData& data) +{ + LOG(Info, "Searching for assets to include in a build. Using {0} root assets.", data.RootAssets.Count()); + data.StepProgress(TEXT("Collecting assets"), 0); + + // Initialize assets queue + _assetsQueue.Clear(); + _assetsQueue.EnsureCapacity(1024); + for (auto i = data.RootAssets.Begin(); i.IsNotEnd(); ++i) + _assetsQueue.Add(i->Item); + + // Iterate through the assets graph + AssetInfo assetInfo; + while (_assetsQueue.HasItems()) + { + BUILD_STEP_CANCEL_CHECK; + + const auto assetId = _assetsQueue.Dequeue(); + + // Skip already processed or invalid assets + if (!assetId.IsValid() + || !Content::GetRegistry()->FindAsset(assetId, assetInfo) + || data.Assets.Contains(assetId)) + continue; + + // Skip some assets (with no refs and not required to load) + if (assetInfo.TypeName == Texture::TypeName || + assetInfo.TypeName == CubeTexture::TypeName || + assetInfo.TypeName == Shader::TypeName) + { + LOG_STR(Info, assetInfo.Path); + data.Assets.Add(assetId); + continue; + } + + // Load asset + const auto asset = Content::LoadAsync(assetId); + if (asset == nullptr) + continue; + + // Process that asset + LOG_STR(Info, asset->GetPath()); + data.Assets.Add(assetId); + Process(data, asset); + } + + data.Stats.TotalAssets = data.Assets.Count(); + LOG(Info, "Found {0} assets to deploy!", data.Assets.Count()); + + return false; +} diff --git a/Source/Editor/Cooker/Steps/CollectAssetsStep.h b/Source/Editor/Cooker/Steps/CollectAssetsStep.h new file mode 100644 index 000000000..9c1ce813b --- /dev/null +++ b/Source/Editor/Cooker/Steps/CollectAssetsStep.h @@ -0,0 +1,26 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" + +class Asset; + +/// +/// Cooking step that uses the root assets collection to find all dependant assets to include in the build. +/// +/// +class CollectAssetsStep : public GameCooker::BuildStep +{ +private: + + Array _assetsQueue; + Array _references; + + bool Process(CookingData& data, Asset* asset); + +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp b/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp new file mode 100644 index 000000000..d167219b4 --- /dev/null +++ b/Source/Editor/Cooker/Steps/CompileScriptsStep.cpp @@ -0,0 +1,298 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "CompileScriptsStep.h" +#include "Editor/Scripting/ScriptsBuilder.h" +#include "Engine/Scripting/BinaryModule.h" +#include "Engine/Scripting/Scripting.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Platform/File.h" +#include "Engine/Serialization/Json.h" +#include "Engine/Serialization/JsonTools.h" +#include "Engine/Serialization/JsonWriters.h" +#include "Editor/Cooker/PlatformTools.h" +#include "Editor/Editor.h" + +bool CompileScriptsStep::DeployBinaries(CookingData& data, const String& path, const String& projectFolderPath) +{ + if (_deployedBuilds.Contains(path)) + return false; + LOG(Info, "Deploying binaries from build {0}", path); + _deployedBuilds.Add(path); + + // Read file contents + Array fileData; + if (File::ReadAllBytes(path, fileData)) + { + LOG(Error, "Failed to read file {0} contents.", path); + return true; + } + + // Parse Json data + rapidjson_flax::Document document; + document.Parse((const char*)fileData.Get(), fileData.Count()); + if (document.HasParseError()) + { + LOG(Error, "Failed to parse {0} file contents.", path); + return true; + } + + // Deploy all references + auto referencesMember = document.FindMember("References"); + if (referencesMember != document.MemberEnd()) + { + auto& referencesArray = referencesMember->value; + ASSERT(referencesArray.IsArray()); + for (rapidjson::SizeType i = 0; i < referencesArray.Size(); i++) + { + auto& reference = referencesArray[i]; + String referenceProjectPath = JsonTools::GetString(reference, "ProjectPath", String::Empty); + String referencePath = JsonTools::GetString(reference, "Path", String::Empty); + if (referenceProjectPath.IsEmpty() || referencePath.IsEmpty()) + { + LOG(Error, "Empty reference in {0}.", path); + return true; + } + + Scripting::ProcessBuildInfoPath(referenceProjectPath, projectFolderPath); + Scripting::ProcessBuildInfoPath(referencePath, projectFolderPath); + + String referenceProjectFolderPath = StringUtils::GetDirectoryName(referenceProjectPath); + + if (DeployBinaries(data, referencePath, referenceProjectFolderPath)) + { + LOG(Error, "Failed to load reference in {0} to {1}.", path, referenceProjectPath); + return true; + } + } + } + + // Deploy all binary modules + auto binaryModulesMember = document.FindMember("BinaryModules"); + if (binaryModulesMember != document.MemberEnd()) + { + auto& binaryModulesArray = binaryModulesMember->value; + ASSERT(binaryModulesArray.IsArray()); + for (rapidjson::SizeType i = 0; i < binaryModulesArray.Size(); i++) + { + auto& binaryModule = binaryModulesArray[i]; + auto& e = data.BinaryModules.AddOne(); + const auto nameMember = binaryModule.FindMember("Name"); + if (nameMember == binaryModule.MemberEnd()) + { + LOG(Error, "Failed to process file {0}. Missing binary module name.", path); + return true; + } + e.Name = nameMember->value.GetText(); + StringAnsi nameAnsi(nameMember->value.GetString(), nameMember->value.GetStringLength()); + e.NativePath = JsonTools::GetString(binaryModule, "NativePath", String::Empty); + e.ManagedPath = JsonTools::GetString(binaryModule, "ManagedPath", String::Empty); + + Scripting::ProcessBuildInfoPath(e.NativePath, projectFolderPath); + Scripting::ProcessBuildInfoPath(e.ManagedPath, projectFolderPath); + + e.NativePath = StringUtils::GetFileName(e.NativePath); + e.ManagedPath = StringUtils::GetFileName(e.ManagedPath); + + LOG(Info, "Collecting binary module {0}", e.Name); + } + } + + // Deploy files + Array files(16); + const String outputPath = StringUtils::GetDirectoryName(path); + FileSystem::DirectoryGetFiles(files, outputPath, TEXT("*.*"), DirectorySearchOption::TopDirectoryOnly); + for (int32 i = files.Count() - 1; i >= 0; i--) + { + bool skip = false; + const String& file = files[i]; + for (auto& extension : _extensionsToSkip) + { + if (file.EndsWith(extension)) + { + skip = true; + break; + } + } + if (skip) + files.RemoveAt(i); + } + for (auto& file : files) + { + const String dst = data.OutputPath / StringUtils::GetFileName(file); + if (dst != file && FileSystem::CopyFile(dst, file)) + { + data.Error(TEXT("Failed to copy file from {0} to {1}."), file, dst); + return true; + } + } + + return false; +} + +bool CompileScriptsStep::Perform(CookingData& data) +{ + data.StepProgress(TEXT("Compiling game scripts"), 0); + + const ProjectInfo* project = Editor::Project; + const String& target = project->GameTarget; + if (target.IsEmpty()) + { + LOG(Error, "Empty GameTarget in project."); + return true; + } + const Char *platform, *architecture, *configuration = ::ToString(data.Configuration); + switch (data.Platform) + { + case BuildPlatform::Windows32: + platform = TEXT("Windows"); + architecture = TEXT("x86"); + break; + case BuildPlatform::Windows64: + platform = TEXT("Windows"); + architecture = TEXT("x64"); + break; + case BuildPlatform::UWPx86: + platform = TEXT("UWP"); + architecture = TEXT("x86"); + break; + case BuildPlatform::UWPx64: + platform = TEXT("UWP"); + architecture = TEXT("x64"); + break; + case BuildPlatform::XboxOne: + platform = TEXT("XboxOne"); + architecture = TEXT("x64"); + break; + case BuildPlatform::LinuxX64: + platform = TEXT("Linux"); + architecture = TEXT("x64"); + break; + case BuildPlatform::PS4: + platform = TEXT("PS4"); + architecture = TEXT("x64"); + break; + case BuildPlatform::XboxScarlett: + platform = TEXT("XboxScarlett"); + architecture = TEXT("x64"); + break; + case BuildPlatform::AndroidARM64: + platform = TEXT("Android"); + architecture = TEXT("ARM64"); + break; + default: + return true; + } + _extensionsToSkip.Clear(); + _extensionsToSkip.Add(TEXT(".exp")); + _extensionsToSkip.Add(TEXT(".ilk")); + _extensionsToSkip.Add(TEXT(".lib")); + _extensionsToSkip.Add(TEXT(".a")); + _extensionsToSkip.Add(TEXT(".Build.json")); + if (data.Configuration == BuildConfiguration::Release) + { + _extensionsToSkip.Add(TEXT(".xml")); + _extensionsToSkip.Add(TEXT(".pdb")); + } + _deployedBuilds.Clear(); + data.BinaryModules.Clear(); + + if (data.Tools->OnScriptsCompilationStart(data)) + return true; + + BUILD_STEP_CANCEL_CHECK; + + // Compile the scripts + LOG(Info, "Starting scripts compilation for game..."); + const String logFile = data.CacheDirectory / TEXT("CompileLog.txt"); + auto args = String::Format( + TEXT("-log -logfile=\"{4}\" -build -mutex -buildtargets={0} -platform={1} -arch={2} -configuration={3}"), + target, platform, architecture, configuration, logFile); +#if PLATFORM_WINDOWS + if (data.Platform == BuildPlatform::LinuxX64) + { + // Skip building C++ for Linux on Windows (no need to install cross-toolchain to build C# game) + args += TEXT(" -BuildBindingsOnly"); + + // Assume FlaxGame was prebuilt for Linux + args += TEXT(" -SkipTargets=FlaxGame"); + } +#endif + if (ScriptsBuilder::RunBuildTool(args)) + { + data.Error(TEXT("Failed to compile game scripts.")); + return true; + } + + BUILD_STEP_CANCEL_CHECK; + + if (data.Tools->OnScriptsCompilationEnd(data)) + return true; + + data.StepProgress(TEXT("Exporting binaries"), 0.8f); + + // Deploy binary modules + const String targetBuildInfo = project->ProjectFolderPath / TEXT("Binaries") / project->GameTarget / platform / architecture / configuration / target + TEXT(".Build.json"); + if (DeployBinaries(data, targetBuildInfo, project->ProjectFolderPath)) + return true; + + data.StepProgress(TEXT("Generating merged build info"), 0.95f); + + // Generate merged build info for all deployed binary modules + { + rapidjson_flax::StringBuffer buffer; +#if BUILD_DEBUG + PrettyJsonWriter writerObj(buffer); +#else + CompactJsonWriter writerObj(buffer); +#endif + JsonWriter& writer = writerObj; + + writer.StartObject(); + { + writer.JKEY("Name"); + writer.String(target); + writer.JKEY("Platform"); + writer.String(platform); + writer.JKEY("Configuration"); + writer.String(configuration); + + writer.JKEY("BinaryModules"); + writer.StartArray(); + for (auto& binaryModule : data.BinaryModules) + { + writer.StartObject(); + + writer.JKEY("Name"); + writer.String(binaryModule.Name); + + if (binaryModule.NativePath.HasChars()) + { + writer.JKEY("NativePath"); + writer.String(binaryModule.NativePath); + } + + if (binaryModule.ManagedPath.HasChars()) + { + writer.JKEY("ManagedPath"); + writer.String(binaryModule.ManagedPath); + } + + writer.EndObject(); + } + writer.EndArray(); + } + writer.EndObject(); + + const String outputBuildInfo = data.OutputPath / TEXT("Game.Build.json"); + if (File::WriteAllBytes(outputBuildInfo, (byte*)buffer.GetString(), (int32)buffer.GetSize())) + { + LOG(Error, "Failed to save binary modules info file {0}.", outputBuildInfo); + return true; + } + } + + if (data.Tools->OnScriptsStepDone(data)) + return true; + + return false; +} diff --git a/Source/Editor/Cooker/Steps/CompileScriptsStep.h b/Source/Editor/Cooker/Steps/CompileScriptsStep.h new file mode 100644 index 000000000..08776cb38 --- /dev/null +++ b/Source/Editor/Cooker/Steps/CompileScriptsStep.h @@ -0,0 +1,24 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" + +/// +/// Game scripts compilation step. Outputs proper assemblies compiled to the target platform. +/// +/// +class CompileScriptsStep : public GameCooker::BuildStep +{ +private: + + Array> _extensionsToSkip; + Array> _deployedBuilds; + + bool DeployBinaries(CookingData& data, const String& path, const String& projectFolderPath); + +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/Cooker/Steps/CookAssetsStep.cpp b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp new file mode 100644 index 000000000..5f4c3e323 --- /dev/null +++ b/Source/Editor/Cooker/Steps/CookAssetsStep.cpp @@ -0,0 +1,1144 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "CookAssetsStep.h" +#include "Editor/Cooker/PlatformTools.h" +#include "Engine/Core/DeleteMe.h" +#include "Engine/Core/Utilities.h" +#include "Engine/Core/Collections/Sorting.h" +#include "Engine/Platform/FileSystem.h" +#include "Engine/Content/Content.h" +#include "Engine/Content/Asset.h" +#include "Engine/Content/BinaryAsset.h" +#include "Engine/Content/JsonAsset.h" +#include "Engine/Content/AssetReference.h" +#include "Engine/Content/Assets/Material.h" +#include "Engine/Content/Assets/Shader.h" +#include "Engine/Content/Assets/Texture.h" +#include "Engine/Content/Assets/CubeTexture.h" +#include "Engine/Render2D/SpriteAtlas.h" +#include "Engine/Content/Storage/FlaxFile.h" +#include "Engine/Particles/ParticleEmitter.h" +#include "Engine/Utilities/Encryption.h" +#include "Engine/Serialization/JsonWriters.h" +#include "Engine/Serialization/FileWriteStream.h" +#include "Engine/Serialization/MemoryWriteStream.h" +#include "Engine/Core/Config/PlatformSettings.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Engine/Core/Config/BuildSettings.h" +#include "Engine/ShadersCompilation/ShadersCompilation.h" +#include "Engine/Graphics/RenderTools.h" +#include "Engine/Graphics/Textures/TextureData.h" +#include "Engine/Engine/Base/GameBase.h" +#include "Engine/Tools/TextureTool/TextureTool.h" +#if PLATFORM_TOOLS_WINDOWS +#include "Engine/Platform/Windows/WindowsPlatformSettings.h" +#endif +#if PLATFORM_TOOLS_UWP +#include "Engine/Platform/UWP/UWPPlatformSettings.h" +#endif +#if PLATFORM_TOOLS_LINUX +#include "Engine/Platform/Linux/LinuxPlatformSettings.h" +#endif +#include "FlaxEngine.Gen.h" + +Dictionary CookAssetsStep::AssetProcessors; + +CookAssetsStep::CacheEntry& CookAssetsStep::CacheData::CreateEntry(const JsonAssetBase* asset, String& cachedFilePath) +{ + ASSERT(asset->DataTypeName.HasChars()); + auto& entry = Entries[asset->GetID()]; + entry.ID = asset->GetID(); + entry.TypeName = asset->DataTypeName; + entry.FileModified = FileSystem::GetFileLastEditTime(asset->GetPath()); + cachedFilePath = CacheFolder / entry.ID.ToString(Guid::FormatType::N); + return entry; +} + +CookAssetsStep::CacheEntry& CookAssetsStep::CacheData::CreateEntry(const Asset* asset, String& cachedFilePath) +{ + auto& entry = Entries[asset->GetID()]; + entry.ID = asset->GetID(); + entry.TypeName = asset->GetTypeName(); + entry.FileModified = FileSystem::GetFileLastEditTime(asset->GetPath()); + cachedFilePath = CacheFolder / entry.ID.ToString(Guid::FormatType::N); + return entry; +} + +void CookAssetsStep::CacheData::InvalidateShaders() +{ + LOG(Info, "Invalidating cached shader assets."); + + for (auto e = Entries.Begin(); e.IsNotEnd(); ++e) + { + auto& typeName = e->Value.TypeName; + if ( + typeName == Shader::TypeName || + typeName == Material::TypeName || + typeName == ParticleEmitter::TypeName + ) + { + Entries.Remove(e); + } + } +} + +void CookAssetsStep::CacheData::Load(CookingData& data) +{ + HeaderFilePath = data.CacheDirectory / String::Format(TEXT("CookedHeader_{0}.bin"), FLAXENGINE_VERSION_BUILD); + CacheFolder = data.CacheDirectory / TEXT("Cooked"); + Entries.Clear(); + + if (!FileSystem::DirectoryExists(CacheFolder)) + { + FileSystem::CreateDirectory(CacheFolder); + } + + if (!FileSystem::FileExists(HeaderFilePath)) + { + LOG(Warning, "Missing incremental build cooking assets cache."); + return; + } + + auto file = FileReadStream::Open(HeaderFilePath); + if (file == nullptr) + return; + DeleteMe deleteFile(file); + + int32 buildNum; + file->ReadInt32(&buildNum); + if (buildNum != FLAXENGINE_VERSION_BUILD) + return; + int32 entriesCount; + file->ReadInt32(&entriesCount); + if (Math::IsNotInRange(entriesCount, 0, 1000000)) + return; + + LOG(Info, "Loading incremental build cooking cache (entries count: {0})", entriesCount); + + file->Read(&Settings); + + Entries.EnsureCapacity(Math::RoundUpToPowerOf2(static_cast(entriesCount * 3.0f))); + + Array> fileDependencies; + for (int32 i = 0; i < entriesCount; i++) + { + Guid id; + file->Read(&id); + String typeName; + file->ReadString(&typeName); + DateTime fileModified; + file->Read(&fileModified); + int32 fileDependenciesCount; + file->ReadInt32(&fileDependenciesCount); + fileDependencies.Clear(); + fileDependencies.Resize(fileDependenciesCount); + for (int32 j = 0; j < fileDependenciesCount; j++) + { + Pair& f = fileDependencies[j]; + file->ReadString(&f.First, 10); + file->Read(&f.Second); + } + + // Skip missing entries + if (!FileSystem::FileExists(CacheFolder / id.ToString(Guid::FormatType::N))) + continue; + + auto& e = Entries[id]; + e.ID = id; + e.TypeName = typeName; + e.FileModified = fileModified; + e.FileDependencies = fileDependencies; + } + + int32 checkChar; + file->ReadInt32(&checkChar); + if (checkChar != 13) + { + LOG(Warning, "Corrupted cooking cache header file."); + Entries.Clear(); + } + + // Invalidate shaders and assets with shaders if need to rebuild them + bool invalidateShaders = false; + const bool shadersNoOptimize = BuildSettings::Instance()->ShadersNoOptimize; + const bool shadersGenerateDebugData = BuildSettings::Instance()->ShadersGenerateDebugData; + if (shadersNoOptimize != Settings.Global.ShadersNoOptimize) + { + LOG(Info, "ShadersNoOptimize option has been modified."); + invalidateShaders = true; + } + if (shadersGenerateDebugData != Settings.Global.ShadersGenerateDebugData) + { + LOG(Info, "ShadersGenerateDebugData option has been modified."); + invalidateShaders = true; + } +#if PLATFORM_TOOLS_WINDOWS + if (data.Platform == BuildPlatform::Windows32 || data.Platform == BuildPlatform::Windows64) + { + const auto settings = WindowsPlatformSettings::Instance(); + const bool modified = + Settings.Windows.SupportDX11 != settings->SupportDX11 || + Settings.Windows.SupportDX10 != settings->SupportDX10 || + Settings.Windows.SupportVulkan != settings->SupportVulkan; + if (modified) + { + LOG(Info, "Platform graphics backend options has been modified."); + invalidateShaders = true; + } + } +#endif +#if PLATFORM_TOOLS_UWP + if (data.Platform == BuildPlatform::UWPx86 || data.Platform == BuildPlatform::UWPx64) + { + const auto settings = UWPPlatformSettings::Instance(); + const bool modified = + Settings.UWP.SupportDX11 != settings->SupportDX11 || + Settings.UWP.SupportDX10 != settings->SupportDX10; + if (modified) + { + LOG(Info, "Platform graphics backend options has been modified."); + invalidateShaders = true; + } + } +#endif +#if PLATFORM_TOOLS_LINUX + if (data.Platform == BuildPlatform::LinuxX64) + { + const auto settings = LinuxPlatformSettings::Instance(); + const bool modified = + Settings.Linux.SupportVulkan != settings->SupportVulkan; + if (modified) + { + LOG(Info, "Platform graphics backend options has been modified."); + invalidateShaders = true; + } + } +#endif + if (invalidateShaders) + InvalidateShaders(); +} + +void CookAssetsStep::CacheData::Save() +{ + LOG(Info, "Saving incremental build cooking cache (entries count: {0})", Entries.Count()); + + auto file = FileWriteStream::Open(HeaderFilePath); + if (file == nullptr) + return; + DeleteMe deleteFile(file); + + // Serialize + file->WriteInt32(FLAXENGINE_VERSION_BUILD); + file->WriteInt32(Entries.Count()); + file->Write(&Settings); + for (auto i = Entries.Begin(); i.IsNotEnd(); ++i) + { + auto& e = i->Value; + file->Write(&e.ID); + file->WriteString(e.TypeName); + file->Write(&e.FileModified); + file->WriteInt32(e.FileDependencies.Count()); + for (auto& f : e.FileDependencies) + { + file->WriteString(f.First, 10); + file->Write(&f.Second); + } + } + file->WriteInt32(13); +} + +bool CookAssetsStep::ProcessDefaultAsset(AssetCookData& options) +{ + const auto asBinaryAsset = dynamic_cast(options.Asset); + if (asBinaryAsset) + { + // Use default cooking rule (copy data) + if (asBinaryAsset->LoadChunks(ALL_ASSET_CHUNKS)) + return true; + for (int32 i = 0; i < ASSET_FILE_DATA_CHUNKS; i++) + { + const auto chunk = asBinaryAsset->GetChunk(i); + if (chunk) + options.InitData.Header.Chunks[i] = chunk->Clone(); + } + + return false; + } + + const auto asJsonAsset = dynamic_cast(options.Asset); + if (asJsonAsset) + { + // Use compact json + rapidjson_flax::StringBuffer buffer; + rapidjson_flax::Writer writer(buffer); + asJsonAsset->Document.Accept(writer); + + // Store json data in the first chunk + auto chunk = New(); + chunk->Flags = FlaxChunkFlags::CompressedLZ4; // Compress json data (internal storage layer will handle it) + chunk->Data.Copy((byte*)buffer.GetString(), (int32)buffer.GetSize()); + options.InitData.Header.Chunks[0] = chunk; + + return false; + } + + LOG(Error, "Unknown asset type \'{0}\'", options.Asset->GetTypeName()); + return false; +} + +bool CookAssetsStep::Process(CookingData& data, CacheData& cache, Asset* asset) +{ + // Validate asset + if (asset->IsVirtual()) + { + // Virtual assets are not included into the build + return false; + } + if (asset->WaitForLoaded()) + { + LOG(Error, "Failed to load asset \'{0}\'", asset->ToString()); + return false; + } + + // Switch based on an asset type + const auto asBinaryAsset = dynamic_cast(asset); + if (asBinaryAsset) + return Process(data, cache, asBinaryAsset); + const auto asJsonAsset = dynamic_cast(asset); + if (asJsonAsset) + return Process(data, cache, asJsonAsset); + + LOG(Error, "Unknown asset type \'{0}\'", asset->GetTypeName()); + return false; +} + +bool ProcessShaderBase(CookAssetsStep::AssetCookData& data, ShaderAssetBase* assetBase) +{ + auto asset = static_cast(data.Asset); + + // Decrypt source code + auto sourceChunk = asset->GetChunk(SHADER_FILE_CHUNK_SOURCE); + auto source = sourceChunk->Get(); + auto sourceLength = sourceChunk->Size(); + Encryption::DecryptBytes((byte*)source, sourceLength); + source[sourceLength - 1] = 0; + + // Init shader cache output stream + // TODO: reuse MemoryWriteStream per cooking process to reduce dynamic memory allocations + MemoryWriteStream cacheStream(32 * 1024); + + // Compile shader source + ShaderCompilationOptions options; + options.TargetName = StringUtils::GetFileNameWithoutExtension(asset->GetPath()); + options.TargetID = asset->GetID(); + options.Source = source; + options.SourceLength = sourceLength; + options.NoOptimize = data.Cache.Settings.Global.ShadersNoOptimize; + options.GenerateDebugData = data.Cache.Settings.Global.ShadersGenerateDebugData; + options.TreatWarningsAsErrors = false; + options.Output = &cacheStream; + Array includes; + +#define COMPILE_PROFILE(profile, cacheChunk) \ + { \ + cacheStream.SetPosition(0); \ + options.Profile = ShaderProfile::profile; \ + options.Macros.Clear(); \ + auto& platformDefine = options.Macros.AddOne(); \ + platformDefine.Name = platformDefineName; \ + platformDefine.Definition = nullptr; \ + assetBase->InitCompilationOptions(options); \ + if (ShadersCompilation::Compile(options)) \ + { \ + data.Data.Error(TEXT("Failed to compile shader '{0}' (profile: {1})."), asset->ToString(), ::ToString(options.Profile)); \ + return true; \ + } \ + includes.Clear(); \ + ShadersCompilation::ExtractShaderIncludes(cacheStream.GetHandle(), cacheStream.GetPosition(), includes); \ + for (auto& include : includes) \ + data.FileDependencies.Add(ToPair(include, FileSystem::GetFileLastEditTime(include))); \ + auto chunk = New(); \ + chunk->Data.Copy(cacheStream.GetHandle(), cacheStream.GetPosition()); \ + data.InitData.Header.Chunks[cacheChunk] = chunk; \ + } + + // Compile for a target platform + switch (data.Data.Platform) + { + case BuildPlatform::Windows32: + case BuildPlatform::Windows64: + { + const char* platformDefineName = "PLATFORM_WINDOWS"; + const auto settings = WindowsPlatformSettings::Instance(); + if (settings->SupportDX12) + { + COMPILE_PROFILE(DirectX_SM6, SHADER_FILE_CHUNK_INTERNAL_D3D_SM6_CACHE); + } + if (settings->SupportDX11) + { + COMPILE_PROFILE(DirectX_SM5, SHADER_FILE_CHUNK_INTERNAL_D3D_SM5_CACHE); + } + if (settings->SupportDX10) + { + COMPILE_PROFILE(DirectX_SM4, SHADER_FILE_CHUNK_INTERNAL_D3D_SM4_CACHE); + } + if (settings->SupportVulkan) + { + COMPILE_PROFILE(Vulkan_SM5, SHADER_FILE_CHUNK_INTERNAL_VULKAN_SM5_CACHE); + } + break; + } +#if PLATFORM_TOOLS_UWP + case BuildPlatform::UWPx86: + case BuildPlatform::UWPx64: + { + const char* platformDefineName = "PLATFORM_UWP"; + const auto settings = UWPPlatformSettings::Instance(); + if (settings->SupportDX11) + { + COMPILE_PROFILE(DirectX_SM5, SHADER_FILE_CHUNK_INTERNAL_D3D_SM5_CACHE); + } + if (settings->SupportDX10) + { + COMPILE_PROFILE(DirectX_SM4, SHADER_FILE_CHUNK_INTERNAL_D3D_SM4_CACHE); + } + break; + } +#endif + case BuildPlatform::XboxOne: + { + const char* platformDefineName = "PLATFORM_XBOX_ONE"; + COMPILE_PROFILE(DirectX_SM4, SHADER_FILE_CHUNK_INTERNAL_D3D_SM4_CACHE); + break; + } +#if PLATFORM_TOOLS_LINUX + case BuildPlatform::LinuxX64: + { + const char* platformDefineName = "PLATFORM_LINUX"; + const auto settings = LinuxPlatformSettings::Instance(); + if (settings->SupportVulkan) + { + COMPILE_PROFILE(Vulkan_SM5, SHADER_FILE_CHUNK_INTERNAL_VULKAN_SM5_CACHE); + } + break; + } +#endif + case BuildPlatform::PS4: + { + const char* platformDefineName = "PLATFORM_PS4"; + COMPILE_PROFILE(PS4, SHADER_FILE_CHUNK_INTERNAL_GENERIC_CACHE); + break; + } + case BuildPlatform::XboxScarlett: + { + const char* platformDefineName = "PLATFORM_XBOX_SCARLETT"; + COMPILE_PROFILE(DirectX_SM6, SHADER_FILE_CHUNK_INTERNAL_D3D_SM6_CACHE); + break; + } + case BuildPlatform::AndroidARM64: + { + const char* platformDefineName = "PLATFORM_ANDROID"; + COMPILE_PROFILE(Vulkan_SM5, SHADER_FILE_CHUNK_INTERNAL_VULKAN_SM5_CACHE); + break; + } + default: + { + LOG(Warning, "Not implemented platform or shaders not supported."); + return true; + } + } + + // Encrypt source code + Encryption::EncryptBytes(reinterpret_cast(source), sourceLength); + + return false; +} + +bool ProcessMaterial(CookAssetsStep::AssetCookData& data) +{ + auto asset = static_cast(data.Asset); + + // Material is loaded so it has valid source code generated from the Visject Surface. + // Material::load performs any required upgrading and conversions. + + // Load material params and source code + if (asset->LoadChunks(GET_CHUNK_FLAG(SHADER_FILE_CHUNK_MATERIAL_PARAMS) | GET_CHUNK_FLAG(SHADER_FILE_CHUNK_SOURCE))) + return true; + + // Copy material params data + const auto paramsChunk = asset->GetChunk(SHADER_FILE_CHUNK_MATERIAL_PARAMS); + if (paramsChunk) + data.InitData.Header.Chunks[SHADER_FILE_CHUNK_MATERIAL_PARAMS] = paramsChunk->Clone(); + + // Compile shader for the target platform rendering devices + return ProcessShaderBase(data, asset); +} + +bool ProcessShader(CookAssetsStep::AssetCookData& data) +{ + auto asset = static_cast(data.Asset); + + // Load source code + if (asset->LoadChunks(GET_CHUNK_FLAG(SHADER_FILE_CHUNK_SOURCE))) + return true; + + // Compile shader for the target platform rendering devices + return ProcessShaderBase(data, asset); +} + +bool ProcessParticleEmitter(CookAssetsStep::AssetCookData& data) +{ + auto asset = static_cast(data.Asset); + + // Particle Emitter is loaded so it has valid source code generated from the Visject Surface. + // ParticleEmitter::load performs any required upgrading and conversions. + + // Load surface, material params and source code + if (asset->LoadChunks(GET_CHUNK_FLAG(SHADER_FILE_CHUNK_VISJECT_SURFACE) | GET_CHUNK_FLAG(SHADER_FILE_CHUNK_MATERIAL_PARAMS) | GET_CHUNK_FLAG(SHADER_FILE_CHUNK_SOURCE))) + return true; + + // Copy surface data + const auto surfaceChunk = asset->GetChunk(SHADER_FILE_CHUNK_VISJECT_SURFACE); + if (surfaceChunk) + data.InitData.Header.Chunks[SHADER_FILE_CHUNK_VISJECT_SURFACE] = surfaceChunk->Clone(); + + // Skip cooking shader if it's not using GPU particles + const auto sourceChunk = asset->GetChunk(SHADER_FILE_CHUNK_SOURCE); + if (sourceChunk == nullptr || asset->SimulationMode == ParticlesSimulationMode::CPU) + return false; + + // Copy material params data + const auto paramsChunk = asset->GetChunk(SHADER_FILE_CHUNK_MATERIAL_PARAMS); + if (paramsChunk) + data.InitData.Header.Chunks[SHADER_FILE_CHUNK_MATERIAL_PARAMS] = paramsChunk->Clone(); + + // Compile shader for the target platform rendering devices + return ProcessShaderBase(data, asset); +} + +bool ProcessTextureBase(CookAssetsStep::AssetCookData& data) +{ + const auto asset = static_cast(data.Asset); + + // Check if target platform doesn't support the texture format + const auto format = asset->Format(); + const auto targetFormat = data.Data.Tools->GetTextureFormat(data.Data, asset, format); + if (format != targetFormat) + { + // Extract texture data from the asset + TextureData textureData; + auto assetLock = asset->LockData(); + if (asset->GetTextureData(textureData, false)) + { + LOG(Error, "Failed to load data from texture {0}", asset->ToString()); + return true; + } + + // Convert texture data to the target format + TextureData targetTextureData; + if (TextureTool::Convert(targetTextureData, textureData, targetFormat)) + { + LOG(Error, "Failed to convert texture {0} from format {1} to {2}", asset->ToString(), (int32)format, (int32)targetFormat); + return true; + } + + // Adjust texture header + auto& header = *(TextureHeader*)data.InitData.CustomData.Get(); + header.Width = targetTextureData.Width; + header.Height = targetTextureData.Height; + header.Format = targetTextureData.Format; + header.MipLevels = targetTextureData.GetMipLevels(); + + // Serialize texture data into the asset chunks + for (int32 mipIndex = 0; mipIndex < targetTextureData.GetMipLevels(); mipIndex++) + { + auto chunk = New(); + data.InitData.Header.Chunks[mipIndex] = chunk; + + // Calculate the texture data storage layout + uint32 rowPitch, slicePitch; + const int32 mipWidth = Math::Max(1, targetTextureData.Width >> mipIndex); + const int32 mipHeight = Math::Max(1, targetTextureData.Height >> mipIndex); + RenderTools::ComputePitch(targetTextureData.Format, mipWidth, mipHeight, rowPitch, slicePitch); + chunk->Data.Allocate(slicePitch * targetTextureData.GetArraySize()); + + // Copy array slices into mip data (sequential) + for (int32 arrayIndex = 0; arrayIndex < targetTextureData.Items.Count(); arrayIndex++) + { + auto& mipData = targetTextureData.Items[arrayIndex].Mips[mipIndex]; + byte* src = mipData.Data.Get(); + byte* dst = chunk->Data.Get() + (slicePitch * arrayIndex); + + // Faster path if source and destination data layout matches + if (rowPitch == mipData.RowPitch && slicePitch == mipData.DepthPitch) + { + Platform::MemoryCopy(dst, src, slicePitch); + } + else + { + const auto copyRowSize = Math::Min(mipData.RowPitch, rowPitch); + for (uint32 line = 0; line < mipData.Lines; line++) + { + Platform::MemoryCopy(dst, src, copyRowSize); + src += mipData.RowPitch; + dst += rowPitch; + } + } + } + } + + // Clone any custom asset chunks (eg. sprite atlas data, mips are in 0-13 chunks) + for (int32 i = 14; i < ASSET_FILE_DATA_CHUNKS; i++) + { + const auto chunk = asset->GetChunk(i); + if (chunk != nullptr && chunk->IsMissing() && chunk->ExistsInFile()) + { + if (asset->Storage->LoadAssetChunk(chunk)) + return true; + data.InitData.Header.Chunks[i] = chunk->Clone(); + } + } + + return false; + } + + // Fallback to the default asset processing + return CookAssetsStep::ProcessDefaultAsset(data); +} + +CookAssetsStep::CookAssetsStep() + : AssetsRegistry(1024) + , AssetPathsMapping(256) +{ + AssetProcessors.Add(Material::TypeName, ProcessMaterial); + AssetProcessors.Add(Shader::TypeName, ProcessShader); + AssetProcessors.Add(ParticleEmitter::TypeName, ProcessParticleEmitter); + AssetProcessors.Add(Texture::TypeName, ProcessTextureBase); + AssetProcessors.Add(CubeTexture::TypeName, ProcessTextureBase); + AssetProcessors.Add(SpriteAtlas::TypeName, ProcessTextureBase); +} + +bool CookAssetsStep::Process(CookingData& data, CacheData& cache, BinaryAsset* asset) +{ + ASSERT(asset->IsLoaded() && asset->Storage != nullptr); + FileDependenciesList fileDependencies; + + // Prepare asset data + AssetInitData initData; + if (asset->Storage->LoadAssetHeader(asset->GetID(), initData)) + return true; + initData.Header.UnlinkChunks(); + initData.Metadata.Release(); + for (auto& e : initData.Dependencies) + { + AssetInfo info; + if (Content::GetAssetInfo(e.First, info)) + { + fileDependencies.Add(ToPair(info.Path, FileSystem::GetFileLastEditTime(info.Path))); + } + } + initData.Dependencies.Resize(0); + + // Lock source asset chunks so they can be reused + auto chunksLock = asset->Storage->LockSafe(); + + // Process asset + ProcessAssetFunc assetProcessor = nullptr; + AssetProcessors.TryGet(asset->GetTypeName(), assetProcessor); + AssetCookData options + { + data, + cache, + initData, + asset, + fileDependencies + }; + if (!assetProcessor) + assetProcessor = ProcessDefaultAsset; + if (assetProcessor(options)) + return true; + + // Save cache + String cachedFilePath; + auto& entry = cache.CreateEntry(asset, cachedFilePath); + entry.FileDependencies = MoveTemp(fileDependencies); + const bool result = FlaxStorage::Create(cachedFilePath, initData); + + // Cleanup allocated data chunks + initData.Header.DeleteChunks(); + + if (result) + { + LOG(Warning, "Failed to save cooked file data."); + return true; + } + return false; +} + +bool CookAssetsStep::Process(CookingData& data, CacheData& cache, JsonAssetBase* asset) +{ + ASSERT(asset->IsLoaded() && asset->Data != nullptr); + FileDependenciesList fileDependencies; + + // Create binary asset header + AssetInitData initData; + initData.SerializedVersion = 1; + initData.Header.ID = asset->GetID(); + initData.Header.TypeName = asset->GetTypeName(); + + // Process asset + ProcessAssetFunc assetProcessor = nullptr; + AssetProcessors.TryGet(asset->GetTypeName(), assetProcessor); + AssetCookData options + { + data, + cache, + initData, + asset, + fileDependencies + }; + if (!assetProcessor) + assetProcessor = ProcessDefaultAsset; + if (assetProcessor(options)) + return true; + + // Save cache + String cachedFilePath; + auto& entry = cache.CreateEntry(asset, cachedFilePath); + entry.FileDependencies = MoveTemp(fileDependencies); + const bool result = FlaxStorage::Create(cachedFilePath, initData); + + // Cleanup allocated data chunks + initData.Header.DeleteChunks(); + + if (result) + { + LOG(Warning, "Failed to save cooked file data."); + return true; + } + return false; +} + +/// +/// Helper utility to build a package of set of assets (using limits parameters). +/// +class PackageBuilder : public NonCopyable +{ +private: + + int32 _packageIndex; + int32 MaxAssetsPerPackage; + int32 MaxPackageSize; + FlaxStorage::CustomData CustomData; + + Array files; + Array addedEntries; + uint64 bytesAdded; + + uint64 packagesSizeTotal; + +public: + + /// + /// Initializes a new instance of the class. + /// + /// The maximum assets per package. + /// The maximum package size in MB. + /// The content keycode. + PackageBuilder(int32 maxAssetsPerPackage, int32 maxPackageSizeMB, int32 contentKey) + : _packageIndex(0) + , MaxAssetsPerPackage(maxAssetsPerPackage) + , MaxPackageSize(maxPackageSizeMB * (1024 * 1024)) + , files(maxAssetsPerPackage) + , addedEntries(maxAssetsPerPackage) + , bytesAdded(0) + , packagesSizeTotal(0) + { + Platform::MemoryClear(&CustomData, sizeof(CustomData)); + CustomData.ContentKey = contentKey; + } + + /// + /// Finalizes an instance of the class. + /// + ~PackageBuilder() + { + Reset(); + } + +public: + + uint64 GetPackagesSizeTotal() const + { + return packagesSizeTotal; + } + + void Reset() + { + for (int32 i = 0; i < files.Count(); i++) + { + files[i]->Dispose(); + Delete(files[i]); + } + files.Clear(); + addedEntries.Clear(); + bytesAdded = 0; + _packageIndex++; + } + + bool Add(CookingData& data, AssetsCache::Entry& entry, const String& sourcePath) + { + const uint64 size = FileSystem::GetFileSize(sourcePath); + + // Check if this will step out of the limit + if (addedEntries.Count() + 1 > MaxAssetsPerPackage || (bytesAdded + size) > MaxPackageSize) + { + if (Package(data)) + return true; + } + + // Add + addedEntries.Add(&entry); + bytesAdded += size; + + // Gather the asset to package it later + auto file = New(sourcePath); + if (file->Load()) + { + Delete(file); + data.Error(TEXT("Failed to load cooked asset.")); + return true; + } + files.Add(file); + + return false; + } + + bool Package(CookingData& data) + { + // Skip if has no assets has been added + const int32 count = addedEntries.Count(); + if (count == 0) + return false; + + // Get assets init data and load all chunks + Array assetsData; + assetsData.Resize(count); + for (int32 i = 0; i < count; i++) + { + if (files[i]->LoadAssetHeader(0, assetsData[i])) + { + data.Error(TEXT("Failed to load asset header data.")); + return true; + } + for (int32 j = 0; j < ASSET_FILE_DATA_CHUNKS; j++) + { + const auto chunk = assetsData[i].Header.Chunks[j]; + if (chunk) + { + if (files[i]->LoadAssetChunk(chunk)) + { + data.Error(TEXT("Failed to load asset data.")); + return true; + } + } + } + } + + // Create package + // Note: FlaxStorage::Create overrides chunks locations in file so don't use files anymore (only readonly) + const String localPath = String::Format(TEXT("Content/Data_{0}.{1}"), _packageIndex, PACKAGE_FILES_EXTENSION); + const String path = data.OutputPath / localPath; + if (FlaxStorage::Create(path, assetsData, false, &CustomData)) + { + data.Error(TEXT("Failed to create assets package.")); + return true; + } + + // Link storage info to all packaged assets + for (int32 i = 0; i < count; i++) + { + addedEntries[i]->Info.Path = localPath; + } + + packagesSizeTotal += FileSystem::GetFileSize(path); + + Reset(); + + return false; + } +}; + +bool CookAssetsStep::Perform(CookingData& data) +{ + float Step1ProgressStart = 0.1f; + float Step1ProgressEnd = 0.6f; + String Step1Info = TEXT("Cooking assets"); + float Step2ProgressStart = Step1ProgressEnd; + float Step2ProgressEnd = 0.9f; + String Step2Info = TEXT("Packaging assets"); + + data.StepProgress(TEXT("Loading build cache"), 0); + + // Prepare + const auto buildSettings = BuildSettings::Instance(); + const int32 contentKey = buildSettings->ContentKey == 0 ? rand() : buildSettings->ContentKey; + AssetsRegistry.Clear(); + AssetPathsMapping.Clear(); + + // Load incremental build cache + CacheData cache; + cache.Load(data); + + // Update build settings + { + const auto settings = WindowsPlatformSettings::Instance(); + cache.Settings.Windows.SupportDX11 = settings->SupportDX11; + cache.Settings.Windows.SupportDX10 = settings->SupportDX10; + cache.Settings.Windows.SupportVulkan = settings->SupportVulkan; + } + { + const auto settings = UWPPlatformSettings::Instance(); + cache.Settings.UWP.SupportDX11 = settings->SupportDX11; + cache.Settings.UWP.SupportDX10 = settings->SupportDX10; + } + { + const auto settings = LinuxPlatformSettings::Instance(); + cache.Settings.Linux.SupportVulkan = settings->SupportVulkan; + } + { + const auto buildSettings = BuildSettings::Instance(); + cache.Settings.Global.ShadersNoOptimize = buildSettings->ShadersNoOptimize; + cache.Settings.Global.ShadersGenerateDebugData = buildSettings->ShadersGenerateDebugData; + } + + // Note: this step converts all the assets (even the json) into the binary files (FlaxStorage format). + // Then files cooked files are packed into the packages. + + // Process all assets + AssetInfo assetInfo; +#if ENABLE_ASSETS_DISCOVERY + auto minDateTime = DateTime::MinValue(); +#endif + int32 subStepIndex = 0; + for (auto i = data.Assets.Begin(); i.IsNotEnd(); ++i) + { + BUILD_STEP_CANCEL_CHECK; + + data.StepProgress(Step1Info, Math::Lerp(Step1ProgressStart, Step1ProgressEnd, static_cast(subStepIndex++) / data.Assets.Count())); + const Guid assetId = i->Item; + + // Register asset + auto& e = AssetsRegistry[assetId]; + e.Info.ID = assetId; +#if ENABLE_ASSETS_DISCOVERY + e.FileModified = minDateTime; +#endif + + // Check if asset is in cooking cache and was not modified since last build + const auto cachedEntry = cache.Entries.TryGet(assetId); + if (cachedEntry) + { + ASSERT(cachedEntry->ID == assetId); + + // Get actual asset info + if (Content::GetAssetInfo(assetId, assetInfo)) + { + // Ensure that cached entry is valid + if (cachedEntry->TypeName == assetInfo.TypeName) + { + // Check if file hasn't been modified + if (FileSystem::GetFileLastEditTime(assetInfo.Path) <= cachedEntry->FileModified) + { + // Check all dependant files + bool isValid = true; + for (auto& f : cachedEntry->FileDependencies) + { + if (FileSystem::GetFileLastEditTime(f.First) > f.Second) + { + isValid = false; + break; + } + } + + if (isValid) + { + // Cache hit! + e.Info.TypeName = assetInfo.TypeName; + continue; + } + } + } + else + { + // Remove invalid entry + cache.Entries.Remove(assetId); + } + } + } + + // Load asset (and keep ref) + AssetReference ref = Content::LoadAsync(assetId); + if (ref == nullptr) + { + data.Error(TEXT("Failed to load asset included in build.")); + return true; + } + e.Info.TypeName = ref->GetTypeName(); + + // Cook asset + if (Process(data, cache, ref.Get())) + return true; + data.Stats.CookedAssets++; + + // Auto save build cache after every few cooked assets (reduces next build time if cooking fails later) + if (data.Stats.CookedAssets % 50 == 0) + { + cache.Save(); + } + } + + // Save build cache header + cache.Save(); + + // Create build game header + { + GameHeaderFlags gameFlags = GameHeaderFlags::None; + if (!GameSettings::NoSplashScreen) + gameFlags |= GameHeaderFlags::ShowSplashScreen; + + // Open file + auto stream = FileWriteStream::Open(data.OutputPath / TEXT("Content/head")); + if (stream == nullptr) + { + data.Error(TEXT("Failed to create game data file.")); + return true; + } + + stream->WriteInt32(('x' + 'D') * 131); // think about it as '131 times xD' + + stream->WriteInt32(FLAXENGINE_VERSION_BUILD); + + Array bytes; + bytes.Resize(808 + sizeof(Guid)); + Platform::MemoryClear(bytes.Get(), bytes.Count()); + int32 length = sizeof(Char) * GameSettings::ProductName.Length(); + Platform::MemoryCopy(bytes.Get() + 0, GameSettings::ProductName.Get(), length); + bytes[length] = 0; + bytes[length + 1] = 0; + length = sizeof(Char) * GameSettings::CompanyName.Length(); + Platform::MemoryCopy(bytes.Get() + 400, GameSettings::CompanyName.Get(), length); + bytes[length + 400] = 0; + bytes[length + 401] = 0; + *(int32*)(bytes.Get() + 800) = (int32)gameFlags; + *(int32*)(bytes.Get() + 804) = contentKey; + *(Guid*)(bytes.Get() + 808) = GameSettings::SplashScreen; + Encryption::EncryptBytes(bytes.Get(), bytes.Count()); + stream->WriteArray(bytes); + + Delete(stream); + } + + // Package all registered assets into packages + { + PackageBuilder packageBuilder(buildSettings->MaxAssetsPerPackage, buildSettings->MaxPackageSizeMB, contentKey); + + subStepIndex = 0; + for (auto i = AssetsRegistry.Begin(); i.IsNotEnd(); ++i) + { + BUILD_STEP_CANCEL_CHECK; + + data.StepProgress(Step2Info, Math::Lerp(Step2ProgressStart, Step2ProgressEnd, static_cast(subStepIndex++) / AssetsRegistry.Count())); + const auto assetId = i->Key; + + String cookedFilePath; + cache.GetFilePath(assetId, cookedFilePath); + + if (!FileSystem::FileExists(cookedFilePath)) + { + LOG(Warning, "Missing cooked file for asset \'{0}\'", assetId); + continue; + } + + auto& assetStats = data.Stats.AssetStats[i->Value.Info.TypeName]; + assetStats.Count++; + assetStats.ContentSize += FileSystem::GetFileSize(cookedFilePath); + + if (packageBuilder.Add(data, i->Value, cookedFilePath)) + return true; + } + if (packageBuilder.Package(data)) + return true; + for (auto& e : data.Stats.AssetStats) + e.Value.TypeName = e.Key; + data.Stats.ContentSizeMB = static_cast(packageBuilder.GetPackagesSizeTotal() / (1024 * 1024)); + } + + BUILD_STEP_CANCEL_CHECK; + + data.StepProgress(TEXT("Creating assets cache"), Step2ProgressEnd); + + // Create asset paths mapping for the root assets. + // Assets mapping is use to convert paths used in Content::Load(path) into the asset id. + // It fixes the issues when in build game all assets are in the packages while engine parts are requesting in-build assets by name. + // E.g. game settings are loaded from `Content/GameSettings.json` file which is packages in one of the packages. + // Additionally it improves the in-build assets loading performance. + for (auto i = data.RootAssets.Begin(); i.IsNotEnd(); ++i) + { + if (Content::GetAssetInfo(i->Item, assetInfo)) + { + // Use local path relative to the game dir (assets cache is converting them to absolute paths because RelativePaths flag is set) + String localPath; + if (assetInfo.Path.StartsWith(Globals::StartupFolder)) + localPath = assetInfo.Path.Right(assetInfo.Path.Length() - Globals::StartupFolder.Length() - 1); + else if (assetInfo.Path.StartsWith(Globals::ProjectFolder)) + localPath = assetInfo.Path.Right(assetInfo.Path.Length() - Globals::ProjectFolder.Length() - 1); + else + localPath = assetInfo.Path; + AssetPathsMapping[localPath] = assetInfo.ID; + } + } + + BUILD_STEP_CANCEL_CHECK; + + // Save assets cache + if (AssetsCache::Save(data.OutputPath / TEXT("Content/AssetsCache.dat"), AssetsRegistry, AssetPathsMapping, AssetsCacheFlags::RelativePaths)) + { + data.Error(TEXT("Failed to create assets registry.")); + return true; + } + + // Print stats + LOG(Info, "Cooked {0} assets, total assets: {1}, total content packages size: {2} MB", data.Stats.CookedAssets, AssetsRegistry.Count(), data.Stats.ContentSizeMB); + { + Array assetTypes; + data.Stats.AssetStats.GetValues(assetTypes); + Sorting::QuickSort(assetTypes.Get(), assetTypes.Count()); + + LOG(Info, ""); + LOG(Info, "Top assets types stats:"); + for (int32 i = 0; i < 10 && i < assetTypes.Count(); i++) + { + auto& e = assetTypes[i]; + String typeName; + const int32 MinLength = 35; + const int32 lengthDiff = MinLength - e.TypeName.Length(); + if (lengthDiff > 0) + { + typeName.ReserveSpace(MinLength); + for (int32 j = 0; j < e.TypeName.Length(); j++) + typeName[j] = e.TypeName[j]; + for (int32 j = 0; j < lengthDiff; j++) + typeName[j + e.TypeName.Length()] = ' '; + } + else + { + typeName = e.TypeName; + } + LOG(Info, "{0}: {1:>4} assets of total size {2}", typeName, e.Count, Utilities::BytesToText(e.ContentSize)); + } + LOG(Info, ""); + } + + return false; +} diff --git a/Source/Editor/Cooker/Steps/CookAssetsStep.h b/Source/Editor/Cooker/Steps/CookAssetsStep.h new file mode 100644 index 000000000..9a153723a --- /dev/null +++ b/Source/Editor/Cooker/Steps/CookAssetsStep.h @@ -0,0 +1,187 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" +#include "Engine/Core/Types/Pair.h" +#include "Engine/Core/Types/DateTime.h" +#include "Engine/Core/Collections/Dictionary.h" +#include "Engine/Content/AssetInfo.h" +#include "Engine/Content/Cache/AssetsCache.h" + +class Asset; +class BinaryAsset; +class JsonAssetBase; +struct AssetInitData; + +/// +/// Cooking step that builds all the assets and packages them to the output directory. +/// Uses incremental build cache to provide faster building. +/// +/// +class FLAXENGINE_API CookAssetsStep : public GameCooker::BuildStep +{ +public: + + typedef Array> FileDependenciesList; + + /// + /// Cached cooked asset entry data. + /// + struct FLAXENGINE_API CacheEntry + { + /// + /// The asset identifier. + /// + Guid ID; + + /// + /// The stored data full typename. Used to recognize asset type. + /// + String TypeName; + + /// + /// The asset file modification time. + /// + DateTime FileModified; + + /// + /// The list of files on which this entry depends on. Cached date is the last edit time used to discard cache result on modification. + /// + FileDependenciesList FileDependencies; + }; + + /// + /// Assets cooking cache data (incremental building feature). + /// + struct FLAXENGINE_API CacheData + { + /// + /// The cache header file path. + /// + String HeaderFilePath; + + /// + /// The cached files folder. + /// + String CacheFolder; + + /// + /// The build options used to cook assets. Changing some options in game settings might trigger cached assets invalidation. + /// + struct + { + struct + { + bool SupportDX11; + bool SupportDX10; + bool SupportVulkan; + } Windows; + + struct + { + bool SupportDX11; + bool SupportDX10; + } UWP; + + struct + { + bool SupportVulkan; + } Linux; + + struct + { + bool ShadersNoOptimize; + bool ShadersGenerateDebugData; + } Global; + } Settings; + + /// + /// The cached entries. + /// + Dictionary Entries; + + public: + + /// + /// Gets the path to the asset of the given id (file may be missing). + /// + /// The asset id. + /// The cached file path to use for creating cache storage. + void GetFilePath(const Guid& id, String& cachedFilePath) const + { + cachedFilePath = CacheFolder / id.ToString(Guid::FormatType::N); + } + + /// + /// Creates the new entry for the cooked asset file. + /// + /// The asset. + /// The cached file path to use for creating cache storage. + /// The added entry reference. + CacheEntry& CreateEntry(const JsonAssetBase* asset, String& cachedFilePath); + + /// + /// Creates the new entry for the cooked asset file. + /// + /// The asset. + /// The cached file path to use for creating cache storage. + /// The added entry reference. + CacheEntry& CreateEntry(const Asset* asset, String& cachedFilePath); + + /// + /// Removes all cached entries for assets that contain a shader. This forces rebuild for them. + /// + void InvalidateShaders(); + + /// + /// Loads the cache for the given cooking data. + /// + /// The data. + void Load(CookingData& data); + + /// + /// Saves this cache (header file). + /// + void Save(); + }; + + struct FLAXENGINE_API AssetCookData + { + CookingData& Data; + CacheData& Cache; + AssetInitData& InitData; + Asset* Asset; + FileDependenciesList& FileDependencies; + }; + + typedef bool (*ProcessAssetFunc)(AssetCookData&); + + /// + /// The asset processors (key: asset full typename, value: processor function that cooks the asset). + /// + static Dictionary AssetProcessors; + + static bool ProcessDefaultAsset(AssetCookData& options); + +private: + + AssetsCache::Registry AssetsRegistry; + AssetsCache::PathsMapping AssetPathsMapping; + + bool Process(CookingData& data, CacheData& cache, Asset* asset); + bool Process(CookingData& data, CacheData& cache, BinaryAsset* asset); + bool Process(CookingData& data, CacheData& cache, JsonAssetBase* asset); + +public: + + /// + /// Initializes a new instance of the class. + /// + CookAssetsStep(); + +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/Cooker/Steps/DeployDataStep.cpp b/Source/Editor/Cooker/Steps/DeployDataStep.cpp new file mode 100644 index 000000000..97c50029b --- /dev/null +++ b/Source/Editor/Cooker/Steps/DeployDataStep.cpp @@ -0,0 +1,120 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "DeployDataStep.h" +#include "Engine/Platform/FileSystem.h" +#include "Editor/Cooker/PlatformTools.h" +#include "Engine/Core/Config/BuildSettings.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Engine/Renderer/ReflectionsPass.h" +#include "Engine/Renderer/AntiAliasing/SMAA.h" + +bool DeployDataStep::Perform(CookingData& data) +{ + data.StepProgress(TEXT("Deploying engine data"), 0); + const String depsRoot = data.GetPlatformBinariesRoot(); + + // Setup output folders and copy required data + const auto contentDir = data.OutputPath / TEXT("Content"); + if (FileSystem::DirectoryExists(contentDir)) + { + // Remove old content files + FileSystem::DeleteDirectory(contentDir, true); + + // Give some time for Explorer (if location was viewed) + Platform::Sleep(10); + } + FileSystem::CreateDirectory(contentDir); + const auto srcMono = depsRoot / TEXT("Mono"); + const auto dstMono = data.OutputPath / TEXT("Mono"); + if (!FileSystem::DirectoryExists(dstMono)) + { + if (!FileSystem::DirectoryExists(srcMono)) + { + data.Error(TEXT("Missing Mono runtime data files.")); + return true; + } + + if (FileSystem::CopyDirectory(dstMono, srcMono, true)) + { + data.Error(TEXT("Failed to copy Mono runtime data files.")); + return true; + } + } + + // Deploy engine data for the target platform + if (data.Tools->OnDeployBinaries(data)) + return true; + + // Register engine in-build assets + data.AddRootEngineAsset(TEXT("Shaders/AtmospherePreCompute")); + data.AddRootEngineAsset(TEXT("Shaders/ColorGrading")); + data.AddRootEngineAsset(TEXT("Shaders/DebugDraw")); + data.AddRootEngineAsset(TEXT("Shaders/DepthOfField")); + data.AddRootEngineAsset(TEXT("Shaders/EyeAdaptation")); + data.AddRootEngineAsset(TEXT("Shaders/Fog")); + data.AddRootEngineAsset(TEXT("Shaders/Forward")); + data.AddRootEngineAsset(TEXT("Shaders/FXAA")); + data.AddRootEngineAsset(TEXT("Shaders/TAA")); + data.AddRootEngineAsset(TEXT("Shaders/SMAA")); + data.AddRootEngineAsset(TEXT("Shaders/GBuffer")); + data.AddRootEngineAsset(TEXT("Shaders/GUI")); + data.AddRootEngineAsset(TEXT("Shaders/Histogram")); + data.AddRootEngineAsset(TEXT("Shaders/Lights")); + data.AddRootEngineAsset(TEXT("Shaders/MultiScaler")); + data.AddRootEngineAsset(TEXT("Shaders/PostProcessing")); + data.AddRootEngineAsset(TEXT("Shaders/MotionBlur")); + data.AddRootEngineAsset(TEXT("Shaders/BitonicSort")); + data.AddRootEngineAsset(TEXT("Shaders/GPUParticlesSorting")); + data.AddRootEngineAsset(TEXT("Shaders/Quad")); + data.AddRootEngineAsset(TEXT("Shaders/Reflections")); + data.AddRootEngineAsset(TEXT("Shaders/Shadows")); + data.AddRootEngineAsset(TEXT("Shaders/Sky")); + data.AddRootEngineAsset(TEXT("Shaders/SSAO")); + data.AddRootEngineAsset(TEXT("Shaders/SSR")); + data.AddRootEngineAsset(TEXT("Shaders/VolumetricFog")); + data.AddRootEngineAsset(TEXT("Engine/DefaultMaterial")); + data.AddRootEngineAsset(TEXT("Engine/DefaultTerrainMaterial")); + if (!GameSettings::NoSplashScreen && !GameSettings::SplashScreen.IsValid()) + data.AddRootEngineAsset(TEXT("Engine/Textures/Logo")); + data.AddRootEngineAsset(TEXT("Engine/Textures/NormalTexture")); + data.AddRootEngineAsset(TEXT("Engine/Textures/BlackTexture")); + data.AddRootEngineAsset(TEXT("Engine/Textures/WhiteTexture")); + data.AddRootEngineAsset(TEXT("Engine/Textures/DefaultLensStarburst")); + data.AddRootEngineAsset(TEXT("Engine/Textures/DefaultLensColor")); + data.AddRootEngineAsset(TEXT("Engine/Textures/DefaultLensDirt")); + data.AddRootEngineAsset(TEXT("Engine/Textures/Bokeh/Circle")); + data.AddRootEngineAsset(TEXT("Engine/Textures/Bokeh/Hexagon")); + data.AddRootEngineAsset(TEXT("Engine/Textures/Bokeh/Octagon")); + data.AddRootEngineAsset(TEXT("Engine/Textures/Bokeh/Cross")); + data.AddRootEngineAsset(TEXT("Engine/Models/Sphere")); + data.AddRootEngineAsset(TEXT("Engine/Models/SphereLowPoly")); + data.AddRootEngineAsset(TEXT("Engine/Models/Box")); + data.AddRootEngineAsset(TEXT("Engine/Models/SimpleBox")); + data.AddRootEngineAsset(TEXT("Engine/Models/Quad")); + data.AddRootEngineAsset(TEXT("Engine/SkyboxMaterial")); + data.AddRootEngineAsset(PRE_INTEGRATED_GF_ASSET_NAME); + data.AddRootEngineAsset(SMAA_AREA_TEX); + data.AddRootEngineAsset(SMAA_SEARCH_TEX); + + // Register game assets + data.StepProgress(TEXT("Deploying game data"), 50); + auto& buildSettings = *BuildSettings::Instance(); + for (auto& e : buildSettings.AdditionalAssets) + data.AddRootAsset(e.GetID()); + Array files; + for (auto& e : buildSettings.AdditionalAssetFolders) + { + String path = FileSystem::ConvertRelativePathToAbsolute(Globals::ProjectFolder, e); + if (FileSystem::DirectoryGetFiles(files, path, TEXT("*"), DirectorySearchOption::AllDirectories)) + { + data.Error(TEXT("Failed to find additional assets to deploy.")); + return true; + } + + for (auto& q : files) + data.AddRootAsset(q); + files.Clear(); + } + + return false; +} diff --git a/Source/Editor/Cooker/Steps/DeployDataStep.h b/Source/Editor/Cooker/Steps/DeployDataStep.h new file mode 100644 index 000000000..23b22adf8 --- /dev/null +++ b/Source/Editor/Cooker/Steps/DeployDataStep.h @@ -0,0 +1,17 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" + +/// +/// Engine and game content and data files deployment step. +/// +/// +class DeployDataStep : public GameCooker::BuildStep +{ +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/Cooker/Steps/PostProcessStep.cpp b/Source/Editor/Cooker/Steps/PostProcessStep.cpp new file mode 100644 index 000000000..0f356e2a6 --- /dev/null +++ b/Source/Editor/Cooker/Steps/PostProcessStep.cpp @@ -0,0 +1,9 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "PostProcessStep.h" +#include "Editor/Cooker/PlatformTools.h" + +bool PostProcessStep::Perform(CookingData& data) +{ + return data.Tools->OnPostProcess(data); +} diff --git a/Source/Editor/Cooker/Steps/PostProcessStep.h b/Source/Editor/Cooker/Steps/PostProcessStep.h new file mode 100644 index 000000000..738508880 --- /dev/null +++ b/Source/Editor/Cooker/Steps/PostProcessStep.h @@ -0,0 +1,17 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" + +/// +/// Final cooking step that can perform custom set of actions on generated game data. +/// +/// +class PostProcessStep : public GameCooker::BuildStep +{ +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp b/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp new file mode 100644 index 000000000..a37e96216 --- /dev/null +++ b/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.cpp @@ -0,0 +1,78 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "PrecompileAssembliesStep.h" +#include "Editor/Scripting/ScriptsBuilder.h" +#include "Engine/Platform/FileSystem.h" +#include "Editor/Cooker/PlatformTools.h" + +bool PrecompileAssembliesStep::Perform(CookingData& data) +{ + // Skip for some platforms + if (!data.Tools->UseAOT()) + return false; + LOG(Info, "Using AOT..."); + + // Useful references about AOT: + // http://www.mono-project.com/docs/advanced/runtime/docs/aot/ + // http://www.mono-project.com/docs/advanced/aot/ + + const String infoMsg = TEXT("Running AOT"); + data.StepProgress(infoMsg, 0); + + // Setup + PlatformTools::AotConfig config(data); + data.Tools->OnConfigureAOT(data, config); + + // Prepare output directory + config.AotCachePath = data.OutputPath / TEXT("Mono/lib/mono/aot-cache"); + switch (data.Tools->GetArchitecture()) + { + case ArchitectureType::x86: + config.AotCachePath /= TEXT("x86"); + break; + case ArchitectureType::x64: + config.AotCachePath /= TEXT("amd64"); + break; + default: + data.Error(TEXT("Not supported AOT architecture")); + return true; + } + if (!FileSystem::DirectoryExists(config.AotCachePath)) + { + if (FileSystem::CreateDirectory(config.AotCachePath)) + { + data.Error(TEXT("Failed to setup AOT output directory.")); + return true; + } + } + + // Collect assemblies for AOT + // TODO: don't perform AOT on all assemblies but only ones used by the game and engine assemblies + for (auto& dir : config.AssembliesSearchDirs) + FileSystem::DirectoryGetFiles(config.Assemblies, dir, TEXT("*.dll"), DirectorySearchOption::TopDirectoryOnly); + for (auto& binaryModule : data.BinaryModules) + if (binaryModule.ManagedPath.HasChars()) + config.Assemblies.Add(data.OutputPath / binaryModule.ManagedPath); + // TODO: move AOT to Flax.Build and perform it on all C# assemblies used in target build + config.Assemblies.Add(data.OutputPath / TEXT("Newtonsoft.Json.dll")); + + // Perform AOT for the assemblies + for (int32 i = 0; i < config.Assemblies.Count(); i++) + { + BUILD_STEP_CANCEL_CHECK; + + if (data.Tools->OnPerformAOT(data, config, config.Assemblies[i])) + return true; + + data.StepProgress(infoMsg, static_cast(i) / config.Assemblies.Count()); + } + + BUILD_STEP_CANCEL_CHECK; + + if (data.Tools->OnPostProcessAOT(data, config)) + return true; + + // TODO: maybe remove GAC/assemblies? aot-cache could be only used in the build game + + return false; +} diff --git a/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.h b/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.h new file mode 100644 index 000000000..91af5b0b0 --- /dev/null +++ b/Source/Editor/Cooker/Steps/PrecompileAssembliesStep.h @@ -0,0 +1,18 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" + +/// +/// Optional step used only on selected platform that precompiles C# script assemblies. +/// Uses Mono Ahead of Time Compilation (AOT) feature. +/// +/// +class PrecompileAssembliesStep : public GameCooker::BuildStep +{ +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/Cooker/Steps/ValidateStep.cpp b/Source/Editor/Cooker/Steps/ValidateStep.cpp new file mode 100644 index 000000000..9bb2ada9f --- /dev/null +++ b/Source/Editor/Cooker/Steps/ValidateStep.cpp @@ -0,0 +1,73 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "ValidateStep.h" +#include "Engine/Core/Config/GameSettings.h" +#include "Engine/Content/Content.h" +#include "Engine/Engine/Globals.h" +#include "Engine/Platform/FileSystem.h" + +bool ValidateStep::Perform(CookingData& data) +{ + data.StepProgress(TEXT("Performing validation"), 0); + + // Ensure output and cache directories exist + if (!FileSystem::DirectoryExists(data.OutputPath)) + { + if (FileSystem::CreateDirectory(data.OutputPath)) + { + data.Error(TEXT("Failed to create build output directory.")); + return true; + } + } + if (!FileSystem::DirectoryExists(data.CacheDirectory)) + { + if (FileSystem::CreateDirectory(data.CacheDirectory)) + { + data.Error(TEXT("Failed to create build cache directory.")); + return true; + } + } + +#if OFFICIAL_BUILD + // Validate that platform data is installed + if (!FileSystem::DirectoryExists(data.GetGameBinariesPath())) + { + data.Error(TEXT("Missing platform data tools for the target platform. Use Flax Launcher and download the required package.")); + return true; + } +#endif + + // Load game settings (may be modified via editor) + GameSettings::Load(); + data.AddRootAsset(Globals::ProjectContentFolder / TEXT("GameSettings.json")); + + // Validate game settings + { + if (GameSettings::ProductName.IsEmpty()) + { + data.Error(TEXT("Missing product name.")); + return true; + } + + if (GameSettings::CompanyName.IsEmpty()) + { + data.Error(TEXT("Missing company name.")); + return true; + } + + // TODO: validate version + + AssetInfo info; + if (!Content::GetAssetInfo(GameSettings::FirstScene, info)) + { + data.Error(TEXT("Missing first scene.")); + return true; + } + } + + // TODO: validate more game config + + // TODO: validate all input scenes? + + return false; +} diff --git a/Source/Editor/Cooker/Steps/ValidateStep.h b/Source/Editor/Cooker/Steps/ValidateStep.h new file mode 100644 index 000000000..cb926cef8 --- /dev/null +++ b/Source/Editor/Cooker/Steps/ValidateStep.h @@ -0,0 +1,17 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Editor/Cooker/GameCooker.h" + +/// +/// Project data validation step. Ensures that game cooking can be started. +/// +/// +class ValidateStep : public GameCooker::BuildStep +{ +public: + + // [BuildStep] + bool Perform(CookingData& data) override; +}; diff --git a/Source/Editor/CustomEditorWindow.cs b/Source/Editor/CustomEditorWindow.cs new file mode 100644 index 000000000..371bfbaaa --- /dev/null +++ b/Source/Editor/CustomEditorWindow.cs @@ -0,0 +1,102 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEditor.CustomEditors; +using FlaxEditor.Windows; +using FlaxEngine.GUI; +using FlaxEngine; +using DockState = FlaxEditor.GUI.Docking.DockState; + +namespace FlaxEditor +{ + /// + /// Base class for custom editor window that can create custom GUI layout and expose various functionalities to the user. + /// + /// + public abstract class CustomEditorWindow : CustomEditor + { + private class Win : EditorWindow + { + private readonly CustomEditorPresenter _presenter; + private CustomEditorWindow _customEditor; + + public Win(CustomEditorWindow customEditor) + : base(Editor.Instance, false, ScrollBars.Vertical) + { + Title = customEditor.GetType().Name; + _customEditor = customEditor; + + _presenter = new CustomEditorPresenter(null); + _presenter.Panel.Parent = this; + + Set(customEditor); + } + + private void Set(CustomEditorWindow value) + { + _customEditor = value; + _presenter.Select(value); + _presenter.OverrideEditor = value; + } + + /// + protected override void OnShow() + { + base.OnShow(); + + _presenter.BuildLayout(); + } + + /// + protected override void OnClose() + { + Set(null); + + base.OnClose(); + } + } + + private readonly Win _win; + + /// + /// Gets the editor window. + /// + public EditorWindow Window => _win; + + /// + /// Initializes a new instance of the class. + /// + protected CustomEditorWindow() + { + _win = new Win(this); + ScriptsBuilder.ScriptsReloadBegin += OnScriptsReloadBegin; + } + + /// + /// Finalizes an instance of the class. + /// + ~CustomEditorWindow() + { + ScriptsBuilder.ScriptsReloadBegin -= OnScriptsReloadBegin; + } + + private void OnScriptsReloadBegin() + { + // Skip if window type is not from game script assembly (eg. plugin code) + var type = GetType(); + if (!FlaxEngine.Scripting.IsTypeFromGameScripts(type)) + return; + + Editor.Instance.Windows.AddToRestore(this); + Window.Close(); + } + + /// + /// Shows the window. + /// + /// Initial window state. + public void Show(DockState state = DockState.Float) + { + _win.Show(state); + } + } +} diff --git a/Source/Editor/CustomEditors/CustomEditor.cs b/Source/Editor/CustomEditors/CustomEditor.cs new file mode 100644 index 000000000..c3b468b56 --- /dev/null +++ b/Source/Editor/CustomEditors/CustomEditor.cs @@ -0,0 +1,746 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Reflection; +using FlaxEditor.CustomEditors.GUI; +using FlaxEditor.Scripting; +using FlaxEngine; +using FlaxEngine.GUI; +using Newtonsoft.Json; +using JsonSerializer = FlaxEngine.Json.JsonSerializer; + +namespace FlaxEditor.CustomEditors +{ + /// + /// Custom editor layout style modes. + /// + [HideInEditor] + public enum DisplayStyle + { + /// + /// Creates a separate group for the editor (drop down element). This is a default value. + /// + Group, + + /// + /// Inlines editor contents into the property area without creating a drop-down group. + /// + Inline, + + /// + /// Inlines editor contents into the parent editor layout. Won;t use property with label name. + /// + InlineIntoParent, + } + + /// + /// Base class for all custom editors used to present object(s) properties. Allows to extend game objects editing with more logic and customization. + /// + [HideInEditor] + public abstract class CustomEditor + { + private LayoutElementsContainer _layout; + private CustomEditorPresenter _presenter; + private CustomEditor _parent; + private readonly List _children = new List(); + private ValueContainer _values; + private bool _isSetBlocked; + private bool _skipChildrenRefresh; + private bool _hasValueDirty; + private bool _rebuildOnRefresh; + private object _valueToSet; + + /// + /// Gets the custom editor style. + /// + public virtual DisplayStyle Style => DisplayStyle.Group; + + /// + /// Gets a value indicating whether single object is selected. + /// + public bool IsSingleObject => _values.IsSingleObject; + + /// + /// Gets a value indicating whether selected objects are different values. + /// + public bool HasDifferentValues => _values.HasDifferentValues; + + /// + /// Gets a value indicating whether selected objects are different types. + /// + public bool HasDifferentTypes => _values.HasDifferentTypes; + + /// + /// Gets the values types array (without duplicates). + /// + public ScriptType[] ValuesTypes => _values.ValuesTypes; + + /// + /// Gets the values. + /// + public ValueContainer Values => _values; + + /// + /// Gets the parent editor. + /// + public CustomEditor ParentEditor => _parent; + + /// + /// Gets the children editors (readonly). + /// + public List ChildrenEditors => _children; + + /// + /// Gets the presenter control. It's the top most part of the Custom Editors layout. + /// + public CustomEditorPresenter Presenter => _presenter; + + /// + /// Gets a value indicating whether setting value is blocked (during refresh). + /// + protected bool IsSetBlocked => _isSetBlocked; + + /// + /// Gets a value indicating whether this editor needs value propagation up (value synchronization when one of the child editors changes value, used by the struct types). + /// + protected virtual bool NeedsValuePropagationUp => Values.HasValueType; + + /// + /// The linked label used to show this custom editor. Can be null if not used (eg. editor is inlined or is using a very customized UI layout). + /// + public PropertyNameLabel LinkedLabel; + + internal virtual void Initialize(CustomEditorPresenter presenter, LayoutElementsContainer layout, ValueContainer values) + { + _layout = layout; + _presenter = presenter; + _values = values; + + var prev = CurrentCustomEditor; + CurrentCustomEditor = this; + + _isSetBlocked = true; + Initialize(layout); + Refresh(); + _isSetBlocked = false; + + CurrentCustomEditor = prev; + } + + internal static CustomEditor CurrentCustomEditor; + + internal void OnChildCreated(CustomEditor child) + { + // Link + _children.Add(child); + child._parent = this; + } + + /// + /// Rebuilds the editor layout. Cleans the whole UI with child elements/editors and then builds new hierarchy. Call it only when necessary. + /// + public void RebuildLayout() + { + // Special case for root objects to run normal layout build + if (_presenter.Selection == Values) + { + _presenter.BuildLayout(); + return; + } + + var values = _values; + var presenter = _presenter; + var layout = _layout; + var control = layout.ContainerControl; + var parent = _parent; + var parentScrollV = (_presenter.Panel.Parent as Panel)?.VScrollBar?.Value ?? -1; + + control.IsLayoutLocked = true; + control.DisposeChildren(); + + layout.ClearLayout(); + Cleanup(); + + _parent = parent; + Initialize(presenter, layout, values); + + control.IsLayoutLocked = false; + control.PerformLayout(); + + // Restore scroll value + if (parentScrollV > -1 && _presenter != null && _presenter.Panel.Parent is Panel panel && panel.VScrollBar != null) + panel.VScrollBar.Value = parentScrollV; + } + + /// + /// Rebuilds the editor layout on editor refresh. Postponed after dirty value gets synced. Call it after to update editor after actual value assign. + /// + public void RebuildLayoutOnRefresh() + { + _rebuildOnRefresh = true; + } + + /// + /// Sets the request to skip the custom editor children refresh during next update. Can be used when editor layout has to be rebuild during the update itself. + /// + public void SkipChildrenRefresh() + { + _skipChildrenRefresh = true; + } + + /// + /// Initializes this editor. + /// + /// The layout builder. + public abstract void Initialize(LayoutElementsContainer layout); + + /// + /// Deinitializes this editor (unbind events and cleanup). + /// + protected virtual void Deinitialize() + { + } + + /// + /// Cleanups this editor resources and child editors. + /// + internal void Cleanup() + { + Deinitialize(); + + for (int i = 0; i < _children.Count; i++) + { + _children[i].Cleanup(); + } + + _children.Clear(); + _presenter = null; + _parent = null; + _hasValueDirty = false; + _valueToSet = null; + _values = null; + _isSetBlocked = false; + _rebuildOnRefresh = false; + LinkedLabel = null; + } + + internal void RefreshRoot() + { + try + { + for (int i = 0; i < _children.Count; i++) + _children[i].RefreshRootChild(); + } + catch (TargetException ex) + { + // This happens when something (from root editor) calls the error. + // Just handle it and rebuild UI. Some parts of the pipeline can report data problems via that exception. + Editor.LogWarning("Exception while updating the root editors"); + Editor.LogWarning(ex); + Presenter.BuildLayoutOnUpdate(); + } + } + + internal void RefreshRootChild() + { + Refresh(); + + for (int i = 0; i < _children.Count; i++) + _children[i].RefreshInternal(); + } + + internal virtual void RefreshInternal() + { + if (_values == null) + return; + + // Check if need to update value + if (_hasValueDirty) + { + // Cleanup (won't retry update in case of exception) + object val = _valueToSet; + _hasValueDirty = false; + _valueToSet = null; + + // Assign value + _values.Set(_parent.Values, val); + + // Propagate values up (eg. when member of structure gets modified, also structure should be updated as a part of the other object) + var obj = _parent; + while (obj._parent != null && !(obj._parent is SyncPointEditor)) // && obj.NeedsValuePropagationUp) + { + obj.Values.Set(obj._parent.Values, obj.Values); + obj = obj._parent; + } + + OnUnDirty(); + } + else + { + // Update values + _values.Refresh(_parent.Values); + } + + // Update itself + _isSetBlocked = true; + Refresh(); + _isSetBlocked = false; + + // Update children + try + { + var childrenCount = _skipChildrenRefresh ? 0 : _children.Count; + for (int i = 0; i < childrenCount; i++) + _children[i].RefreshInternal(); + _skipChildrenRefresh = false; + } + catch (TargetException ex) + { + // This happens when one of the edited objects changes its type. + // Eg. from Label to TextBox, while both types were assigned to the same field of type Control. + // It's valid, just rebuild the child editors and log the warning to keep it tracking. + Editor.LogWarning("Exception while updating the child editors"); + Editor.LogWarning(ex); + RebuildLayoutOnRefresh(); + } + + // Rebuild if flag is set + if (_rebuildOnRefresh) + { + _rebuildOnRefresh = false; + RebuildLayout(); + } + } + + /// + /// Refreshes this editor. + /// + public virtual void Refresh() + { + if (LinkedLabel != null) + { + // Prefab value diff + if (Values.HasReferenceValue) + { + var style = FlaxEngine.GUI.Style.Current; + LinkedLabel.HighlightStripColor = CanRevertReferenceValue ? style.BackgroundSelected * 0.8f : Color.Transparent; + } + // Default value diff + else if (Values.HasDefaultValue) + { + LinkedLabel.HighlightStripColor = CanRevertDefaultValue ? Color.Yellow * 0.8f : Color.Transparent; + } + } + } + + internal void LinkLabel(PropertyNameLabel label) + { + LinkedLabel = label; + } + + private void RevertDiffToDefault(CustomEditor editor) + { + if (editor.ChildrenEditors.Count == 0) + { + // Skip if no change detected + if (!editor.Values.IsDefaultValueModified) + return; + + editor.SetValueToDefault(); + } + else + { + for (int i = 0; i < editor.ChildrenEditors.Count; i++) + { + RevertDiffToDefault(editor.ChildrenEditors[i]); + } + } + } + + /// + /// Gets a value indicating whether this editor can revert the value to default value. + /// + public bool CanRevertDefaultValue + { + get + { + if (!Values.IsDefaultValueModified) + return false; + + // Skip array items (show diff only on a bottom level properties and fields) + if (ParentEditor != null && ParentEditor.Values.Type != ScriptType.Null && ParentEditor.Values.Type.IsArray) + return false; + + return true; + } + } + + /// + /// Reverts the property value to default value (if has). Handles undo. + /// + public void RevertToDefaultValue() + { + if (!Values.HasDefaultValue) + return; + + Editor.Log("Reverting object changes to default"); + + RevertDiffToDefault(this); + } + + /// + /// Updates the default value assigned to the editor's values container. Sends the event down the custom editors hierarchy to propagate the change. + /// + /// + /// Has no effect on editors that don't have default value assigned. + /// + public void RefreshDefaultValue() + { + if (!Values.HasDefaultValue) + return; + + if (ParentEditor?.Values?.HasDefaultValue ?? false) + { + Values.RefreshDefaultValue(ParentEditor.Values.DefaultValue); + } + + for (int i = 0; i < ChildrenEditors.Count; i++) + { + ChildrenEditors[i].RefreshDefaultValue(); + } + } + + /// + /// Clears all the default value of the container in the whole custom editors tree (this container and all children). + /// + public void ClearDefaultValueAll() + { + Values.ClearDefaultValue(); + + for (int i = 0; i < ChildrenEditors.Count; i++) + { + ChildrenEditors[i].ClearDefaultValueAll(); + } + } + + private void RevertDiffToReference(CustomEditor editor) + { + if (editor.ChildrenEditors.Count == 0) + { + // Skip if no change detected + if (!editor.Values.IsReferenceValueModified) + return; + + editor.SetValueToReference(); + } + else + { + for (int i = 0; i < editor.ChildrenEditors.Count; i++) + { + RevertDiffToReference(editor.ChildrenEditors[i]); + } + } + } + + /// + /// Gets a value indicating whether this editor can revert the value to reference value. + /// + public bool CanRevertReferenceValue + { + get + { + if (!Values.IsReferenceValueModified) + return false; + + // Skip array items (show diff only on a bottom level properties and fields) + if (ParentEditor != null && ParentEditor.Values.Type != ScriptType.Null && ParentEditor.Values.Type.IsArray) + return false; + + return true; + } + } + + /// + /// Reverts the property value to reference value (if has). Handles undo. + /// + public void RevertToReferenceValue() + { + if (!Values.HasReferenceValue) + return; + + Editor.Log("Reverting object changes to prefab"); + + RevertDiffToReference(this); + } + + /// + /// Updates the reference value assigned to the editor's values container. Sends the event down the custom editors hierarchy to propagate the change. + /// + /// + /// Has no effect on editors that don't have reference value assigned. + /// + public void RefreshReferenceValue() + { + if (!Values.HasReferenceValue) + return; + + if (ParentEditor?.Values?.HasReferenceValue ?? false) + { + Values.RefreshReferenceValue(ParentEditor.Values.ReferenceValue); + } + + for (int i = 0; i < ChildrenEditors.Count; i++) + { + ChildrenEditors[i].RefreshReferenceValue(); + } + } + + + /// + /// Clears all the reference value of the container in the whole custom editors tree (this container and all children). + /// + public void ClearReferenceValueAll() + { + Values.ClearReferenceValue(); + + for (int i = 0; i < ChildrenEditors.Count; i++) + { + ChildrenEditors[i].ClearReferenceValueAll(); + } + } + + /// + /// Copies the value to the system clipboard. + /// + public void Copy() + { + Editor.Log("Copy custom editor value"); + + try + { + string text; + if (new ScriptType(typeof(FlaxEngine.Object)).IsAssignableFrom(Values.Type)) + { + text = JsonSerializer.GetStringID(Values[0] as FlaxEngine.Object); + } + else + { + text = JsonSerializer.Serialize(Values[0]); + } + + Clipboard.Text = text; + } + catch (Exception ex) + { + Editor.LogWarning(ex); + Editor.LogError("Cannot copy property. See log for more info."); + } + } + + private bool GetClipboardObject(out object result) + { + result = null; + var text = Clipboard.Text; + if (string.IsNullOrEmpty(text)) + return false; + + object obj; + if (new ScriptType(typeof(FlaxEngine.Object)).IsAssignableFrom(Values.Type)) + { + if (text.Length != 32) + return false; + JsonSerializer.ParseID(text, out var id); + obj = FlaxEngine.Object.Find(ref id); + } + else + { + obj = JsonConvert.DeserializeObject(text, TypeUtils.GetType(Values.Type), JsonSerializer.Settings); + } + + if (obj == null || Values.Type.IsInstanceOfType(obj)) + { + result = obj; + return true; + } + + return false; + } + + /// + /// Gets a value indicating whether can paste value from the system clipboard to the property value container. + /// + public bool CanPaste + { + get + { + try + { + return GetClipboardObject(out _); + } + catch + { + return false; + } + } + } + + /// + /// Sets the value from the system clipboard. + /// + public void Paste() + { + Editor.Log("Paste custom editor value"); + + try + { + if (GetClipboardObject(out var obj)) + { + SetValue(obj); + } + } + catch (Exception ex) + { + Editor.LogWarning(ex); + Editor.LogError("Cannot paste property value. See log for more info."); + } + } + + private Actor FindPrefabRoot(CustomEditor editor) + { + if (editor.Values[0] is Actor actor) + return FindPrefabRoot(actor); + if (editor.ParentEditor != null) + return FindPrefabRoot(editor.ParentEditor); + return null; + } + + private Actor FindPrefabRoot(Actor actor) + { + if (actor is Scene) + return null; + if (actor.IsPrefabRoot) + return actor; + return FindPrefabRoot(actor.Parent); + } + + private ISceneObject FindObjectWithPrefabObjectId(Actor actor, ref Guid prefabObjectId) + { + if (actor.PrefabObjectID == prefabObjectId) + return actor; + + for (int i = 0; i < actor.ScriptsCount; i++) + { + if (actor.GetScript(i).PrefabObjectID == prefabObjectId) + { + var a = actor.GetScript(i); + if (a != null) + return a; + } + } + + for (int i = 0; i < actor.ChildrenCount; i++) + { + if (actor.GetChild(i).PrefabObjectID == prefabObjectId) + { + var a = actor.GetChild(i); + if (a != null) + return a; + } + } + + return null; + } + + /// + /// Sets the editor value to the default value (if assigned). + /// + public void SetValueToDefault() + { + SetValue(Values.DefaultValue); + } + + /// + /// Sets the editor value to the reference value (if assigned). + /// + public void SetValueToReference() + { + // Special case for object references + // If prefab object has reference to other object in prefab needs to revert to matching prefab instance object not the reference prefab object value + if (Values.ReferenceValue is ISceneObject referenceSceneObject && referenceSceneObject.HasPrefabLink) + { + if (Values.Count > 1) + { + Editor.LogError("Cannot revert to reference value for more than one object selected."); + return; + } + + Actor prefabInstanceRoot = FindPrefabRoot(this); + if (prefabInstanceRoot == null) + { + Editor.LogError("Cannot revert to reference value. Missing prefab instance root actor."); + return; + } + + var prefabObjectId = referenceSceneObject.PrefabObjectID; + var prefabInstanceRef = FindObjectWithPrefabObjectId(prefabInstanceRoot, ref prefabObjectId); + if (prefabInstanceRef == null) + { + Editor.LogWarning("Missing prefab instance reference in the prefab instance. Cannot revert to it."); + } + + SetValue(prefabInstanceRef); + + return; + } + + SetValue(Values.ReferenceValue); + } + + /// + /// Sets the object value. Actual update is performed during editor refresh in sync. + /// + /// The value. + /// The source editor token used by the value setter to support batching Undo actions (eg. for sliders or color pickers). + protected void SetValue(object value, object token = null) + { + if (_isSetBlocked) + return; + + if (OnDirty(this, value, token)) + { + _hasValueDirty = true; + _valueToSet = value; + } + } + + /// + /// Called when custom editor gets dirty (UI value has been modified). + /// Allows to filter the event, block it or handle in a custom way. + /// + /// The editor. + /// The value. + /// The source editor token used by the value setter to support batching Undo actions (eg. for sliders or color pickers). + /// True if allow to handle this event, otherwise false. + protected virtual bool OnDirty(CustomEditor editor, object value, object token = null) + { + ParentEditor.OnDirty(editor, value, token); + return true; + } + + /// + /// Called when custom editor sets the value to the object and resets the dirty state. Can be sued to perform custom work after editing the target object. + /// + protected virtual void OnUnDirty() + { + } + + /// + /// Clears the token assigned with parameter. Called on merged undo action end (eg. users stops using slider). + /// + protected virtual void ClearToken() + { + ParentEditor.ClearToken(); + } + } +} diff --git a/Source/Editor/CustomEditors/CustomEditorPresenter.cs b/Source/Editor/CustomEditors/CustomEditorPresenter.cs new file mode 100644 index 000000000..41a230363 --- /dev/null +++ b/Source/Editor/CustomEditors/CustomEditorPresenter.cs @@ -0,0 +1,380 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using FlaxEditor.Scripting; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.CustomEditors +{ + /// + /// Main class for Custom Editors used to present selected objects properties and allow to modify them. + /// + /// + [HideInEditor] + public class CustomEditorPresenter : LayoutElementsContainer + { + /// + /// The panel control. + /// + /// + public class PresenterPanel : VerticalPanel + { + private CustomEditorPresenter _presenter; + + /// + /// Gets the presenter. + /// + public CustomEditorPresenter Presenter => _presenter; + + internal PresenterPanel(CustomEditorPresenter presenter) + { + _presenter = presenter; + AnchorPreset = AnchorPresets.StretchAll; + Offsets = Margin.Zero; + IsScrollable = true; + } + + /// + public override void Update(float deltaTime) + { + // Update editors + _presenter.Update(); + + base.Update(deltaTime); + } + + /// + public override void OnDestroy() + { + base.OnDestroy(); + + _presenter = null; + } + } + + /// + /// The root editor. Mocks some custom editors events. Created a child editor for the selected objects. + /// + /// + protected class RootEditor : SyncPointEditor + { + private readonly string _noSelectionText; + private CustomEditor _overrideEditor; + + /// + /// The selected objects editor. + /// + public CustomEditor Editor; + + /// + /// Gets or sets the override custom editor used to edit selected objects. + /// + public CustomEditor OverrideEditor + { + get => _overrideEditor; + set + { + _overrideEditor = value; + RebuildLayout(); + } + } + + /// + /// Initializes a new instance of the class. + /// + /// The text to show when no item is selected. + public RootEditor(string noSelectionText) + { + _noSelectionText = noSelectionText ?? "No selection"; + } + + /// + /// Setups editor for selected objects. + /// + /// The presenter. + public void Setup(CustomEditorPresenter presenter) + { + Cleanup(); + Initialize(presenter, presenter, null); + } + + /// + public override void Initialize(LayoutElementsContainer layout) + { + Presenter.BeforeLayout?.Invoke(layout); + + var selection = Presenter.Selection; + selection.ClearReferenceValue(); + if (selection.Count > 0) + { + if (_overrideEditor != null) + { + Editor = _overrideEditor; + } + else + { + var type = new ScriptType(typeof(object)); + if (selection.HasDifferentTypes == false) + type = TypeUtils.GetObjectType(selection[0]); + Editor = CustomEditorsUtil.CreateEditor(type, false); + } + + Editor.Initialize(Presenter, Presenter, selection); + OnChildCreated(Editor); + } + else + { + var label = layout.Label(_noSelectionText, TextAlignment.Center); + label.Label.Height = 20.0f; + } + + base.Initialize(layout); + + Presenter.AfterLayout?.Invoke(layout); + } + + /// + protected override void OnModified() + { + Presenter.Modified?.Invoke(); + + base.OnModified(); + } + } + + /// + /// The panel. + /// + public readonly PresenterPanel Panel; + + /// + /// The selected objects editor (root, it generates actual editor for selection). + /// + protected readonly RootEditor Editor; + + /// + /// The selected objects list (read-only). + /// + public readonly ValueContainer Selection = new ValueContainer(ScriptMemberInfo.Null); + + /// + /// The undo object used by this editor. + /// + public readonly Undo Undo; + + /// + /// Occurs when selection gets changed. + /// + public event Action SelectionChanged; + + /// + /// Occurs when any property gets changed. + /// + public event Action Modified; + + /// + /// Occurs when presenter wants to gather undo objects to record changes. Can be overriden to provide custom objects collection. + /// + public Func> GetUndoObjects = presenter => presenter.Selection; + + /// + /// Gets the amount of objects being selected. + /// + public int SelectionCount => Selection.Count; + + /// + /// Gets or sets the override custom editor used to edit selected objects. + /// + public CustomEditor OverrideEditor + { + get => Editor.OverrideEditor; + set => Editor.OverrideEditor = value; + } + + /// + /// Gets the root editor. + /// + public CustomEditor Root => Editor; + + /// + /// Gets a value indicating whether build on update flag is set and layout will be updated during presenter update. + /// + public bool BuildOnUpdate => _buildOnUpdate; + + /// + /// True if cache the expanded groups in this presenter, otherwise will disable this feature. Used to preserve the expanded groups using project cache. + /// + public bool CacheExpandedGroups; + + /// + /// Occurs when before creating layout for the selected objects editor UI. Can be used to inject custom UI to the layout. + /// + public event Action BeforeLayout; + + /// + /// Occurs when after creating layout for the selected objects editor UI. Can be used to inject custom UI to the layout. + /// + public event Action AfterLayout; + + private bool _buildOnUpdate; + + /// + /// Initializes a new instance of the class. + /// + /// The undo. It's optional. + /// The custom text to display when no object is selected. Default is No selection. + public CustomEditorPresenter(Undo undo, string noSelectionText = null) + { + Undo = undo; + Panel = new PresenterPanel(this); + Editor = new RootEditor(noSelectionText); + Editor.Initialize(this, this, null); + } + + /// + /// Selects the specified object. + /// + /// The object. + public void Select(object obj) + { + if (obj == null) + { + Deselect(); + return; + } + if (Selection.Count == 1 && Selection[0] == obj) + return; + + Selection.Clear(); + Selection.Add(obj); + + OnSelectionChanged(); + } + + /// + /// Selects the specified objects. + /// + /// The objects. + public void Select(IEnumerable objects) + { + if (objects == null) + { + Deselect(); + return; + } + var objectsArray = objects as object[] ?? objects.ToArray(); + if (Utils.ArraysEqual(objectsArray, Selection)) + return; + + Selection.Clear(); + Selection.AddRange(objectsArray); + + OnSelectionChanged(); + } + + /// + /// Clears the selected objects. + /// + public void Deselect() + { + if (Selection.Count == 0) + return; + + Selection.Clear(); + + OnSelectionChanged(); + } + + /// + /// Builds the editors layout. + /// + public virtual void BuildLayout() + { + // Clear layout + var panel = Panel.Parent as Panel; + var parentScrollV = panel?.VScrollBar?.Value ?? -1; + Panel.IsLayoutLocked = true; + Panel.DisposeChildren(); + + ClearLayout(); + Editor.Setup(this); + + Panel.IsLayoutLocked = false; + Panel.PerformLayout(); + + // Restore scroll value + if (parentScrollV > -1) + panel.VScrollBar.Value = parentScrollV; + } + + /// + /// Sets the request to build the editor layout on the next update. + /// + public void BuildLayoutOnUpdate() + { + _buildOnUpdate = true; + } + + private void ExpandGroups(LayoutElementsContainer c, bool open) + { + if (c is Elements.GroupElement group) + { + if (open) + group.Panel.Open(false); + else + group.Panel.Close(false); + } + + foreach (var child in c.Children) + { + if (child is LayoutElementsContainer cc) + ExpandGroups(cc, open); + } + } + + /// + /// Expands all the groups in this editor. + /// + public void OpenAllGroups() + { + ExpandGroups(this, true); + } + + /// + /// Closes all the groups in this editor. + /// + public void ClosesAllGroups() + { + ExpandGroups(this, false); + } + + /// + /// Called when selection gets changed. + /// + protected virtual void OnSelectionChanged() + { + BuildLayout(); + SelectionChanged?.Invoke(); + } + + /// + /// Updates custom editors. Refreshes UI values and applies changes to the selected objects. + /// + internal void Update() + { + if (_buildOnUpdate) + { + _buildOnUpdate = false; + BuildLayout(); + } + + Editor?.RefreshInternal(); + } + + /// + public override ContainerControl ContainerControl => Panel; + } +} diff --git a/Source/Editor/CustomEditors/CustomEditorsUtil.cpp b/Source/Editor/CustomEditors/CustomEditorsUtil.cpp new file mode 100644 index 000000000..35fcb278f --- /dev/null +++ b/Source/Editor/CustomEditors/CustomEditorsUtil.cpp @@ -0,0 +1,208 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "CustomEditorsUtil.h" +#include "Engine/Core/Log.h" +#include "Engine/Core/Types/DateTime.h" +#include "Engine/Core/Collections/Dictionary.h" +#include "Engine/Engine/EngineService.h" +#include "Engine/Scripting/Scripting.h" +#include "Engine/Scripting/BinaryModule.h" +#include "Engine/Scripting/ManagedCLR/MField.h" +#include "Engine/Scripting/ManagedCLR/MAssembly.h" +#include "Engine/Scripting/ManagedCLR/MClass.h" +#include "Engine/Scripting/ManagedCLR/MUtils.h" +#include "FlaxEngine.Gen.h" +#include + +#define TRACK_ASSEMBLY(assembly) \ + if (assembly->IsLoaded()) \ + { \ + OnAssemblyLoaded(assembly); \ + } \ + assembly->Loaded.Bind(OnAssemblyLoaded); \ + assembly->Unloading.Bind(OnAssemblyUnloading) + +class CustomEditorsUtilService : public EngineService +{ +public: + + CustomEditorsUtilService() + : EngineService(TEXT("Custom Editors Util")) + { + } + + bool Init() override; +}; + +CustomEditorsUtilService CustomEditorsUtilServiceInstance; + +struct Entry +{ + MClass* DefaultEditor; + MClass* CustomEditor; + + Entry() + { + DefaultEditor = nullptr; + CustomEditor = nullptr; + } +}; + +Dictionary Cache(512); + +void OnAssemblyLoaded(MAssembly* assembly); +void OnAssemblyUnloading(MAssembly* assembly); +void OnBinaryModuleLoaded(BinaryModule* module); + +MonoReflectionType* CustomEditorsUtil::GetCustomEditor(MonoReflectionType* refType) +{ + MonoType* type = mono_reflection_type_get_type(refType); + + Entry result; + if (Cache.TryGet(type, result)) + { + const auto editor = result.CustomEditor ? result.CustomEditor : result.DefaultEditor; + if (editor) + { + return MUtils::GetType(editor->GetNative()); + } + } + + return nullptr; +} + +bool CustomEditorsUtilService::Init() +{ + TRACK_ASSEMBLY(GetBinaryModuleFlaxEngine()->Assembly); + Scripting::BinaryModuleLoaded.Bind(&OnBinaryModuleLoaded); + + return false; +} + +void OnAssemblyLoaded(MAssembly* assembly) +{ + const auto startTime = DateTime::NowUTC(); + + // Prepare FlaxEngine + auto engineAssembly = GetBinaryModuleFlaxEngine()->Assembly; + if (!engineAssembly->IsLoaded()) + { + LOG(Warning, "Cannot load custom editors meta for assembly {0} because FlaxEngine is not loaded.", assembly->ToString()); + return; + } + auto customEditorAttribute = engineAssembly->GetClass("FlaxEngine.CustomEditorAttribute"); + if (customEditorAttribute == nullptr) + { + LOG(Warning, "Missing CustomEditorAttribute class."); + return; + } + auto customEditorTypeField = customEditorAttribute->GetField("Type"); + ASSERT(customEditorTypeField); + const auto defaultEditorAttribute = engineAssembly->GetClass("FlaxEngine.DefaultEditorAttribute"); + if (defaultEditorAttribute == nullptr) + { + LOG(Warning, "Missing DefaultEditorAttribute class."); + return; + } + const auto customEditor = engineAssembly->GetClass("FlaxEditor.CustomEditors.CustomEditor"); + if (customEditor == nullptr) + { + LOG(Warning, "Missing CustomEditor class."); + return; + } + + // Process all classes to find custom editors + auto& classes = assembly->GetClasses(); + for (auto i = classes.Begin(); i.IsNotEnd(); ++i) + { + const auto mclass = i->Value; + + // Skip generic classes + if (mclass->IsGeneric()) + continue; + + const auto attribute = mclass->GetAttribute(customEditorAttribute); + if (attribute == nullptr || mono_object_get_class(attribute) != customEditorAttribute->GetNative()) + continue; + + // Check if attribute references a valid class + MonoReflectionType* refType = nullptr; + customEditorTypeField->GetValue(attribute, &refType); + if (refType == nullptr) + continue; + + MonoType* type = mono_reflection_type_get_type(refType); + if (type == nullptr) + continue; + MonoClass* typeClass = mono_type_get_class(type); + + // Check if it's a custom editor class + if (mclass->IsSubClassOf(customEditor)) + { + auto& entry = Cache[type]; + + const bool isDefault = mclass->HasAttribute(defaultEditorAttribute); + if (isDefault) + { + entry.DefaultEditor = mclass; + } + else + { + entry.CustomEditor = mclass; + } + + //LOG(Info, "Custom Editor {0} for type {1} (default: {2})", String(mclass->GetFullName()), String(mono_type_get_name(type)), isDefault); + } + else if (typeClass) + { + MClass* referencedClass = Scripting::FindClass(typeClass); + if (referencedClass) + { + auto& entry = Cache[mono_class_get_type(mclass->GetNative())]; + entry.CustomEditor = referencedClass; + + //LOG(Info, "Custom Editor {0} for type {1}", String(referencedClass->GetFullName()), String(mclass->GetFullName())); + } + } + } + + const auto endTime = DateTime::NowUTC(); + LOG(Info, "Assembly \'{0}\' scanned for custom editors in {1} ms", assembly->ToString(), (int32)(endTime - startTime).GetTotalMilliseconds()); +} + +void OnAssemblyUnloading(MAssembly* assembly) +{ + // Fast clear for editor unloading + if (assembly == GetBinaryModuleFlaxEngine()->Assembly) + { + Cache.Clear(); + return; + } + + // Remove entries with user classes + for (auto i = Cache.Begin(); i.IsNotEnd(); ++i) + { + MonoClass* monoClass = (MonoClass*)(void*)i->Key; + + if (assembly->GetClass(monoClass)) + { + Cache.Remove(i); + } + else + { + if (i->Value.DefaultEditor && assembly->GetClass(i->Value.DefaultEditor->GetNative())) + i->Value.DefaultEditor = nullptr; + if (i->Value.CustomEditor && assembly->GetClass(i->Value.CustomEditor->GetNative())) + i->Value.CustomEditor = nullptr; + } + } +} + +void OnBinaryModuleLoaded(BinaryModule* module) +{ + auto managedModule = dynamic_cast(module); + if (managedModule) + { + TRACK_ASSEMBLY(managedModule->Assembly); + } +} diff --git a/Source/Editor/CustomEditors/CustomEditorsUtil.cs b/Source/Editor/CustomEditors/CustomEditorsUtil.cs new file mode 100644 index 000000000..3f716b7ff --- /dev/null +++ b/Source/Editor/CustomEditors/CustomEditorsUtil.cs @@ -0,0 +1,179 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Runtime.CompilerServices; +using System.Text; +using FlaxEditor.CustomEditors.Editors; +using FlaxEditor.Scripting; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors +{ + internal static class CustomEditorsUtil + { + private static readonly StringBuilder CachedSb = new StringBuilder(256); + + internal static readonly Dictionary InBuildTypeNames = new Dictionary() + { + { typeof(bool), "bool" }, + { typeof(byte), "byte" }, + { typeof(sbyte), "sbyte" }, + { typeof(char), "char" }, + { typeof(short), "short" }, + { typeof(ushort), "ushort" }, + { typeof(int), "int" }, + { typeof(uint), "uint" }, + { typeof(long), "ulong" }, + { typeof(float), "float" }, + { typeof(double), "double" }, + { typeof(decimal), "decimal" }, + { typeof(string), "string" }, + }; + + /// + /// Gets the type name for UI. Handles in-build types like System.Single and returns float. + /// + /// The type. + /// The result. + public static string GetTypeNameUI(Type type) + { + if (!InBuildTypeNames.TryGetValue(type, out var result)) + { + result = type.Name; + } + return result; + } + + /// + /// Gets the property name for UI. Removes unnecessary characters and filters text. Makes it more user-friendly. + /// + /// The name. + /// The result. + public static string GetPropertyNameUI(string name) + { + int length = name.Length; + StringBuilder sb = CachedSb; + sb.Clear(); + sb.EnsureCapacity(length + 8); + int startIndex = 0; + + // Skip some prefixes + if (name.StartsWith("g_") || name.StartsWith("m_")) + startIndex = 2; + + // Filter text + for (int i = startIndex; i < length; i++) + { + var c = name[i]; + + // Space before word starting with uppercase letter + if (char.IsUpper(c) && i > 0) + { + if (i + 2 < length && !char.IsUpper(name[i + 1]) && !char.IsUpper(name[i + 2])) + sb.Append(' '); + } + // Space instead of underscore + else if (c == '_') + { + if (sb.Length > 0) + sb.Append(' '); + continue; + } + // Space before digits sequence + else if (i > 1 && char.IsDigit(c) && !char.IsDigit(name[i - 1])) + sb.Append(' '); + + sb.Append(c); + } + + return sb.ToString(); + } + + internal static CustomEditor CreateEditor(ValueContainer values, CustomEditor overrideEditor, bool canUseRefPicker = true) + { + // Check if use provided editor + if (overrideEditor != null) + return overrideEditor; + + // Special case if property is a pure object type and all values are the same type + if (values.Type.Type == typeof(object) && values.Count > 0 && values[0] != null && !values.HasDifferentTypes) + return CreateEditor(TypeUtils.GetObjectType(values[0]), canUseRefPicker); + + // Use editor for the property type + return CreateEditor(values.Type, canUseRefPicker); + } + + internal static CustomEditor CreateEditor(ScriptType targetType, bool canUseRefPicker = true) + { + if (targetType.IsArray) + { + return new ArrayEditor(); + } + var targetTypeType = TypeUtils.GetType(targetType); + if (canUseRefPicker) + { + if (typeof(Asset).IsAssignableFrom(targetTypeType)) + { + return new AssetRefEditor(); + } + if (typeof(FlaxEngine.Object).IsAssignableFrom(targetTypeType)) + { + return new FlaxObjectRefEditor(); + } + } + + // Use custom editor + { + var checkType = targetTypeType; + do + { + var type = Internal_GetCustomEditor(checkType); + if (type != null) + { + return (CustomEditor)Activator.CreateInstance(type); + } + checkType = checkType.BaseType; + + // Skip if cannot use ref editors + if (!canUseRefPicker && checkType == typeof(FlaxEngine.Object)) + break; + } while (checkType != null); + } + + // Use attribute editor + var attributes = targetType.GetAttributes(false); + var customEditorAttribute = (CustomEditorAttribute)attributes.FirstOrDefault(x => x is CustomEditorAttribute); + if (customEditorAttribute != null) + return (CustomEditor)Activator.CreateInstance(customEditorAttribute.Type); + + // Select default editor (based on type) + if (targetType.IsEnum) + { + return new EnumEditor(); + } + if (targetType.IsGenericType) + { + if (DictionaryEditor.CanEditType(targetTypeType)) + { + return new DictionaryEditor(); + } + + // Use custom editor + var genericTypeDefinition = targetType.GetGenericTypeDefinition(); + var type = Internal_GetCustomEditor(genericTypeDefinition); + if (type != null) + { + return (CustomEditor)Activator.CreateInstance(type); + } + } + + // The most generic editor + return new GenericEditor(); + } + + [MethodImpl(MethodImplOptions.InternalCall)] + internal static extern Type Internal_GetCustomEditor(Type targetType); + } +} diff --git a/Source/Editor/CustomEditors/CustomEditorsUtil.h b/Source/Editor/CustomEditors/CustomEditorsUtil.h new file mode 100644 index 000000000..12d5a9bfe --- /dev/null +++ b/Source/Editor/CustomEditors/CustomEditorsUtil.h @@ -0,0 +1,15 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#pragma once + +#include "Engine/Scripting/ManagedCLR/MTypes.h" + +/// +/// Helper utility class to quickly scan assemblies to gather metadata for custom editor feature. +/// +class CustomEditorsUtil +{ +public: + + static MonoReflectionType* GetCustomEditor(MonoReflectionType* refType); +}; diff --git a/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs new file mode 100644 index 000000000..ee74cc98a --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/ActorEditor.cs @@ -0,0 +1,439 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using FlaxEditor.Actions; +using FlaxEditor.CustomEditors.Editors; +using FlaxEditor.CustomEditors.Elements; +using FlaxEditor.GUI; +using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Tree; +using FlaxEditor.Scripting; +using FlaxEngine; +using FlaxEngine.GUI; +using FlaxEngine.Json; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Dedicated custom editor for objects. + /// + /// + [CustomEditor(typeof(Actor)), DefaultEditor] + public class ActorEditor : GenericEditor + { + private Guid _linkedPrefabId; + + /// + protected override void SpawnProperty(LayoutElementsContainer itemLayout, ValueContainer itemValues, ItemInfo item) + { + // Note: we cannot specify actor properties editor types directly because we want to keep editor classes in FlaxEditor assembly + int order = item.Order?.Order ?? int.MinValue; + switch (order) + { + // Override static flags editor + case -80: + item.CustomEditor = new CustomEditorAttribute(typeof(ActorStaticFlagsEditor)); + break; + + // Override layer editor + case -69: + item.CustomEditor = new CustomEditorAttribute(typeof(ActorLayerEditor)); + break; + + // Override tag editor + case -68: + item.CustomEditor = new CustomEditorAttribute(typeof(ActorTagEditor)); + break; + + // Override position/scale editor + case -30: + case -10: + item.CustomEditor = new CustomEditorAttribute(typeof(ActorTransformEditor.PositionScaleEditor)); + break; + + // Override orientation editor + case -20: + item.CustomEditor = new CustomEditorAttribute(typeof(ActorTransformEditor.OrientationEditor)); + break; + } + + base.SpawnProperty(itemLayout, itemValues, item); + } + + /// + protected override List GetItemsForType(ScriptType type) + { + var items = base.GetItemsForType(type); + + // Inject scripts editor + var scriptsMember = type.GetProperty("Scripts"); + if (scriptsMember != ScriptMemberInfo.Null) + { + var item = new ItemInfo(scriptsMember); + item.CustomEditor = new CustomEditorAttribute(typeof(ScriptsEditor)); + items.Add(item); + } + + return items; + } + + /// + public override void Initialize(LayoutElementsContainer layout) + { + // Check for prefab link + if (Values.IsSingleObject && Values[0] is Actor actor && actor.HasPrefabLink) + { + // TODO: consider editing more than one instance of the same prefab asset at once + + var prefab = FlaxEngine.Content.LoadAsync(actor.PrefabID); + // TODO: don't stall here? + if (prefab && !prefab.WaitForLoaded()) + { + var prefabObjectId = actor.PrefabObjectID; + var prefabInstance = prefab.GetDefaultInstance(ref prefabObjectId); + if (prefabInstance != null) + { + // Use default prefab instance as a reference for the editor + Values.SetReferenceValue(prefabInstance); + + // Add some UI + var panel = layout.CustomContainer(); + panel.CustomControl.Height = 20.0f; + panel.CustomControl.SlotsVertically = 1; + panel.CustomControl.SlotsHorizontally = 2; + + // Selecting actor prefab asset + var selectPrefab = panel.Button("Select Prefab"); + selectPrefab.Button.Clicked += () => Editor.Instance.Windows.ContentWin.Select(prefab); + + // Viewing changes applied to this actor + var viewChanges = panel.Button("View Changes"); + viewChanges.Button.Clicked += () => ViewChanges(viewChanges.Button, new Vector2(0.0f, 20.0f)); + + // Link event to update editor on prefab apply + _linkedPrefabId = prefab.ID; + Editor.Instance.Prefabs.PrefabApplying += OnPrefabApplying; + Editor.Instance.Prefabs.PrefabApplied += OnPrefabApplied; + } + } + } + + base.Initialize(layout); + + // Add custom settings button to General group + for (int i = 0; i < layout.Children.Count; i++) + { + if (layout.Children[i] is GroupElement group && group.Panel.HeaderText == "General") + { + const float settingsButtonSize = 14; + var settingsButton = new Image + { + TooltipText = "Settings", + AutoFocus = true, + AnchorPreset = AnchorPresets.TopRight, + Parent = group.Panel, + Bounds = new Rectangle(group.Panel.Width - settingsButtonSize, 0, settingsButtonSize, settingsButtonSize), + IsScrollable = false, + Color = FlaxEngine.GUI.Style.Current.ForegroundGrey, + Margin = new Margin(1), + Brush = new SpriteBrush(FlaxEngine.GUI.Style.Current.Settings), + }; + settingsButton.Clicked += OnSettingsButtonClicked; + break; + } + } + } + + private void OnSettingsButtonClicked(Image image, MouseButton mouseButton) + { + if (mouseButton != MouseButton.Left) + return; + + var cm = new ContextMenu(); + var actor = (Actor)Values[0]; + var scriptType = TypeUtils.GetType(actor.TypeName); + var item = scriptType.ContentItem; + cm.AddButton("Copy ID", OnClickCopyId); + cm.AddButton("Edit actor type", OnClickEditActorType).Enabled = item != null; + var showButton = cm.AddButton("Show in content window", OnClickShowActorType); + showButton.Enabled = item != null; + showButton.Icon = Editor.Instance.Icons.Search12; + cm.Show(image, image.Size); + } + + private void OnClickCopyId() + { + var actor = (Actor)Values[0]; + Clipboard.Text = JsonSerializer.GetStringID(actor.ID); + } + + private void OnClickEditActorType() + { + var actor = (Actor)Values[0]; + var scriptType = TypeUtils.GetType(actor.TypeName); + var item = scriptType.ContentItem; + if (item != null) + Editor.Instance.ContentEditing.Open(item); + } + + private void OnClickShowActorType() + { + var actor = (Actor)Values[0]; + var scriptType = TypeUtils.GetType(actor.TypeName); + var item = scriptType.ContentItem; + if (item != null) + Editor.Instance.Windows.ContentWin.Select(item); + } + + /// + protected override void Deinitialize() + { + base.Deinitialize(); + + if (_linkedPrefabId != Guid.Empty) + { + _linkedPrefabId = Guid.Empty; + Editor.Instance.Prefabs.PrefabApplied -= OnPrefabApplying; + Editor.Instance.Prefabs.PrefabApplied -= OnPrefabApplied; + } + } + + private void OnPrefabApplied(Prefab prefab, Actor instance) + { + if (prefab.ID == _linkedPrefabId) + { + // This works fine but in PrefabWindow when using live update it crashes on using color picker/float slider because UI is being rebuild + //Presenter.BuildLayoutOnUpdate(); + + // Better way is to just update the reference value using the new default instance of the prefab, created after changes apply + if (prefab && !prefab.WaitForLoaded()) + { + var actor = (Actor)Values[0]; + var prefabObjectId = actor.PrefabObjectID; + var prefabInstance = prefab.GetDefaultInstance(ref prefabObjectId); + if (prefabInstance != null) + { + Values.SetReferenceValue(prefabInstance); + RefreshReferenceValue(); + } + } + } + } + + private void OnPrefabApplying(Prefab prefab, Actor instance) + { + if (prefab.ID == _linkedPrefabId) + { + // Unlink reference value (it gets deleted by the prefabs system during apply) + ClearReferenceValueAll(); + } + } + + private TreeNode CreateDiffNode(CustomEditor editor) + { + var node = new TreeNode(false); + + node.Tag = editor; + + // Removed Script + if (editor is RemovedScriptDummy removed) + { + node.TextColor = Color.OrangeRed; + node.Text = CustomEditorsUtil.GetPropertyNameUI(removed.PrefabObject.GetType().Name); + } + // Actor or Script + else if (editor.Values[0] is ISceneObject sceneObject) + { + node.TextColor = sceneObject.HasPrefabLink ? FlaxEngine.GUI.Style.Current.ProgressNormal : FlaxEngine.GUI.Style.Current.BackgroundSelected; + node.Text = CustomEditorsUtil.GetPropertyNameUI(sceneObject.GetType().Name); + } + // Array Item + else if (editor.ParentEditor?.Values?.Type.IsArray ?? false) + { + node.Text = "Element " + editor.ParentEditor.ChildrenEditors.IndexOf(editor); + } + // Common type + else if (editor.Values.Info != ScriptMemberInfo.Null) + { + node.Text = CustomEditorsUtil.GetPropertyNameUI(editor.Values.Info.Name); + } + // Custom type + else if (editor.Values[0] != null) + { + node.Text = editor.Values[0].ToString(); + } + + node.Expand(true); + + return node; + } + + private class RemovedScriptDummy : CustomEditor + { + /// + /// The removed prefab object (from the prefab default instance). + /// + public Script PrefabObject; + + /// + public override void Initialize(LayoutElementsContainer layout) + { + // Not used + } + } + + private TreeNode ProcessDiff(CustomEditor editor, bool skipIfNotModified = true) + { + // Special case for new Script added to actor + if (editor.Values[0] is Script script && !script.HasPrefabLink) + { + return CreateDiffNode(editor); + } + + // Skip if no change detected + if (!editor.Values.IsReferenceValueModified && skipIfNotModified) + return null; + + TreeNode result = null; + + if (editor.ChildrenEditors.Count == 0) + result = CreateDiffNode(editor); + + bool isScriptEditorWithRefValue = editor is ScriptsEditor && editor.Values.HasReferenceValue; + + for (int i = 0; i < editor.ChildrenEditors.Count; i++) + { + var child = ProcessDiff(editor.ChildrenEditors[i], !isScriptEditorWithRefValue); + if (child != null) + { + if (result == null) + result = CreateDiffNode(editor); + + result.AddChild(child); + } + } + + // Show scripts removed from prefab instance (user may want to restore them) + if (editor is ScriptsEditor && editor.Values.HasReferenceValue && editor.Values.ReferenceValue is Script[] prefabObjectScripts) + { + for (int j = 0; j < prefabObjectScripts.Length; j++) + { + var prefabObjectScript = prefabObjectScripts[j]; + bool isRemoved = true; + + for (int i = 0; i < editor.ChildrenEditors.Count; i++) + { + if (editor.ChildrenEditors[i].Values is ScriptsEditor.ScriptsContainer container && container.PrefabObjectId == prefabObjectScript.PrefabObjectID) + { + // Found + isRemoved = false; + break; + } + } + + if (isRemoved) + { + var dummy = new RemovedScriptDummy + { + PrefabObject = prefabObjectScript + }; + + var child = CreateDiffNode(dummy); + if (result == null) + result = CreateDiffNode(editor); + result.AddChild(child); + } + } + } + + return result; + } + + private void ViewChanges(Control target, Vector2 targetLocation) + { + // Build a tree out of modified properties + var rootNode = ProcessDiff(this, false); + + // Skip if no changes detected + if (rootNode == null || rootNode.ChildrenCount == 0) + { + var cm1 = new ContextMenu(); + cm1.AddButton("No changes detected"); + cm1.Show(target, targetLocation); + return; + } + + // Create context menu + var cm = new PrefabDiffContextMenu(); + cm.Tree.AddChild(rootNode); + cm.Tree.RightClick += OnDiffNodeRightClick; + cm.Tree.Tag = cm; + cm.RevertAll += OnDiffRevertAll; + cm.ApplyAll += OnDiffApplyAll; + cm.Show(target, targetLocation); + } + + private void OnDiffNodeRightClick(TreeNode node, Vector2 location) + { + var diffMenu = (PrefabDiffContextMenu)node.ParentTree.Tag; + + var menu = new ContextMenu(); + menu.AddButton("Revert", () => OnDiffRevert((CustomEditor)node.Tag)); + menu.AddSeparator(); + menu.AddButton("Revert All", OnDiffRevertAll); + menu.AddButton("Apply All", OnDiffApplyAll); + + diffMenu.ShowChild(menu, node.PointToParent(diffMenu, new Vector2(location.X, node.HeaderHeight))); + } + + private void OnDiffRevertAll() + { + RevertToReferenceValue(); + } + + private void OnDiffApplyAll() + { + Editor.Instance.Prefabs.ApplyAll((Actor)Values[0]); + + // Ensure to refresh the layout + Presenter.BuildLayoutOnUpdate(); + } + + private void OnDiffRevert(CustomEditor editor) + { + // Special case for removed Script from actor + if (editor is RemovedScriptDummy removed) + { + Editor.Log("Reverting removed script changes to prefab (adding it)"); + + var actor = (Actor)Values[0]; + var restored = actor.AddScript(removed.PrefabObject.GetType()); + var prefabId = actor.PrefabID; + var prefabObjectId = restored.PrefabObjectID; + Script.Internal_LinkPrefab(FlaxEngine.Object.GetUnmanagedPtr(restored), ref prefabId, ref prefabObjectId); + string data = JsonSerializer.Serialize(removed.PrefabObject); + JsonSerializer.Deserialize(restored, data); + + var action = AddRemoveScript.Added(restored); + Presenter.Undo?.AddAction(action); + + return; + } + + // Special case for new Script added to actor + if (editor.Values[0] is Script script && !script.HasPrefabLink) + { + Editor.Log("Reverting added script changes to prefab (removing it)"); + + var action = AddRemoveScript.Remove(script); + action.Do(); + Presenter.Undo?.AddAction(action); + + return; + } + + editor.RevertToReferenceValue(); + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/AnimatedModelEditor.cs b/Source/Editor/CustomEditors/Dedicated/AnimatedModelEditor.cs new file mode 100644 index 000000000..f4feccef4 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/AnimatedModelEditor.cs @@ -0,0 +1,37 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEditor.Surface; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + /// + [CustomEditor(typeof(AnimatedModel)), DefaultEditor] + public class AnimatedModelEditor : ActorEditor + { + /// + public override void Initialize(LayoutElementsContainer layout) + { + base.Initialize(layout); + + // Show instanced parameters to view/edit at runtime + if (Values.IsSingleObject && Editor.Instance.StateMachine.IsPlayMode) + { + var group = layout.Group("Parameters"); + group.Panel.Open(false); + group.Panel.IndexInParent -= 2; + + var animatedModel = (AnimatedModel)Values[0]; + var parameters = animatedModel.Parameters; + var data = SurfaceUtils.InitGraphParameters(parameters); + SurfaceUtils.DisplayGraphParameters(group, data, + (instance, parameter, tag) => ((AnimatedModel)instance).GetParameterValue(parameter.Identifier), + (instance, value, parameter, tag) => ((AnimatedModel)instance).SetParameterValue(parameter.Identifier, value), + Values); + } + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/CurveObjectEditor.cs b/Source/Editor/CustomEditors/Dedicated/CurveObjectEditor.cs new file mode 100644 index 000000000..53414a516 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/CurveObjectEditor.cs @@ -0,0 +1,177 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEditor.GUI; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + class BezierCurveObjectEditor : CustomEditor where T : struct + { + private bool _isSetting; + private BezierCurveEditor _curve; + + /// + public override void Initialize(LayoutElementsContainer layout) + { + var item = layout.CustomContainer>(); + _curve = item.CustomControl; + _curve.Height = 120.0f; + _curve.Edited += OnCurveEdited; + } + + private void OnCurveEdited() + { + if (_isSetting) + return; + + _isSetting = true; + SetValue(new BezierCurve(_curve.Keyframes)); + _isSetting = false; + } + + /// + public override void Refresh() + { + base.Refresh(); + + var value = (BezierCurve)Values[0]; + if (value != null && !_curve.IsUserEditing && !Utils.ArraysEqual(value.Keyframes, _curve.Keyframes)) + { + _isSetting = true; + _curve.SetKeyframes(value.Keyframes); + _isSetting = false; + } + } + + /// + protected override void Deinitialize() + { + _curve = null; + + base.Deinitialize(); + } + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class IntBezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class FloatBezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class Vector2BezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class Vector3BezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class Vector4BezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class QuaternionBezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + [CustomEditor(typeof(BezierCurve)), DefaultEditor] + sealed class ColorBezierCurveObjectEditor : BezierCurveObjectEditor + { + } + + /// + /// Custom editor for . + /// + class LinearCurveObjectEditor : CustomEditor where T : struct + { + private bool _isSetting; + private LinearCurveEditor _curve; + + /// + public override void Initialize(LayoutElementsContainer layout) + { + var item = layout.CustomContainer>(); + _curve = item.CustomControl; + _curve.Height = 120.0f; + _curve.Edited += OnCurveEdited; + } + + private void OnCurveEdited() + { + if (_isSetting) + return; + + _isSetting = true; + SetValue(new LinearCurve(_curve.Keyframes)); + _isSetting = false; + } + + /// + public override void Refresh() + { + base.Refresh(); + + var value = (LinearCurve)Values[0]; + if (value != null && !_curve.IsUserEditing && !Utils.ArraysEqual(value.Keyframes, _curve.Keyframes)) + { + _isSetting = true; + _curve.SetKeyframes(value.Keyframes); + _isSetting = false; + } + } + + /// + protected override void Deinitialize() + { + _curve = null; + + base.Deinitialize(); + } + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class IntLinearCurveObjectEditor : LinearCurveObjectEditor + { + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class FloatLinearCurveObjectEditor : LinearCurveObjectEditor + { + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class Vector2LinearCurveObjectEditor : LinearCurveObjectEditor + { + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class Vector3LinearCurveObjectEditor : LinearCurveObjectEditor + { + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class Vector4LinearCurveObjectEditor : LinearCurveObjectEditor + { + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class QuaternionLinearCurveObjectEditor : LinearCurveObjectEditor + { + } + + [CustomEditor(typeof(LinearCurve)), DefaultEditor] + sealed class ColorLinearCurveObjectEditor : LinearCurveObjectEditor + { + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/EnvironmentProbeEditor.cs b/Source/Editor/CustomEditors/Dedicated/EnvironmentProbeEditor.cs new file mode 100644 index 000000000..7d7264ff9 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/EnvironmentProbeEditor.cs @@ -0,0 +1,40 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + /// + [CustomEditor(typeof(EnvironmentProbe)), DefaultEditor] + public class EnvironmentProbeEditor : ActorEditor + { + /// + public override void Initialize(LayoutElementsContainer layout) + { + base.Initialize(layout); + + if (Values.HasDifferentTypes == false) + { + // Add 'Bake' button + layout.Space(10); + var button = layout.Button("Bake"); + button.Button.Clicked += BakeButtonClicked; + } + } + + private void BakeButtonClicked() + { + for (int i = 0; i < Values.Count; i++) + { + if (Values[i] is EnvironmentProbe envProbe) + { + envProbe.Bake(); + Editor.Instance.Scene.MarkSceneEdited(envProbe.Scene); + } + } + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/FontReferenceEditor.cs b/Source/Editor/CustomEditors/Dedicated/FontReferenceEditor.cs new file mode 100644 index 000000000..fd88d563c --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/FontReferenceEditor.cs @@ -0,0 +1,24 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using FlaxEditor.CustomEditors.Editors; +using FlaxEditor.Scripting; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + /// + [CustomEditor(typeof(FontReference)), DefaultEditor] + public class FontReferenceEditor : GenericEditor + { + /// + protected override List GetItemsForType(ScriptType type) + { + // Show properties + return GetItemsForType(type, true, false); + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/LayersMatrixEditor.cs b/Source/Editor/CustomEditors/Dedicated/LayersMatrixEditor.cs new file mode 100644 index 000000000..5d2ceab7a --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/LayersMatrixEditor.cs @@ -0,0 +1,184 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections.Generic; +using FlaxEditor.Content.Settings; +using FlaxEngine; +using FlaxEngine.GUI; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for layers matrix editor. Used to define layer-based collision detection for + /// + /// + public sealed class LayersMatrixEditor : CustomEditor + { + private int _layersCount; + private List _checkBoxes; + + /// + public override DisplayStyle Style => DisplayStyle.InlineIntoParent; + + /// + public override void Initialize(LayoutElementsContainer layout) + { + string[] layerNames = LayersAndTagsSettings.GetCurrentLayers(); + int layersCount = Math.Max(4, layerNames.Length); + _checkBoxes = new List(); + _layersCount = layersCount; + + float labelsWidth = 100.0f; + float labelsHeight = 18; + + var panel = layout.Space(100).Spacer; + var gridPanel = new GridPanel(0) + { + Parent = panel, + }; + + var upperLeftCell = new Label + { + Parent = gridPanel, + }; + + var upperRightCell = new VerticalPanel + { + ClipChildren = false, + Pivot = new Vector2(0.0f, 0.0f), + Offset = new Vector2(-labelsWidth, 0), + Rotation = -90, + Spacing = 0, + TopMargin = 0, + BottomMargin = 0, + Parent = gridPanel, + }; + + var bottomLeftCell = new VerticalPanel + { + Spacing = 0, + TopMargin = 0, + BottomMargin = 0, + Parent = gridPanel, + }; + + var grid = new UniformGridPanel(0) + { + SlotsHorizontally = layersCount, + SlotsVertically = layersCount, + Parent = gridPanel, + }; + + // Set layer names + int layerIndex = 0; + for (; layerIndex < layerNames.Length; layerIndex++) + { + upperRightCell.AddChild(new Label + { + Height = labelsHeight, + Text = layerNames[layerIndex], + HorizontalAlignment = TextAlignment.Near, + }); + bottomLeftCell.AddChild(new Label + { + Height = labelsHeight, + Text = layerNames[layerIndex], + HorizontalAlignment = TextAlignment.Far, + }); + } + for (; layerIndex < layersCount; layerIndex++) + { + string name = "Layer " + layerIndex; + upperRightCell.AddChild(new Label + { + Height = labelsHeight, + Text = name, + HorizontalAlignment = TextAlignment.Near, + }); + bottomLeftCell.AddChild(new Label + { + Height = labelsHeight, + Text = name, + HorizontalAlignment = TextAlignment.Far, + }); + } + + // Arrange + panel.Height = gridPanel.Height = gridPanel.Width = labelsWidth + layersCount * 18; + gridPanel.RowFill[0] = gridPanel.ColumnFill[0] = labelsWidth / gridPanel.Width; + gridPanel.RowFill[1] = gridPanel.ColumnFill[1] = 1 - gridPanel.ColumnFill[0]; + + // Create matrix + for (int row = 0; row < layersCount; row++) + { + int column = 0; + for (; column < layersCount - row; column++) + { + var box = new CheckBox(0, 0, true) + { + Tag = new Vector2(_layersCount - column - 1, row), + Parent = grid, + Checked = GetBit(column, row), + }; + box.StateChanged += OnCheckBoxChanged; + _checkBoxes.Add(box); + } + for (; column < layersCount; column++) + { + grid.AddChild(new Label()); + } + } + } + + private void OnCheckBoxChanged(CheckBox box) + { + int column = (int)((Vector2)box.Tag).X; + int row = (int)((Vector2)box.Tag).Y; + SetBit(column, row, box.Checked); + } + + /// + public override void Refresh() + { + // Sync check boxes + for (int i = 0; i < _checkBoxes.Count; i++) + { + var box = _checkBoxes[i]; + int column = (int)((Vector2)box.Tag).X; + int row = (int)((Vector2)box.Tag).Y; + box.Checked = GetBit(column, row); + } + } + + /// + protected override void Deinitialize() + { + base.Deinitialize(); + + _checkBoxes.Clear(); + _checkBoxes = null; + } + + private bool GetBit(int column, int row) + { + var values = (int[])Values[0]; + var mask = 1 << column; + return (values[row] & mask) != 0; + } + + private void SetBit(int column, int row, bool flag) + { + var values = (int[])((int[])Values[0]).Clone(); + + values[row] = SetMaskBit(values[row], 1 << column, flag); + values[column] = SetMaskBit(values[column], 1 << row, flag); + + SetValue(values); + } + + private static int SetMaskBit(int value, int mask, bool flag) + { + return (value & ~mask) | (flag ? mask : 0); + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs b/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs new file mode 100644 index 000000000..a7a35a9d6 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/ParticleEffectEditor.cs @@ -0,0 +1,68 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Linq; +using FlaxEditor.Surface; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + /// + [CustomEditor(typeof(ParticleEffect)), DefaultEditor] + public class ParticleEffectEditor : ActorEditor + { + private bool _isValid; + + private bool IsValid + { + get + { + // All selected particle effects use the same system + var effect = (ParticleEffect)Values[0]; + var system = effect.ParticleSystem; + return system != null && Values.TrueForAll(x => (x as ParticleEffect)?.ParticleSystem == system); + } + } + + /// + public override void Initialize(LayoutElementsContainer layout) + { + base.Initialize(layout); + + _isValid = IsValid; + if (!_isValid) + return; + + // Show all effect parameters grouped by the emitter track name + var effect = (ParticleEffect)Values[0]; + var groups = layout.Group("Parameters"); + groups.Panel.Open(false); + var parameters = effect.Parameters; + var parametersGroups = parameters.GroupBy(x => x.EmitterIndex); + foreach (var parametersGroup in parametersGroups) + { + var trackName = parametersGroup.First().TrackName; + var group = groups.Group(trackName); + group.Panel.Open(false); + + var data = SurfaceUtils.InitGraphParameters(parametersGroup); + SurfaceUtils.DisplayGraphParameters(group, data, + (instance, parameter, tag) => ((ParticleEffect)instance).GetParameterValue(trackName, parameter.Name), + (instance, value, parameter, tag) => ((ParticleEffect)instance).SetParameterValue(trackName, parameter.Name, value), + Values, + (instance, parameter, tag) => ((ParticleEffectParameter)tag).DefaultValue); + } + } + + /// + public override void Refresh() + { + if (_isValid != IsValid) + RebuildLayout(); + + base.Refresh(); + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/PhysicalMaterialEditor.cs b/Source/Editor/CustomEditors/Dedicated/PhysicalMaterialEditor.cs new file mode 100644 index 000000000..9cfe89c87 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/PhysicalMaterialEditor.cs @@ -0,0 +1,81 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using FlaxEditor.CustomEditors.Editors; +using FlaxEditor.CustomEditors.GUI; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + /// + [CustomEditor(typeof(PhysicalMaterial)), DefaultEditor] + public class PhysicalMaterialEditor : GenericEditor + { + private readonly List _labels = new List(64); + private const int FrictionCombineModeOrder = 1; + private const int RestitutionCombineModeOrder = 4; + + /// + protected override void SpawnProperty(LayoutElementsContainer itemLayout, ValueContainer itemValues, ItemInfo item) + { + var order = item.Order.Order; + + if (order != FrictionCombineModeOrder && order != RestitutionCombineModeOrder) + { + base.SpawnProperty(itemLayout, itemValues, item); + return; + } + + // Add labels with a check box + var label = new CheckablePropertyNameLabel(item.DisplayName); + label.CheckBox.Tag = order; + label.CheckChanged += CheckBoxOnCheckChanged; + _labels.Add(label); + itemLayout.Property(label, itemValues, item.OverrideEditor, item.TooltipText); + } + + private void CheckBoxOnCheckChanged(CheckablePropertyNameLabel label) + { + if (IsSetBlocked) + return; + + var order = (int)label.CheckBox.Tag; + var value = (PhysicalMaterial)Values[0]; + if (order == FrictionCombineModeOrder) + value.OverrideFrictionCombineMode = label.CheckBox.Checked; + else if (order == RestitutionCombineModeOrder) + value.OverrideRestitutionCombineMode = label.CheckBox.Checked; + SetValue(value); + } + + /// + public override void Refresh() + { + base.Refresh(); + + // Update all labels + var value = (PhysicalMaterial)Values[0]; + for (int i = 0; i < _labels.Count; i++) + { + var order = (int)_labels[i].CheckBox.Tag; + bool check = false; + if (order == FrictionCombineModeOrder) + check = value.OverrideFrictionCombineMode; + else if (order == RestitutionCombineModeOrder) + check = value.OverrideRestitutionCombineMode; + _labels[i].CheckBox.Checked = check; + } + } + + /// + public override void Initialize(LayoutElementsContainer layout) + { + _labels.Clear(); + + base.Initialize(layout); + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/PostProcessSettingsEditor.cs b/Source/Editor/CustomEditors/Dedicated/PostProcessSettingsEditor.cs new file mode 100644 index 000000000..7f7da4414 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/PostProcessSettingsEditor.cs @@ -0,0 +1,316 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using FlaxEditor.CustomEditors.Editors; +using FlaxEditor.CustomEditors.GUI; +using FlaxEditor.Scripting; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Base class for all post process settings structures editors. + /// + abstract class PostProcessSettingsEditor : GenericEditor + { + private List _labels; + + protected abstract int OverrideFlags { get; set; } + + /// + public override DisplayStyle Style => DisplayStyle.InlineIntoParent; + + /// + protected override List GetItemsForType(ScriptType type) + { + // Show structure properties + return GetItemsForType(type, true, true); + } + + /// + protected override void SpawnProperty(LayoutElementsContainer itemLayout, ValueContainer itemValues, ItemInfo item) + { + var setting = item.Info.GetAttribute(); + if (setting == null) + { + base.SpawnProperty(itemLayout, itemValues, item); + return; + } + + // Add labels with a check box + var label = new CheckablePropertyNameLabel(item.DisplayName); + label.CheckBox.Tag = setting.Bit; + label.CheckChanged += CheckBoxOnCheckChanged; + _labels.Add(label); + itemLayout.Property(label, itemValues, item.OverrideEditor, item.TooltipText); + } + + private void CheckBoxOnCheckChanged(CheckablePropertyNameLabel label) + { + if (IsSetBlocked) + return; + + var bit = (int)label.CheckBox.Tag; + var overrideFlags = OverrideFlags; + if (label.CheckBox.Checked) + overrideFlags |= bit; + else + overrideFlags &= ~bit; + OverrideFlags = overrideFlags; + } + + /// + public override void Refresh() + { + base.Refresh(); + + // Update all labels checkboxes + var overrideFlags = OverrideFlags; + for (int i = 0; i < _labels.Count; i++) + { + var bit = (int)_labels[i].CheckBox.Tag; + _labels[i].CheckBox.Checked = (overrideFlags & bit) != 0; + } + } + + /// + public override void Initialize(LayoutElementsContainer layout) + { + _labels = new List(32); + + base.Initialize(layout); + } + + /// + protected override void Deinitialize() + { + _labels.Clear(); + _labels = null; + + base.Deinitialize(); + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(AmbientOcclusionSettings)), DefaultEditor] + sealed class AmbientOcclusionSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((AmbientOcclusionSettings)Values[0]).OverrideFlags; + set + { + var settings = (AmbientOcclusionSettings)Values[0]; + settings.OverrideFlags = (AmbientOcclusionSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(BloomSettings)), DefaultEditor] + sealed class BloomSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((BloomSettings)Values[0]).OverrideFlags; + set + { + var settings = (BloomSettings)Values[0]; + settings.OverrideFlags = (BloomSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(ToneMappingSettings)), DefaultEditor] + sealed class ToneMappingSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((ToneMappingSettings)Values[0]).OverrideFlags; + set + { + var settings = (ToneMappingSettings)Values[0]; + settings.OverrideFlags = (ToneMappingSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(ColorGradingSettings)), DefaultEditor] + sealed class ColorGradingSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((ColorGradingSettings)Values[0]).OverrideFlags; + set + { + var settings = (ColorGradingSettings)Values[0]; + settings.OverrideFlags = (ColorGradingSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(EyeAdaptationSettings)), DefaultEditor] + sealed class EyeAdaptationSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((EyeAdaptationSettings)Values[0]).OverrideFlags; + set + { + var settings = (EyeAdaptationSettings)Values[0]; + settings.OverrideFlags = (EyeAdaptationSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(CameraArtifactsSettings)), DefaultEditor] + sealed class CameraArtifactsSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((CameraArtifactsSettings)Values[0]).OverrideFlags; + set + { + var settings = (CameraArtifactsSettings)Values[0]; + settings.OverrideFlags = (CameraArtifactsSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(LensFlaresSettings)), DefaultEditor] + sealed class LensFlaresSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((LensFlaresSettings)Values[0]).OverrideFlags; + set + { + var settings = (LensFlaresSettings)Values[0]; + settings.OverrideFlags = (LensFlaresSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(DepthOfFieldSettings)), DefaultEditor] + sealed class DepthOfFieldSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((DepthOfFieldSettings)Values[0]).OverrideFlags; + set + { + var settings = (DepthOfFieldSettings)Values[0]; + settings.OverrideFlags = (DepthOfFieldSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(MotionBlurSettings)), DefaultEditor] + sealed class MotionBlurSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((MotionBlurSettings)Values[0]).OverrideFlags; + set + { + var settings = (MotionBlurSettings)Values[0]; + settings.OverrideFlags = (MotionBlurSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(ScreenSpaceReflectionsSettings)), DefaultEditor] + sealed class ScreenSpaceReflectionsSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((ScreenSpaceReflectionsSettings)Values[0]).OverrideFlags; + set + { + var settings = (ScreenSpaceReflectionsSettings)Values[0]; + settings.OverrideFlags = (ScreenSpaceReflectionsSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(AntiAliasingSettings)), DefaultEditor] + sealed class AntiAliasingSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => (int)((AntiAliasingSettings)Values[0]).OverrideFlags; + set + { + var settings = (AntiAliasingSettings)Values[0]; + settings.OverrideFlags = (AntiAliasingSettingsOverride)value; + SetValue(settings); + } + } + } + + /// + /// Editor for type. + /// + [CustomEditor(typeof(PostFxMaterialsSettings)), DefaultEditor] + sealed class PostFxMaterialsSettingsEditor : PostProcessSettingsEditor + { + /// + protected override int OverrideFlags + { + get => 0; + set { } + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/RigidBodyEditor.cs b/Source/Editor/CustomEditors/Dedicated/RigidBodyEditor.cs new file mode 100644 index 000000000..ad7316205 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/RigidBodyEditor.cs @@ -0,0 +1,76 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.Collections.Generic; +using FlaxEditor.CustomEditors.GUI; +using FlaxEngine; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Custom editor for . + /// + /// + [CustomEditor(typeof(RigidBody)), DefaultEditor] + public class RigidBodyEditor : ActorEditor + { + private readonly List _labels = new List(64); + private const int MassOrder = 110; + + /// + protected override void SpawnProperty(LayoutElementsContainer itemLayout, ValueContainer itemValues, ItemInfo item) + { + var order = item.Order?.Order ?? 0; + + if (order != MassOrder) + { + base.SpawnProperty(itemLayout, itemValues, item); + return; + } + + // Add labels with a check box + var label = new CheckablePropertyNameLabel(item.DisplayName); + label.CheckBox.Tag = order; + label.CheckChanged += CheckBoxOnCheckChanged; + _labels.Add(label); + itemLayout.Property(label, itemValues, item.OverrideEditor, item.TooltipText); + label.UpdateStyle(); + } + + private void CheckBoxOnCheckChanged(CheckablePropertyNameLabel label) + { + if (IsSetBlocked) + return; + + var order = (int)label.CheckBox.Tag; + var value = (RigidBody)Values[0]; + if (order == MassOrder) + value.OverrideMass = label.CheckBox.Checked; + SetValue(value); + } + + /// + public override void Refresh() + { + base.Refresh(); + + // Update all labels + var value = (RigidBody)Values[0]; + for (int i = 0; i < _labels.Count; i++) + { + var order = (int)_labels[i].CheckBox.Tag; + bool check = false; + if (order == MassOrder) + check = value.OverrideMass; + _labels[i].CheckBox.Checked = check; + } + } + + /// + public override void Initialize(LayoutElementsContainer layout) + { + _labels.Clear(); + + base.Initialize(layout); + } + } +} diff --git a/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs b/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs new file mode 100644 index 000000000..1ed2634a5 --- /dev/null +++ b/Source/Editor/CustomEditors/Dedicated/ScriptsEditor.cs @@ -0,0 +1,845 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using FlaxEditor.Actions; +using FlaxEditor.Content; +using FlaxEditor.GUI; +using FlaxEditor.GUI.ContextMenu; +using FlaxEditor.GUI.Drag; +using FlaxEditor.Scripting; +using FlaxEngine; +using FlaxEngine.GUI; +using Object = FlaxEngine.Object; + +namespace FlaxEditor.CustomEditors.Dedicated +{ + /// + /// Drag and drop scripts area control. + /// + /// + public class DragAreaControl : ContainerControl + { + private DragHandlers _dragHandlers; + private DragScriptItems _dragScripts; + private DragAssets _dragAssets; + + /// + /// The parent scripts editor. + /// + public ScriptsEditor ScriptsEditor; + + /// + /// Initializes a new instance of the class. + /// + public DragAreaControl() + : base(0, 0, 120, 40) + { + AutoFocus = false; + + // Add script button + float addScriptButtonWidth = 60.0f; + var addScriptButton = new Button + { + TooltipText = "Add new scripts to the actor", + AnchorPreset = AnchorPresets.MiddleCenter, + Text = "Add script", + Parent = this, + Bounds = new Rectangle((Width - addScriptButtonWidth) / 2, 1, addScriptButtonWidth, 18), + }; + addScriptButton.ButtonClicked += AddScriptButtonOnClicked; + } + + private void AddScriptButtonOnClicked(Button button) + { + var scripts = Editor.Instance.CodeEditing.Scripts.Get(); + if (scripts.Count == 0) + { + // No scripts + var cm1 = new ContextMenu(); + cm1.AddButton("No scripts in project"); + cm1.Show(this, button.BottomLeft); + return; + } + + // Show context menu with list of scripts to add + var cm = new ItemsListContextMenu(180); + for (int i = 0; i < scripts.Count; i++) + { + var scriptType = scripts[i]; + var item = new ItemsListContextMenu.Item(scriptType.Name, scriptType) + { + TooltipText = scriptType.TypeName, + }; + var attributes = scriptType.GetAttributes(false); + var tooltipAttribute = (TooltipAttribute)attributes.FirstOrDefault(x => x is TooltipAttribute); + if (tooltipAttribute != null) + { + item.TooltipText += '\n'; + item.TooltipText += tooltipAttribute.Text; + } + cm.AddItem(item); + } + cm.ItemClicked += item => AddScript((ScriptType)item.Tag); + cm.SortChildren(); + cm.Show(this, button.BottomLeft); + } + + /// + public override void Draw() + { + var style = Style.Current; + var size = Size; + + // Info + Render2D.DrawText(style.FontSmall, "Drag scripts here", new Rectangle(2, 22, size.X - 4, size.Y - 4 - 20), style.ForegroundDisabled, TextAlignment.Center, TextAlignment.Center); + + // Check if drag is over + if (IsDragOver && _dragHandlers != null && _dragHandlers.HasValidDrag) + { + var area = new Rectangle(Vector2.Zero, size); + Render2D.FillRectangle(area, Color.Orange * 0.5f); + Render2D.DrawRectangle(area, Color.Black); + } + + base.Draw(); + } + + private bool ValidateScript(ScriptItem scriptItem) + { + var scriptName = scriptItem.ScriptName; + var scriptType = ScriptsBuilder.FindScript(scriptName); + return scriptType != null; + } + + private bool ValidateAsset(AssetItem assetItem) + { + if (assetItem is VisualScriptItem scriptItem) + return scriptItem.ScriptType != ScriptType.Null; + return false; + } + + /// + public override DragDropEffect OnDragEnter(ref Vector2 location, DragData data) + { + var result = base.OnDragEnter(ref location, data); + if (result != DragDropEffect.None) + return result; + + if (_dragHandlers == null) + { + _dragScripts = new DragScriptItems(ValidateScript); + _dragAssets = new DragAssets(ValidateAsset); + _dragHandlers = new DragHandlers + { + _dragScripts, + _dragAssets, + }; + } + return _dragHandlers.OnDragEnter(data); + } + + /// + public override DragDropEffect OnDragMove(ref Vector2 location, DragData data) + { + var result = base.OnDragMove(ref location, data); + if (result != DragDropEffect.None) + return result; + + return _dragHandlers.Effect; + } + + /// + public override void OnDragLeave() + { + _dragHandlers.OnDragLeave(); + + base.OnDragLeave(); + } + + /// + public override DragDropEffect OnDragDrop(ref Vector2 location, DragData data) + { + var result = base.OnDragDrop(ref location, data); + if (result != DragDropEffect.None) + return result; + + if (_dragHandlers.HasValidDrag) + { + if (_dragScripts.HasValidDrag) + { + result = _dragScripts.Effect; + AddScripts(_dragScripts.Objects); + } + else if (_dragAssets.HasValidDrag) + { + result = _dragAssets.Effect; + AddScripts(_dragAssets.Objects); + } + + _dragHandlers.OnDragDrop(null); + } + + return result; + } + + private void AddScript(ScriptType item) + { + var list = new List(1) { item }; + AddScripts(list); + } + + private void AddScripts(List items) + { + var list = new List(items.Count); + for (int i = 0; i < items.Count; i++) + { + var item = (VisualScriptItem)items[i]; + var scriptType = item.ScriptType; + if (scriptType == ScriptType.Null) + { + Editor.LogWarning("Invalid script type " + item.ShortName); + } + else + { + list.Add(scriptType); + } + } + AddScripts(list); + } + + private void AddScripts(List items) + { + var list = new List(items.Count); + for (int i = 0; i < items.Count; i++) + { + var item = items[i]; + var scriptName = item.ScriptName; + var scriptType = ScriptsBuilder.FindScript(scriptName); + if (scriptType == null) + { + Editor.LogWarning("Invalid script type " + scriptName); + } + else + { + list.Add(new ScriptType(scriptType)); + } + } + AddScripts(list); + } + + private void AddScripts(List items) + { + var actions = new List(4); + + for (int i = 0; i < items.Count; i++) + { + var scriptType = items[i]; + var actors = ScriptsEditor.ParentEditor.Values; + for (int j = 0; j < actors.Count; j++) + { + var actor = (Actor)actors[j]; + actions.Add(AddRemoveScript.Add(actor, scriptType)); + } + } + + if (actions.Count == 0) + { + Editor.LogWarning("Failed to spawn scripts"); + return; + } + + var multiAction = new MultiUndoAction(actions); + multiAction.Do(); + ScriptsEditor.Presenter?.Undo.AddAction(multiAction); + } + } + + /// + /// Small image control added per script group that allows to drag and drop a reference to it. Also used to reorder the scripts. + /// + /// + internal class ScriptDragIcon : Image + { + private ScriptsEditor _editor; + private bool _isMouseDown; + private Vector2 _mouseDownPos; + + /// + /// Gets the target script. + /// + public Script Script => (Script)Tag; + + /// + /// Initializes a new instance of the class. + /// + /// The script editor. + /// The target script. + public ScriptDragIcon(ScriptsEditor editor, Script script) + { + Tag = script; + _editor = editor; + } + + /// + public override void OnMouseEnter(Vector2 location) + { + _mouseDownPos = Vector2.Minimum; + + base.OnMouseEnter(location); + } + + /// + public override void OnMouseLeave() + { + // Check if start drag drop + if (_isMouseDown) + { + DoDrag(); + _isMouseDown = false; + } + + base.OnMouseLeave(); + } + + /// + public override void OnMouseMove(Vector2 location) + { + // Check if start drag drop + if (_isMouseDown && Vector2.Distance(location, _mouseDownPos) > 10.0f) + { + DoDrag(); + _isMouseDown = false; + } + + base.OnMouseMove(location); + } + + /// + public override bool OnMouseUp(Vector2 location, MouseButton button) + { + if (button == MouseButton.Left) + { + // Clear flag + _isMouseDown = false; + } + + return base.OnMouseUp(location, button); + } + + /// + public override bool OnMouseDown(Vector2 location, MouseButton button) + { + if (button == MouseButton.Left) + { + // Set flag + _isMouseDown = true; + _mouseDownPos = location; + } + + return base.OnMouseDown(location, button); + } + + private void DoDrag() + { + var script = Script; + _editor.OnScriptDragChange(true, script); + DoDragDrop(DragScripts.GetDragData(script)); + _editor.OnScriptDragChange(false, script); + } + } + + internal class ScriptArrangeBar : Control + { + private ScriptsEditor _editor; + private int _index; + private Script _script; + private DragDropEffect _dragEffect; + + public ScriptArrangeBar() + : base(0, 0, 120, 6) + { + AutoFocus = false; + Visible = false; + } + + public void Init(int index, ScriptsEditor editor) + { + _editor = editor; + _index = index; + _editor.ScriptDragChange += OnScriptDragChange; + } + + private void OnScriptDragChange(bool start, Script script) + { + _script = start ? script : null; + Visible = start; + OnDragLeave(); + } + + /// + public override void Draw() + { + base.Draw(); + + var color = FlaxEngine.GUI.Style.Current.BackgroundSelected * (IsDragOver ? 0.9f : 0.1f); + Render2D.FillRectangle(new Rectangle(Vector2.Zero, Size), color); + } + + /// + public override DragDropEffect OnDragEnter(ref Vector2 location, DragData data) + { + _dragEffect = DragDropEffect.None; + + var result = base.OnDragEnter(ref location, data); + if (result != DragDropEffect.None) + return result; + + if (data is DragDataText textData && DragScripts.IsValidData(textData)) + return _dragEffect = DragDropEffect.Move; + + return result; + } + + /// + public override DragDropEffect OnDragMove(ref Vector2 location, DragData data) + { + return _dragEffect; + } + + /// + public override void OnDragLeave() + { + _dragEffect = DragDropEffect.None; + + base.OnDragLeave(); + } + + /// + public override DragDropEffect OnDragDrop(ref Vector2 location, DragData data) + { + var result = base.OnDragDrop(ref location, data); + if (result != DragDropEffect.None) + return result; + + if (_dragEffect != DragDropEffect.None) + { + result = _dragEffect; + _dragEffect = DragDropEffect.None; + + _editor.ReorderScript(_script, _index); + } + + return result; + } + } + + /// + /// Custom editor for actor scripts collection. + /// + /// + public sealed class ScriptsEditor : SyncPointEditor + { + private CheckBox[] _scriptToggles; + + /// + /// Delegate for script drag start and event events. + /// + /// Set to true if drag started, otherwise false. + /// The target script to reorder. + public delegate void ScriptDragDelegate(bool start, Script script); + + /// + /// Occurs when script drag changes (starts or ends). + /// + public event ScriptDragDelegate ScriptDragChange; + + /// + /// The scripts collection. Undo operations are recorder for scripts. + /// + private readonly List + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/machine.config b/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/machine.config new file mode 100644 index 000000000..2577c81dd --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/machine.config @@ -0,0 +1,280 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/settings.map b/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/settings.map new file mode 100644 index 000000000..9a52ccc02 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/web.config b/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/web.config new file mode 100644 index 000000000..e1428f8c3 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/2.0/web.config @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/machine.config b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/machine.config new file mode 100644 index 000000000..f3b71c43c --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/machine.config @@ -0,0 +1,307 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/settings.map b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/web.config b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/web.config new file mode 100644 index 000000000..2a7dfd2ed --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.0/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/machine.config b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/machine.config new file mode 100644 index 000000000..455709536 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/machine.config @@ -0,0 +1,310 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/settings.map b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/web.config b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/web.config new file mode 100644 index 000000000..324c529f0 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/4.5/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/browscap.ini b/Source/Platforms/Android/Binaries/Mono/etc/mono/browscap.ini new file mode 100644 index 000000000..1267e1deb --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/browscap.ini @@ -0,0 +1,16979 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT + +[GJK_Browscap_Version] +Version=4476 +Released=Wed, 17 Jun 2009 06:30:21 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser=DefaultProperties +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser=Ask +Frames=true +Tables=true +Crawler=true + +[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser=Teoma + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser=AskJeeves + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser=Baidu +Frames=true +Tables=true +Crawler=true + +[BaiduImageSpider*] +Parent=Baidu +Browser=BaiduImageSpider + +[Baiduspider*] +Parent=Baidu +Browser=BaiDu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser=Google +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot-Mobile +Frames=false +IFrames=false +Tables=false + +[*Google Wireless Transcoder*] +Parent=Google +Browser=Google Wireless Transcoder + +[AdsBot-Google (?http://www.google.com/adsbot.html)] +Parent=Google +Browser=AdsBot-Google + +[Feedfetcher-Google-iGoogleGadgets;*] +Parent=Google +Browser=iGoogleGadgets +isBanned=true +isSyndicationReader=true + +[Feedfetcher-Google;*] +Parent=Google +Browser=Feedfetcher-Google +isBanned=true +isSyndicationReader=true + +[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] +Parent=Google +Browser=Google OpenSocial + +[Google-Site-Verification/1.0] +Parent=Google +Browser=Google-Site-Verification + +[Google-Sitemaps/*] +Parent=Google +Browser=Google-Sitemaps + +[Googlebot-Image/*] +Parent=Google +Browser=Googlebot-Image +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser=googlebot-urlconsole + +[Googlebot-Video/1.0] +Parent=Google +Browser=Google-Video + +[Googlebot/2.1 (?http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/Test*] +Parent=Google +Browser=Googlebot/Test + +[gsa-crawler*] +Parent=Google +Browser=Google Search Appliance +isBanned=true + +[Mediapartners-Google*] +Parent=Google +Browser=Mediapartners-Google + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser=Google Desktop + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser=Google Toolbar +isBanned=true + +[Mozilla/5.0 (compatible; Google Keyword Tool;*)] +Parent=Google +Browser=Google Keyword Tool + +[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] +Parent=Google +Browser=Google Webmaster Tools + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser=Inktomi +Frames=true +Tables=true +Crawler=true + +[* (compatible;YahooSeeker/M1A1-R2D2; *)] +Parent=Inktomi +Browser=YahooSeeker-Mobile +Frames=false +Tables=false + +[Mozilla/4.0] +Parent=Inktomi + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser=Yahoo! RobotStudy +isBanned=true + +[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMC + +[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMF + +[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] +Parent=Inktomi +Browser=Y!J-AGENT/BMI + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Directory Engine + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser=Yahoo! Slurp China + +[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp + +[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] +Parent=Inktomi +Browser=Yahoo! Verifier +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser=Slurp/cat + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] +Parent=Inktomi +Browser=Yahoo-MMCrawler +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Scooter/*] +Parent=Inktomi +Browser=Scooter + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser=Scooter/3.3Y!CrawlX +Version=3.3 +MajorVer=3 +MinorVer=3 + +[slurp] +Parent=Inktomi +Browser=slurp + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser=Y!J-BSC +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser=Y!J-SRD +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser=Yahoo Mindset + +[Yahoo Pipes*] +Parent=Inktomi +Browser=Yahoo Pipes + +[Yahoo! Mindset] +Parent=Inktomi +Browser=Yahoo! Mindset + +[Yahoo! Slurp/Site Explorer] +Parent=Inktomi +Browser=Yahoo! Site Explorer + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser=Yahoo-Blogs + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser=Yahoo-MMAudVid + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser=Yahoo-MMCrawler +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser=YahooFeedSeeker +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser=YahooSeeker +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser=YahooSeeker/CafeKelsa + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser=YahooVideoSearch + +[YahooYSMcm*] +Parent=Inktomi +Browser=YahooYSMcm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser=MSN +Frames=true +Tables=true +Crawler=true + +[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=adidxbot + +[librabot/1.0 (*)] +Parent=MSN +Browser=librabot + +[llssbot/1.0] +Parent=MSN +Browser=llssbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSMOBOT/1.1*] +Parent=MSN +Browser=msnbot-mobile +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-Academic/1.0*] +Parent=MSN +Browser=MSNBot-Academic +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.0*] +Parent=MSN +Browser=msnbot-media +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.1*] +Parent=MSN +Browser=msnbot-media +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-News/1.0*] +Parent=MSN +Browser=MSNBot-News +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSNBot-NewsBlogs/1.0*] +Parent=MSN +Browser=MSNBot-NewsBlogs +Version=1 +MajorVer=1 +MinorVer=0 + +[msnbot-products] +Parent=MSN +Browser=msnbot-products + +[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=msnbot-webmaster tools + +[msnbot/1.0*] +Parent=MSN +Browser=msnbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.1*] +Parent=MSN +Browser=msnbot +Version=1.1 +MajorVer=1 +MinorVer=1 + +[msnbot/2.0b*] +Parent=MSN +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[MSR-ISRCCrawler] +Parent=MSN +Browser=MSR-ISRCCrawler + +[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=renlifangbot + +[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] +Parent=MSN +Browser=msnbot-mobile + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser=Yahoo +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser=Y!J + +[Mozilla/5.0 (Yahoo-Test/4.0*)] +Parent=Yahoo +Browser=Yahoo-Test +Version=4.0 +MajorVer=4 +MinorVer=0 + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser=Yahoo! Media +isBanned=true + +[My Browser] +Parent=Yahoo +Browser=Yahoo! My Browser + +[Y!OASIS/*] +Parent=Yahoo +Browser=Y!OASIS +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser=YahooYSMcm +Version=2.0 +MajorVer=2 +MinorVer=0 +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser=YRL_ODP_CRAWLER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser=Yandex +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] +Parent=Yandex +Browser=VisualParser +isBanned=true + +[YaDirectBot/*] +Parent=Yandex +Browser=YaDirectBot + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser=YandexBlog +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser=YandexSomething +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web + +[Best of the Web] +Parent=DefaultProperties +Browser=Best of the Web +Frames=true +Tables=true + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Feed Grabber +isSyndicationReader=true +Crawler=false + +[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Spider +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser=Boitho +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser=boitho.com-dc + +[boitho.com-robot/*] +Parent=Boitho +Browser=boitho.com-robot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser=Convera +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser=ConveraCrawler + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser=ConveraMultiMediaCrawler +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser=CrawlConvera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot + +[DotBot] +Parent=DefaultProperties +Browser=DotBot +Frames=true +Tables=true +isBanned=true +Crawler=true + +[DotBot/* (http://www.dotnetdotcom.org/*)] +Parent=DotBot + +[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] +Parent=DotBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb + +[Entireweb] +Parent=DefaultProperties +Browser=Entireweb +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] +Parent=Entireweb + +[Speedy Spider (*Beta/*)] +Parent=Entireweb + +[Speedy?Spider?(http://www.entireweb.com*)] +Parent=Entireweb + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser=Envolk +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser=Exalead +Frames=true +Tables=true +isBanned=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser=Exabot-Images +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot-Test/*] +Parent=Exalead +Browser=Exabot-Test + +[Exabot/2.0] +Parent=Exalead +Browser=Exabot + +[Exabot/3.0] +Parent=Exalead +Browser=Exabot +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser=Exalead NG +isBanned=true + +[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] +Parent=Exalead +Browser=Exabot-Images + +[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] +Parent=Exalead +Browser=Exabot/BiggerBetter/tests + +[Mozilla/5.0 (compatible; Exabot/3.0;*)] +Parent=Exalead +Browser=Exabot +isBanned=false + +[Mozilla/5.0 (compatible; NGBot/*)] +Parent=Exalead + +[ng/*] +Parent=Exalead +Browser=Exalead Previewer +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser=Fast/AllTheWeb +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST Enterprise Crawler + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser=FAST Data Search Document Retriever + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser=FAST MetaWeb Crawler + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/FirstPage + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Fresh + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Multimedia + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser=FastSearch Web Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot + +[Gigabot] +Parent=DefaultProperties +Browser=Gigabot +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Gigabot*] +Parent=Gigabot + +[GigabotSiteSearch/*] +Parent=Gigabot +Browser=GigabotSiteSearch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser=Ilse +Frames=true +Tables=true +Crawler=true + +[IlseBot/*] +Parent=Ilse + +[INGRID/?.0*] +Parent=Ilse +Browser=Ilse + +[Mozilla/3.0 (INGRID/*] +Parent=Ilse +Browser=Ilse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project + +[iVia Project] +Parent=DefaultProperties +Browser=iVia Project +Frames=true +IFrames=true +Tables=true +Crawler=true + +[DataFountains/DMOZ Downloader*] +Parent=iVia Project +Browser=DataFountains/DMOZ Downloader +isBanned=true + +[DataFountains/DMOZ Feature Vector Corpus Creator*] +Parent=iVia Project +Browser=DataFountains/DMOZ Feature Vector Corpus + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser=Jayde Online +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser=ExactSeek Crawler + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser=exactseek-pagereaper +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser=exactseek.com + +[Jayde Crawler*] +Parent=Jayde Online +Browser=Jayde Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser=Lycos +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser=Lycos + +[Lycos-Proxy] +Parent=Lycos +Browser=Lycos-Proxy + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser=Lycos-Spider_(modspider) + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser=Lycos-Spider_(T-Rex) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser=Naver +isBanned=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver Cowbot + +[Mozilla/4.0 (compatible; NaverBot/*; *)] +Parent=Naver + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser=Naver NaverBot + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver NHN Corp + +[Yeti/*] +Parent=Naver +Browser=Yeti + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap + +[Snap] +Parent=DefaultProperties +Browser=Snap +isBanned=true +Crawler=true + +[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] +Parent=Snap + +[Snapbot/*] +Parent=Snap + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou + +[Sogou] +Parent=DefaultProperties +Browser=Sogou +Frames=true +Tables=true +isBanned=true +Crawler=true + +[shaboyi spider] +Parent=Sogou +Browser=Sogou/Shaboyi Spider + +[Sogou develop spider/*] +Parent=Sogou +Browser=Sogou Develop Spider + +[Sogou head spider*] +Parent=Sogou +Browser=Sogou/HEAD Spider + +[sogou js robot(*)] +Parent=Sogou + +[Sogou Orion spider/*] +Parent=Sogou +Browser=Sogou Orion spider + +[Sogou Pic Agent] +Parent=Sogou +Browser=Sogou/Image Crawler + +[Sogou Pic Spider] +Parent=Sogou +Browser=Sogou Pic Spider + +[Sogou Push Spider/*] +Parent=Sogou +Browser=Sogou Push Spider + +[sogou spider] +Parent=Sogou +Browser=Sogou/Spider + +[sogou web spider*] +Parent=Sogou +Browser=sogou web spider + +[Sogou-Test-Spider/*] +Parent=Sogou +Browser=Sogou-Test-Spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot + +[YodaoBot] +Parent=DefaultProperties +Browser=YodaoBot +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] +Parent=YodaoBot +Browser=YodaoBot-Image + +[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[YodaoBot/1.* (*)] +Parent=YodaoBot + +[Best Whois (http://www.bestwhois.net/)] +Parent=DNS Tools +Browser=Best Whois + +[DNSGroup/*] +Parent=DNS Tools +Browser=DNS Group Crawler + +[NG-Search/*] +Parent=Exalead +Browser=NG-SearchBot + +[TouchStone] +Parent=Feeds Syndicators +Browser=TouchStone +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser=General Crawlers +Crawler=true + +[A .NET Web Crawler] +Parent=General Crawlers +isBanned=true + +[BabalooSpider/1.*] +Parent=General Crawlers +Browser=BabalooSpider + +[BilgiBot/*] +Parent=General Crawlers +Browser=BilgiBot +isBanned=true + +[bot/* (bot; *bot@bot.bot)] +Parent=General Crawlers +Browser=bot +isBanned=true + +[CyberPatrol*] +Parent=General Crawlers +Browser=CyberPatrol +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser=Cynthia +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ddetailsbot (http://www.displaydetails.com)] +Parent=General Crawlers +Browser=ddetailsbot + +[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] +Parent=General Crawlers +Browser=DomainCrawler + +[DomainsBotBot/1.*] +Parent=General Crawlers +Browser=DomainsBotBot +isBanned=true + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser=DomainsDB + +[Drupal (*)] +Parent=General Crawlers +Browser=Drupal + +[Dumbot (version *)*] +Parent=General Crawlers +Browser=Dumbfind + +[EuripBot/*] +Parent=General Crawlers +Browser=Europe Internet Portal + +[eventax/*] +Parent=General Crawlers +Browser=eventax + +[FANGCrawl/*] +Parent=General Crawlers +Browser=Safe-t.net Web Filtering Service +isBanned=true + +[favorstarbot/*] +Parent=General Crawlers +Browser=favorstarbot +isBanned=true + +[FollowSite.com (*)] +Parent=General Crawlers +Browser=FollowSite +isBanned=true + +[Gaisbot*] +Parent=General Crawlers +Browser=Gaisbot + +[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] +Parent=General Crawlers +Browser=Healthbot +isBanned=true + +[hitcrawler_0.*] +Parent=General Crawlers +Browser=hitcrawler +isBanned=true + +[htdig/*] +Parent=General Crawlers +Browser=ht://Dig + +[http://hilfe.acont.de/bot.html ACONTBOT] +Parent=General Crawlers +Browser=ACONTBOT +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser=Omea Pro + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser=KakleBot + +[KBeeBot/0.*] +Parent=General Crawlers +Browser=KBeeBot +isBanned=true + +[Keyword Density/*] +Parent=General Crawlers +Browser=Keyword Density + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser=LetsCrawl.com +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser=Lincoln State Web Browser +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser=Links4US-Crawler +isBanned=true + +[Lorkyll *.* -- lorkyll@444.net] +Parent=General Crawlers +Browser=Lorkyll +isBanned=true + +[Lsearch/sondeur] +Parent=General Crawlers +Browser=Lsearch/sondeur +isBanned=true + +[LucidMedia ClickSense/4.?] +Parent=General Crawlers +Browser=LucidMedia-ClickSense +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser=MapoftheInternet +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser=MedHunt +Version=0.3 +MajorVer=0 +MinorVer=3 + +[masidani_bot_v0.6*] +Parent=General Crawlers +Browser=masidani_bot + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser=Metaspinner/0.01 +Version=0.01 +MajorVer=0 +MinorVer=01 + +[metatagsdir/*] +Parent=General Crawlers +Browser=metatagsdir +isBanned=true + +[Microsoft Windows Network Diagnostics] +Parent=General Crawlers +Browser=Microsoft Windows Network Diagnostics +isBanned=true + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser=Miva + +[moget/*] +Parent=General Crawlers +Browser=Goo + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser=Mozdex + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser=WebCapture + +[Mozilla/4.0 (compatible; DepSpid/*)] +Parent=General Crawlers +Browser=DepSpid + +[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] +Parent=General Crawlers +Browser=AVG + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser=Vonna.com +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser=MyFamilyBot + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser=N-Stealth + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Spider; Linux)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Win32)] +Parent=General Crawlers +Browser=Unknown Crawler +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +isBanned=true + +[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] +Parent=General Crawlers +Browser=Gnomit +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser=AboutUsBot +isBanned=true + +[Mozilla/5.0 (compatible; BuzzRankingBot/*)] +Parent=General Crawlers +Browser=BuzzRankingBot +isBanned=true + +[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] +Parent=General Crawlers +Browser=Diffbot + +[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] +Parent=General Crawlers +Browser=FirstSearchBot + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser=Healthdash + +[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] +Parent=General Crawlers +Browser=JadynAveBot +isBanned=true + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser=Kyluka + +[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] +Parent=General Crawlers +Browser=MJ12bot +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] +Parent=General Crawlers +Browser=Europe Web Archive + +[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] +Parent=General Crawlers +Browser=Seznam screenshot-generator +isBanned=true + +[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] +Parent=General Crawlers +Browser=Twingly Recon + +[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] +Parent=General Crawlers +Browser=UnWrap + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser=Vermut + +[Mozilla/5.0 (compatible; Webbot/*)] +Parent=General Crawlers +Browser=Webbot.ru +isBanned=true + +[n4p_bot*] +Parent=General Crawlers +Browser=n4p_bot + +[nabot*] +Parent=General Crawlers +Browser=Nabot + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser=NetCarta_WebMapper +isBanned=true + +[NetID.com Bot*] +Parent=General Crawlers +Browser=NetID.com Bot +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser=neTVision + +[NextopiaBOT*] +Parent=General Crawlers +Browser=NextopiaBOT + +[nicebot] +Parent=General Crawlers +Browser=nicebot +isBanned=true + +[niXXieBot?Foster*] +Parent=General Crawlers +Browser=niXXiebot-Foster + +[Nozilla/P.N (Just for IDS woring)] +Parent=General Crawlers +Browser=Nozilla/P.N +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser=Nudelsalat +isBanned=true + +[NV32ts] +Parent=General Crawlers +Browser=NV32ts +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser=Ocelli + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser=OpenTaggerBot + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser=Oracle Enterprise Search +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser=Oracle Ultra Search + +[Pajaczek/*] +Parent=General Crawlers +Browser=Pajaczek +isBanned=true + +[panscient.com] +Parent=General Crawlers +Browser=panscient.com +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser=Patwebbot + +[PDFBot (crawler@pdfind.com)] +Parent=General Crawlers +Browser=PDFBot + +[Pete-Spider/1.*] +Parent=General Crawlers +Browser=Pete-Spider +isBanned=true + +[PhpDig/*] +Parent=General Crawlers +Browser=PhpDig + +[PlantyNet_WebRobot*] +Parent=General Crawlers +Browser=PlantyNet +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt + +[PluckItCrawler/1.0 (*)] +Parent=General Crawlers +isMobileDevice=true + +[PMAFind] +Parent=General Crawlers +Browser=PMAFind +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser=Poodle Predictor + +[QuickFinder Crawler] +Parent=General Crawlers +Browser=QuickFinder +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser=Radiation Retriever +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser=RedCarpet +isBanned=true + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser=RixBot + +[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] +Parent=General Crawlers +Browser=TinyURL + +[SBIder/*] +Parent=General Crawlers +Browser=SiteSell + +[ScollSpider/2.*] +Parent=General Crawlers +Browser=ScollSpider +isBanned=true + +[Search Fst] +Parent=General Crawlers +Browser=Search Fst + +[searchbot admin@google.com] +Parent=General Crawlers +Browser=searchbot +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser=LookSeek +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser=Semantic Discovery + +[SeznamBot/*] +Parent=General Crawlers +Browser=SeznamBot +isBanned=true + +[Shelob (shelob@gmx.net)] +Parent=General Crawlers +Browser=Shelob +isBanned=true + +[shelob v1.*] +Parent=General Crawlers +Browser=shelob +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser=ShopWiki +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser=ShowXML +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser=Internetseer + +[SMBot/*] +Parent=General Crawlers +Browser=SMBot + +[sohu*] +Parent=General Crawlers +Browser=sohu-search +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser=SpankBot +isBanned=true + +[spider (tspyyp@tom.com)] +Parent=General Crawlers +Browser=spider (tspyyp@tom.com) +isBanned=true + +[Sunrise/0.*] +Parent=General Crawlers +Browser=Sunrise +isBanned=true + +[Superpages URL Verification Engine] +Parent=General Crawlers +Browser=Superpages + +[Surf Knight] +Parent=General Crawlers +Browser=Surf Knight +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser=SurveyBot +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser=SynapticSearch +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser=SyncMgr + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser=Tagyu + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser=Talkro Web-Shot +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser=Tecomi + +[TheInformant*] +Parent=General Crawlers +Browser=TheInformant +isBanned=true + +[Toata dragostea*] +Parent=General Crawlers +Browser=Toata dragostea +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser=UbiCrawler + +[UCmore] +Parent=General Crawlers +Browser=UCmore + +[User*Agent:*] +Parent=General Crawlers +isBanned=true + +[USER_AGENT] +Parent=General Crawlers +Browser=USER_AGENT +isBanned=true + +[VadixBot] +Parent=General Crawlers +Browser=VadixBot + +[VengaBot/*] +Parent=General Crawlers +Browser=VengaBot +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser=Visicom Toolbar + +[W3C-WebCon/*] +Parent=General Crawlers +Browser=W3C-WebCon + +[Webclipping.com] +Parent=General Crawlers +Browser=Webclipping.com +isBanned=true + +[webcollage/*] +Parent=General Crawlers +Browser=WebCollage +isBanned=true + +[WebCrawler_1.*] +Parent=General Crawlers +Browser=WebCrawler + +[WebFilter Robot*] +Parent=General Crawlers +Browser=WebFilter Robot + +[WeBoX/*] +Parent=General Crawlers +Browser=WeBoX + +[WebTrends/*] +Parent=General Crawlers +Browser=WebTrends + +[West Wind Internet Protocols*] +Parent=General Crawlers +Browser=Versatel +isBanned=true + +[WhizBang] +Parent=General Crawlers +Browser=WhizBang + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser=Willow Internet Crawler + +[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] +Parent=General Crawlers +Browser=WIRE +isBanned=true + +[www.fi crawler, contact crawler@www.fi] +Parent=General Crawlers +Browser=www.fi crawler + +[Xerka WebBot v1.*] +Parent=General Crawlers +Browser=Xerka +isBanned=true + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser=XML Sitemaps Generator + +[XSpider*] +Parent=General Crawlers +Browser=XSpider +isBanned=true + +[YooW!/* (?http://www.yoow.eu)] +Parent=General Crawlers +Browser=YooW! +isBanned=true + +[HiddenMarket-*] +Parent=General RSS +Browser=HiddenMarket +isBanned=true + +[FOTOCHECKER] +Parent=Image Crawlers +Browser=FOTOCHECKER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser=Search Engines +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser=FDSE Robot + +[*Fluffy the spider*] +Parent=Search Engines +Browser=SearchHippo + +[Abacho*] +Parent=Search Engines +Browser=Abacho + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser=Ah-Ha + +[AIBOT/*] +Parent=Search Engines +Browser=21Seek.Com + +[ALeadSoftbot/*] +Parent=Search Engines +Browser=ALeadSoftbot + +[Amfibibot/*] +Parent=Search Engines +Browser=Amfibi + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser=antibot + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser=Walhello + +[ASPSeek/*] +Parent=Search Engines +Browser=ASPSeek + +[BigCliqueBOT/*] +Parent=Search Engines +Browser=BigClique.com/BigClic.com + +[Blaiz-Bee/*] +Parent=Search Engines +Browser=RawGrunt + +[btbot/*] +Parent=Search Engines +Browser=Bit Torrent Search Engine + +[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] +Parent=Search Engines +Browser=Busiversebot +isBanned=true + +[CatchBot/*; http://www.catchbot.com] +Parent=Search Engines +Browser=CatchBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser=CipinetBot + +[Cogentbot/1.?*] +Parent=Search Engines +Browser=Cogentbot + +[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] +Parent=Search Engines +Browser=SqwidgeBot + +[cosmos*] +Parent=Search Engines +Browser=Xyleme + +[Deepindex] +Parent=Search Engines +Browser=Deepindex + +[DiamondBot] +Parent=Search Engines +Browser=DiamondBot + +[Dumbot*] +Parent=Search Engines +Browser=Dumbot +Version=0.2 +MajorVer=0 +MinorVer=2 +Beta=true + +[Eule?Robot*] +Parent=Search Engines +Browser=Eule-Robot + +[Faxobot/*] +Parent=Search Engines +Browser=Faxo + +[Filangy/*] +Parent=Search Engines +Browser=Filangy + +[flatlandbot/*] +Parent=Search Engines +Browser=Flatland + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser=ScorpionBot +isBanned=true + +[FyberSpider*] +Parent=Search Engines +Browser=FyberSpider +isBanned=true + +[Gaisbot/*] +Parent=Search Engines +Browser=Gaisbot + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser=gazz + +[geniebot*] +Parent=Search Engines +Browser=GenieKnows + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser=GoForIt + +[GoGuidesBot/*] +Parent=Search Engines +Browser=GoGuidesBot + +[GroschoBot/*] +Parent=Search Engines +Browser=GroschoBot + +[GurujiBot/1.*] +Parent=Search Engines +Browser=GurujiBot +isBanned=true + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser=Mirago + +[HolmesBot (http://holmes.ge)] +Parent=Search Engines +Browser=HolmesBot + +[Hotzonu/*] +Parent=Search Engines +Browser=Hotzonu + +[HyperEstraier/*] +Parent=Search Engines +Browser=HyperEstraier +isBanned=true + +[i1searchbot/*] +Parent=Search Engines +Browser=i1searchbot + +[IIITBOT/1.*] +Parent=Search Engines +Browser=Indian Language Web Search Engine + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser=Iltrovatore-Setaccio + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser=InfociousBot +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser=Infoseek + +[iSEEKbot/*] +Parent=Search Engines +Browser=iSEEKbot + +[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] +Parent=Search Engines +Browser=Knight + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser=Kolinka Forum Search +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser=KRetrieve +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser=LapozzBot + +[Linknzbot*] +Parent=Search Engines +Browser=Linknzbot + +[LocalcomBot/*] +Parent=Search Engines +Browser=LocalcomBot + +[Mail.Ru/1.0] +Parent=Search Engines +Browser=Mail.Ru + +[MaSagool/*] +Parent=Search Engines +Browser=Sagoo +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser=miniRank + +[Mnogosearch*] +Parent=Search Engines +Browser=Mnogosearch + +[Mozilla/0.9* no dos :) (Linux)] +Parent=Search Engines +Browser=goliat +isBanned=true + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser=Arachmo + +[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] +Parent=Search Engines +Browser=ThunderStone +isBanned=true + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser=Girafabot +Win32=true + +[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] +Parent=Search Engines +Browser=Vagabondo + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser=Qihoo + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser=Inxight Software + +[Mozilla/5.0 (*) VoilaBot*] +Parent=Search Engines +Browser=VoilaBot +isBanned=true + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser=ActiveTouristBot + +[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] +Parent=Search Engines +Browser=Butterfly + +[Mozilla/5.0 (compatible; Charlotte/*; *)] +Parent=Search Engines +Browser=Charlotte +Beta=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT*)] +Parent=Search Engines +Browser=FatAssANT + +[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] +Parent=Search Engines +Browser=DBLBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; EARTHCOM.info/*)] +Parent=Search Engines +Browser=EARTHCOM + +[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] +Parent=Search Engines +Browser=Lipperhey Spider + +[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser=MojeekBot + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser=Northern Light Web Search + +[Mozilla/5.0 (compatible; OsO;*] +Parent=Search Engines +Browser=Octopodus +isBanned=true + +[Mozilla/5.0 (compatible; Pogodak.*)] +Parent=Search Engines +Browser=Pogodak + +[Mozilla/5.0 (compatible; Quantcastbot/1.*)] +Parent=Search Engines +Browser=Quantcastbot + +[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] +Parent=Search Engines +Browser=ScoutJet + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser=Scrubby +isBanned=true + +[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] +Parent=Search Engines +Browser=YoudaoBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Twiceler*)] +Parent=Search Engines +Browser=Twiceler +isBanned=true + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser=CostaCider Search + +[Mozilla/5.0 GurujiBot/1.0 (*)] +Parent=Search Engines +Browser=GurujiBot + +[NavissoBot] +Parent=Search Engines +Browser=NavissoBot + +[NextGenSearchBot*(for information visit *)] +Parent=Search Engines +Browser=ZoomInfo +isBanned=true + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser=Norbert the Spider + +[NuSearch Spider*] +Parent=Search Engines +Browser=nuSearch + +[ObjectsSearch/*] +Parent=Search Engines +Browser=ObjectsSearch + +[OpenISearch/1.*] +Parent=Search Engines +Browser=OpenISearch (Amazon) + +[Pagebull http://www.pagebull.com/] +Parent=Search Engines +Browser=Pagebull + +[PEERbot*] +Parent=Search Engines +Browser=PEERbot + +[Pompos/*] +Parent=Search Engines +Browser=Pompos + +[Popdexter/*] +Parent=Search Engines +Browser=Popdex + +[Qweery*] +Parent=Search Engines +Browser=QweeryBot + +[RedCell/* (*)] +Parent=Search Engines +Browser=RedCell + +[Scrubby/*] +Parent=Search Engines +Browser=Scrub The Web + +[Search-10/*] +Parent=Search Engines +Browser=Search-10 + +[search.ch*] +Parent=Search Engines +Browser=Swiss Search Engine + +[Searchmee! Spider*] +Parent=Search Engines +Browser=Searchmee! + +[Seekbot/*] +Parent=Search Engines +Browser=Seekbot + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser=SiteSpider + +[Spinne/*] +Parent=Search Engines +Browser=Spinne + +[sproose/*] +Parent=Search Engines +Browser=Sproose + +[Sqeobot/0.*] +Parent=Search Engines +Browser=Branzel +isBanned=true + +[SquigglebotBot/*] +Parent=Search Engines +Browser=SquigglebotBot +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser=StackRambler + +[SygolBot*] +Parent=Search Engines +Browser=SygolBot + +[SynoBot] +Parent=Search Engines +Browser=SynoBot + +[Szukacz/*] +Parent=Search Engines +Browser=Szukacz + +[Tarantula/*] +Parent=Search Engines +Browser=Tarantula +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser=TerrawizBot +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser=Tkensaku + +[TMCrawler] +Parent=Search Engines +Browser=TMCrawler +isBanned=true + +[Twingly Recon] +Parent=Search Engines +Browser=Twingly Recon +isBanned=true + +[updated/*] +Parent=Search Engines +Browser=Updated! + +[URL Spider Pro/*] +Parent=Search Engines +Browser=URL Spider Pro + +[URL Spider SQL*] +Parent=Search Engines +Browser=Innerprise Enterprise Search + +[VMBot/*] +Parent=Search Engines +Browser=VMBot + +[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] +Parent=Search Engines +Browser=Voyager + +[wadaino.jp-crawler*] +Parent=Search Engines +Browser=wadaino.jp +isBanned=true + +[WebAlta Crawler/*] +Parent=Search Engines +Browser=WebAlta Crawler +isBanned=true + +[WebCorp/*] +Parent=Search Engines +Browser=WebCorp +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser=webcrawl.net + +[WISEbot/*] +Parent=Search Engines +Browser=WISEbot +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser=Wotbox + +[www.zatka.com] +Parent=Search Engines +Browser=Zatka + +[WWWeasel Robot v*] +Parent=Search Engines +Browser=World Wide Weasel + +[YadowsCrawler*] +Parent=Search Engines +Browser=YadowsCrawler + +[YodaoBot/*] +Parent=Search Engines +Browser=YodaoBot +isBanned=true + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser=ZE.bz + +[zibber-v*] +Parent=Search Engines +Browser=Zibb + +[ZipppBot/*] +Parent=Search Engines +Browser=ZipppBot + +[ATA-Translation-Service] +Parent=Translators +Browser=ATA-Translation-Service + +[GJK_Browser_Check] +Parent=Version Checkers +Browser=GJK_Browser_Check + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser=Hatena +isBanned=true +Crawler=true + +[Feed::Find/*] +Parent=Hatena +Browser=Feed Find +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser=Hatena Antenna + +[Hatena Bookmark/*] +Parent=Hatena +Browser=Hatena Bookmark + +[Hatena RSS/*] +Parent=Hatena +Browser=Hatena RSS +isSyndicationReader=true + +[Hatena::Crawler/*] +Parent=Hatena +Browser=Hatena Crawler + +[HatenaScreenshot*] +Parent=Hatena +Browser=HatenaScreenshot + +[URI::Fetch/*] +Parent=Hatena +Browser=URI::Fetch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser=Internet Archive +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*heritrix*] +Parent=Internet Archive +Browser=Heritrix +isBanned=true + +[ia_archiver*] +Parent=Internet Archive +Browser=Internet Archive + +[InternetArchive/*] +Parent=Internet Archive +Browser=InternetArchive + +[Mozilla/5.0 (compatible; archive.org_bot/1.*)] +Parent=Internet Archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser=Nutch +isBanned=true +Crawler=true + +[*Nutch*] +Parent=Nutch +isBanned=true + +[CazoodleBot/*] +Parent=Nutch +Browser=CazoodleBot + +[LOOQ/0.1*] +Parent=Nutch +Browser=LOOQ + +[Nutch/0.? (OpenX Spider)] +Parent=Nutch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo + +[Webaroo] +Parent=DefaultProperties +Browser=Webaroo + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] +Parent=Webaroo +Browser=Webaroo + +[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] +Parent=Webaroo +Browser=Webaroo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press + +[Word Press] +Parent=DefaultProperties +Browser=Word Press +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[WordPress-B-/2.*] +Parent=Word Press +Browser=WordPress-B + +[WordPress-Do-P-/2.*] +Parent=Word Press +Browser=WordPress-Do-P + +[BlueCoat ProxySG] +Parent=Blue Coat Systems +Browser=BlueCoat ProxySG + +[CerberianDrtrs/*] +Parent=Blue Coat Systems +Browser=Cerberian + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Blue Coat Systems +Browser=Bluecoat + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser=Copyright/Plagiarism +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser=BDFetch + +[copyright sheriff (*)] +Parent=Copyright/Plagiarism +Browser=copyright sheriff + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser=CopyRightCheck + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser=FairAd Client + +[iCopyright Conductor*] +Parent=Copyright/Plagiarism +Browser=iCopyright Conductor + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser=IPiumBot + +[IWAgent/*] +Parent=Copyright/Plagiarism +Browser=Brand Protect + +[Mozilla/5.0 (compatible; DKIMRepBot/*)] +Parent=Copyright/Plagiarism +Browser=DKIMRepBot + +[oBot] +Parent=Copyright/Plagiarism +Browser=oBot + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser=SlySearch + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser=TurnitinBot + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser=TutorGig + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools + +[DNS Tools] +Parent=DefaultProperties +Browser=DNS Tools +Crawler=true + +[Domain Dossier utility*] +Parent=DNS Tools +Browser=Domain Dossier + +[Mozilla/5.0 (compatible; DNS-Digger/*)] +Parent=DNS Tools +Browser=DNS-Digger + +[OpenDNS Domain Crawler noc@opendns.com] +Parent=DNS Tools +Browser=OpenDNS Domain Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser=Download Managers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[AndroidDownloadManager] +Parent=Download Managers +Browser=Android Download Manager + +[AutoMate5] +Parent=Download Managers +Browser=AutoMate5 + +[Beamer*] +Parent=Download Managers +Browser=Beamer + +[BitBeamer/*] +Parent=Download Managers +Browser=BitBeamer + +[BitTorrent/*] +Parent=Download Managers +Browser=BitTorrent + +[DA *] +Parent=Download Managers +Browser=Download Accelerator + +[Download Demon*] +Parent=Download Managers +Browser=Download Demon + +[Download Express*] +Parent=Download Managers +Browser=Download Express + +[Download Master*] +Parent=Download Managers +Browser=Download Master + +[Download Ninja*] +Parent=Download Managers +Browser=Download Ninja + +[Download Wonder*] +Parent=Download Managers +Browser=Download Wonder + +[DownloadSession*] +Parent=Download Managers +Browser=DownloadSession + +[EasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[FDM 1.x] +Parent=Download Managers +Browser=Free Download Manager + +[FlashGet] +Parent=Download Managers +Browser=FlashGet + +[FreshDownload/*] +Parent=Download Managers +Browser=FreshDownload + +[GetRight/*] +Parent=Download Managers +Browser=GetRight + +[GetRightPro/*] +Parent=Download Managers +Browser=GetRightPro + +[GetSmart/*] +Parent=Download Managers +Browser=GetSmart + +[Go!Zilla*] +Parent=Download Managers +Browser=GoZilla + +[Gozilla/*] +Parent=Download Managers +Browser=Gozilla + +[Internet Ninja*] +Parent=Download Managers +Browser=Internet Ninja + +[Kontiki Client*] +Parent=Download Managers +Browser=Kontiki Client + +[lftp/3.2.1] +Parent=Download Managers +Browser=lftp + +[LightningDownload/*] +Parent=Download Managers +Browser=LightningDownload + +[LMQueueBot/*] +Parent=Download Managers +Browser=LMQueueBot + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser=Download Express + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser=Getleft + +[Myzilla] +Parent=Download Managers +Browser=Myzilla + +[Net Vampire/*] +Parent=Download Managers +Browser=Net Vampire + +[Net_Vampire*] +Parent=Download Managers +Browser=Net_Vampire + +[NetAnts*] +Parent=Download Managers +Browser=NetAnts + +[NetPumper*] +Parent=Download Managers +Browser=NetPumper + +[NetSucker*] +Parent=Download Managers +Browser=NetSucker + +[NetZip Downloader*] +Parent=Download Managers +Browser=NetZip Downloader + +[NexTools WebAgent*] +Parent=Download Managers +Browser=NexTools WebAgent + +[Offline Downloader*] +Parent=Download Managers +Browser=Offline Downloader + +[P3P Client] +Parent=Download Managers +Browser=P3P Client + +[PageDown*] +Parent=Download Managers +Browser=PageDown + +[PicaLoader*] +Parent=Download Managers +Browser=PicaLoader + +[Prozilla*] +Parent=Download Managers +Browser=Prozilla + +[RealDownload/*] +Parent=Download Managers +Browser=RealDownload + +[sEasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[shareaza*] +Parent=Download Managers +Browser=shareaza + +[SmartDownload/*] +Parent=Download Managers +Browser=SmartDownload + +[SpeedDownload/*] +Parent=Download Managers +Browser=Speed Download + +[Star*Downloader/*] +Parent=Download Managers +Browser=StarDownloader + +[STEROID Download] +Parent=Download Managers +Browser=STEROID Download + +[SuperBot/*] +Parent=Download Managers +Browser=SuperBot + +[Vegas95/*] +Parent=Download Managers +Browser=Vegas95 + +[WebZIP*] +Parent=Download Managers +Browser=WebZIP + +[Wget*] +Parent=Download Managers +Browser=Wget + +[WinTools] +Parent=Download Managers +Browser=WinTools + +[Xaldon WebSpider*] +Parent=Download Managers +Browser=Xaldon WebSpider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser=E-Mail Harvesters +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser=E-Mail Address Extractor + +[*Larbin*] +Parent=E-Mail Harvesters +Browser=Larbin + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser=www4mail + +[8484 Boston Project*] +Parent=E-Mail Harvesters +Browser=8484 Boston Project + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser=CherryPickerElite + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser=Chilkat + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser=ContactBot + +[eCatch*] +Parent=E-Mail Harvesters +Browser=eCatch + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser=E-Mail Collector + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser=EMAILsearcher + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser=E-Mail Siphon + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser=EMailWolf + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser=MailMunky + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser=ExtractorPro + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser=Franklin Locator + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser=Missigua Locator + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser=Advanced Email Extractor + +[Netprospector*] +Parent=E-Mail Harvesters +Browser=Netprospector + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser=ProWebWalker + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser=Mike Elliott's E-Mail Harvester + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser=WebEnhancer + +[WebMiner*] +Parent=E-Mail Harvesters +Browser=WebMiner + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser=ZIBB Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser=Feeds Blogs +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser=Bloglines Title Fetch + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser=BlogLines Web + +[BlogPulseLive (support@blogpulse.com)] +Parent=Feeds Blogs +Browser=BlogPulseLive + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser=blogsearchbot-pumpkin +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser=Irish Blogs Aggregator +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser=kinjabot + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser=Net::Trackback + +[Reblog*] +Parent=Feeds Blogs +Browser=Reblog + +[WordPress/*] +Parent=Feeds Blogs +Browser=WordPress + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser=Feeds Syndicators +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser=LinkLint + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser=NetVisualize + +[AideRSS 2.* (postrank.com)] +Parent=Feeds Syndicators +Browser=AideRSS + +[AideRSS/2.0 (aiderss.com)] +Parent=Feeds Syndicators +Browser=AideRSS +isBanned=true + +[Akregator/*] +Parent=Feeds Syndicators +Browser=Akregator + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser=Safari RSS +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser=Cocoal.icio.us +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser=Feed For Free + +[FeedBurner/*] +Parent=Feeds Syndicators +Browser=FeedBurner + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser=FeedDemon +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser=FeedDigest + +[FeedGhost/1.*] +Parent=Feeds Syndicators +Browser=FeedGhost +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] +Parent=Feeds Syndicators +Browser=FeedOnFeeds +Version=0.1 +MajorVer=0 +MinorVer=1 + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser=Newsbrain + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser=Feedshow + +[Feedster Crawler/?.0; Feedster, Inc.] +Parent=Feeds Syndicators +Browser=Feedster + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser=GreatNews +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Gregarius/*] +Parent=Feeds Syndicators +Browser=Gregarius + +[intraVnews/*] +Parent=Feeds Syndicators +Browser=intraVnews + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser=Omea Reader +isBanned=true + +[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] +Parent=Feeds Syndicators +Browser=Liferea +isBanned=true + +[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] +Parent=Feeds Syndicators +Browser=FeedFetcher +Version=0.0 +MajorVer=0 +MinorVer=0 + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser=MagpieRSS + +[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] +Parent=Feeds Syndicators +Browser=Mobitype +Platform=Win32 + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser=Rojo + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser=TailRank + +[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] +Parent=Feeds Syndicators +Browser=Podtech Network + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser=Newz Crawler + +[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser=RSSMicro + +[Mozilla/5.0 (compatible;*newstin.com;*)] +Parent=Feeds Syndicators +Browser=NewsTin + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser=RSS Reader Panel + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser=FeedParser + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser=NewsMonster + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser=Rojo + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser=Netvibes + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser=NewsAlloy + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser=Omnipelagos + +[Particls] +Parent=Feeds Syndicators +Browser=Particls + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser=Protopage + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser=PubSub-RSS-Reader + +[RSS Menu/*] +Parent=Feeds Syndicators +Browser=RSS Menu + +[RssBandit/*] +Parent=Feeds Syndicators +Browser=RssBandit + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser=RssBar +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser=SharpReader + +[SimplePie/*] +Parent=Feeds Syndicators +Browser=SimplePie + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser=Strategic Board Bot +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser=TargetYourNews + +[Technoratibot/*] +Parent=Feeds Syndicators +Browser=Technoratibot + +[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] +Parent=Feeds Syndicators +Browser=Tumblr RSS syndication + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser=Windows-RSS-Platform +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser=Wizz + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS + +[General RSS] +Parent=DefaultProperties +Browser=General RSS +isSyndicationReader=true + +[AideRSS/1.0 (aiderss.com); * subscribers] +Parent=General RSS +Browser=AideRSS +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] +Parent=General RSS +Browser=CC Metadata Scaper + +[Mozilla/5.0 (compatible) GM RSS Panel] +Parent=General RSS +Browser=RSS Panel + +[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] +Parent=General RSS +Browser=Inclue + +[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] +Parent=General RSS +Browser=Ruunk + +[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] +Parent=General RSS +Browser=Windows-RSS-Platform +Platform=WinVista + +[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] +Parent=Google Code +Browser=Arora +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux +CssVersion=2 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser=HTML Validators +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser=Search Engine World HTML Validator + +[FeedValidator/1.3] +Parent=HTML Validators +Browser=FeedValidator +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser=Jigsaw CSS Validator + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser=Search Engine World Robots.txt Validator + +[W3C_Validator/*] +Parent=HTML Validators +Browser=W3C Validator + +[W3CLineMode/*] +Parent=HTML Validators +Browser=W3C Line Mode + +[Weblide/2.? beta*] +Parent=HTML Validators +Browser=Weblide +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser=WebmasterWorld Server Header Checker + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser=Image Crawlers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*CFNetwork*] +Parent=Image Crawlers +Browser=CFNetwork + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser=PhotoStickies + +[Camcrawler*] +Parent=Image Crawlers +Browser=Camcrawler + +[CydralSpider/*] +Parent=Image Crawlers +Browser=Cydral Web Image Search +isBanned=true + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser=Gallery Grabber + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser=Extreme Picture Finder + +[FLATARTS_FAVICO] +Parent=Image Crawlers +Browser=FlatArts Favorites Icon Tool + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser=HTML2JPG + +[IconSurf/2.*] +Parent=Image Crawlers +Browser=IconSurf + +[kalooga/KaloogaBot*] +Parent=Image Crawlers +Browser=KaloogaBot + +[Mister PIX*] +Parent=Image Crawlers +Browser=Mister PIX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] +Parent=Image Crawlers +Browser=Pandora + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser=naoFavicon4IE + +[pixfinder/*] +Parent=Image Crawlers +Browser=pixfinder + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser=rssImagesBot + +[Web Image Collector*] +Parent=Image Crawlers +Browser=Web Image Collector + +[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] +Parent=Image Crawlers +Browser=WebImages + +[WebPix*] +Parent=Image Crawlers +Browser=Custo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser=Link Checkers +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser=!Susie + +[*AgentName/*] +Parent=Link Checkers +Browser=AgentName + +[*Linkman*] +Parent=Link Checkers +Browser=Linkman + +[*LinksManager.com*] +Parent=Link Checkers +Browser=LinksManager + +[*Powermarks/*] +Parent=Link Checkers +Browser=Powermarks + +[*W3C-checklink/*] +Parent=Link Checkers +Browser=W3C Link Checker + +[*Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator + +[*Zeus*] +Parent=Link Checkers +Browser=Zeus +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser=ActiveBookmark + +[Bookdog/*] +Parent=Link Checkers +Browser=Bookdog + +[Bookmark Buddy*] +Parent=Link Checkers +Browser=Bookmark Buddy + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser=Bookmark Renewal Check Agent + +[Bookmark search tool*] +Parent=Link Checkers +Browser=Bookmark search tool + +[Bookmark-Manager] +Parent=Link Checkers +Browser=Bookmark-Manager + +[Checkbot*] +Parent=Link Checkers +Browser=Checkbot + +[CheckLinks/*] +Parent=Link Checkers +Browser=CheckLinks + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser=CyberSpyder Link Test + +[DLC/*] +Parent=Link Checkers +Browser=DLC + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser=DocWeb Link Crawler + +[FavOrg] +Parent=Link Checkers +Browser=FavOrg + +[Favorites Sweeper v.3.*] +Parent=Link Checkers +Browser=Favorites Sweeper + +[FindLinks/*] +Parent=Link Checkers +Browser=FindLinks + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser=Funnel Web Profiler + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser=HTML Link Validator + +[IECheck] +Parent=Link Checkers +Browser=IECheck + +[JCheckLinks/*] +Parent=Link Checkers +Browser=JCheckLinks + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser=JRTwine + +[Link Valet Online*] +Parent=Link Checkers +Browser=Link Valet +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser=LinkAlarm + +[Linkbot*] +Parent=Link Checkers +Browser=Linkbot + +[LinkChecker/*] +Parent=Link Checkers +Browser=LinkChecker + +[LinkextractorPro*] +Parent=Link Checkers +Browser=LinkextractorPro +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser=LinkLint + +[LinkScan/*] +Parent=Link Checkers +Browser=LinkScan + +[LinkSweeper/*] +Parent=Link Checkers +Browser=LinkSweeper + +[LinkWalker*] +Parent=Link Checkers +Browser=LinkWalker + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser=MetaGer-LinkChecker + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser=LinkTiger +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser=URLBase + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser=NetPromoter Link Utility + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser=Link Commander +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] +Parent=Link Checkers +Browser=smartBot + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser=SuperCleaner + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser=gURLChecker +isBanned=true + +[Newsgroupreporter LinkCheck] +Parent=Link Checkers +Browser=Newsgroupreporter LinkCheck + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser=onCHECK Linkchecker + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser=Dead-Links.com +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser=REL Link Checker + +[RLinkCheker*] +Parent=Link Checkers +Browser=RLinkCheker + +[Robozilla/*] +Parent=Link Checkers +Browser=Robozilla + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser=RPT-HTTPClient +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser=SafariBookmarkChecker +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser=Simpy + +[SiteBar/*] +Parent=Link Checkers +Browser=SiteBar + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser=Susie + +[URLBase/6.*] +Parent=Link Checkers + +[VSE/*] +Parent=Link Checkers +Browser=VSE Link Tester + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser=WebTrends Link Analyzer + +[WorQmada/*] +Parent=Link Checkers +Browser=WorQmada + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser=Xenu's Link Sleuth +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser=Z-Add Link Checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser=Microsoft +isBanned=true + +[Live (http://www.live.com/)] +Parent=Microsoft +Browser=Microsoft Live +isBanned=false +isSyndicationReader=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser=MFC Foundation Class Library + +[MFHttpScan] +Parent=Microsoft +Browser=MFHttpScan + +[Microsoft BITS/*] +Parent=Microsoft +Browser=BITS + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser=MS IPP + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser=MS IPP DAV + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser=MS IPPPD + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser=Fake IE + +[Microsoft Office Existence Discovery] +Parent=Microsoft +Browser=Microsoft Office Existence Discovery + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser=MS OPD + +[Microsoft Office/* (*Picture Manager*)] +Parent=Microsoft +Browser=Microsoft Office Picture Manager + +[Microsoft URL Control*] +Parent=Microsoft +Browser=Microsoft URL Control + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser=Microsoft Visio + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser=Microsoft-WebDAV + +[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] +Parent=Microsoft +Browser=Microsoft Excel +Version=12.0 +MajorVer=12 +MinorVer=0 +Platform=MacOSX + +[MSN Feed Manager] +Parent=Microsoft +Browser=MSN Feed Manager +isBanned=false +isSyndicationReader=true + +[MSProxy/*] +Parent=Microsoft +Browser=MS Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser=Miscellaneous Browsers +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser=Amiga +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser=Avant Browser + +[12345] +Parent=Miscellaneous Browsers +Browser=12345 +isBanned=true + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser=Ace Explorer + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser=Enigma Browser + +[EVE-minibrowser/*] +Parent=Miscellaneous Browsers +Browser=EVE-minibrowser +IFrames=false +Tables=false +BackgroundSounds=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +Crawler=false + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser=Godzilla + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser=GreenBrowser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Kopiczek/* (WyderOS*; *)] +Parent=Miscellaneous Browsers +Browser=Kopiczek +Platform=WyderOS +IFrames=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (*) - BrowseX (*)] +Parent=Miscellaneous Browsers +Browser=BrowseX + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser=Escape +Platform=Win32 + +[Mozilla/4.0 (compatible; ibisBrowser)] +Parent=Miscellaneous Browsers +Browser=ibisBrowser + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser=HistoryHound + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser=NetRecorder + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser=NetSurfer + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser=ogeb browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser=Wipeout Pure + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser=SlimBrowser + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser=WWW Browser +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CssVersion=3 +supportsCSS=true + +[*Netcraft Webserver Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser=Offline Browsers +Frames=true +Tables=true +Cookies=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser=Check&Get + +[*HTTrack*] +Parent=Offline Browsers +Browser=HTTrack + +[*MSIECrawler*] +Parent=Offline Browsers +Browser=IE Offline Browser + +[*TweakMASTER*] +Parent=Offline Browsers +Browser=TweakMASTER + +[BackStreet Browser *] +Parent=Offline Browsers +Browser=BackStreet Browser + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser=Go Ahead Got-It + +[iGetter/*] +Parent=Offline Browsers +Browser=iGetter + +[Teleport*] +Parent=Offline Browsers +Browser=Teleport + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser=Online Scanners +isBanned=true + +[JoeDog/* (X11; I; Siege *)] +Parent=Online Scanners +Browser=JoeDog +isBanned=false + +[Morfeus Fucking Scanner] +Parent=Online Scanners +Browser=Morfeus Fucking Scanner + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser=Trend Micro + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser=Panda Antivirus Titanium + +[virus_detector*] +Parent=Online Scanners +Browser=Secure Computing Corporation + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser=Proxy Servers +isBanned=true + +[*squid*] +Parent=Proxy Servers +Browser=Squid + +[Anonymisiert*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymizer/*] +Parent=Proxy Servers +Browser=Anonymizer + +[Anonymizied*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymous*] +Parent=Proxy Servers +Browser=Anonymous + +[Anonymous/*] +Parent=Proxy Servers +Browser=Anonymous + +[CE-Preload] +Parent=Proxy Servers +Browser=CE-Preload + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser=Anonymouse + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser=Anonymizer + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser=SaferSurf + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser=Yahoo! +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser=Squid + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Privoxy/*] +Parent=Proxy Servers +Browser=Privoxy + +[ProxyTester*] +Parent=Proxy Servers +Browser=ProxyTester +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser=SilentSurf + +[SmallProxy*] +Parent=Proxy Servers +Browser=SmallProxy + +[Space*Bison/*] +Parent=Proxy Servers +Browser=Proxomitron + +[Sqworm/*] +Parent=Proxy Servers +Browser=Websense + +[SurfControl] +Parent=Proxy Servers +Browser=SurfControl + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser=Research Projects +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser=AcadiaUniversityWebCensusClient + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser=Amico Alpha + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser=Annotate Google + +[CMS crawler (?http://buytaert.net/crawler/)] +Parent=Research Projects + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser=e-SocietyRobot + +[Forschungsportal/*] +Parent=Research Projects +Browser=Forschungsportal + +[Gulper Web *] +Parent=Research Projects +Browser=Gulper Web Bot + +[HooWWWer/*] +Parent=Research Projects +Browser=HooWWWer + +[http://buytaert.net/crawler] +Parent=Research Projects + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser=inetbot + +[IRLbot/*] +Parent=Research Projects +Browser=IRLbot + +[Lachesis] +Parent=Research Projects +Browser=Lachesis + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser=nextthing.org +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser=Theophrastus + +[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] +Parent=Research Projects +Browser=Webscan + +[MQbot*] +Parent=Research Projects +Browser=MQbot + +[OutfoxBot/*] +Parent=Research Projects +Browser=OutfoxBot + +[polybot?*] +Parent=Research Projects +Browser=Polybot + +[Shim?Crawler*] +Parent=Research Projects +Browser=Shim Crawler + +[Steeler/*] +Parent=Research Projects +Browser=Steeler + +[Taiga web spider] +Parent=Research Projects +Browser=Taiga + +[Theme Spider*] +Parent=Research Projects +Browser=Theme Spider + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser=UofTDB Experiment + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser=USyd-NLP-Spider + +[woriobot*] +Parent=Research Projects +Browser=woriobot + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser=wwwster +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser=Zao-Crawler + +[Zao/*] +Parent=Research Projects +Browser=Zao + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser=Rippers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*grub*] +Parent=Rippers +Browser=grub + +[*ickHTTP*] +Parent=Rippers +Browser=IP*Works + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser=libwww-perl + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser=WinHttp + +[3D-FTP/*] +Parent=Rippers +Browser=3D-FTP + +[3wGet/*] +Parent=Rippers +Browser=3wGet + +[ActiveRefresh*] +Parent=Rippers +Browser=ActiveRefresh + +[Artera (Version *)] +Parent=Rippers +Browser=Artera + +[AutoHotkey] +Parent=Rippers +Browser=AutoHotkey + +[b2w/*] +Parent=Rippers +Browser=b2w + +[BasicHTTP/*] +Parent=Rippers +Browser=BasicHTTP + +[BlockNote.Net] +Parent=Rippers +Browser=BlockNote.Net + +[CAST] +Parent=Rippers +Browser=CAST + +[CFNetwork/*] +Parent=Rippers +Browser=CFNetwork + +[CFSCHEDULE*] +Parent=Rippers +Browser=ColdFusion Task Scheduler + +[CobWeb/*] +Parent=Rippers +Browser=CobWeb + +[ColdFusion*] +Parent=Rippers +Browser=ColdFusion + +[Crawl_Application] +Parent=Rippers +Browser=Crawl_Application + +[curl/*] +Parent=Rippers +Browser=cURL + +[Custo*] +Parent=Rippers +Browser=Custo + +[DataCha0s/*] +Parent=Rippers +Browser=DataCha0s + +[DeepIndexer*] +Parent=Rippers +Browser=DeepIndexer + +[DISCo Pump *] +Parent=Rippers +Browser=DISCo Pump + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser=eStyleSearch +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser=Ezic.com + +[fetch libfetch/*] +Parent=Rippers + +[FGet*] +Parent=Rippers +Browser=FGet + +[Flaming AttackBot*] +Parent=Rippers +Browser=Flaming AttackBot + +[Foobot*] +Parent=Rippers +Browser=Foobot + +[GameSpyHTTP/*] +Parent=Rippers +Browser=GameSpyHTTP + +[gnome-vfs/*] +Parent=Rippers +Browser=gnome-vfs + +[Harvest/*] +Parent=Rippers +Browser=Harvest + +[hcat/*] +Parent=Rippers +Browser=hcat + +[HLoader] +Parent=Rippers +Browser=HLoader + +[Holmes/*] +Parent=Rippers +Browser=Holmes + +[HTMLParser/*] +Parent=Rippers +Browser=HTMLParser + +[http generic] +Parent=Rippers +Browser=http generic + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser=httperf + +[HTTPFetch/*] +Parent=Rippers +Browser=HTTPFetch + +[HTTPGrab] +Parent=Rippers +Browser=HTTPGrab + +[HttpSession] +Parent=Rippers +Browser=HttpSession + +[httpunit/*] +Parent=Rippers +Browser=HttpUnit + +[ICE_GetFile] +Parent=Rippers +Browser=ICE_GetFile + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser=Inet - Eureka App + +[INetURL/*] +Parent=Rippers +Browser=INetURL + +[InetURL:/*] +Parent=Rippers +Browser=InetURL + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser=Fake IE + +[Internet Explorer *] +Parent=Rippers +Browser=Fake IE + +[IP*Works!*/*] +Parent=Rippers +Browser=IP*Works! + +[IrssiUrlLog/*] +Parent=Rippers +Browser=IrssiUrlLog + +[JPluck/*] +Parent=Rippers +Browser=JPluck + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser=Kapere + +[LeechFTP] +Parent=Rippers +Browser=LeechFTP + +[LeechGet*] +Parent=Rippers +Browser=LeechGet + +[libcurl-agent/*] +Parent=Rippers +Browser=libcurl + +[libWeb/clsHTTP*] +Parent=Rippers +Browser=libWeb/clsHTTP + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser=MFC_Tear_Sample + +[Moozilla] +Parent=Rippers +Browser=Moozilla + +[MovableType/*] +Parent=Rippers +Browser=MovableType Web Log + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser=NEWT ActiveX +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser=Novell BorderManager + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] +Parent=Rippers +Browser=IPCheck Server Monitor + +[OCN-SOC/*] +Parent=Rippers +Browser=OCN-SOC + +[Offline Explorer*] +Parent=Rippers +Browser=Offline Explorer + +[Open Web Analytics Bot*] +Parent=Rippers +Browser=Open Web Analytics Bot + +[OSSProxy*] +Parent=Rippers +Browser=OSSProxy + +[Pageload*] +Parent=Rippers +Browser=PageLoad + +[PageNest/*] +Parent=Rippers +Browser=PageNest + +[pavuk/*] +Parent=Rippers +Browser=Pavuk + +[PEAR HTTP_Request*] +Parent=Rippers +Browser=PEAR-PHP + +[PHP*] +Parent=Rippers +Browser=PHP + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser=PigBlock +Win32=true + +[Pockey*] +Parent=Rippers +Browser=Pockey-GetHTML + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser=POE-Component-Client-HTTP + +[PycURL/*] +Parent=Rippers +Browser=PycURL + +[Python*] +Parent=Rippers +Browser=Python + +[RepoMonkey*] +Parent=Rippers +Browser=RepoMonkey + +[SBL-BOT*] +Parent=Rippers +Browser=BlackWidow + +[ScoutAbout*] +Parent=Rippers +Browser=ScoutAbout + +[sherlock/*] +Parent=Rippers +Browser=Sherlock + +[SiteParser/*] +Parent=Rippers +Browser=SiteParser + +[SiteSnagger*] +Parent=Rippers +Browser=SiteSnagger + +[SiteSucker/*] +Parent=Rippers +Browser=SiteSucker + +[SiteWinder*] +Parent=Rippers +Browser=SiteWinder + +[Snoopy*] +Parent=Rippers +Browser=Snoopy + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser=AspTear + +[SuperHTTP/*] +Parent=Rippers +Browser=SuperHTTP + +[Tcl http client package*] +Parent=Rippers +Browser=Tcl http client package + +[Twisted PageGetter] +Parent=Rippers +Browser=Twisted PageGetter + +[URL2File/*] +Parent=Rippers +Browser=URL2File + +[UtilMind HTTPGet] +Parent=Rippers +Browser=UtilMind HTTPGet + +[VCI WebViewer*] +Parent=Rippers +Browser=VCI WebViewer + +[W3CRobot/*] +Parent=Rippers +Browser=W3CRobot + +[Web Downloader*] +Parent=Rippers +Browser=Web Downloader + +[Web Downloader/*] +Parent=Rippers +Browser=Web Downloader + +[Web Magnet*] +Parent=Rippers +Browser=Web Magnet + +[WebAuto/*] +Parent=Rippers + +[webbandit/*] +Parent=Rippers +Browser=webbandit + +[WebCopier*] +Parent=Rippers +Browser=WebCopier + +[WebDownloader*] +Parent=Rippers +Browser=WebDownloader + +[WebFetch] +Parent=Rippers +Browser=WebFetch + +[webfetch/*] +Parent=Rippers +Browser=WebFetch + +[WebGatherer*] +Parent=Rippers +Browser=WebGatherer + +[WebGet] +Parent=Rippers +Browser=WebGet + +[WebReaper*] +Parent=Rippers +Browser=WebReaper + +[WebRipper] +Parent=Rippers +Browser=WebRipper + +[WebSauger*] +Parent=Rippers +Browser=WebSauger + +[Website Downloader*] +Parent=Rippers +Browser=Website Downloader + +[Website eXtractor*] +Parent=Rippers +Browser=Website eXtractor + +[Website Quester] +Parent=Rippers +Browser=Website Quester + +[WebsiteExtractor*] +Parent=Rippers +Browser=Website eXtractor + +[WebSnatcher*] +Parent=Rippers +Browser=WebSnatcher + +[Webster Pro*] +Parent=Rippers +Browser=Webster Pro + +[WebStripper*] +Parent=Rippers +Browser=WebStripper + +[WebWhacker*] +Parent=Rippers +Browser=WebWhacker + +[WinScripter iNet Tools] +Parent=Rippers +Browser=WinScripter iNet Tools + +[WWW-Mechanize/*] +Parent=Rippers +Browser=WWW-Mechanize + +[Zend_Http_Client] +Parent=Rippers +Browser=Zend_Http_Client + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser=Site Monitors +Cookies=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser=EasyRider + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser=maxamine.com--robot +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser=WebMon + +[Kenjin Spider*] +Parent=Site Monitors +Browser=Kenjin Spider + +[Kevin http://*] +Parent=Site Monitors +Browser=Kevin +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser=ChangeDetection + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser=Myst Monitor Service + +[Net Probe] +Parent=Site Monitors +Browser=Net Probe + +[NetMechanic*] +Parent=Site Monitors +Browser=NetMechanic + +[NetReality*] +Parent=Site Monitors +Browser=NetReality + +[Pingdom GIGRIB*] +Parent=Site Monitors +Browser=Pingdom + +[Site Valet Online*] +Parent=Site Monitors +Browser=Site Valet +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser=SITECHECKER + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser=ZoneEdit Failover Monitor +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser=UpTime Checker + +[URL Control*] +Parent=Site Monitors +Browser=URL Control + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser=URLCHECK + +[URLy Warning*] +Parent=Site Monitors +Browser=URLy Warning + +[Webcheck *] +Parent=Site Monitors +Browser=Webcheck +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser=WebPatrol + +[websitepulse checker/*] +Parent=Site Monitors +Browser=websitepulse checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser=Social Bookmarkers +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[BookmarkBase(2/;http://bookmarkbase.com)] +Parent=Social Bookmarkers +Browser=BookmarkBase + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser=Cocoalicious + +[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] +Parent=Social Bookmarkers +Browser=FriendFeedBot + +[Twitturly*] +Parent=Social Bookmarkers +Browser=Twitturly + +[WinkBot/*] +Parent=Social Bookmarkers +Browser=WinkBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser=Translators +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser=Seram Server + +[TeragramWebcrawler/*] +Parent=Translators +Browser=TeragramWebcrawler +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser=WorldLingo + +[WebTrans] +Parent=Translators +Browser=WebTrans + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser=Version Checkers +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser=Automated Browscap.ini Updater + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser=BMC Link Validator +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[Browscap updater] +Parent=Version Checkers +Browser=Browscap updater + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser=Gary Keith's Version Checker + +[Browser Capabilities Project AutoDownloader] +Parent=Version Checkers +Browser=TKC AutoDownloader + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Code Sample Web Client] +Parent=Version Checkers +Browser=Code Sample Web Client + +[Desktop Sidebar*] +Parent=Version Checkers +Browser=Desktop Sidebar +isBanned=true + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser=Mono Browser Capabilities Updater +isBanned=true + +[Rewmi/*] +Parent=Version Checkers +isBanned=true + +[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] +Parent=Version Checkers +Browser=Subtext + +[TherapeuticResearch] +Parent=Version Checkers +Browser=TherapeuticResearch + +[UpdateBrowscap*] +Parent=Version Checkers +Browser=UpdateBrowscap + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser=clarkson.edu + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser=Substncia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser=Become +Frames=true +Tables=true +isSyndicationReader=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser=BecomeBot + +[*BecomeBot@exava.com*] +Parent=Become +Browser=BecomeBot + +[*Exabot@exava.com*] +Parent=Become +Browser=Exabot + +[MonkeyCrawl/*] +Parent=Become +Browser=MonkeyCrawl + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser=BecomeJPBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems + +[Blue Coat Systems] +Parent=DefaultProperties +Browser=Blue Coat Systems +isBanned=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers + +[Browscap Abusers] +Parent=DefaultProperties +Browser=Browscap Abusers +isBanned=true + +[Apple-PubSub/*] +Parent=Browscap Abusers +Browser=Apple-PubSub + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub + +[FeedHub] +Parent=DefaultProperties +Browser=FeedHub +isSyndicationReader=true + +[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedDiscovery +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub MetaDataFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Internet Content Rating Association] +Parent=DefaultProperties +Browser= +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[ICRA_label_generator/1.?] +Parent=Internet Content Rating Association +Browser=ICRA_label_generator + +[ICRA_Semantic_spider/0.?] +Parent=Internet Content Rating Association +Browser=ICRA_Semantic_spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser=NameProtect +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser=NameProtect + +[NP/*] +Parent=NameProtect +Browser=NameProtect + +[NPBot*] +Parent=NameProtect +Browser=NameProtect + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft + +[Netcraft] +Parent=DefaultProperties +Browser=Netcraft +isBanned=true +Crawler=true + +[*Netcraft Web Server Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] +Parent=Netcraft +Browser=NetcraftSurveyAgent + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator + +[NewsGator] +Parent=DefaultProperties +Browser=NewsGator +isSyndicationReader=true + +[MarsEdit*] +Parent=NewsGator +Browser=MarsEdit + +[NetNewsWire*/*] +Parent=NewsGator +Browser=NetNewsWire +Platform=MacOSX + +[NewsFire/*] +Parent=NewsGator +Browser=NewsFire + +[NewsGator FetchLinks extension/*] +Parent=NewsGator +Browser=NewsGator FetchLinks + +[NewsGator/*] +Parent=NewsGator +Browser=NewsGator +isBanned=true + +[NewsGatorOnline/*] +Parent=NewsGator +Browser=NewsGatorOnline + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 + +[Chrome 0.2] +Parent=DefaultProperties +Browser=Chrome +Version=0.2 +MinorVer=2 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 + +[Chrome 0.3] +Parent=DefaultProperties +Browser=Chrome +Version=0.3 +MinorVer=3 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 + +[Chrome 0.4] +Parent=DefaultProperties +Browser=Chrome +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 + +[Chrome 0.5] +Parent=DefaultProperties +Browser=Chrome +Version=0.5 +MinorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 + +[Chrome 1.0] +Parent=DefaultProperties +Browser=Chrome +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 + +[Chrome 2.0] +Parent=DefaultProperties +Browser=Chrome +Version=2.0 +MajorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 + +[Chrome 3.0] +Parent=DefaultProperties +Browser=Chrome +Version=3.0 +MajorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code + +[Google Code] +Parent=DefaultProperties +Browser=Google Code +Tables=true +Cookies=true +JavaApplets=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 + +[Iron 0.2] +Parent=DefaultProperties +Browser=Iron +Version=0.2 +MinorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 + +[Iron 0.3] +Parent=DefaultProperties +Browser=Iron +Version=0.3 +MinorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 + +[Iron 0.4] +Parent=DefaultProperties +Browser=Iron +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod + +[iPod] +Parent=DefaultProperties +Browser=iPod +Platform=iPhone OSX +isMobileDevice=true + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] +Parent=iPod +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] +Parent=iPod + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes + +[iTunes] +Parent=DefaultProperties +Browser=iTunes +Platform=iPhone OSX + +[iTunes/* (Windows; ?)] +Parent=iTunes +Browser=iTunes +Platform=Win32 +Win32=true + +[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] +Parent=iTunes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser=Media Players +Cookies=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser=Microsoft NetShow + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser=RealPlayer +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser=MPlayer +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser=MPlayer +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser=MPlayer + +[RealPlayer*] +Parent=Media Players +Browser=RealPlayer + +[RMA/*] +Parent=Media Players +Browser=RMA + +[VLC media player*] +Parent=Media Players +Browser=VLC + +[vobsub] +Parent=Media Players +Browser=vobsub +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser=WinAmp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo + +[Nintendo Wii] +Parent=DefaultProperties +Browser= +isMobileDevice=true + +[Opera/* (Nintendo DSi; Opera/*; *; *)] +Parent=Nintendo Wii +Browser=DSi + +[Opera/* (Nintendo Wii; U; *)] +Parent=Nintendo Wii +Browser=Wii + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser=Windows Media Player +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser=Windows-Media-Player +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune + +[Zune] +Parent=DefaultProperties +Browser=Zune +Cookies=true + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] +Parent=Zune +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] +Parent=Zune +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] +Parent=Zune +Version=3.0 +MajorVer=3 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 + +[QuickTime 7.0] +Parent=DefaultProperties +Browser=QuickTime +Version=7.0 +MajorVer=7 +Cookies=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime 7.0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime 7.0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime 7.0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime 7.0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime 7.0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime 7.0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime 7.0 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 + +[QuickTime 7.1] +Parent=DefaultProperties +Browser=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Cookies=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime 7.1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime 7.1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime 7.1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime 7.1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime 7.1 +Platform=Win2003 +Win32=true + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 + +[QuickTime 7.2] +Parent=DefaultProperties +Browser=QuickTime +Version=7.2 +MajorVer=7 +MinorVer=2 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.2 +Platform=MacOSX + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.2 +Platform=MacPPC + +[QuickTime (qtver=7.2*;os=Windows 98*)] +Parent=QuickTime 7.2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] +Parent=QuickTime 7.2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] +Parent=QuickTime 7.2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] +Parent=QuickTime 7.2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] +Parent=QuickTime 7.2 +Platform=Win2003 +Win32=true + +[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 + +[QuickTime 7.3] +Parent=DefaultProperties +Browser=QuickTime +Version=7.3 +MajorVer=7 +MinorVer=3 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.3 +Platform=MacOSX + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.3 +Platform=MacPPC + +[QuickTime (qtver=7.3*;os=Windows 98*)] +Parent=QuickTime 7.3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] +Parent=QuickTime 7.3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] +Parent=QuickTime 7.3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] +Parent=QuickTime 7.3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] +Parent=QuickTime 7.3 +Platform=Win2003 +Win32=true + +[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.3 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 + +[QuickTime 7.4] +Parent=DefaultProperties +Browser=QuickTime +Version=7.4 +MajorVer=7 +MinorVer=4 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.4 +Platform=MacOSX + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.4 +Platform=MacPPC + +[QuickTime (qtver=7.4*;os=Windows 98*)] +Parent=QuickTime 7.4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] +Parent=QuickTime 7.4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] +Parent=QuickTime 7.4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] +Parent=QuickTime 7.4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] +Parent=QuickTime 7.4 +Platform=Win2003 +Win32=true + +[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.4 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android + +[Android] +Parent=DefaultProperties +Browser=Android +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser=BlackBerry +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*BlackBerry*] +Parent=BlackBerry + +[*BlackBerrySimulator/*] +Parent=BlackBerry + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser=Handspring Blazer +Platform=Palm +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] +Parent=Blazer +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] +Parent=Blazer +Version=4.2 +MajorVer=4 +MinorVer=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] +Parent=Blazer +Version=4.4 +MajorVer=4 +MinorVer=4 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] +Parent=Blazer +Version=4.5 +MajorVer=4 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser=DoCoMo +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile + +[IEMobile] +Parent=DefaultProperties +Browser=IEMobile +Platform=WinCE +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] +Parent=IEMobile +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] +Parent=IEMobile +Version=7.0 +MajorVer=7 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone + +[iPhone] +Parent=DefaultProperties +Browser=iPhone +Platform=iPhone OSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=3 +supportsCSS=true + +[Mozilla/4.0 (iPhone; *)] +Parent=iPhone + +[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] +Parent=iPhone +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] +Parent=iPhone +Browser=iTouch + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] +Parent=iPhone +Browser=iTouch +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser=KDDI +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[KDDI-* UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile + +[Miscellaneous Mobile] +Parent=DefaultProperties +Browser= +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] +Parent=Miscellaneous Mobile +Browser=Bolt + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Internet Browser] +Parent=DefaultProperties +Browser=Motorola Internet Browser +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[MOT-*/*] +Parent=Motorola Internet Browser + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T*/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy + +[MSN Mobile Proxy] +Parent=DefaultProperties +Browser=MSN Mobile Proxy +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true + +[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] +Parent=MSN Mobile Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser=NetFront +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*NetFront/*] +Parent=NetFront + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser=Nokia +Tables=true +Cookies=true +isMobileDevice=true + +[*Nokia*/*] +Parent=Nokia + +[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Nokia +Platform=SymbianOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser=Openwave Mobile Browser +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini + +[Opera Mini] +Parent=DefaultProperties +Browser=Opera Mini +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] +Parent=Opera Mini +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] +Parent=Opera Mini +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] +Parent=Opera Mini +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] +Parent=Opera Mini +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] +Parent=Opera Mini +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] +Parent=Opera Mini +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] +Parent=Opera Mini +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] +Parent=Opera Mini +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] +Parent=Opera Mini +Version=4.2 +MajorVer=4 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile + +[Opera Mobile] +Parent=DefaultProperties +Browser=Opera Mobi +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] +Parent=Opera Mobile +Version=9.51 +MajorVer=9 +MinorVer=51 +Beta=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser=Playstation +Platform=WAP +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/* (PLAYSTATION *; *)] +Parent=Playstation +Browser=PlayStation 3 +Frames=false + +[Mozilla/* (PSP (PlayStation Portable); *)] +Parent=Playstation + +[Sony PS2 (Linux)] +Parent=Playstation +Browser=Sony PS2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser=Pocket PC +Platform=WinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*(compatible; MSIE *.*; Windows CE; PPC; *)] +Parent=Pocket PC + +[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] +Parent=Pocket PC +Win32=true + +[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] +Parent=Pocket PC +Win32=true + +[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] +Parent=Pocket PC + +[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] +Parent=Pocket PC + +[Windows CE (Pocket PC) - Version *.*] +Parent=Pocket PC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser=SEMC Browser +Platform=JAVA +Tables=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson + +[SonyEricsson] +Parent=DefaultProperties +Browser=SonyEricsson +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*Ericsson*] +Parent=SonyEricsson + +[*SonyEricsson*] +Parent=SonyEricsson + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser=Netbox +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser=Netbox +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser=PowerTV +Platform=PowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser=WebTV/MSNTV +Platform=WebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser=Amaya +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser=Links +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser=Links +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +[Links (2.2*; FreeBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=FreeBSD + +[Links (2.2*; Linux *)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=Linux + +[Links (2.2*; OpenBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser=Lynx +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser=Lynx + +[Lynx/2.3*] +Parent=Lynx +Browser=Lynx +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser=Lynx +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser=Lynx +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser=Lynx +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser=Lynx +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser=Lynx +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser=w3m +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser=w3m +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser=w3m +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser=w3m +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser=w3m +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser=w3m +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 + +[ELinks 0.10] +Parent=DefaultProperties +Browser=ELinks +Version=0.10 +MinorVer=10 +Frames=true +Tables=true + +[ELinks (0.10*; *AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks (0.10*; *BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks (0.10*; *CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks (0.10*; *Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks (0.10*; *Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks (0.10*; *FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks (0.10*; *HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks (0.10*; *IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks (0.10*; *Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks (0.10*; *NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks (0.10*; *OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks (0.10*; *OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks (0.10*; *RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks (0.10*; *Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks (0.10*; *Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +[ELinks/0.10* (*AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks/0.10* (*BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks/0.10* (*CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks/0.10* (*Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks/0.10* (*Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks/0.10* (*FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks/0.10* (*HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks/0.10* (*IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks/0.10* (*Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks/0.10* (*NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks/0.10* (*OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks/0.10* (*OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks/0.10* (*RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks/0.10* (*Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks/0.10* (*Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 + +[ELinks 0.11] +Parent=DefaultProperties +Browser=ELinks +Version=0.11 +MinorVer=11 +Frames=true +Tables=true + +[ELinks (0.11*; *AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks (0.11*; *BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks (0.11*; *CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks (0.11*; *Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks (0.11*; *Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks (0.11*; *HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks (0.11*; *IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks (0.11*; *Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks (0.11*; *NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks (0.11*; *OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks (0.11*; *OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks (0.11*; *RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks (0.11*; *Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks (0.11*; *Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +[ELinks/0.11* (*AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks/0.11* (*BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks/0.11* (*CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks/0.11* (*Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks/0.11* (*Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks/0.11* (*FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks/0.11* (*HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks/0.11* (*IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks/0.11* (*Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks/0.11* (*NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks/0.11* (*OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks/0.11* (*OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks/0.11* (*RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks/0.11* (*Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks/0.11* (*Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 + +[ELinks 0.12] +Parent=DefaultProperties +Browser=ELinks +Version=0.12 +MinorVer=12 +Frames=true +Tables=true + +[ELinks (0.12*; *AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks (0.12*; *BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks (0.12*; *CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks (0.12*; *Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks (0.12*; *Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks (0.12*; *FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks (0.12*; *HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks (0.12*; *IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks (0.12*; *Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks (0.12*; *NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks (0.12*; *OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks (0.12*; *OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks (0.12*; *RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks (0.12*; *Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks (0.12*; *Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +[ELinks/0.12* (*AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks/0.12* (*BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks/0.12* (*CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks/0.12* (*Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks/0.12* (*Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks/0.12* (*FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks/0.12* (*HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks/0.12* (*IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks/0.12* (*Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks/0.12* (*NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks/0.12* (*OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks/0.12* (*OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks/0.12* (*RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks/0.12* (*Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks/0.12* (*Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 + +[ELinks 0.9] +Parent=DefaultProperties +Browser=ELinks +Version=0.9 +MinorVer=9 +Frames=true +Tables=true + +[ELinks (0.9*; *AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks (0.9*; *BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks (0.9*; *CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks (0.9*; *Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks (0.9*; *Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks (0.9*; *FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks (0.9*; *HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks (0.9*; *IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks (0.9*; *Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks (0.9*; *NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks (0.9*; *OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks (0.9*; *OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks (0.9*; *RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks (0.9*; *Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks (0.9*; *Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +[ELinks/0.9* (*AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks/0.9* (*BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks/0.9* (*CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks/0.9* (*Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks/0.9* (*Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks/0.9* (*HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks/0.9* (*IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks/0.9* (*Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks/0.9* (*NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks/0.9* (*OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks/0.9* (*OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks/0.9* (*RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks/0.9* (*Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks/0.9* (*Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit + +[AppleWebKit] +Parent=DefaultProperties +Browser=AppleWebKit +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] +Parent=AppleWebKit + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser=Camino +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] +Parent=Camino +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] +Parent=Camino +Version=1.4 +MajorVer=1 +MinorVer=4 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] +Parent=Camino +Version=1.5 +MajorVer=1 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] +Parent=Camino +Version=1.6 +MajorVer=1 +MinorVer=6 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser=Chimera +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser=Dillo +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +[Dillo/2.0] +Parent=Dillo +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser=Emacs/W3 +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser=fantomas +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser=fantomas cloakBrowser + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser=fantomas shadowMaker Browser + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser=fantomas fantomBrowser + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser=fantomas fantomCrew Browser + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser=fantomas stealthBrowser + +[multiBlocker browser*] +Parent=fantomas +Browser=fantomas multiBlocker browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser=FrontPage +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser=Galeon +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser=HP Secure Web Browser +Platform=OpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser=IBrowse +Platform=Amiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser=iCab +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[iCab/4.0 (Macintosh; U; *Mac OS X)] +Parent=iCab +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser=iSiloX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser=Lycoris Desktop/LX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser=NetPositive +Platform=BeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser=OmniWeb +Platform=MacOSX +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] +Parent=OmniWeb +Version=5. +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser=Shiira +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] +Parent=Shiira +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] +Parent=Shiira +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Windows Maker] +Parent=DefaultProperties +Browser=WMaker +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[WMaker*] +Parent=Windows Maker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 + +[K-Meleon 1.0] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 + +[K-Meleon 1.1] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.1 +MajorVer=1 +MinorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 + +[K-Meleon 1.5] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.5 +MajorVer=1 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 + +[Konqueror 3.0] +Parent=DefaultProperties +Browser=Konqueror +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[*Konqueror/3.0*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 + +[Konqueror 4.0] +Parent=DefaultProperties +Browser=Konqueror +Version=4.0 +MajorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 + +[Konqueror 4.1] +Parent=DefaultProperties +Browser=Konqueror +Version=4.1 +MajorVer=4 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 + +[Konqueror 4.2] +Parent=DefaultProperties +Browser=Konqueror +Version=4.2 +MajorVer=4 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser=Safari +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 + +[Safari 3.0] +Parent=DefaultProperties +Browser=Safari +Version=3.0 +MajorVer=3 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 + +[Safari 3.1] +Parent=DefaultProperties +Browser=Safari +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 + +[Safari 3.2] +Parent=DefaultProperties +Browser=Safari +Version=3.2 +MajorVer=3 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 + +[Safari 4.0] +Parent=DefaultProperties +Browser=Safari +Version=4.0 +MajorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 + +[Opera 10.0] +Parent=DefaultProperties +Browser=Opera +Version=10.0 +MajorVer=10 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] +Parent=Opera 10.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 10.0 +Platform=MacOSX + +[Opera/10.0* (Windows 95*)*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Opera/10.0* (Windows 98*)*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Opera/10.0* (Windows CE*)*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Opera/10.0* (Windows ME*)*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Opera/10.0* (Windows NT 4.0*)*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Opera/10.0* (Windows NT 5.0*)*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Opera/10.0* (Windows NT 5.1*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (Windows NT 5.2*)*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Opera/10.0* (Windows NT 6.0*)*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Opera/10.0* (Windows NT 6.1*)*] +Parent=Opera 10.0 +Platform=Win7 + +[Opera/10.0* (Windows XP*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (X11; FreeBSD*)*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Opera/10.0* (X11; Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (X11; SunOS*)*] +Parent=Opera 10.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser=Opera +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser=Opera +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser=Opera +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser=Opera +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser=Opera +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser=Opera +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser=Opera +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser=Opera +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser=Opera +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser=Opera +Version=9.1 +MajorVer=9 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (X11; SunOS*)*] +Parent=Opera 9.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 + +[Opera 9.2] +Parent=DefaultProperties +Browser=Opera +Version=9.2 +MajorVer=9 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] +Parent=Opera 9.2 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.2 +Platform=MacOSX + +[Opera/9.2* (Windows 95*)*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Opera/9.2* (Windows 98*)*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Opera/9.2* (Windows CE*)*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Opera/9.2* (Windows ME*)*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Opera/9.2* (Windows NT 4.0*)*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Opera/9.2* (Windows NT 5.0*)*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Opera/9.2* (Windows NT 5.1*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (Windows NT 5.2*)*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Opera/9.2* (Windows NT 6.0*)*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Opera/9.2* (Windows NT 6.1*)*] +Parent=Opera 9.2 +Platform=Win7 + +[Opera/9.2* (Windows XP*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (X11; FreeBSD*)*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Opera/9.2* (X11; Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (X11; SunOS*)*] +Parent=Opera 9.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 + +[Opera 9.3] +Parent=DefaultProperties +Browser=Opera +Version=9.3 +MajorVer=9 +MinorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] +Parent=Opera 9.3 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.3 +Platform=MacOSX + +[Opera/9.3* (Windows 95*)*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Opera/9.3* (Windows 98*)*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Opera/9.3* (Windows CE*)*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Opera/9.3* (Windows ME*)*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Opera/9.3* (Windows NT 4.0*)*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Opera/9.3* (Windows NT 5.0*)*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Opera/9.3* (Windows NT 5.1*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (Windows NT 5.2*)*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Opera/9.3* (Windows NT 6.0*)*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Opera/9.3* (Windows NT 6.1*)*] +Parent=Opera 9.3 +Platform=Win7 + +[Opera/9.3* (Windows XP*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (X11; FreeBSD*)*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Opera/9.3* (X11; Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (X11; SunOS*)*] +Parent=Opera 9.3 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 + +[Opera 9.4] +Parent=DefaultProperties +Browser=Opera +Version=9.4 +MajorVer=9 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] +Parent=Opera 9.4 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.4 +Platform=MacOSX + +[Opera/9.4* (Windows 95*)*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Opera/9.4* (Windows 98*)*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Opera/9.4* (Windows CE*)*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Opera/9.4* (Windows ME*)*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Opera/9.4* (Windows NT 4.0*)*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Opera/9.4* (Windows NT 5.0*)*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Opera/9.4* (Windows NT 5.1*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (Windows NT 5.2*)*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Opera/9.4* (Windows NT 6.0*)*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Opera/9.4* (Windows NT 6.1*)*] +Parent=Opera 9.4 +Platform=Win7 + +[Opera/9.4* (Windows XP*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (X11; FreeBSD*)*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Opera/9.4* (X11; Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (X11; SunOS*)*] +Parent=Opera 9.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 + +[Opera 9.5] +Parent=DefaultProperties +Browser=Opera +Version=9.5 +MajorVer=9 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] +Parent=Opera 9.5 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.5 +Platform=MacOSX + +[Opera/9.5* (Windows 95*)*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Opera/9.5* (Windows 98*)*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Opera/9.5* (Windows CE*)*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Opera/9.5* (Windows ME*)*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Opera/9.5* (Windows NT 4.0*)*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Opera/9.5* (Windows NT 5.0*)*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Opera/9.5* (Windows NT 5.1*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (Windows NT 5.2*)*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Opera/9.5* (Windows NT 6.0*)*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Opera/9.5* (Windows NT 6.1*)*] +Parent=Opera 9.5 +Platform=Win7 + +[Opera/9.5* (Windows XP*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (X11; FreeBSD*)*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Opera/9.5* (X11; Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (X11; SunOS*)*] +Parent=Opera 9.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 + +[Opera 9.6] +Parent=DefaultProperties +Browser=Opera +Version=9.6 +MajorVer=9 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] +Parent=Opera 9.6 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.6 +Platform=MacOSX + +[Opera/9.6* (Windows 95*)*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Opera/9.6* (Windows 98*)*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Opera/9.6* (Windows CE*)*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Opera/9.6* (Windows ME*)*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Opera/9.6* (Windows NT 4.0*)*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Opera/9.6* (Windows NT 5.0*)*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Opera/9.6* (Windows NT 5.1*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (Windows NT 5.2*)*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Opera/9.6* (Windows NT 6.0*)*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Opera/9.6* (Windows NT 6.1*)*] +Parent=Opera 9.6 +Platform=Win7 + +[Opera/9.6* (Windows XP*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (X11; FreeBSD*)*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Opera/9.6* (X11; Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (X11; SunOS*)*] +Parent=Opera 9.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser=Netscape +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser=Netscape +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser=Netscape +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser=Netscape +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser=Netscape +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser=Netscape +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser=Netscape +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser=Netscape +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser=Netscape +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser=Netscape +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser=Netscape +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser=Netscape +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser=Netscape +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 + +[SeaMonkey 1.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 + +[SeaMonkey 1.1] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.1 +MajorVer=1 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 + +[SeaMonkey 2.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=2.0 +MajorVer=2 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 + +[Flock 1.0] +Parent=DefaultProperties +Browser=Flock +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 + +[Flock 2.0] +Parent=DefaultProperties +Browser=Flock +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 + +[Sleipnir] +Parent=DefaultProperties +Browser=Sleipnir +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win7 + +[Sleipnir*] +Parent=Sleipnir + +[Sleipnir/2.*] +Parent=Sleipnir + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 + +[Fennec 1.0] +Parent=DefaultProperties +Browser=Firefox Mobile +Version=1.0 +MajorVer=1 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser=Firebird +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser=Firefox +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser=Firefox +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser=Firefox +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser=Firefox +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser=Firefox +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser=Firefox +Version=3.0 +MajorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 + +[Firefox 3.1] +Parent=DefaultProperties +Browser=Firefox +Version=3.1 +MajorVer=3 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 + +[Firefox 3.5] +Parent=DefaultProperties +Browser=Firefox +Version=3.5 +MajorVer=3 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser=Phoenix +Version=0.5 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel + +[Iceweasel] +Parent=DefaultProperties +Browser=Iceweasel +Platform=Linux +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] +Parent=Iceweasel +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser=Mozilla +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser=Mozilla +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser=Mozilla +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser=Mozilla +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser=Mozilla +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser=Mozilla +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser=Mozilla +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser=Mozilla +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser=Mozilla +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 + +[Mozilla 1.9] +Parent=DefaultProperties +Browser=Mozilla +Version=1.9 +MajorVer=1 +MinorVer=9 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser=IE +Platform=MacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser=AOL +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser=AOL +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser=AOL +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser + +[Avant Browser] +Parent=DefaultProperties +Browser=Avant Browser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Advanced Browser (http://www.avantbrowser.com)] +Parent=Avant Browser + +[Avant Browser*] +Parent=Avant Browser + +[Avant Browser/*] +Parent=Avant Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser=IE +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] +Parent=IE 4.01 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser=IE +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser=IE +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser=IE +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser=IE +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 +msdomversion=6.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser=IE +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=7.0 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] +Parent=IE 7.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] +Parent=IE 7.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 + +[IE 8.0] +Parent=DefaultProperties +Browser=IE +Version=8.0 +MajorVer=8 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=8.0 +w3cdomversion=1.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] +Parent=IE 8.0 +Platform=Win32 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] +Parent=IE 8.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] +Parent=IE 8.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] +Parent=IE 8.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser=Default Browser +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +AuthenticodeUpdate=0 +CSS=0 +WAP=false +netCLR=false +ClrVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 diff --git a/Source/Platforms/Android/Binaries/Mono/etc/mono/config b/Source/Platforms/Android/Binaries/Mono/etc/mono/config new file mode 100644 index 000000000..5c4639c28 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/etc/mono/config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Mono/lib/libMonoPosixHelper.so b/Source/Platforms/Android/Binaries/Mono/lib/libMonoPosixHelper.so new file mode 100644 index 000000000..c444674c8 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/libMonoPosixHelper.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14889e284d5ffe63eba3c744b707f0c836b156ecb67b313a7c6dca954ebc06a7 +size 806936 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/libmono-btls-shared.so b/Source/Platforms/Android/Binaries/Mono/lib/libmono-btls-shared.so new file mode 100644 index 000000000..edf0c449e --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/libmono-btls-shared.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7767e4adb93486de5152a7179f425f7ababa464007ed380ed3b4e891d035b903 +size 4960968 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/libmono-native.so b/Source/Platforms/Android/Binaries/Mono/lib/libmono-native.so new file mode 100644 index 000000000..858860130 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/libmono-native.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:008e99a0694a42b1775b599a4824eccc38e13d3c44ad5e6fa3ed82e0677f4a09 +size 82720 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.CJK.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.CJK.dll new file mode 100644 index 000000000..aee6e88c4 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.CJK.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:094b524b08ba818ae3668df5cab90eb5e8e9a2126e1d1addec0ae4c6757d6262 +size 680448 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.MidEast.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.MidEast.dll new file mode 100644 index 000000000..e6fbe078e --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.MidEast.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cc7bb18bb492bf136fa0694a738aedc6385680847d8130fbbc75f2c957ba50a9 +size 32256 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.Other.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.Other.dll new file mode 100644 index 000000000..b853e093b --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.Other.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:430377b69b3ad190da12e0cf6b9be5308817ea00d13c761957aa0d5be69d9990 +size 36352 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.Rare.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.Rare.dll new file mode 100644 index 000000000..221d48414 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.Rare.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb09bd812e0c35c34a2bebc54ab6b3d5a148f8552cc76889b8cf17194061b461 +size 192000 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.West.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.West.dll new file mode 100644 index 000000000..2712b78a2 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.West.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d45f598314a87aa7136af6e5a1065e0fae14645ff530fecd3eafb84f4749dfe +size 72192 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.dll new file mode 100644 index 000000000..4fa8fdc55 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/I18N.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2201c923dff48f0e13560b389085abeee1e3667d791c7061c92e4dcc71bb1261 +size 39424 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Microsoft.CSharp.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Microsoft.CSharp.dll new file mode 100644 index 000000000..0e7738ac4 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Microsoft.CSharp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:765c0195b1888d8033f4e2754d7776569fdc685d550dae874576b2bafe333ac5 +size 300544 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Btls.Interface.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Btls.Interface.dll new file mode 100644 index 000000000..6773ee910 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Btls.Interface.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a1c9aea16b99d4939c64f634ee304c1dc5ccbd2a658cc505b6a1e63016f506a +size 22528 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.CSharp.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.CSharp.dll new file mode 100644 index 000000000..7045bd7c4 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.CSharp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76e18cdcc9fdd29c9863395119fdcdd44c57d73873e6429cf83d7c58dcdd55dd +size 1353216 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.CompilerServices.SymbolWriter.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.CompilerServices.SymbolWriter.dll new file mode 100644 index 000000000..88ca9a1e0 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.CompilerServices.SymbolWriter.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22f2c6ceca24720a92bf3138fd6c46ed46576b447d33db0566ced5bc45da32cd +size 43520 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Data.Sqlite.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Data.Sqlite.dll new file mode 100644 index 000000000..eab84868f --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Data.Sqlite.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:536a4a8ead1d2f72ce6783439925f2f67933f3eb38715de0964570ba578502c6 +size 166400 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Data.Tds.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Data.Tds.dll new file mode 100644 index 000000000..430b0f3e8 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Data.Tds.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:31b880abdb1a6da8902267b0a896a4b12a421167b5e7831b1087c3bb5dec1242 +size 100352 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Posix.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Posix.dll new file mode 100644 index 000000000..28c651123 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78e50778305a389427fc7fbaa656d47933a135c32b8c3b116edbebe486251c25 +size 213504 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Security.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Security.dll new file mode 100644 index 000000000..5dcb4a1df --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c145ecf5246a22440cef3261d94a65e710f21a64a25e7b5ee82ce39a985f2dd6 +size 314880 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ComponentModel.Composition.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..08a91251a --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92b5754853695ef9eb42e6b2cad52586447be43e6a397b7a27feb89a8f676839 +size 258560 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..69e7ec155 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:43f9925046ae96439d4da16847096514da66056fabf314e40706f0ab83efb8e8 +size 84992 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Core.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Core.dll new file mode 100644 index 000000000..3bdc2e0d9 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a033471e9de025db856dfa38a39450840f86494582438089b237d1ae151827b8 +size 1036288 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Data.Services.Client.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Data.Services.Client.dll new file mode 100644 index 000000000..d7eabf8fb --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86a6ac6258bbaee0a071b1808f290ff671342bf5bf4794bd95af3aa5a529d668 +size 418816 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Data.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Data.dll new file mode 100644 index 000000000..2ee487b8d --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1026c16ae364da2fffa707f3dae567cbbcbf21cb0dd88c689cacc1140e22cf4d +size 1945600 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IO.Compression.FileSystem.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..9a88f139d --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ee9fceeee6a27f9f2964cb2f43529657c511999df80d16353b336c2ae7aaa33 +size 18432 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IO.Compression.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IO.Compression.dll new file mode 100644 index 000000000..9a9e072bf --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b65bd3c600cde44e85e5e5b50c436dcc7a0d96f087702f2a0a353beb53e1828 +size 99840 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IdentityModel.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IdentityModel.dll new file mode 100644 index 000000000..cd19e18e1 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5084c75dd0afe653cb00c5d4c1b9e47d2d617e617f067b4a6bd049c9831d4ab0 +size 14336 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Json.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Json.dll new file mode 100644 index 000000000..599a6f7ff --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a706ef86b75ad3d9d1f7fe3d5dd20eb7a799eb3273c21251ce342a565045db1b +size 32768 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.Http.WinHttpHandler.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.Http.WinHttpHandler.dll new file mode 100644 index 000000000..5a36cc19f --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.Http.WinHttpHandler.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c61d1460d5a803496be11cd5fe56b9e7fa79ad4e2f92ed67023b26747a9219d +size 16384 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.Http.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.Http.dll new file mode 100644 index 000000000..342539715 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5baf341380934b59d72b291f1a365dc715081cdb58119e318ca4a712fb74e041 +size 116736 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.dll new file mode 100644 index 000000000..61e1e6253 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7f66dc102d6f5fff5f993c253bf32f568c31732ed8586e15b54c58e97dac7b1 +size 14336 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Numerics.Vectors.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3777aa860 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:567d0dcc5aea718564a6186be99a6ae5303d588453d7e208539e7924e432bb7b +size 12288 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Numerics.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Numerics.dll new file mode 100644 index 000000000..0a3330797 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0299df1fbc091a0fe63636d67be998ce25fd750f5fa8a43281dc7ef10cdc286 +size 119296 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Reflection.Context.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Reflection.Context.dll new file mode 100644 index 000000000..90bd71749 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ebc46a924530e81fb8cfff45dc44ab8aa76708e8e49b5837b6c6146b3bfc77bd +size 13312 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Runtime.CompilerServices.Unsafe.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Runtime.CompilerServices.Unsafe.dll new file mode 100644 index 000000000..ff2ca1efc --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Runtime.CompilerServices.Unsafe.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee25b36d2ff502ffe106b0e09da74a7cc78fc22754ac30a7ce138c35107e8fe0 +size 4096 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Runtime.Serialization.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Runtime.Serialization.dll new file mode 100644 index 000000000..089ee773e --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c59dab51c697a9808732bba661090df501de050425d32ee61b341205a695a027 +size 861696 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Security.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Security.dll new file mode 100644 index 000000000..953d34a84 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db3082ec4c67cb912028d1d356f265fe824ae7733209358d3387935254595af1 +size 143360 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.Internals.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..cb1bd9b4c --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e2f992c8864e7bc047377bea720f9747922bee7e08bb72024dac155b04beb25 +size 218624 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.Web.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.Web.dll new file mode 100644 index 000000000..ec0a2d903 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3fa268fafff157ca3ba49e38efce3458ea2f6b09e7c0458af95013bcaf1a49a +size 57856 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.dll new file mode 100644 index 000000000..cdead5ecf --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fa17b24e6bed62e28b9883aeefeb6f016935fe1f799c66074ea9e705181b3f4 +size 402432 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Transactions.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Transactions.dll new file mode 100644 index 000000000..523b79376 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecea31e68a3df8150a7a40f4cc9e98b495aee2a1fc14d47a753c929e0e26a99c +size 32256 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Web.Services.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Web.Services.dll new file mode 100644 index 000000000..a1ead1710 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1ffbc25bf7c9efe370d2b7170d1fc491558f475b09152dddaba4db8e544a65 +size 214016 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Windows.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Windows.dll new file mode 100644 index 000000000..a276e2e47 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b342116e1df9d772e373b6e5878e9f03c982e2b63fbfd5cdbd75816af77e518 +size 11776 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.Linq.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.Linq.dll new file mode 100644 index 000000000..6a8162ea5 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0754c2b07be2ec7d8f499005d2a9a8692a06c80442a63a358584f1b95a9fc42 +size 137728 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.Serialization.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.Serialization.dll new file mode 100644 index 000000000..582e21a42 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:382a09261987d5f9897a3fc45b60f4c7c44da8d4e9fda74cd225ded1a372aac3 +size 11776 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.dll new file mode 100644 index 000000000..823d80e56 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e707bddd6b5e10cbed940c52082cef70667a98663df5a8db1b6fb6ccb5075163 +size 2442752 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.dll new file mode 100644 index 000000000..b4b273512 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:83c1d5b0f3873b15b05922d06a275ff5bba57d8cd0c32f5140abb24fb0497a7d +size 1911296 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/mscorlib.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/mscorlib.dll new file mode 100644 index 000000000..18b420bc6 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af05591d44a5ff7f496b035525ea8ce8df4164e8484bcfd08246714737e8f63a +size 4378112 diff --git a/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/nunitlite.dll b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/nunitlite.dll new file mode 100644 index 000000000..418c012a7 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Mono/lib/mono/2.1/nunitlite.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02780ab5a2569a881e4df73c187d39fa35b0db21b6227350d0741c5306348962 +size 213504 diff --git a/Source/Platforms/Android/Binaries/Project/app/build.gradle b/Source/Platforms/Android/Binaries/Project/app/build.gradle new file mode 100644 index 000000000..0ad5776b5 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/app/build.gradle @@ -0,0 +1,33 @@ +apply plugin: 'com.android.application' +android { + compileSdkVersion 24 + defaultConfig { + applicationId "${PackageName}" + minSdkVersion 24 + targetSdkVersion 24 + versionCode 1 + versionName "${ProjectVersion}" + ndk { + abiFilter "${PackageAbi}" + } + } + sourceSets { + main { + jni.srcDirs = [] + jniLibs.srcDirs = ['jniLibs'] + assets.srcDirs = ['assets'] + } + } + buildTypes { + release { + debuggable true + minifyEnabled false + } + } + packagingOptions { + doNotStrip '**.so' + } +} +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) +} diff --git a/Source/Platforms/Android/Binaries/Project/app/src/main/AndroidManifest.xml b/Source/Platforms/Android/Binaries/Project/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..e535cef40 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/app/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + +${AndroidPermissions} + + + + + + + + + + diff --git a/Source/Platforms/Android/Binaries/Project/app/src/main/java/com/flaxengine/GameActivity.java b/Source/Platforms/Android/Binaries/Project/app/src/main/java/com/flaxengine/GameActivity.java new file mode 100644 index 000000000..2ef68f227 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/app/src/main/java/com/flaxengine/GameActivity.java @@ -0,0 +1,288 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +package com.flaxengine; + +import android.app.NativeActivity; +import android.app.PendingIntent; +import android.app.AlertDialog; +import android.content.Context; +import android.content.Intent; +import android.content.DialogInterface; +import android.content.pm.ApplicationInfo; +import android.content.res.AssetManager; +import android.os.Handler; +import android.os.HandlerThread; +import android.os.Bundle; +import android.os.Build; +import android.os.Vibrator; +import android.view.View; +import android.view.Display; +import android.view.KeyEvent; +import android.util.Log; +import android.util.DisplayMetrics; +import android.net.Uri; +import android.net.NetworkInfo; +import android.net.ConnectivityManager; +import android.media.AudioManager; +import android.provider.Settings; +import android.graphics.Point; +import android.annotation.TargetApi; + +import java.util.concurrent.Semaphore; +import java.io.File; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.net.URL; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class GameActivity extends NativeActivity { + static { + try { + // Load native libraries + System.loadLibrary("FlaxGame"); + } catch (UnsatisfiedLinkError error) { + Log.e("Flax", error.getMessage()); + } + } + + static GameActivity _activity; + String _appPackageName; + final Semaphore _semaphore = new Semaphore(0, true); + + /** Gets the singleton activity for the game. **/ + public static GameActivity Get() { + return _activity; + } + + private class VibrateRunnable implements Runnable { + private int duration; + private Vibrator vibrator; + + VibrateRunnable(final int duration, final Vibrator vibrator) { + this.duration = duration; + this.vibrator = vibrator; + } + + public void run () { + if (duration < 1) { + vibrator.cancel(); + } else { + vibrator.vibrate(duration); + } + } + } + + public void vibrate(int duration) { + Vibrator vibrator = (Vibrator)getSystemService(VIBRATOR_SERVICE); + if (vibrator != null) { + _activity.runOnUiThread(new VibrateRunnable(duration, vibrator)); + } + } + + public void showAlert(final String text, final String caption) { + final GameActivity activity = this; + activity.runOnUiThread(new Runnable() { + public void run() { + AlertDialog.Builder builder = new AlertDialog.Builder(activity, AlertDialog.THEME_HOLO_DARK); + builder.setTitle(caption); + builder.setMessage(text); + builder.setPositiveButton("Close", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + _semaphore.release(); + } + }); + builder.setCancelable(false); + AlertDialog dialog = builder.create(); + dialog.show(); + } + }); + try { + _semaphore.acquire(); + } + catch (InterruptedException e) { + } + } + + public int getRotation() { + return getWindowManager().getDefaultDisplay().getRotation(); + } + + @SuppressWarnings("deprecation") + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) + static boolean isAirplaneModeOn(Context context) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) { + return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0; + } + return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0; + } + + public int getNetworkConnectionType() { + try { + if (isAirplaneModeOn(getApplicationContext())) { + return 2; + } + ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + if ((activeNetwork != null && activeNetwork.isAvailable() && activeNetwork.isConnectedOrConnecting())) { + switch (activeNetwork.getType()) { + case ConnectivityManager.TYPE_WIFI: return 4; + case ConnectivityManager.TYPE_BLUETOOTH: return 5; + case ConnectivityManager.TYPE_ETHERNET: return 6; + } + return 3; + } + return 0; + } catch (Exception e) { + Log.i("Flax", "Error", e); + return 1; + } + } + + public void openUrl(String url) { + Uri webpage = Uri.parse(url); + Intent intent = new Intent(Intent.ACTION_VIEW, webpage); + if (intent.resolveActivity(getPackageManager()) != null) { + startActivity(intent); + } + } + + static void copyAssetDir(AssetManager am, String path, String outpath) { + try { + String[] res = am.list(path); + for (int i = 0; i < res.length; i++) { + String fromFile = path + "/" + res[i]; + String toFile = outpath + "/" + res[i]; + InputStream fromStream; + try { + fromStream = am.open(fromFile); + } catch (FileNotFoundException e) { + new File(toFile).mkdirs(); + copyAssetDir(am, fromFile, toFile); + continue; + } + copy(fromStream, new FileOutputStream(toFile)); + } + } catch (Exception e) { + Log.i("Flax", "Error", e); + } + } + + static void copy(InputStream in, OutputStream out) throws IOException { + byte[] buff = new byte[1024]; + for (int len = in.read(buff); len != -1; len = in.read(buff)) { + out.write(buff, 0, len); + } + in.close(); + out.close(); + } + + static String readFileText(InputStream stream, Charset encoding) throws IOException { + byte[] buffer = new byte[stream.available()]; + stream.read(buffer); + stream.close(); + return new String(buffer, encoding); + } + + void extractMonoFiles() throws IOException + { + String filesDir = getFilesDir().getAbsolutePath(); + AssetManager am = getAssets(); + String[] amRootFiles = am.list(""); + + // Skip if extracted has is the same as in the package + String hashFile = "hash.txt"; + File monoHashFile = new File(filesDir + "/" + hashFile); + if (monoHashFile.exists()) { + for (int i = 0; i < amRootFiles.length; i++) { + if (amRootFiles[i].equals(hashFile)) { + String monoHash = readFileText(new FileInputStream(monoHashFile), StandardCharsets.US_ASCII); + String hash = readFileText(am.open(hashFile), StandardCharsets.US_ASCII); + if (monoHash.equals(hash)) { + return; + } + break; + } + } + } + + // Extract files + Log.i("Flax", "Extracting Mono files"); + new File(filesDir + "/Mono").mkdir(); + copyAssetDir(am, "Mono", filesDir + "/Mono"); + for (int i = 0; i < amRootFiles.length; i++) { + String fromFile = amRootFiles[i]; + if (!fromFile.endsWith(".dll") && !fromFile.equals(hashFile)) + continue; + String toFile = filesDir + "/" + amRootFiles[i]; + InputStream fromStream = am.open(fromFile); + copy(fromStream, new FileOutputStream(toFile)); + } + } + + void goFullscreen() { + View decorView = getWindow().getDecorView(); + decorView.setSystemUiVisibility( + View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | + View.SYSTEM_UI_FLAG_LAYOUT_STABLE | + View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | + View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | + View.SYSTEM_UI_FLAG_FULLSCREEN); + } + + @Override + protected void onCreate(Bundle instance) { + _activity = this; + + // Extract Mono files and other bundled C# libraries from APK (Mono uses unix file access API which doesn't work with AAssetManager API) + try { + extractMonoFiles(); + } catch (Exception e) { + Log.i("Flax", "Error", e); + } + + // Set native engine platform info + String appPackageName = getPackageName(); + String deviceManufacturer = android.os.Build.MANUFACTURER; + String deviceModel = android.os.Build.MODEL; + String deviceBuildNumber = android.os.Build.DISPLAY; + String systemVersion = android.os.Build.VERSION.RELEASE; + String systemLanguage = java.util.Locale.getDefault().toString(); + Display display = getWindowManager().getDefaultDisplay(); + Point displayRealSize = new Point(); + display.getRealSize(displayRealSize); + int screenWidth = displayRealSize.x; + int screenHeight = displayRealSize.y; + String cacheDir = getCacheDir().toString(); + String executablePath = getApplicationInfo().nativeLibraryDir + "/libFlaxGame.so"; + nativeSetPlatformInfo(appPackageName, deviceManufacturer, deviceModel, deviceBuildNumber, systemVersion, systemLanguage, screenWidth, screenHeight, cacheDir, executablePath); + + super.onCreate(instance); + + // Initialize + setVolumeControlStream(AudioManager.STREAM_MUSIC); + } + + @Override + public void onWindowFocusChanged(boolean hasFocus) { + super.onWindowFocusChanged(hasFocus); + + if (hasFocus) { + goFullscreen(); + } + } + + @Override + public void onResume() { + super.onResume(); + + goFullscreen(); + } + + public native void nativeSetPlatformInfo(String appPackageName, String deviceManufacturer, String deviceModel, String deviceBuildNumber, String systemVersion, String systemLanguage, int screenWidth, int screenHeight, String cacheDir, String executablePath); +} diff --git a/Source/Platforms/Android/Binaries/Project/app/src/main/res/values/strings.xml b/Source/Platforms/Android/Binaries/Project/app/src/main/res/values/strings.xml new file mode 100644 index 000000000..e7dfc4991 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/app/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + + ${ProjectName} + diff --git a/Source/Platforms/Android/Binaries/Project/build.gradle b/Source/Platforms/Android/Binaries/Project/build.gradle new file mode 100644 index 000000000..31d9237bc --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/build.gradle @@ -0,0 +1,25 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. + +buildscript { + repositories { + google() + jcenter() + } + dependencies { + classpath 'com.android.tools.build:gradle:4.1.0' + + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +allprojects { + repositories { + google() + jcenter() + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/Source/Platforms/Android/Binaries/Project/gradle.properties b/Source/Platforms/Android/Binaries/Project/gradle.properties new file mode 100644 index 000000000..7be81848a --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/gradle.properties @@ -0,0 +1,13 @@ +# Project-wide Gradle settings. + +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. + +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html + +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx10248m -XX:MaxPermSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 diff --git a/Source/Platforms/Android/Binaries/Project/gradle/wrapper/gradle-wrapper.jar b/Source/Platforms/Android/Binaries/Project/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..8c0fb64a8 Binary files /dev/null and b/Source/Platforms/Android/Binaries/Project/gradle/wrapper/gradle-wrapper.jar differ diff --git a/Source/Platforms/Android/Binaries/Project/gradle/wrapper/gradle-wrapper.properties b/Source/Platforms/Android/Binaries/Project/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..483089527 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Oct 26 11:50:08 CET 2020 +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip diff --git a/Source/Platforms/Android/Binaries/Project/gradlew b/Source/Platforms/Android/Binaries/Project/gradlew new file mode 100644 index 000000000..91a7e269e --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/gradlew @@ -0,0 +1,164 @@ +#!/usr/bin/env bash + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn ( ) { + echo "$*" +} + +die ( ) { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >&- +APP_HOME="`pwd -P`" +cd "$SAVED" >&- + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") +} +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" + +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/Source/Platforms/Android/Binaries/Project/gradlew.bat b/Source/Platforms/Android/Binaries/Project/gradlew.bat new file mode 100644 index 000000000..8a0b282aa --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/gradlew.bat @@ -0,0 +1,90 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto init + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto init + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:init +@rem Get command-line arguments, handling Windowz variants + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/Source/Platforms/Android/Binaries/Project/settings.gradle b/Source/Platforms/Android/Binaries/Project/settings.gradle new file mode 100644 index 000000000..573abcb32 --- /dev/null +++ b/Source/Platforms/Android/Binaries/Project/settings.gradle @@ -0,0 +1,2 @@ +include ':app' + diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCharacterKinematic_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCharacterKinematic_static.a new file mode 100644 index 000000000..5ee88ade3 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCharacterKinematic_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb0b758d0e51d14ecdd18b2c55c801a7a729da06aa116c729602c7bbdc564bb9 +size 2656678 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCommon_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCommon_static.a new file mode 100644 index 000000000..f4f65287e --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCommon_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:299ece94b714429fcb541599927daec994919fbb87bcee4345f1f1a6b43ba548 +size 48900330 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCooking_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCooking_static.a new file mode 100644 index 000000000..d34e0c5e5 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXCooking_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:067245b08a742cc488503300a78c7c7c2975b5b13d2a072b041480dc6d9eb55c +size 3900056 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXExtensions_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXExtensions_static.a new file mode 100644 index 000000000..02c14d19e --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXExtensions_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e4b27fec3205418a57f118dab8afe86a7cc4427c9a14298fc0579ed38bb8aa5 +size 25755118 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXFoundation_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXFoundation_static.a new file mode 100644 index 000000000..bb19eabdd --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXFoundation_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bad24dff285b711e7fd8bfa79fac21e7536158e02a5c995e8f970bd359ffc3dd +size 755994 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXPvdSDK_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXPvdSDK_static.a new file mode 100644 index 000000000..56c1149b2 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXPvdSDK_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e44058be0cd48106fee815ac2e472ad1f6897725464d7ae49eff61a954891a4 +size 4188330 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXVehicle_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXVehicle_static.a new file mode 100644 index 000000000..67e626f3f --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysXVehicle_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3b2ffb1343ff8246833c364010bea8f496b6965b0aa66ccc53edb771022df27 +size 13785474 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysX_static.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysX_static.a new file mode 100644 index 000000000..e9ed78ee0 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libPhysX_static.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f391f69d9692ca06710d489089da7a00978028918af1e7c4e8c5d9239a03a423 +size 97447380 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libfreetype.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libfreetype.a new file mode 100644 index 000000000..523e33f6b --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libfreetype.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8492361a717bebf5103846b6cc0e4aaf4f1f701c7571d6faa02d4322f97fe7b3 +size 8414046 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libmonosgen-2.0.so b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libmonosgen-2.0.so new file mode 100644 index 000000000..ef7e6e412 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libmonosgen-2.0.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13ba5704dfa7a837614866f261d9f53bc718f25fb2f5713a96b32fa2f56753db +size 15519200 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libogg.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libogg.a new file mode 100644 index 000000000..6a7d7f003 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libogg.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c51c65a58db6e59402492b531c1e9e1b5e98c8f07491e612a667c273d6c84e2 +size 145226 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libopenal.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libopenal.a new file mode 100644 index 000000000..dcf8e8790 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libopenal.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:78414594b65e5a99c7b691ffc11995491513cf6c65baaf038191de3c1ec0efc5 +size 5546306 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbis.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbis.a new file mode 100644 index 000000000..2e0270099 --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbis.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff05daebf44a4bf573dbdce10100d064268d623c0de9c14fbde9cac235bdfabd +size 1079126 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbisenc.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbisenc.a new file mode 100644 index 000000000..7542922bb --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbisenc.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f8bd0e82dda35068355822160d663839813eebbee9c7068dbde82875cf6f0dca +size 1491822 diff --git a/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbisfile.a b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbisfile.a new file mode 100644 index 000000000..20c244d4c --- /dev/null +++ b/Source/Platforms/Android/Binaries/ThirdParty/ARM64/libvorbisfile.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1e0a8c4747cb982311b3eb29f1dc64df0d51bee3708cfd4789dc9095b58d0bad +size 223300 diff --git a/Source/Platforms/DotNet/.gitignore b/Source/Platforms/DotNet/.gitignore new file mode 100644 index 000000000..c07cf8bfe --- /dev/null +++ b/Source/Platforms/DotNet/.gitignore @@ -0,0 +1,2 @@ +!Binaries/ +!*.* diff --git a/Source/Platforms/DotNet/Ionic.Zip.Reduced.XML b/Source/Platforms/DotNet/Ionic.Zip.Reduced.XML new file mode 100644 index 000000000..5706804ed --- /dev/null +++ b/Source/Platforms/DotNet/Ionic.Zip.Reduced.XML @@ -0,0 +1,18132 @@ + + + + Ionic.Zip.Reduced + + + + + This class exposes a set of COM-accessible wrappers for static + methods available on the ZipFile class. You don't need this + class unless you are using DotNetZip from a COM environment. + + + + + A wrapper for ZipFile.IsZipFile(string) + + The filename to of the zip file to check. + true if the file contains a valid zip file. + + + + A wrapper for ZipFile.IsZipFile(string, bool) + + + We cannot use "overloaded" Method names in COM interop. + So, here, we use a unique name. + + The filename to of the zip file to check. + true if the file contains a valid zip file. + + + + A wrapper for ZipFile.CheckZip(string) + + The filename to of the zip file to check. + + true if the named zip file checks OK. Otherwise, false. + + + + A COM-friendly wrapper for the static method . + + + The filename to of the zip file to check. + + The password to check. + + true if the named zip file checks OK. Otherwise, false. + + + + A wrapper for ZipFile.FixZipDirectory(string) + + The filename to of the zip file to fix. + + + + A wrapper for ZipFile.LibraryVersion + + + the version number on the DotNetZip assembly, formatted as a string. + + + + + An enum that provides the various encryption algorithms supported by this + library. + + + + + + PkzipWeak implies the use of Zip 2.0 encryption, which is known to be + weak and subvertible. + + + + A note on interoperability: Values of PkzipWeak and None are + specified in PKWARE's zip + specification, and are considered to be "standard". Zip archives + produced using these options will be interoperable with many other zip tools + and libraries, including Windows Explorer. + + + + Values of WinZipAes128 and WinZipAes256 are not part of the Zip + specification, but rather imply the use of a vendor-specific extension from + WinZip. If you want to produce interoperable Zip archives, do not use these + values. For example, if you produce a zip archive using WinZipAes256, you + will be able to open it in Windows Explorer on Windows XP and Vista, but you + will not be able to extract entries; trying this will lead to an "unspecified + error". For this reason, some people have said that a zip archive that uses + WinZip's AES encryption is not actually a zip archive at all. A zip archive + produced this way will be readable with the WinZip tool (Version 11 and + beyond). + + + + There are other third-party tools and libraries, both commercial and + otherwise, that support WinZip's AES encryption. These will be able to read + AES-encrypted zip archives produced by DotNetZip, and conversely applications + that use DotNetZip to read zip archives will be able to read AES-encrypted + archives produced by those tools or libraries. Consult the documentation for + those other tools and libraries to find out if WinZip's AES encryption is + supported. + + + + In case you care: According to the WinZip specification, the + actual AES key used is derived from the via an + algorithm that complies with RFC 2898, using an iteration + count of 1000. The algorithm is sometimes referred to as PBKDF2, which stands + for "Password Based Key Derivation Function #2". + + + + A word about password strength and length: The AES encryption technology is + very good, but any system is only as secure as the weakest link. If you want + to secure your data, be sure to use a password that is hard to guess. To make + it harder to guess (increase its "entropy"), you should make it longer. If + you use normal characters from an ASCII keyboard, a password of length 20 will + be strong enough that it will be impossible to guess. For more information on + that, I'd encourage you to read this + article. + + + + The WinZip AES algorithms are not supported with the version of DotNetZip that + runs on the .NET Compact Framework. This is because .NET CF lacks the + HMACSHA1 class that is required for producing the archive. + + + + + + No encryption at all. + + + + + Traditional or Classic pkzip encryption. + + + + + WinZip AES encryption (128 key bits). + + + + + WinZip AES encryption (256 key bits). + + + + + An encryption algorithm that is not supported by DotNetZip. + + + + + Delegate in which the application writes the ZipEntry content for the named entry. + + + The name of the entry that must be written. + The stream to which the entry data should be written. + + + When you add an entry and specify a WriteDelegate, via , the application + code provides the logic that writes the entry data directly into the zip file. + + + + + This example shows how to define a WriteDelegate that obtains a DataSet, and then + writes the XML for the DataSet into the zip archive. There's no need to + save the XML to a disk file first. + + + private void WriteEntry (String filename, Stream output) + { + DataSet ds1 = ObtainDataSet(); + ds1.WriteXml(output); + } + + private void Run() + { + using (var zip = new ZipFile()) + { + zip.AddEntry(zipEntryName, WriteEntry); + zip.Save(zipFileName); + } + } + + + + Private Sub WriteEntry (ByVal filename As String, ByVal output As Stream) + DataSet ds1 = ObtainDataSet() + ds1.WriteXml(stream) + End Sub + + Public Sub Run() + Using zip = New ZipFile + zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) + zip.Save(zipFileName) + End Using + End Sub + + + + + + + Delegate in which the application opens the stream, just-in-time, for the named entry. + + + + The name of the ZipEntry that the application should open the stream for. + + + + When you add an entry via , the application code provides the logic that + opens and closes the stream for the given ZipEntry. + + + + + + + Delegate in which the application closes the stream, just-in-time, for the named entry. + + + + The name of the ZipEntry that the application should close the stream for. + + + The stream to be closed. + + + When you add an entry via , the application code provides the logic that + opens and closes the stream for the given ZipEntry. + + + + + + + Delegate for the callback by which the application tells the + library the CompressionLevel to use for a file. + + + + + Using this callback, the application can, for example, specify that + previously-compressed files (.mp3, .png, .docx, etc) should use a + CompressionLevel of None, or can set the compression level based + on any other factor. + + + + + + + In an EventArgs type, indicates which sort of progress event is being + reported. + + + There are events for reading, events for saving, and events for + extracting. This enumeration allows a single EventArgs type to be sued to + describe one of multiple subevents. For example, a SaveProgress event is + invoked before, after, and during the saving of a single entry. The value + of an enum with this type, specifies which event is being triggered. The + same applies to Extraction, Reading and Adding events. + + + + + Indicates that a Add() operation has started. + + + + + Indicates that an individual entry in the archive has been added. + + + + + Indicates that a Add() operation has completed. + + + + + Indicates that a Read() operation has started. + + + + + Indicates that an individual entry in the archive is about to be read. + + + + + Indicates that an individual entry in the archive has just been read. + + + + + Indicates that a Read() operation has completed. + + + + + The given event reports the number of bytes read so far + during a Read() operation. + + + + + Indicates that a Save() operation has started. + + + + + Indicates that an individual entry in the archive is about to be written. + + + + + Indicates that an individual entry in the archive has just been saved. + + + + + Indicates that a Save() operation has completed. + + + + + Indicates that the zip archive has been created in a + temporary location during a Save() operation. + + + + + Indicates that the temporary file is about to be renamed to the final archive + name during a Save() operation. + + + + + Indicates that the temporary file is has just been renamed to the final archive + name during a Save() operation. + + + + + Indicates that the self-extracting archive has been compiled + during a Save() operation. + + + + + The given event is reporting the number of source bytes that have run through the compressor so far + during a Save() operation. + + + + + Indicates that an entry is about to be extracted. + + + + + Indicates that an entry has just been extracted. + + + + + Indicates that extraction of an entry would overwrite an existing + filesystem file. You must use + + ExtractExistingFileAction.InvokeExtractProgressEvent in the call + to ZipEntry.Extract() in order to receive this event. + + + + + The given event is reporting the number of bytes written so far for + the current entry during an Extract() operation. + + + + + Indicates that an ExtractAll operation is about to begin. + + + + + Indicates that an ExtractAll operation has completed. + + + + + Indicates that an error has occurred while saving a zip file. + This generally means the file cannot be opened, because it has been + removed, or because it is locked by another process. It can also + mean that the file cannot be Read, because of a range lock conflict. + + + + + Provides information about the progress of a save, read, or extract operation. + This is a base class; you will probably use one of the classes derived from this one. + + + + + The total number of entries to be saved or extracted. + + + + + The name of the last entry saved or extracted. + + + + + In an event handler, set this to cancel the save or extract + operation that is in progress. + + + + + The type of event being reported. + + + + + Returns the archive name associated to this event. + + + + + The number of bytes read or written so far for this entry. + + + + + Total number of bytes that will be read or written for this entry. + This number will be -1 if the value cannot be determined. + + + + + Provides information about the progress of a Read operation. + + + + + Provides information about the progress of a Add operation. + + + + + Provides information about the progress of a save operation. + + + + + Constructor for the SaveProgressEventArgs. + + the name of the zip archive. + whether this is before saving the entry, or after + The total number of entries in the zip archive. + Number of entries that have been saved. + The entry involved in the event. + + + + Number of entries saved so far. + + + + + Provides information about the progress of the extract operation. + + + + + Constructor for the ExtractProgressEventArgs. + + the name of the zip archive. + whether this is before saving the entry, or after + The total number of entries in the zip archive. + Number of entries that have been extracted. + The entry involved in the event. + The location to which entries are extracted. + + + + Number of entries extracted so far. This is set only if the + EventType is Extracting_BeforeExtractEntry or Extracting_AfterExtractEntry, and + the Extract() is occurring witin the scope of a call to ExtractAll(). + + + + + Returns the extraction target location, a filesystem path. + + + + + Provides information about the an error that occurred while zipping. + + + + + Returns the exception that occurred, if any. + + + + + Returns the name of the file that caused the exception, if any. + + + + + Issued when an ZipEntry.ExtractWithPassword() method is invoked + with an incorrect password. + + + + + Base class for all exceptions defined by and throw by the Zip library. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Indicates that a read was attempted on a stream, and bad or incomplete data was + received. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Issued when an CRC check fails upon extracting an entry from a zip archive. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Issued when errors occur saving a self-extracting archive. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + Indicates that an operation was attempted on a ZipFile which was not possible + given the state of the instance. For example, if you call Save() on a ZipFile + which has no filename set, you can get this exception. + + + + + Default ctor. + + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The message in the exception. + The innerException for this exception. + + + + Come on, you know how exceptions work. Why are you looking at this documentation? + + The serialization info for the exception. + The streaming context from which to deserialize. + + + + An enum for the options when extracting an entry would overwrite an existing file. + + + + + This enum describes the actions that the library can take when an + Extract() or ExtractWithPassword() method is called to extract an + entry to a filesystem, and the extraction would overwrite an existing filesystem + file. + + + + + + + Throw an exception when extraction would overwrite an existing file. (For + COM clients, this is a 0 (zero).) + + + + + When extraction would overwrite an existing file, overwrite the file silently. + The overwrite will happen even if the target file is marked as read-only. + (For COM clients, this is a 1.) + + + + + When extraction would overwrite an existing file, don't overwrite the file, silently. + (For COM clients, this is a 2.) + + + + + When extraction would overwrite an existing file, invoke the ExtractProgress + event, using an event type of . In + this way, the application can decide, just-in-time, whether to overwrite the + file. For example, a GUI application may wish to pop up a dialog to allow + the user to choose. You may want to examine the property before making + the decision. If, after your processing in the Extract progress event, you + want to NOT extract the file, set + on the ZipProgressEventArgs.CurrentEntry to DoNotOverwrite. + If you do want to extract the file, set ZipEntry.ExtractExistingFile + to OverwriteSilently. If you want to cancel the Extraction, set + ZipProgressEventArgs.Cancel to true. Cancelling differs from using + DoNotOverwrite in that a cancel will not extract any further entries, if + there are any. (For COM clients, the value of this enum is a 3.) + + + + + Enumerates the options for a logical conjunction. This enum is intended for use + internally by the FileSelector class. + + + + + FileSelector encapsulates logic that selects files from a source - a zip file + or the filesystem - based on a set of criteria. This class is used internally + by the DotNetZip library, in particular for the AddSelectedFiles() methods. + This class can also be used independently of the zip capability in DotNetZip. + + + + + + The FileSelector class is used internally by the ZipFile class for selecting + files for inclusion into the ZipFile, when the method, or one of + its overloads, is called. It's also used for the methods. Typically, an + application that creates or manipulates Zip archives will not directly + interact with the FileSelector class. + + + + Some applications may wish to use the FileSelector class directly, to + select files from disk volumes based on a set of criteria, without creating or + querying Zip archives. The file selection criteria include: a pattern to + match the filename; the last modified, created, or last accessed time of the + file; the size of the file; and the attributes of the file. + + + + Consult the documentation for + for more information on specifying the selection criteria. + + + + + + + Constructor that allows the caller to specify file selection criteria. + + + + + This constructor allows the caller to specify a set of criteria for + selection of files. + + + + See for a description of + the syntax of the selectionCriteria string. + + + + By default the FileSelector will traverse NTFS Reparse Points. To + change this, use FileSelector(String, bool). + + + + The criteria for file selection. + + + + Constructor that allows the caller to specify file selection criteria. + + + + + This constructor allows the caller to specify a set of criteria for + selection of files. + + + + See for a description of + the syntax of the selectionCriteria string. + + + + The criteria for file selection. + + whether to traverse NTFS reparse points (junctions). + + + + + Returns a string representation of the FileSelector object. + + The string representation of the boolean logic statement of the file + selection criteria for this instance. + + + + Returns the names of the files in the specified directory + that fit the selection criteria specified in the FileSelector. + + + + This is equivalent to calling + with recurseDirectories = false. + + + + The name of the directory over which to apply the FileSelector + criteria. + + + + A collection of strings containing fully-qualified pathnames of files + that match the criteria specified in the FileSelector instance. + + + + + Returns the names of the files in the specified directory that fit the + selection criteria specified in the FileSelector, optionally recursing + through subdirectories. + + + + This method applies the file selection criteria contained in the + FileSelector to the files contained in the given directory, and + returns the names of files that conform to the criteria. + + + + The name of the directory over which to apply the FileSelector + criteria. + + + + Whether to recurse through subdirectories when applying the file + selection criteria. + + + + A collection of strings containing fully-qualified pathnames of files + that match the criteria specified in the FileSelector instance. + + + + + Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. + + + + + This method applies the criteria set in the FileSelector instance (as described in + the ) to the specified ZipFile. Using this + method, for example, you can retrieve all entries from the given ZipFile that + have filenames ending in .txt. + + + + Normally, applications would not call this method directly. This method is used + by the ZipFile class. + + + + Using the appropriate SelectionCriteria, you can retrieve entries based on size, + time, and attributes. See for a + description of the syntax of the SelectionCriteria string. + + + + + The ZipFile from which to retrieve entries. + + a collection of ZipEntry objects that conform to the criteria. + + + + Retrieve the ZipEntry items in the ZipFile that conform to the specified criteria. + + + + + This method applies the criteria set in the FileSelector instance (as described in + the ) to the specified ZipFile. Using this + method, for example, you can retrieve all entries from the given ZipFile that + have filenames ending in .txt. + + + + Normally, applications would not call this method directly. This method is used + by the ZipFile class. + + + + This overload allows the selection of ZipEntry instances from the ZipFile to be restricted + to entries contained within a particular directory in the ZipFile. + + + + Using the appropriate SelectionCriteria, you can retrieve entries based on size, + time, and attributes. See for a + description of the syntax of the SelectionCriteria string. + + + + + The ZipFile from which to retrieve entries. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + a collection of ZipEntry objects that conform to the criteria. + + + + The string specifying which files to include when retrieving. + + + + + Specify the criteria in statements of 3 elements: a noun, an operator, + and a value. Consider the string "name != *.doc" . The noun is + "name". The operator is "!=", implying "Not Equal". The value is + "*.doc". That criterion, in English, says "all files with a name that + does not end in the .doc extension." + + + + Supported nouns include "name" (or "filename") for the filename; + "atime", "mtime", and "ctime" for last access time, last modfied time, + and created time of the file, respectively; "attributes" (or "attrs") + for the file attributes; "size" (or "length") for the file length + (uncompressed); and "type" for the type of object, either a file or a + directory. The "attributes", "type", and "name" nouns all support = + and != as operators. The "size", "atime", "mtime", and "ctime" nouns + support = and !=, and >, >=, <, <= as well. The times are + taken to be expressed in local time. + + + + Specify values for the file attributes as a string with one or more of + the characters H,R,S,A,I,L in any order, implying file attributes of + Hidden, ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint + (symbolic link) respectively. + + + + To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as + the format. If you omit the HH:mm:ss portion, it is assumed to be + 00:00:00 (midnight). + + + + The value for a size criterion is expressed in integer quantities of + bytes, kilobytes (use k or kb after the number), megabytes (m or mb), + or gigabytes (g or gb). + + + + The value for a name is a pattern to match against the filename, + potentially including wildcards. The pattern follows CMD.exe glob + rules: * implies one or more of any character, while ? implies one + character. If the name pattern contains any slashes, it is matched to + the entire filename, including the path; otherwise, it is matched + against only the filename without the path. This means a pattern of + "*\*.*" matches all files one directory level deep, while a pattern of + "*.*" matches all files in all directories. + + + + To specify a name pattern that includes spaces, use single quotes + around the pattern. A pattern of "'* *.*'" will match all files that + have spaces in the filename. The full criteria string for that would + be "name = '* *.*'" . + + + + The value for a type criterion is either F (implying a file) or D + (implying a directory). + + + + Some examples: + + + + + criteria + Files retrieved + + + + name != *.xls + any file with an extension that is not .xls + + + + + name = *.mp3 + any file with a .mp3 extension. + + + + + *.mp3 + (same as above) any file with a .mp3 extension. + + + + + attributes = A + all files whose attributes include the Archive bit. + + + + + attributes != H + all files whose attributes do not include the Hidden bit. + + + + + mtime > 2009-01-01 + all files with a last modified time after January 1st, 2009. + + + + + ctime > 2009/01/01-03:00:00 + all files with a created time after 3am (local time), + on January 1st, 2009. + + + + + size > 2gb + all files whose uncompressed size is greater than 2gb. + + + + + type = D + all directories in the filesystem. + + + + + + You can combine criteria with the conjunctions AND, OR, and XOR. Using + a string like "name = *.txt AND size >= 100k" for the + selectionCriteria retrieves entries whose names end in .txt, and whose + uncompressed size is greater than or equal to 100 kilobytes. + + + + For more complex combinations of criteria, you can use parenthesis to + group clauses in the boolean logic. Absent parenthesis, the + precedence of the criterion atoms is determined by order of + appearance. Unlike the C# language, the AND conjunction does not take + precendence over the logical OR. This is important only in strings + that contain 3 or more criterion atoms. In other words, "name = *.txt + and size > 1000 or attributes = H" implies "((name = *.txt AND size + > 1000) OR attributes = H)" while "attributes = H OR name = *.txt + and size > 1000" evaluates to "((attributes = H OR name = *.txt) + AND size > 1000)". When in doubt, use parenthesis. + + + + Using time properties requires some extra care. If you want to + retrieve all entries that were last updated on 2009 February 14, + specify "mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this + to say: all files updated after 12:00am on February 14th, until + 12:00am on February 15th. You can use the same bracketing approach to + specify any time period - a year, a month, a week, and so on. + + + + The syntax allows one special case: if you provide a string with no + spaces, it is treated as a pattern to match for the filename. + Therefore a string like "*.xls" will be equivalent to specifying "name + = *.xls". This "shorthand" notation does not work with compound + criteria. + + + + There is no logic in this class that insures that the inclusion + criteria are internally consistent. For example, it's possible to + specify criteria that says the file must have a size of less than 100 + bytes, as well as a size that is greater than 1000 bytes. Obviously + no file will ever satisfy such criteria, but this class does not check + for or detect such inconsistencies. + + + + + + Thrown in the setter if the value has an invalid syntax. + + + + + Indicates whether searches will traverse NTFS reparse points, like Junctions. + + + + + Summary description for EnumUtil. + + + + + Returns the value of the DescriptionAttribute if the specified Enum + value has one. If not, returns the ToString() representation of the + Enum value. + + The Enum to get the description for + + + + + Converts the string representation of the name or numeric value of one + or more enumerated constants to an equivalent enumerated object. + Note: use the DescriptionAttribute on enum values to enable this. + + The System.Type of the enumeration. + + A string containing the name or value to convert. + + + + + + Converts the string representation of the name or numeric value of one + or more enumerated constants to an equivalent enumerated object. A + parameter specified whether the operation is case-sensitive. Note: + use the DescriptionAttribute on enum values to enable this. + + The System.Type of the enumeration. + + A string containing the name or value to convert. + + + Whether the operation is case-sensitive or not. + + + + + Collects general purpose utility methods. + + + + private null constructor + + + + Utility routine for transforming path names from filesystem format (on Windows that means backslashes) to + a format suitable for use within zipfiles. This means trimming the volume letter and colon (if any) And + swapping backslashes for forward slashes. + + source path. + transformed path + + + + Finds a signature in the zip stream. This is useful for finding + the end of a zip entry, for example, or the beginning of the next ZipEntry. + + + + + Scans through 64k at a time. + + + + If the method fails to find the requested signature, the stream Position + after completion of this method is unchanged. If the method succeeds in + finding the requested signature, the stream position after completion is + direct AFTER the signature found in the stream. + + + + The stream to search + The 4-byte signature to find + The number of bytes read + + + + Create a pseudo-random filename, suitable for use as a temporary + file, and open it. + + + + The System.IO.Path.GetRandomFileName() method is not available on + the Compact Framework, so this library provides its own substitute + on NETCF. + + + This method produces a filename of the form + DotNetZip-xxxxxxxx.tmp, where xxxxxxxx is replaced by randomly + chosen characters, and creates that file. + + + + + + Workitem 7889: handle ERROR_LOCK_VIOLATION during read + + + This could be gracefully handled with an extension attribute, but + This assembly is built for .NET 2.0, so I cannot use them. + + + + + A decorator stream. It wraps another stream, and performs bookkeeping + to keep track of the stream Position. + + + + In some cases, it is not possible to get the Position of a stream, let's + say, on a write-only output stream like ASP.NET's + Response.OutputStream, or on a different write-only stream + provided as the destination for the zip by the application. In this + case, programmers can use this counting stream to count the bytes read + or written. + + + Consider the scenario of an application that saves a self-extracting + archive (SFX), that uses a custom SFX stub. + + + Saving to a filesystem file, the application would open the + filesystem file (getting a FileStream), save the custom sfx stub + into it, and then call ZipFile.Save(), specifying the same + FileStream. ZipFile.Save() does the right thing for the zipentry + offsets, by inquiring the Position of the FileStream before writing + any data, and then adding that initial offset into any ZipEntry + offsets in the zip directory. Everything works fine. + + + Now suppose the application is an ASPNET application and it saves + directly to Response.OutputStream. It's not possible for DotNetZip to + inquire the Position, so the offsets for the SFX will be wrong. + + + The workaround is for the application to use this class to wrap + HttpResponse.OutputStream, then write the SFX stub and the ZipFile + into that wrapper stream. Because ZipFile.Save() can inquire the + Position, it will then do the right thing with the offsets. + + + + + + The constructor. + + The underlying stream + + + + Adjust the byte count on the stream. + + + + the number of bytes to subtract from the count. + + + + + Subtract delta from the count of bytes written to the stream. + This is necessary when seeking back, and writing additional data, + as happens in some cases when saving Zip files. + + + + + + The read method. + + The buffer to hold the data read from the stream. + the offset within the buffer to copy the first byte read. + the number of bytes to read. + the number of bytes read, after decryption and decompression. + + + + Write data into the stream. + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Flushes the underlying stream. + + + + + Seek in the stream. + + the offset point to seek to + the reference point from which to seek + The new position + + + + Set the length of the underlying stream. Be careful with this! + + + the length to set on the underlying stream. + + + + Gets the wrapped stream. + + + + + The count of bytes written out to the stream. + + + + + the count of bytes that have been read from the stream. + + + + + Whether the stream can be read. + + + + + Whether it is possible to call Seek() on the stream. + + + + + Whether it is possible to call Write() on the stream. + + + + + The length of the underlying stream. + + + + + Returns the sum of number of bytes written, plus the initial + offset before writing. + + + + + The Position of the stream. + + + + + This is a helper class supporting WinZip AES encryption. + This class is intended for use only by the DotNetZip library. + + + + Most uses of the DotNetZip library will not involve direct calls into + the WinZipAesCrypto class. Instead, the WinZipAesCrypto class is + instantiated and used by the ZipEntry() class when WinZip AES + encryption or decryption on an entry is employed. + + + + + A stream that encrypts as it writes, or decrypts as it reads. The + Crypto is AES in CTR (counter) mode, which is compatible with the AES + encryption employed by WinZip 12.0. + + + + The AES/CTR encryption protocol used by WinZip works like this: + + - start with a counter, initialized to zero. + + - to encrypt, take the data by 16-byte blocks. For each block: + - apply the transform to the counter + - increement the counter + - XOR the result of the transform with the plaintext to + get the ciphertext. + - compute the mac on the encrypted bytes + - when finished with all blocks, store the computed MAC. + + - to decrypt, take the data by 16-byte blocks. For each block: + - compute the mac on the encrypted bytes, + - apply the transform to the counter + - increement the counter + - XOR the result of the transform with the ciphertext to + get the plaintext. + - when finished with all blocks, compare the computed MAC against + the stored MAC + + + + + + + The constructor. + + The underlying stream + To either encrypt or decrypt. + The pre-initialized WinZipAesCrypto object. + The maximum number of bytes to read from the stream. + + + + Close the stream. + + + + + Flush the content in the stream. + + + + + This method throws a NotImplementedException. + + + + + This method throws a NotImplementedException. + + + + + Returns the final HMAC-SHA1-80 for the data that was encrypted. + + + + + Returns true if the stream can be read. + + + + + Always returns false. + + + + + Returns true if the CryptoMode is Encrypt. + + + + + Getting this property throws a NotImplementedException. + + + + + Getting or Setting this property throws a NotImplementedException. + + + + + This class implements the "traditional" or "classic" PKZip encryption, + which today is considered to be weak. On the other hand it is + ubiquitous. This class is intended for use only by the DotNetZip + library. + + + + Most uses of the DotNetZip library will not involve direct calls into + the ZipCrypto class. Instead, the ZipCrypto class is instantiated and + used by the ZipEntry() class when encryption or decryption on an entry + is employed. If for some reason you really wanted to use a weak + encryption algorithm in some other application, you might use this + library. But you would be much better off using one of the built-in + strong encryption libraries in the .NET Framework, like the AES + algorithm or SHA. + + + + + The default constructor for ZipCrypto. + + + + This class is intended for internal use by the library only. It's + probably not useful to you. Seriously. Stop reading this + documentation. It's a waste of your time. Go do something else. + Check the football scores. Go get an ice cream with a friend. + Seriously. + + + + + + Call this method on a cipher text to render the plaintext. You must + first initialize the cipher with a call to InitCipher. + + + + + var cipher = new ZipCrypto(); + cipher.InitCipher(Password); + // Decrypt the header. This has a side effect of "further initializing the + // encryption keys" in the traditional zip encryption. + byte[] DecryptedMessage = cipher.DecryptMessage(EncryptedMessage); + + + + The encrypted buffer. + + The number of bytes to encrypt. + Should be less than or equal to CipherText.Length. + + + The plaintext. + + + + This is the converse of DecryptMessage. It encrypts the plaintext + and produces a ciphertext. + + + The plain text buffer. + + + The number of bytes to encrypt. + Should be less than or equal to plainText.Length. + + + The ciphertext. + + + + This initializes the cipher with the given password. + See AppNote.txt for details. + + + + The passphrase for encrypting or decrypting with this cipher. + + + + + Step 1 - Initializing the encryption keys + ----------------------------------------- + Start with these keys: + Key(0) := 305419896 (0x12345678) + Key(1) := 591751049 (0x23456789) + Key(2) := 878082192 (0x34567890) + + Then, initialize the keys with a password: + + loop for i from 0 to length(password)-1 + update_keys(password(i)) + end loop + + Where update_keys() is defined as: + + update_keys(char): + Key(0) := crc32(key(0),char) + Key(1) := Key(1) + (Key(0) bitwiseAND 000000ffH) + Key(1) := Key(1) * 134775813 + 1 + Key(2) := crc32(key(2),key(1) rightshift 24) + end update_keys + + Where crc32(old_crc,char) is a routine that given a CRC value and a + character, returns an updated CRC value after applying the CRC-32 + algorithm described elsewhere in this document. + + + + + After the keys are initialized, then you can use the cipher to + encrypt the plaintext. + + + + Essentially we encrypt the password with the keys, then discard the + ciphertext for the password. This initializes the keys for later use. + + + + + + + From AppNote.txt: + unsigned char decrypt_byte() + local unsigned short temp + temp :=- Key(2) | 2 + decrypt_byte := (temp * (temp ^ 1)) bitshift-right 8 + end decrypt_byte + + + + + A Stream for reading and concurrently decrypting data from a zip file, + or for writing and concurrently encrypting data to a zip file. + + + + The constructor. + The underlying stream + To either encrypt or decrypt. + The pre-initialized ZipCrypto object. + + + + Represents a single entry in a ZipFile. Typically, applications get a ZipEntry + by enumerating the entries within a ZipFile, or by adding an entry to a ZipFile. + + + + + Reads one entry from the zip directory structure in the zip file. + + + + The zipfile for which a directory entry will be read. From this param, the + method gets the ReadStream and the expected text encoding + (ProvisionalAlternateEncoding) which is used if the entry is not marked + UTF-8. + + + + a list of previously seen entry names; used to prevent duplicates. + + + the entry read from the archive. + + + + Returns true if the passed-in value is a valid signature for a ZipDirEntry. + + the candidate 4-byte signature value. + true, if the signature is valid according to the PKWare spec. + + + + Default constructor. + + + Applications should never need to call this directly. It is exposed to + support COM Automation environments. + + + + + Sets the NTFS Creation, Access, and Modified times for the given entry. + + + + + When adding an entry from a file or directory, the Creation, Access, and + Modified times for the given entry are automatically set from the + filesystem values. When adding an entry from a stream or string, the + values are implicitly set to DateTime.Now. The application may wish to + set these values to some arbitrary value, before saving the archive, and + can do so using the various setters. If you want to set all of the times, + this method is more efficient. + + + + The values you set here will be retrievable with the , and properties. + + + + When this method is called, if both and are false, then the + EmitTimesInWindowsFormatWhenSaving flag is automatically set. + + + + DateTime values provided here without a DateTimeKind are assumed to be Local Time. + + + + the creation time of the entry. + the last access time of the entry. + the last modified time of the entry. + + + + + + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + Extract the entry to the filesystem, starting at the current + working directory. + + + + This method has a bunch of overloads! One of them is sure to + be the right one for you... If you don't like these, check + out the ExtractWithPassword() methods. + + + + + + + + + This method extracts an entry from a zip file into the current + working directory. The path of the entry as extracted is the full + path as specified in the zip archive, relative to the current + working directory. After the file is extracted successfully, the + file attributes and timestamps are set. + + + + The action taken when extraction an entry would overwrite an + existing file is determined by the property. + + + + Within the call to Extract(), the content for the entry is + written into a filesystem file, and then the last modified time of the + file is set according to the property on + the entry. See the remarks the property for + some details about the last modified time. + + + + + + + Extract the entry to a file in the filesystem, using the specified + behavior when extraction would overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the file is set after + extraction. + + + + + The action to take if extraction would overwrite an existing file. + + + + + Extracts the entry to the specified stream. + + + + + The caller can specify any write-able stream, for example a , a , or ASP.NET's + Response.OutputStream. The content will be decrypted and + decompressed as necessary. If the entry is encrypted and no password + is provided, this method will throw. + + + The position on the stream is not reset by this method before it extracts. + You may want to call stream.Seek() before calling ZipEntry.Extract(). + + + + + the stream to which the entry should be extracted. + + + + + + Extract the entry to the filesystem, starting at the specified base + directory. + + + the pathname of the base directory + + + + + + This example extracts only the entries in a zip file that are .txt files, + into a directory called "textfiles". + + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) + { + foreach (string s1 in zip.EntryFilenames) + { + if (s1.EndsWith(".txt")) + { + zip[s1].Extract("textfiles"); + } + } + } + + + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") + Dim s1 As String + For Each s1 In zip.EntryFilenames + If s1.EndsWith(".txt") Then + zip(s1).Extract("textfiles") + End If + Next + End Using + + + + + + + Using this method, existing entries in the filesystem will not be + overwritten. If you would like to force the overwrite of existing + files, see the property, or call + . + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified behavior when extraction would + overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + + + String sZipPath = "Airborne.zip"; + String sFilePath = "Readme.txt"; + String sRootFolder = "Digado"; + using (ZipFile zip = ZipFile.Read(sZipPath)) + { + if (zip.EntryFileNames.Contains(sFilePath)) + { + // use the string indexer on the zip file + zip[sFileName].Extract(sRootFolder, + ExtractExistingFileAction.OverwriteSilently); + } + } + + + + Dim sZipPath as String = "Airborne.zip" + Dim sFilePath As String = "Readme.txt" + Dim sRootFolder As String = "Digado" + Using zip As ZipFile = ZipFile.Read(sZipPath) + If zip.EntryFileNames.Contains(sFilePath) + ' use the string indexer on the zip file + zip(sFilePath).Extract(sRootFolder, _ + ExtractExistingFileAction.OverwriteSilently) + End If + End Using + + + + the pathname of the base directory + + The action to take if extraction would overwrite an existing file. + + + + + Extract the entry to the filesystem, using the current working directory + and the specified password. + + + + This method has a bunch of overloads! One of them is sure to be + the right one for you... + + + + + + + + + Existing entries in the filesystem will not be overwritten. If you + would like to force the overwrite of existing files, see the property, or call + . + + + + See the remarks on the property for some + details about how the "last modified" time of the created file is + set. + + + + + In this example, entries that use encryption are extracted using a + particular password. + + using (var zip = ZipFile.Read(FilePath)) + { + foreach (ZipEntry e in zip) + { + if (e.UsesEncryption) + e.ExtractWithPassword("Secret!"); + else + e.Extract(); + } + } + + + Using zip As ZipFile = ZipFile.Read(FilePath) + Dim e As ZipEntry + For Each e In zip + If (e.UsesEncryption) + e.ExtractWithPassword("Secret!") + Else + e.Extract + End If + Next + End Using + + + The Password to use for decrypting the entry. + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified password. + + + + + + + + Existing entries in the filesystem will not be overwritten. If you + would like to force the overwrite of existing files, see the property, or call + . + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + The pathname of the base directory. + The Password to use for decrypting the entry. + + + + Extract the entry to a file in the filesystem, relative to the + current directory, using the specified behavior when extraction + would overwrite an existing file. + + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + + The Password to use for decrypting the entry. + + + The action to take if extraction would overwrite an existing file. + + + + + Extract the entry to the filesystem, starting at the specified base + directory, and using the specified behavior when extraction would + overwrite an existing file. + + + + See the remarks on the property, for some + details about how the last modified time of the created file is set. + + + the pathname of the base directory + + The action to take if extraction would + overwrite an existing file. + + The Password to use for decrypting the entry. + + + + Extracts the entry to the specified stream, using the specified + Password. For example, the caller could extract to Console.Out, or + to a MemoryStream. + + + + + The caller can specify any write-able stream, for example a , a , or ASP.NET's + Response.OutputStream. The content will be decrypted and + decompressed as necessary. If the entry is encrypted and no password + is provided, this method will throw. + + + The position on the stream is not reset by this method before it extracts. + You may want to call stream.Seek() before calling ZipEntry.Extract(). + + + + + + the stream to which the entry should be extracted. + + + The password to use for decrypting the entry. + + + + + Opens a readable stream corresponding to the zip entry in the + archive. The stream decompresses and decrypts as necessary, as it + is read. + + + + + + DotNetZip offers a variety of ways to extract entries from a zip + file. This method allows an application to extract an entry by + reading a . + + + + The return value is of type . Use it as you would any + stream for reading. When an application calls on that stream, it will + receive data from the zip entry that is decrypted and decompressed + as necessary. + + + + CrcCalculatorStream adds one additional feature: it keeps a + CRC32 checksum on the bytes of the stream as it is read. The CRC + value is available in the property on the + CrcCalculatorStream. When the read is complete, your + application + should check this CRC against the + property on the ZipEntry to validate the content of the + ZipEntry. You don't have to validate the entry using the CRC, but + you should, to verify integrity. Check the example for how to do + this. + + + + If the entry is protected with a password, then you need to provide + a password prior to calling , either by + setting the property on the entry, or the + property on the ZipFile + itself. Or, you can use , the + overload of OpenReader that accepts a password parameter. + + + + If you want to extract entry data into a write-able stream that is + already opened, like a , do not + use this method. Instead, use . + + + + Your application may use only one stream created by OpenReader() at + a time, and you should not call other Extract methods before + completing your reads on a stream obtained from OpenReader(). This + is because there is really only one source stream for the compressed + content. A call to OpenReader() seeks in the source stream, to the + beginning of the compressed content. A subsequent call to + OpenReader() on a different entry will seek to a different position + in the source stream, as will a call to Extract() or one of its + overloads. This will corrupt the state for the decompressing stream + from the original call to OpenReader(). + + + + The OpenReader() method works only when the ZipEntry is + obtained from an instance of ZipFile. This method will throw + an exception if the ZipEntry is obtained from a . + + + + + This example shows how to open a zip archive, then read in a named + entry via a stream. After the read loop is complete, the code + compares the calculated during the read loop with the expected CRC + on the ZipEntry, to verify the extraction. + + using (ZipFile zip = new ZipFile(ZipFileToRead)) + { + ZipEntry e1= zip["Elevation.mp3"]; + using (Ionic.Zlib.CrcCalculatorStream s = e1.OpenReader()) + { + byte[] buffer = new byte[4096]; + int n, totalBytesRead= 0; + do { + n = s.Read(buffer,0, buffer.Length); + totalBytesRead+=n; + } while (n>0); + if (s.Crc32 != e1.Crc32) + throw new Exception(string.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)); + if (totalBytesRead != e1.UncompressedSize) + throw new Exception(string.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)); + } + } + + + Using zip As New ZipFile(ZipFileToRead) + Dim e1 As ZipEntry = zip.Item("Elevation.mp3") + Using s As Ionic.Zlib.CrcCalculatorStream = e1.OpenReader + Dim n As Integer + Dim buffer As Byte() = New Byte(4096) {} + Dim totalBytesRead As Integer = 0 + Do + n = s.Read(buffer, 0, buffer.Length) + totalBytesRead = (totalBytesRead + n) + Loop While (n > 0) + If (s.Crc32 <> e1.Crc32) Then + Throw New Exception(String.Format("The Zip Entry failed the CRC Check. (0x{0:X8}!=0x{1:X8})", s.Crc32, e1.Crc32)) + End If + If (totalBytesRead <> e1.UncompressedSize) Then + Throw New Exception(String.Format("We read an unexpected number of bytes. ({0}!={1})", totalBytesRead, e1.UncompressedSize)) + End If + End Using + End Using + + + + The Stream for reading. + + + + Opens a readable stream for an encrypted zip entry in the archive. + The stream decompresses and decrypts as necessary, as it is read. + + + + + See the documentation on the method for + full details. This overload allows the application to specify a + password for the ZipEntry to be read. + + + + The password to use for decrypting the entry. + The Stream for reading. + + + + Validates that the args are consistent. + + + Only one of {baseDir, outStream} can be non-null. + If baseDir is non-null, then the outputFile is created. + + + + + Reads one ZipEntry from the given stream. The content for + the entry does not get decompressed or decrypted. This method + basically reads metadata, and seeks. + + the ZipContainer this entry belongs to. + + true of this is the first entry being read from the stream. + + the ZipEntry read from the stream. + + + + Finds a particular segment in the given extra field. + This is used when modifying a previously-generated + extra field, in particular when removing the AES crypto + segment in the extra field. + + + + + At current cursor position in the stream, read the extra + field, and set the properties on the ZipEntry instance + appropriately. This can be called when processing the + Extra field in the Central Directory, or in the local + header. + + + + + generate and return a byte array that encodes the filename + for the entry. + + + + side effects: generate and store into _CommentBytes the + byte array for any comment attached to the entry. Also + sets _actualEncoding to indicate the actual encoding + used. The same encoding is used for both filename and + comment. + + + + + + Stores the position of the entry source stream, or, if the position is + already stored, seeks to that position. + + + + + This method is called in prep for reading the source stream. If PKZIP + encryption is used, then we need to calc the CRC32 before doing the + encryption, because the CRC is used in the 12th byte of the PKZIP + encryption header. So, we need to be able to seek backward in the source + when saving the ZipEntry. This method is called from the place that + calculates the CRC, and also from the method that does the encryption of + the file data. + + + + The first time through, this method sets the _sourceStreamOriginalPosition + field. Subsequent calls to this method seek to that position. + + + + + + Copy metadata that may have been changed by the app. We do this when + resetting the zipFile instance. If the app calls Save() on a ZipFile, then + tries to party on that file some more, we may need to Reset() it , which + means re-reading the entries and then copying the metadata. I think. + + + + + Set the input stream and get its length, if possible. The length is + used for progress updates, AND, to allow an optimization in case of + a stream/file of zero length. In that case we skip the Encrypt and + compression Stream. (like DeflateStream or BZip2OutputStream) + + + + + Prepare the given stream for output - wrap it in a CountingStream, and + then in a CRC stream, and an encryptor and deflator as appropriate. + + + + Previously this was used in ZipEntry.Write(), but in an effort to + introduce some efficiencies in that method I've refactored to put the + code inline. This method still gets called by ZipOutputStream. + + + + + + True if the referenced entry is a directory. + + + + + Provides a human-readable string with information about the ZipEntry. + + + + + The time and date at which the file indicated by the ZipEntry was + last modified. + + + + + The DotNetZip library sets the LastModified value for an entry, equal to + the Last Modified time of the file in the filesystem. If an entry is + added from a stream, the library uses System.DateTime.Now for this + value, for the given entry. + + + + This property allows the application to retrieve and possibly set the + LastModified value on an entry, to an arbitrary value. values with a + setting of DateTimeKind.Unspecified are taken to be expressed as + DateTimeKind.Local. + + + + Be aware that because of the way PKWare's + Zip specification describes how times are stored in the zip file, + the full precision of the System.DateTime datatype is not stored + for the last modified time when saving zip files. For more information on + how times are formatted, see the PKZip specification. + + + + The actual last modified time of a file can be stored in multiple ways in + the zip file, and they are not mutually exclusive: + + + + + In the so-called "DOS" format, which has a 2-second precision. Values + are rounded to the nearest even second. For example, if the time on the + file is 12:34:43, then it will be stored as 12:34:44. This first value + is accessible via the LastModified property. This value is always + present in the metadata for each zip entry. In some cases the value is + invalid, or zero. + + + + In the so-called "Windows" or "NTFS" format, as an 8-byte integer + quantity expressed as the number of 1/10 milliseconds (in other words + the number of 100 nanosecond units) since January 1, 1601 (UTC). This + format is how Windows represents file times. This time is accessible + via the ModifiedTime property. + + + + In the "Unix" format, a 4-byte quantity specifying the number of seconds since + January 1, 1970 UTC. + + + + In an older format, now deprecated but still used by some current + tools. This format is also a 4-byte quantity specifying the number of + seconds since January 1, 1970 UTC. + + + + + + Zip tools and libraries will always at least handle (read or write) the + DOS time, and may also handle the other time formats. Keep in mind that + while the names refer to particular operating systems, there is nothing in + the time formats themselves that prevents their use on other operating + systems. + + + + When reading ZIP files, the DotNetZip library reads the Windows-formatted + time, if it is stored in the entry, and sets both LastModified and + ModifiedTime to that value. When writing ZIP files, the DotNetZip + library by default will write both time quantities. It can also emit the + Unix-formatted time if desired (See .) + + + + The last modified time of the file created upon a call to + ZipEntry.Extract() may be adjusted during extraction to compensate + for differences in how the .NET Base Class Library deals with daylight + saving time (DST) versus how the Windows filesystem deals with daylight + saving time. Raymond Chen provides + some good context. + + + + In a nutshell: Daylight savings time rules change regularly. In 2007, for + example, the inception week of DST changed. In 1977, DST was in place all + year round. In 1945, likewise. And so on. Win32 does not attempt to + guess which time zone rules were in effect at the time in question. It + will render a time as "standard time" and allow the app to change to DST + as necessary. .NET makes a different choice. + + + + Compare the output of FileInfo.LastWriteTime.ToString("f") with what you + see in the Windows Explorer property sheet for a file that was last + written to on the other side of the DST transition. For example, suppose + the file was last modified on October 17, 2003, during DST but DST is not + currently in effect. Explorer's file properties reports Thursday, October + 17, 2003, 8:45:38 AM, but .NETs FileInfo reports Thursday, October 17, + 2003, 9:45 AM. + + + + Win32 says, "Thursday, October 17, 2002 8:45:38 AM PST". Note: Pacific + STANDARD Time. Even though October 17 of that year occurred during Pacific + Daylight Time, Win32 displays the time as standard time because that's + what time it is NOW. + + + + .NET BCL assumes that the current DST rules were in place at the time in + question. So, .NET says, "Well, if the rules in effect now were also in + effect on October 17, 2003, then that would be daylight time" so it + displays "Thursday, October 17, 2003, 9:45 AM PDT" - daylight time. + + + + So .NET gives a value which is more intuitively correct, but is also + potentially incorrect, and which is not invertible. Win32 gives a value + which is intuitively incorrect, but is strictly correct. + + + + Because of this funkiness, this library adds one hour to the LastModified + time on the extracted file, if necessary. That is to say, if the time in + question had occurred in what the .NET Base Class Library assumed to be + DST. This assumption may be wrong given the constantly changing DST rules, + but it is the best we can do. + + + + + + + + Last Modified time for the file represented by the entry. + + + + + + This value corresponds to the "last modified" time in the NTFS file times + as described in the Zip + specification. When getting this property, the value may be + different from . When setting the property, + the property also gets set, but with a lower + precision. + + + + Let me explain. It's going to take a while, so get + comfortable. Originally, waaaaay back in 1989 when the ZIP specification + was originally described by the esteemed Mr. Phil Katz, the dominant + operating system of the time was MS-DOS. MSDOS stored file times with a + 2-second precision, because, c'mon, who is ever going to need better + resolution than THAT? And so ZIP files, regardless of the platform on + which the zip file was created, store file times in exactly the same format that DOS used + in 1989. + + + + Since then, the ZIP spec has evolved, but the internal format for file + timestamps remains the same. Despite the fact that the way times are + stored in a zip file is rooted in DOS heritage, any program on any + operating system can format a time in this way, and most zip tools and + libraries DO - they round file times to the nearest even second and store + it just like DOS did 25+ years ago. + + + + PKWare extended the ZIP specification to allow a zip file to store what + are called "NTFS Times" and "Unix(tm) times" for a file. These are the + last write, last access, and file creation + times of a particular file. These metadata are not actually specific + to NTFS or Unix. They are tracked for each file by NTFS and by various + Unix filesystems, but they are also tracked by other filesystems, too. + The key point is that the times are formatted in the zip file + in the same way that NTFS formats the time (ticks since win32 epoch), + or in the same way that Unix formats the time (seconds since Unix + epoch). As with the DOS time, any tool or library running on any + operating system is capable of formatting a time in one of these ways + and embedding it into the zip file. + + + + These extended times are higher precision quantities than the DOS time. + As described above, the (DOS) LastModified has a precision of 2 seconds. + The Unix time is stored with a precision of 1 second. The NTFS time is + stored with a precision of 0.0000001 seconds. The quantities are easily + convertible, except for the loss of precision you may incur. + + + + A zip archive can store the {C,A,M} times in NTFS format, in Unix format, + or not at all. Often a tool running on Unix or Mac will embed the times + in Unix format (1 second precision), while WinZip running on Windows might + embed the times in NTFS format (precision of of 0.0000001 seconds). When + reading a zip file with these "extended" times, in either format, + DotNetZip represents the values with the + ModifiedTime, AccessedTime and CreationTime + properties on the ZipEntry. + + + + While any zip application or library, regardless of the platform it + runs on, could use any of the time formats allowed by the ZIP + specification, not all zip tools or libraries do support all these + formats. Storing the higher-precision times for each entry is + optional for zip files, and many tools and libraries don't use the + higher precision quantities at all. The old DOS time, represented by + , is guaranteed to be present, though it + sometimes unset. + + + + Ok, getting back to the question about how the LastModified + property relates to this ModifiedTime + property... LastModified is always set, while + ModifiedTime is not. (The other times stored in the NTFS + times extension, CreationTime and AccessedTime also + may not be set on an entry that is read from an existing zip file.) + When reading a zip file, then LastModified takes the DOS time + that is stored with the file. If the DOS time has been stored as zero + in the zipfile, then this library will use DateTime.Now for the + LastModified value. If the ZIP file was created by an evolved + tool, then there will also be higher precision NTFS or Unix times in + the zip file. In that case, this library will read those times, and + set LastModified and ModifiedTime to the same value, the + one corresponding to the last write time of the file. If there are no + higher precision times stored for the entry, then ModifiedTime + remains unset (likewise AccessedTime and CreationTime), + and LastModified keeps its DOS time. + + + + When creating zip files with this library, by default the extended time + properties (ModifiedTime, AccessedTime, and + CreationTime) are set on the ZipEntry instance, and these data are + stored in the zip archive for each entry, in NTFS format. If you add an + entry from an actual filesystem file, then the entry gets the actual file + times for that file, to NTFS-level precision. If you add an entry from a + stream, or a string, then the times get the value DateTime.Now. In + this case LastModified and ModifiedTime will be identical, + to 2 seconds of precision. You can explicitly set the + CreationTime, AccessedTime, and ModifiedTime of an + entry using the property setters. If you want to set all of those + quantities, it's more efficient to use the method. Those + changes are not made permanent in the zip file until you call or one of its cousins. + + + + When creating a zip file, you can override the default behavior of + this library for formatting times in the zip file, disabling the + embedding of file times in NTFS format or enabling the storage of file + times in Unix format, or both. You may want to do this, for example, + when creating a zip file on Windows, that will be consumed on a Mac, + by an application that is not hip to the "NTFS times" format. To do + this, use the and + properties. A valid zip + file may store the file times in both formats. But, there are no + guarantees that a program running on Mac or Linux will gracefully + handle the NTFS-formatted times when Unix times are present, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. DotNetZip will always do something + reasonable; other libraries or tools may not. When in doubt, test. + + + + I'll bet you didn't think one person could type so much about time, eh? + And reading it was so enjoyable, too! Well, in appreciation, maybe you + should donate? + + + + + + + + + + + Last Access time for the file represented by the entry. + + + This value may or may not be meaningful. If the ZipEntry was read from an existing + Zip archive, this information may not be available. For an explanation of why, see + . + + + + + + + + The file creation time for the file represented by the entry. + + + + This value may or may not be meaningful. If the ZipEntry was read + from an existing zip archive, and the creation time was not set on the entry + when the zip file was created, then this property may be meaningless. For an + explanation of why, see . + + + + + + + + Specifies whether the Creation, Access, and Modified times for the given + entry will be emitted in "Windows format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entry should or should not be stored + in the zip archive in the format used by Windows. The default value of + this property is true. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified + () times for the given entry are automatically + set from the filesystem values. When adding an entry from a stream or + string, all three values are implicitly set to DateTime.Now. Applications + can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since Jan 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since January 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455. + + + + Not all zip tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Although the time values are + easily convertible, subject to a loss of precision, some tools and + libraries may be able to read only one or the other. DotNetZip can read or + write times in either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive from the property. It is + possible that a zip entry can embed the timestamps in both forms, one + form, or neither. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle NTFS Formatted times, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. When in doubt, test. + + + + Normally you will use the ZipFile.EmitTimesInWindowsFormatWhenSaving + property, to specify the behavior for all entries in a zip, rather than + the property on each individual entry. + + + + + + + + + + + + + Specifies whether the Creation, Access, and Modified times for the given + entry will be emitted in "Unix(tm) format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entry should or should not be stored + in the zip archive in the format used by Unix. By default this flag is + false, meaning the Unix-format times are not stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified + () times for the given entry are automatically + set from the filesystem values. When adding an entry from a stream or + string, all three values are implicitly set to DateTime.Now. Applications + can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since Jan 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since Jan 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Although the time values are + easily convertible, subject to a loss of precision, some tools and + libraries may be able to read only one or the other. DotNetZip can read or + write times in either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive from the property. It is + possible that a zip entry can embed the timestamps in both forms, one + form, or neither. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle NTFS Formatted times, or that a + non-DotNetZip-powered application running on Windows will be able to + handle file times in Unix format. When in doubt, test. + + + + Normally you will use the ZipFile.EmitTimesInUnixFormatWhenSaving + property, to specify the behavior for all entries, rather than the + property on each individual entry. + + + + + + + + + + + + + The type of timestamp attached to the ZipEntry. + + + + This property is valid only for a ZipEntry that was read from a zip archive. + It indicates the type of timestamp attached to the entry. + + + + + + + + The file attributes for the entry. + + + + + + The attributes in NTFS include + ReadOnly, Archive, Hidden, System, and Indexed. When adding a + ZipEntry to a ZipFile, these attributes are set implicitly when + adding an entry from the filesystem. When adding an entry from a stream + or string, the Attributes are not set implicitly. Regardless of the way + an entry was added to a ZipFile, you can set the attributes + explicitly if you like. + + + + When reading a ZipEntry from a ZipFile, the attributes are + set according to the data stored in the ZipFile. If you extract the + entry from the archive to a filesystem file, DotNetZip will set the + attributes on the resulting file accordingly. + + + + The attributes can be set explicitly by the application. For example the + application may wish to set the FileAttributes.ReadOnly bit for all + entries added to an archive, so that on unpack, this attribute will be set + on the extracted file. Any changes you make to this property are made + permanent only when you call a Save() method on the ZipFile + instance that contains the ZipEntry. + + + + For example, an application may wish to zip up a directory and set the + ReadOnly bit on every file in the archive, so that upon later extraction, + the resulting files will be marked as ReadOnly. Not every extraction tool + respects these attributes, but if you unpack with DotNetZip, as for + example in a self-extracting archive, then the attributes will be set as + they are stored in the ZipFile. + + + + These attributes may not be interesting or useful if the resulting archive + is extracted on a non-Windows platform. How these attributes get used + upon extraction depends on the platform and tool used. + + + + This property is only partially supported in the Silverlight version + of the library: applications can read attributes on entries within + ZipFiles. But extracting entries within Silverlight will not set the + attributes on the extracted files. + + + + + + + The name of the filesystem file, referred to by the ZipEntry. + + + + + This property specifies the thing-to-be-zipped on disk, and is set only + when the ZipEntry is being created from a filesystem file. If the + ZipFile is instantiated by reading an existing .zip archive, then + the LocalFileName will be null (Nothing in VB). + + + + When it is set, the value of this property may be different than , which is the path used in the archive itself. If you + call Zip.AddFile("foop.txt", AlternativeDirectory), then the path + used for the ZipEntry within the zip archive will be different + than this path. + + + + If the entry is being added from a stream, then this is null (Nothing in VB). + + + + + + + + The name of the file contained in the ZipEntry. + + + + + + This is the name of the entry in the ZipFile itself. When creating + a zip archive, if the ZipEntry has been created from a filesystem + file, via a call to or , or a related overload, the value + of this property is derived from the name of that file. The + FileName property does not include drive letters, and may include a + different directory path, depending on the value of the + directoryPathInArchive parameter used when adding the entry into + the ZipFile. + + + + In some cases there is no related filesystem file - for example when a + ZipEntry is created using or one of the similar overloads. In this case, the value of + this property is derived from the fileName and the directory path passed + to that method. + + + + When reading a zip file, this property takes the value of the entry name + as stored in the zip file. If you extract such an entry, the extracted + file will take the name given by this property. + + + + Applications can set this property when creating new zip archives or when + reading existing archives. When setting this property, the actual value + that is set will replace backslashes with forward slashes, in accordance + with the Zip + specification, for compatibility with Unix(tm) and ... get + this.... Amiga! + + + + If an application reads a ZipFile via or a related overload, and then explicitly + sets the FileName on an entry contained within the ZipFile, and + then calls , the application will effectively + rename the entry within the zip archive. + + + + If an application sets the value of FileName, then calls + Extract() on the entry, the entry is extracted to a file using the + newly set value as the filename. The FileName value is made + permanent in the zip archive only after a call to one of the + ZipFile.Save() methods on the ZipFile that contains the + ZipEntry. + + + + If an application attempts to set the FileName to a value that + would result in a duplicate entry in the ZipFile, an exception is + thrown. + + + + When a ZipEntry is contained within a ZipFile, applications + cannot rename the entry within the context of a foreach (For + Each in VB) loop, because of the way the ZipFile stores + entries. If you need to enumerate through all the entries and rename one + or more of them, use ZipFile.EntriesSorted as the + collection. See also, ZipFile.GetEnumerator(). + + + + + + + The stream that provides content for the ZipEntry. + + + + + + The application can use this property to set the input stream for an + entry on a just-in-time basis. Imagine a scenario where the application + creates a ZipFile comprised of content obtained from hundreds of + files, via calls to AddFile(). The DotNetZip library opens streams + on these files on a just-in-time basis, only when writing the entry out to + an external store within the scope of a ZipFile.Save() call. Only + one input stream is opened at a time, as each entry is being written out. + + + + Now imagine a different application that creates a ZipFile + with content obtained from hundreds of streams, added through . Normally the + application would supply an open stream to that call. But when large + numbers of streams are being added, this can mean many open streams at one + time, unnecessarily. + + + + To avoid this, call and specify delegates that open and close the stream at + the time of Save. + + + + + Setting the value of this property when the entry was not added from a + stream (for example, when the ZipEntry was added with or , or when the entry was added by + reading an existing zip archive) will throw an exception. + + + + + + + + A flag indicating whether the InputStream was provided Just-in-time. + + + + + + When creating a zip archive, an application can obtain content for one or + more of the ZipEntry instances from streams, using the method. At the time + of calling that method, the application can supply null as the value of + the stream parameter. By doing so, the application indicates to the + library that it will provide a stream for the entry on a just-in-time + basis, at the time one of the ZipFile.Save() methods is called and + the data for the various entries are being compressed and written out. + + + + In this case, the application can set the + property, typically within the SaveProgress event (event type: ) for that entry. + + + + The application will later want to call Close() and Dispose() on that + stream. In the SaveProgress event, when the event type is , the application can + do so. This flag indicates that the stream has been provided by the + application on a just-in-time basis and that it is the application's + responsibility to call Close/Dispose on that stream. + + + + + + + + An enum indicating the source of the ZipEntry. + + + + + The version of the zip engine needed to read the ZipEntry. + + + + + This is a readonly property, indicating the version of the Zip + specification that the extracting tool or library must support to + extract the given entry. Generally higher versions indicate newer + features. Older zip engines obviously won't know about new features, and + won't be able to extract entries that depend on those newer features. + + + + + value + Features + + + + 20 + a basic Zip Entry, potentially using PKZIP encryption. + + + + + 45 + The ZIP64 extension is used on the entry. + + + + + 46 + File is compressed using BZIP2 compression* + + + + 50 + File is encrypted using PkWare's DES, 3DES, (broken) RC2 or RC4 + + + + 51 + File is encrypted using PKWare's AES encryption or corrected RC2 encryption. + + + + 52 + File is encrypted using corrected RC2-64 encryption** + + + + 61 + File is encrypted using non-OAEP key wrapping*** + + + + 63 + File is compressed using LZMA, PPMd+, Blowfish, or Twofish + + + + + + There are other values possible, not listed here. DotNetZip supports + regular PKZip encryption, and ZIP64 extensions. DotNetZip cannot extract + entries that require a zip engine higher than 45. + + + + This value is set upon reading an existing zip file, or after saving a zip + archive. + + + + + + The comment attached to the ZipEntry. + + + + + Each entry in a zip file can optionally have a comment associated to + it. The comment might be displayed by a zip tool during extraction, for + example. + + + + By default, the Comment is encoded in IBM437 code page. You can + specify an alternative with and + . + + + + + + + + Indicates whether the entry requires ZIP64 extensions. + + + + + + This property is null (Nothing in VB) until a Save() method on the + containing instance has been called. The property is + non-null (HasValue is true) only after a Save() method has + been called. + + + + After the containing ZipFile has been saved, the Value of this + property is true if any of the following three conditions holds: the + uncompressed size of the entry is larger than 0xFFFFFFFF; the compressed + size of the entry is larger than 0xFFFFFFFF; the relative offset of the + entry within the zip archive is larger than 0xFFFFFFFF. These quantities + are not known until a Save() is attempted on the zip archive and + the compression is applied. + + + + If none of the three conditions holds, then the Value is false. + + + + A Value of false does not indicate that the entry, as saved in the + zip archive, does not use ZIP64. It merely indicates that ZIP64 is + not required. An entry may use ZIP64 even when not required if + the property on the containing + ZipFile instance is set to , or if + the property on the containing + ZipFile instance is set to + and the output stream was not seekable. + + + + + + + + Indicates whether the entry actually used ZIP64 extensions, as it was most + recently written to the output file or stream. + + + + + + This Nullable property is null (Nothing in VB) until a Save() + method on the containing instance has been + called. HasValue is true only after a Save() method has been + called. + + + + The value of this property for a particular ZipEntry may change + over successive calls to Save() methods on the containing ZipFile, + even if the file that corresponds to the ZipEntry does not. This + may happen if other entries contained in the ZipFile expand, + causing the offset for this particular entry to exceed 0xFFFFFFFF. + + + + + + + The bitfield for the entry as defined in the zip spec. You probably + never need to look at this. + + + + + You probably do not need to concern yourself with the contents of this + property, but in case you do: + + + + + bit + meaning + + + + 0 + set if encryption is used. + + + + 1-2 + + set to determine whether normal, max, fast deflation. DotNetZip library + always leaves these bits unset when writing (indicating "normal" + deflation"), but can read an entry with any value here. + + + + + 3 + + Indicates that the Crc32, Compressed and Uncompressed sizes are zero in the + local header. This bit gets set on an entry during writing a zip file, when + it is saved to a non-seekable output stream. + + + + + + 4 + reserved for "enhanced deflating". This library doesn't do enhanced deflating. + + + + 5 + set to indicate the zip is compressed patched data. This library doesn't do that. + + + + 6 + + set if PKWare's strong encryption is used (must also set bit 1 if bit 6 is + set). This bit is not set if WinZip's AES encryption is set. + + + + 7 + not used + + + + 8 + not used + + + + 9 + not used + + + + 10 + not used + + + + 11 + + Language encoding flag (EFS). If this bit is set, the filename and comment + fields for this file must be encoded using UTF-8. This library currently + does not support UTF-8. + + + + + 12 + Reserved by PKWARE for enhanced compression. + + + + 13 + + Used when encrypting the Central Directory to indicate selected data + values in the Local Header are masked to hide their actual values. See + the section in the Zip + specification describing the Strong Encryption Specification for + details. + + + + + 14 + Reserved by PKWARE. + + + + 15 + Reserved by PKWARE. + + + + + + + + + The compression method employed for this ZipEntry. + + + + + + The + Zip specification allows a variety of compression methods. This + library supports just two: 0x08 = Deflate. 0x00 = Store (no compression), + for reading or writing. + + + + When reading an entry from an existing zipfile, the value you retrieve + here indicates the compression method used on the entry by the original + creator of the zip. When writing a zipfile, you can specify either 0x08 + (Deflate) or 0x00 (None). If you try setting something else, you will get + an exception. + + + + You may wish to set CompressionMethod to CompressionMethod.None (0) + when zipping already-compressed data like a jpg, png, or mp3 file. + This can save time and cpu cycles. + + + + When setting this property on a ZipEntry that is read from an + existing zip file, calling ZipFile.Save() will cause the new + CompressionMethod to be used on the entry in the newly saved zip file. + + + + Setting this property may have the side effect of modifying the + CompressionLevel property. If you set the CompressionMethod to a + value other than None, and CompressionLevel is previously + set to None, then CompressionLevel will be set to + Default. + + + + + + + In this example, the first entry added to the zip archive uses the default + behavior - compression is used where it makes sense. The second entry, + the MP3 file, is added to the archive without being compressed. + + using (ZipFile zip = new ZipFile(ZipFileToCreate)) + { + ZipEntry e1= zip.AddFile(@"notes\Readme.txt"); + ZipEntry e2= zip.AddFile(@"music\StopThisTrain.mp3"); + e2.CompressionMethod = CompressionMethod.None; + zip.Save(); + } + + + + Using zip As New ZipFile(ZipFileToCreate) + zip.AddFile("notes\Readme.txt") + Dim e2 as ZipEntry = zip.AddFile("music\StopThisTrain.mp3") + e2.CompressionMethod = CompressionMethod.None + zip.Save + End Using + + + + + + Sets the compression level to be used for the entry when saving the zip + archive. This applies only for CompressionMethod = DEFLATE. + + + + + When using the DEFLATE compression method, Varying the compression + level used on entries can affect the size-vs-speed tradeoff when + compression and decompressing data streams or files. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + When setting this property on a ZipEntry that is read from an + existing zip file, calling ZipFile.Save() will cause the new + CompressionLevel to be used on the entry in the newly saved zip file. + + + + Setting this property may have the side effect of modifying the + CompressionMethod property. If you set the CompressionLevel + to a value other than None, CompressionMethod will be set + to Deflate, if it was previously None. + + + + Setting this property has no effect if the CompressionMethod is something + other than Deflate or None. + + + + + + + + The compressed size of the file, in bytes, within the zip archive. + + + + When reading a ZipFile, this value is read in from the existing + zip file. When creating or updating a ZipFile, the compressed + size is computed during compression. Therefore the value on a + ZipEntry is valid after a call to Save() (or one of its + overloads) in that case. + + + + + + + The size of the file, in bytes, before compression, or after extraction. + + + + When reading a ZipFile, this value is read in from the existing + zip file. When creating or updating a ZipFile, the uncompressed + size is computed during compression. Therefore the value on a + ZipEntry is valid after a call to Save() (or one of its + overloads) in that case. + + + + + + + The ratio of compressed size to uncompressed size of the ZipEntry. + + + + + This is a ratio of the compressed size to the uncompressed size of the + entry, expressed as a double in the range of 0 to 100+. A value of 100 + indicates no compression at all. It could be higher than 100 when the + compression algorithm actually inflates the data, as may occur for small + files, or uncompressible data that is encrypted. + + + + You could format it for presentation to a user via a format string of + "{3,5:F0}%" to see it as a percentage. + + + + If the size of the original uncompressed file is 0, implying a + denominator of 0, the return value will be zero. + + + + This property is valid after reading in an existing zip file, or after + saving the ZipFile that contains the ZipEntry. You cannot know the + effect of a compression transform until you try it. + + + + + + + The 32-bit CRC (Cyclic Redundancy Check) on the contents of the ZipEntry. + + + + + You probably don't need to concern yourself with this. It is used + internally by DotNetZip to verify files or streams upon extraction. + + The value is a 32-bit + CRC using 0xEDB88320 for the polynomial. This is the same CRC-32 used in + PNG, MPEG-2, and other protocols and formats. It is a read-only property; when + creating a Zip archive, the CRC for each entry is set only after a call to + Save() on the containing ZipFile. When reading an existing zip file, the value + of this property reflects the stored CRC for the entry. + + + + + + True if the entry is a directory (not a file). + This is a readonly property on the entry. + + + + + A derived property that is true if the entry uses encryption. + + + + + This is a readonly property on the entry. When reading a zip file, + the value for the ZipEntry is determined by the data read + from the zip file. After saving a ZipFile, the value of this + property for each ZipEntry indicates whether encryption was + actually used (which will have been true if the was set and the property + was something other than . + + + + + + Set this to specify which encryption algorithm to use for the entry when + saving it to a zip archive. + + + + + + Set this property in order to encrypt the entry when the ZipFile is + saved. When setting this property, you must also set a on the entry. If you set a value other than on this property and do not set a + Password then the entry will not be encrypted. The ZipEntry + data is encrypted as the ZipFile is saved, when you call or one of its cousins on the containing + ZipFile instance. You do not need to specify the Encryption + when extracting entries from an archive. + + + + The Zip specification from PKWare defines a set of encryption algorithms, + and the data formats for the zip archive that support them, and PKWare + supports those algorithms in the tools it produces. Other vendors of tools + and libraries, such as WinZip or Xceed, typically support a + subset of the algorithms specified by PKWare. These tools can + sometimes support additional different encryption algorithms and data + formats, not specified by PKWare. The AES Encryption specified and + supported by WinZip is the most popular example. This library supports a + subset of the complete set of algorithms specified by PKWare and other + vendors. + + + + There is no common, ubiquitous multi-vendor standard for strong encryption + within zip files. There is broad support for so-called "traditional" Zip + encryption, sometimes called Zip 2.0 encryption, as specified + by PKWare, but this encryption is considered weak and + breakable. This library currently supports the Zip 2.0 "weak" encryption, + and also a stronger WinZip-compatible AES encryption, using either 128-bit + or 256-bit key strength. If you want DotNetZip to support an algorithm + that is not currently supported, call the author of this library and maybe + we can talk business. + + + + The class also has a property. In most cases you will use + that property when setting encryption. This property takes + precedence over any Encryption set on the ZipFile itself. + Typically, you would use the per-entry Encryption when most entries in the + zip archive use one encryption algorithm, and a few entries use a + different one. If all entries in the zip file use the same Encryption, + then it is simpler to just set this property on the ZipFile itself, when + creating a zip archive. + + + + Some comments on updating archives: If you read a ZipFile, you can + modify the Encryption on an encrypted entry: you can remove encryption + from an entry that was encrypted; you can encrypt an entry that was not + encrypted previously; or, you can change the encryption algorithm. The + changes in encryption are not made permanent until you call Save() on the + ZipFile. To effect changes in encryption, the entry content is + streamed through several transformations, depending on the modification + the application has requested. For example if the entry is not encrypted + and the application sets Encryption to PkzipWeak, then at + the time of Save(), the original entry is read and decompressed, + then re-compressed and encrypted. Conversely, if the original entry is + encrypted with PkzipWeak encryption, and the application sets the + Encryption property to WinZipAes128, then at the time of + Save(), the original entry is decrypted via PKZIP encryption and + decompressed, then re-compressed and re-encrypted with AES. This all + happens automatically within the library, but it can be time-consuming for + large entries. + + + + Additionally, when updating archives, it is not possible to change the + password when changing the encryption algorithm. To change both the + algorithm and the password, you need to Save() the zipfile twice. First + set the Encryption to None, then call Save(). Then set the + Encryption to the new value (not "None"), then call Save() + once again. + + + + The WinZip AES encryption algorithms are not supported on the .NET Compact + Framework. + + + + + + This example creates a zip archive that uses encryption, and then extracts + entries from the archive. When creating the zip archive, the ReadMe.txt + file is zipped without using a password or encryption. The other file + uses encryption. + + + // Create a zip archive with AES Encryption. + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt") + ZipEntry e1= zip.AddFile("2008-Regional-Sales-Report.pdf"); + e1.Encryption= EncryptionAlgorithm.WinZipAes256; + e1.Password= "Top.Secret.No.Peeking!"; + zip.Save("EncryptedArchive.zip"); + } + + // Extract a zip archive that uses AES Encryption. + // You do not need to specify the algorithm during extraction. + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + // Specify the password that is used during extraction, for + // all entries that require a password: + zip.Password= "Top.Secret.No.Peeking!"; + zip.ExtractAll("extractDirectory"); + } + + + + ' Create a zip that uses Encryption. + Using zip As New ZipFile() + zip.AddFile("ReadMe.txt") + Dim e1 as ZipEntry + e1= zip.AddFile("2008-Regional-Sales-Report.pdf") + e1.Encryption= EncryptionAlgorithm.WinZipAes256 + e1.Password= "Top.Secret.No.Peeking!" + zip.Save("EncryptedArchive.zip") + End Using + + ' Extract a zip archive that uses AES Encryption. + ' You do not need to specify the algorithm during extraction. + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + ' Specify the password that is used during extraction, for + ' all entries that require a password: + zip.Password= "Top.Secret.No.Peeking!" + zip.ExtractAll("extractDirectory") + End Using + + + + + + Thrown in the setter if EncryptionAlgorithm.Unsupported is specified. + + + ZipEntry.Password + ZipFile.Encryption + + + + The Password to be used when encrypting a ZipEntry upon + ZipFile.Save(), or when decrypting an entry upon Extract(). + + + + + This is a write-only property on the entry. Set this to request that the + entry be encrypted when writing the zip archive, or set it to specify the + password to be used when extracting an existing entry that is encrypted. + + + + The password set here is implicitly used to encrypt the entry during the + operation, or to decrypt during the or operation. If you set + the Password on a ZipEntry after calling Save(), there is no + effect. + + + + Consider setting the property when using a + password. Answering concerns that the standard password protection + supported by all zip tools is weak, WinZip has extended the ZIP + specification with a way to use AES Encryption to protect entries in the + Zip file. Unlike the "PKZIP 2.0" encryption specified in the PKZIP + specification, AES + Encryption uses a standard, strong, tested, encryption + algorithm. DotNetZip can create zip archives that use WinZip-compatible + AES encryption, if you set the property. But, + archives created that use AES encryption may not be readable by all other + tools and libraries. For example, Windows Explorer cannot read a + "compressed folder" (a zip file) that uses AES encryption, though it can + read a zip file that uses "PKZIP encryption." + + + + The class also has a + property. This property takes precedence over any password set on the + ZipFile itself. Typically, you would use the per-entry Password when most + entries in the zip archive use one password, and a few entries use a + different password. If all entries in the zip file use the same password, + then it is simpler to just set this property on the ZipFile itself, + whether creating a zip archive or extracting a zip archive. + + + + Some comments on updating archives: If you read a ZipFile, you + cannot modify the password on any encrypted entry, except by extracting + the entry with the original password (if any), removing the original entry + via , and then adding a new + entry with a new Password. + + + + For example, suppose you read a ZipFile, and there is an encrypted + entry. Setting the Password property on that ZipEntry and then + calling Save() on the ZipFile does not update the password + on that entry in the archive. Neither is an exception thrown. Instead, + what happens during the Save() is the existing entry is copied + through to the new zip archive, in its original encrypted form. Upon + re-reading that archive, the entry can be decrypted with its original + password. + + + + If you read a ZipFile, and there is an un-encrypted entry, you can set the + Password on the entry and then call Save() on the ZipFile, and get + encryption on that entry. + + + + + + + This example creates a zip file with two entries, and then extracts the + entries from the zip file. When creating the zip file, the two files are + added to the zip file using password protection. Each entry uses a + different password. During extraction, each file is extracted with the + appropriate password. + + + // create a file with encryption + using (ZipFile zip = new ZipFile()) + { + ZipEntry entry; + entry= zip.AddFile("Declaration.txt"); + entry.Password= "123456!"; + entry = zip.AddFile("Report.xls"); + entry.Password= "1Secret!"; + zip.Save("EncryptedArchive.zip"); + } + + // extract entries that use encryption + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + ZipEntry entry; + entry = zip["Declaration.txt"]; + entry.Password = "123456!"; + entry.Extract("extractDir"); + entry = zip["Report.xls"]; + entry.Password = "1Secret!"; + entry.Extract("extractDir"); + } + + + + + Using zip As New ZipFile + Dim entry as ZipEntry + entry= zip.AddFile("Declaration.txt") + entry.Password= "123456!" + entry = zip.AddFile("Report.xls") + entry.Password= "1Secret!" + zip.Save("EncryptedArchive.zip") + End Using + + + ' extract entries that use encryption + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + Dim entry as ZipEntry + entry = zip("Declaration.txt") + entry.Password = "123456!" + entry.Extract("extractDir") + entry = zip("Report.xls") + entry.Password = "1Secret!" + entry.Extract("extractDir") + End Using + + + + + + + ZipFile.Password + + + + The action the library should take when extracting a file that already exists. + + + + + This property affects the behavior of the Extract methods (one of the + Extract() or ExtractWithPassword() overloads), when + extraction would would overwrite an existing filesystem file. If you do + not set this property, the library throws an exception when extracting + an entry would overwrite an existing file. + + + + This property has no effect when extracting to a stream, or when the file to be + extracted does not already exist. + + + + + + + This example shows how to set the ExtractExistingFile property in + an ExtractProgress event, in response to user input. The + ExtractProgress event is invoked if and only if the + ExtractExistingFile property was previously set to + ExtractExistingFileAction.InvokeExtractProgressEvent. + + public static void ExtractProgress(object sender, ExtractProgressEventArgs e) + { + if (e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) + Console.WriteLine("extract {0} ", e.CurrentEntry.FileName); + + else if (e.EventType == ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite) + { + ZipEntry entry = e.CurrentEntry; + string response = null; + // Ask the user if he wants overwrite the file + do + { + Console.Write("Overwrite {0} in {1} ? (y/n/C) ", entry.FileName, e.ExtractLocation); + response = Console.ReadLine(); + Console.WriteLine(); + + } while (response != null && response[0]!='Y' && + response[0]!='N' && response[0]!='C'); + + if (response[0]=='C') + e.Cancel = true; + else if (response[0]=='Y') + entry.ExtractExistingFile = ExtractExistingFileAction.OverwriteSilently; + else + entry.ExtractExistingFile= ExtractExistingFileAction.DoNotOverwrite; + } + } + + + + + + The action to take when an error is encountered while + opening or reading files as they are saved into a zip archive. + + + + + Errors can occur within a call to ZipFile.Save, as the various files contained + in a ZipFile are being saved into the zip archive. During the + Save, DotNetZip will perform a File.Open on the file + associated to the ZipEntry, and then will read the entire contents of + the file as it is zipped. Either the open or the Read may fail, because + of lock conflicts or other reasons. Using this property, you can + specify the action to take when such errors occur. + + + + Typically you will NOT set this property on individual ZipEntry + instances. Instead, you will set the ZipFile.ZipErrorAction property on + the ZipFile instance, before adding any entries to the + ZipFile. If you do this, errors encountered on behalf of any of + the entries in the ZipFile will be handled the same way. + + + + But, if you use a handler, you will want + to set this property on the ZipEntry within the handler, to + communicate back to DotNetZip what you would like to do with the + particular error. + + + + + + + + + Indicates whether the entry was included in the most recent save. + + + An entry can be excluded or skipped from a save if there is an error + opening or reading the entry. + + + + + + A callback that allows the application to specify the compression to use + for a given entry that is about to be added to the zip archive. + + + + + See + + + + + + Set to indicate whether to use UTF-8 encoding for filenames and comments. + + + + + + If this flag is set, the comment and filename for the entry will be + encoded with UTF-8, as described in the Zip + specification, if necessary. "Necessary" means, the filename or + entry comment (if any) cannot be reflexively encoded and decoded using the + default code page, IBM437. + + + + Setting this flag to true is equivalent to setting to System.Text.Encoding.UTF8. + + + + This flag has no effect or relation to the text encoding used within the + file itself. + + + + + + + The text encoding to use for the FileName and Comment on this ZipEntry, + when the default encoding is insufficient. + + + + + + Don't use this property. See . + + + + + + + Specifies the alternate text encoding used by this ZipEntry + + + + The default text encoding used in Zip files for encoding filenames and + comments is IBM437, which is something like a superset of ASCII. In + cases where this is insufficient, applications can specify an + alternate encoding. + + + When creating a zip file, the usage of the alternate encoding is + governed by the property. + Typically you would set both properties to tell DotNetZip to employ an + encoding that is not IBM437 in the zipfile you are creating. + + + Keep in mind that because the ZIP specification states that the only + valid encodings to use are IBM437 and UTF-8, if you use something + other than that, then zip tools and libraries may not be able to + successfully read the zip archive you generate. + + + The zip specification states that applications should presume that + IBM437 is in use, except when a special bit is set, which indicates + UTF-8. There is no way to specify an arbitrary code page, within the + zip file itself. When you create a zip file encoded with gb2312 or + ibm861 or anything other than IBM437 or UTF-8, then the application + that reads the zip file needs to "know" which code page to use. In + some cases, the code page used when reading is chosen implicitly. For + example, WinRar uses the ambient code page for the host desktop + operating system. The pitfall here is that if you create a zip in + Copenhagen and send it to Tokyo, the reader of the zipfile may not be + able to decode successfully. + + + + This example shows how to create a zipfile encoded with a + language-specific encoding: + + using (var zip = new ZipFile()) + { + zip.AlternateEnoding = System.Text.Encoding.GetEncoding("ibm861"); + zip.AlternateEnodingUsage = ZipOption.Always; + zip.AddFileS(arrayOfFiles); + zip.Save("Myarchive-Encoded-in-IBM861.zip"); + } + + + + + + + Describes if and when this instance should apply + AlternateEncoding to encode the FileName and Comment, when + saving. + + + + + + Indicates whether an entry is marked as a text file. Be careful when + using on this property. Unless you have a good reason, you should + probably ignore this property. + + + + + The ZIP format includes a provision for specifying whether an entry in + the zip archive is a text or binary file. This property exposes that + metadata item. Be careful when using this property: It's not clear + that this property as a firm meaning, across tools and libraries. + + + + To be clear, when reading a zip file, the property value may or may + not be set, and its value may or may not be valid. Not all entries + that you may think of as "text" entries will be so marked, and entries + marked as "text" are not guaranteed in any way to be text entries. + Whether the value is set and set correctly depends entirely on the + application that produced the zip file. + + + + There are many zip tools available, and when creating zip files, some + of them "respect" the IsText metadata field, and some of them do not. + Unfortunately, even when an application tries to do "the right thing", + it's not always clear what "the right thing" is. + + + + There's no firm definition of just what it means to be "a text file", + and the zip specification does not help in this regard. Twenty years + ago, text was ASCII, each byte was less than 127. IsText meant, all + bytes in the file were less than 127. These days, it is not the case + that all text files have all bytes less than 127. Any unicode file + may have bytes that are above 0x7f. The zip specification has nothing + to say on this topic. Therefore, it's not clear what IsText really + means. + + + + This property merely tells a reading application what is stored in the + metadata for an entry, without guaranteeing its validity or its + meaning. + + + + When DotNetZip is used to create a zipfile, it attempts to set this + field "correctly." For example, if a file ends in ".txt", this field + will be set. Your application may override that default setting. When + writing a zip file, you must set the property before calling + Save() on the ZipFile. + + + + When reading a zip file, a more general way to decide just what kind + of file is contained in a particular entry is to use the file type + database stored in the operating system. The operating system stores + a table that says, a file with .jpg extension is a JPG image file, a + file with a .xml extension is an XML document, a file with a .txt is a + pure ASCII text document, and so on. To get this information on + Windows, you + need to read and parse the registry. + + + + + using (var zip = new ZipFile()) + { + var e = zip.UpdateFile("Descriptions.mme", ""); + e.IsText = true; + zip.Save(zipPath); + } + + + + Using zip As New ZipFile + Dim e2 as ZipEntry = zip.AddFile("Descriptions.mme", "") + e.IsText= True + zip.Save(zipPath) + End Using + + + + + + An enum that specifies the type of timestamp available on the ZipEntry. + + + + + + The last modified time of a file can be stored in multiple ways in + a zip file, and they are not mutually exclusive: + + + + + In the so-called "DOS" format, which has a 2-second precision. Values + are rounded to the nearest even second. For example, if the time on the + file is 12:34:43, then it will be stored as 12:34:44. This first value + is accessible via the LastModified property. This value is always + present in the metadata for each zip entry. In some cases the value is + invalid, or zero. + + + + In the so-called "Windows" or "NTFS" format, as an 8-byte integer + quantity expressed as the number of 1/10 milliseconds (in other words + the number of 100 nanosecond units) since January 1, 1601 (UTC). This + format is how Windows represents file times. This time is accessible + via the ModifiedTime property. + + + + In the "Unix" format, a 4-byte quantity specifying the number of seconds since + January 1, 1970 UTC. + + + + In an older format, now deprecated but still used by some current + tools. This format is also a 4-byte quantity specifying the number of + seconds since January 1, 1970 UTC. + + + + + + This bit field describes which of the formats were found in a ZipEntry that was read. + + + + + + + Default value. + + + + + A DOS timestamp with 2-second precision. + + + + + A Windows timestamp with 100-ns precision. + + + + + A Unix timestamp with 1-second precision. + + + + + A Unix timestamp with 1-second precision, stored in InfoZip v1 format. This + format is outdated and is supported for reading archives only. + + + + + The method of compression to use for a particular ZipEntry. + + + + PKWare's + ZIP Specification describes a number of distinct + cmopression methods that can be used within a zip + file. DotNetZip supports a subset of them. + + + + + No compression at all. For COM environments, the value is 0 (zero). + + + + + DEFLATE compression, as described in IETF RFC + 1951. This is the "normal" compression used in zip + files. For COM environments, the value is 8. + + + + + BZip2 compression, a compression algorithm developed by Julian Seward. + For COM environments, the value is 12. + + + + + An enum that specifies the source of the ZipEntry. + + + + + Default value. Invalid on a bonafide ZipEntry. + + + + + The entry was instantiated by calling AddFile() or another method that + added an entry from the filesystem. + + + + + The entry was instantiated via or + . + + + + + The ZipEntry was instantiated by reading a zipfile. + + + + + The content for the ZipEntry will be or was provided by the WriteDelegate. + + + + + The content for the ZipEntry will be obtained from the stream dispensed by the OpenDelegate. + The entry was instantiated via . + + + + + The content for the ZipEntry will be or was obtained from a ZipOutputStream. + + + + + An enum providing the options when an error occurs during opening or reading + of a file or directory that is being saved to a zip file. + + + + + This enum describes the actions that the library can take when an error occurs + opening or reading a file, as it is being saved into a Zip archive. + + + + In some cases an error will occur when DotNetZip tries to open a file to be + added to the zip archive. In other cases, an error might occur after the + file has been successfully opened, while DotNetZip is reading the file. + + + + The first problem might occur when calling AddDirectory() on a directory + that contains a Clipper .dbf file; the file is locked by Clipper and + cannot be opened by another process. An example of the second problem is + the ERROR_LOCK_VIOLATION that results when a file is opened by another + process, but not locked, and a range lock has been taken on the file. + Microsoft Outlook takes range locks on .PST files. + + + + + + Throw an exception when an error occurs while zipping. This is the default + behavior. (For COM clients, this is a 0 (zero).) + + + + + When an error occurs during zipping, for example a file cannot be opened, + skip the file causing the error, and continue zipping. (For COM clients, + this is a 1.) + + + + + When an error occurs during zipping, for example a file cannot be opened, + retry the operation that caused the error. Be careful with this option. If + the error is not temporary, the library will retry forever. (For COM + clients, this is a 2.) + + + + + When an error occurs, invoke the zipError event. The event type used is + . A typical use of this option: + a GUI application may wish to pop up a dialog to allow the user to view the + error that occurred, and choose an appropriate action. After your + processing in the error event, if you want to skip the file, set on the + ZipProgressEventArgs.CurrentEntry to Skip. If you want the + exception to be thrown, set ZipErrorAction on the CurrentEntry + to Throw. If you want to cancel the zip, set + ZipProgressEventArgs.Cancel to true. Cancelling differs from using + Skip in that a cancel will not save any further entries, if there are any. + (For COM clients, the value of this enum is a 3.) + + + + + The ZipFile type represents a zip archive file. + + + + + This is the main type in the DotNetZip class library. This class reads and + writes zip files, as defined in the specification + for zip files described by PKWare. The compression for this + implementation is provided by a managed-code version of Zlib, included with + DotNetZip in the classes in the Ionic.Zlib namespace. + + + + This class provides a general purpose zip file capability. Use it to read, + create, or update zip files. When you want to create zip files using a + Stream type to write the zip file, you may want to consider the class. + + + + Both the ZipOutputStream class and the ZipFile class can + be used to create zip files. Both of them support many of the common zip + features, including Unicode, different compression methods and levels, + and ZIP64. They provide very similar performance when creating zip + files. + + + + The ZipFile class is generally easier to use than + ZipOutputStream and should be considered a higher-level interface. For + example, when creating a zip file via calls to the PutNextEntry() and + Write() methods on the ZipOutputStream class, the caller is + responsible for opening the file, reading the bytes from the file, writing + those bytes into the ZipOutputStream, setting the attributes on the + ZipEntry, and setting the created, last modified, and last accessed + timestamps on the zip entry. All of these things are done automatically by a + call to ZipFile.AddFile(). + For this reason, the ZipOutputStream is generally recommended for use + only when your application emits arbitrary data, not necessarily data from a + filesystem file, directly into a zip file, and does so using a Stream + metaphor. + + + + Aside from the differences in programming model, there are other + differences in capability between the two classes. + + + + + ZipFile can be used to read and extract zip files, in addition to + creating zip files. ZipOutputStream cannot read zip files. If you want + to use a stream to read zip files, check out the class. + + + + ZipOutputStream does not support the creation of segmented or spanned + zip files. + + + + ZipOutputStream cannot produce a self-extracting archive. + + + + + Be aware that the ZipFile class implements the interface. In order for ZipFile to + produce a valid zip file, you use use it within a using clause (Using + in VB), or call the Dispose() method explicitly. See the examples + for how to employ a using clause. + + + + + + + Adds an item, either a file or a directory, to a zip file archive. + + + + + This method is handy if you are adding things to zip archive and don't + want to bother distinguishing between directories or files. Any files are + added as single entries. A directory added through this method is added + recursively: all files and subdirectories contained within the directory + are added to the ZipFile. + + + + The name of the item may be a relative path or a fully-qualified + path. Remember, the items contained in ZipFile instance get written + to the disk only when you call or a similar + save method. + + + + The directory name used for the file within the archive is the same + as the directory name (potentially a relative path) specified in the + . + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + This method has two overloads. + + the name of the file or directory to add. + + The ZipEntry added. + + + + Adds an item, either a file or a directory, to a zip file archive, + explicitly specifying the directory path to be used in the archive. + + + + + If adding a directory, the add is recursive on all files and + subdirectories contained within it. + + + The name of the item may be a relative path or a fully-qualified path. + The item added by this call to the ZipFile is not read from the + disk nor written to the zip file archive until the application calls + Save() on the ZipFile. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive, which would override the + "natural" path of the filesystem file. + + + + Encryption will be used on the file data if the Password has + been set on the ZipFile object, prior to calling this method. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + Thrown if the file or directory passed in does not exist. + + + the name of the file or directory to add. + + + + The name of the directory path to use within the zip archive. This path + need not refer to an extant directory in the current filesystem. If the + files within the zip are later extracted, this is the path used for the + extracted file. Passing null (Nothing in VB) will use the + path on the fileOrDirectoryName. Passing the empty string ("") will + insert the item at the root path within the archive. + + + + + + + + This example shows how to zip up a set of files into a flat hierarchy, + regardless of where in the filesystem the files originated. The resulting + zip archive will contain a toplevel directory named "flat", which itself + will contain files Readme.txt, MyProposal.docx, and Image1.jpg. A + subdirectory under "flat" called SupportFiles will contain all the files + in the "c:\SupportFiles" directory on disk. + + + String[] itemnames= { + "c:\\fixedContent\\Readme.txt", + "MyProposal.docx", + "c:\\SupportFiles", // a directory + "images\\Image1.jpg" + }; + + try + { + using (ZipFile zip = new ZipFile()) + { + for (int i = 1; i < itemnames.Length; i++) + { + // will add Files or Dirs, recurses and flattens subdirectories + zip.AddItem(itemnames[i],"flat"); + } + zip.Save(ZipToCreate); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: {0}", ex1); + } + + + + Dim itemnames As String() = _ + New String() { "c:\fixedContent\Readme.txt", _ + "MyProposal.docx", _ + "SupportFiles", _ + "images\Image1.jpg" } + Try + Using zip As New ZipFile + Dim i As Integer + For i = 1 To itemnames.Length - 1 + ' will add Files or Dirs, recursing and flattening subdirectories. + zip.AddItem(itemnames(i), "flat") + Next i + zip.Save(ZipToCreate) + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1.ToString()) + End Try + + + The ZipEntry added. + + + + Adds a File to a Zip file archive. + + + + + This call collects metadata for the named file in the filesystem, + including the file attributes and the timestamp, and inserts that metadata + into the resulting ZipEntry. Only when the application calls Save() on + the ZipFile, does DotNetZip read the file from the filesystem and + then write the content to the zip file archive. + + + + This method will throw an exception if an entry with the same name already + exists in the ZipFile. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + In this example, three files are added to a Zip archive. The ReadMe.txt + file will be placed in the root of the archive. The .png file will be + placed in a folder within the zip called photos\personal. The pdf file + will be included into a folder within the zip called Desktop. + + + try + { + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("c:\\photos\\personal\\7440-N49th.png"); + zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf"); + zip.AddFile("ReadMe.txt"); + + zip.Save("Package.zip"); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: " + ex1); + } + + + + Try + Using zip As ZipFile = New ZipFile + zip.AddFile("c:\photos\personal\7440-N49th.png") + zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf") + zip.AddFile("ReadMe.txt") + zip.Save("Package.zip") + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1.ToString) + End Try + + + + This method has two overloads. + + + + + + + The name of the file to add. It should refer to a file in the filesystem. + The name of the file may be a relative path or a fully-qualified path. + + The ZipEntry corresponding to the File added. + + + + Adds a File to a Zip file archive, potentially overriding the path to be + used within the zip archive. + + + + + The file added by this call to the ZipFile is not written to the + zip file archive until the application calls Save() on the ZipFile. + + + + This method will throw an exception if an entry with the same name already + exists in the ZipFile. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + In this example, three files are added to a Zip archive. The ReadMe.txt + file will be placed in the root of the archive. The .png file will be + placed in a folder within the zip called images. The pdf file will be + included into a folder within the zip called files\docs, and will be + encrypted with the given password. + + + try + { + using (ZipFile zip = new ZipFile()) + { + // the following entry will be inserted at the root in the archive. + zip.AddFile("c:\\datafiles\\ReadMe.txt", ""); + // this image file will be inserted into the "images" directory in the archive. + zip.AddFile("c:\\photos\\personal\\7440-N49th.png", "images"); + // the following will result in a password-protected file called + // files\\docs\\2008-Regional-Sales-Report.pdf in the archive. + zip.Password = "EncryptMe!"; + zip.AddFile("c:\\Desktop\\2008-Regional-Sales-Report.pdf", "files\\docs"); + zip.Save("Archive.zip"); + } + } + catch (System.Exception ex1) + { + System.Console.Error.WriteLine("exception: {0}", ex1); + } + + + + Try + Using zip As ZipFile = New ZipFile + ' the following entry will be inserted at the root in the archive. + zip.AddFile("c:\datafiles\ReadMe.txt", "") + ' this image file will be inserted into the "images" directory in the archive. + zip.AddFile("c:\photos\personal\7440-N49th.png", "images") + ' the following will result in a password-protected file called + ' files\\docs\\2008-Regional-Sales-Report.pdf in the archive. + zip.Password = "EncryptMe!" + zip.AddFile("c:\Desktop\2008-Regional-Sales-Report.pdf", "files\documents") + zip.Save("Archive.zip") + End Using + Catch ex1 As Exception + Console.Error.WriteLine("exception: {0}", ex1) + End Try + + + + + + + + + The name of the file to add. The name of the file may be a relative path + or a fully-qualified path. + + + + Specifies a directory path to use to override any path in the fileName. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on the fileName, if any. Passing the empty string + ("") will insert the item at the root path within the archive. + + + The ZipEntry corresponding to the file added. + + + + This method removes a collection of entries from the ZipFile. + + + + A collection of ZipEntry instances from this zip file to be removed. For + example, you can pass in an array of ZipEntry instances; or you can call + SelectEntries(), and then add or remove entries from that + ICollection<ZipEntry> (ICollection(Of ZipEntry) in VB), and pass + that ICollection to this method. + + + + + + + + This method removes a collection of entries from the ZipFile, by name. + + + + A collection of strings that refer to names of entries to be removed + from the ZipFile. For example, you can pass in an array or a + List of Strings that provide the names of entries to be removed. + + + + + + + + This method adds a set of files to the ZipFile. + + + + + Use this method to add a set of files to the zip archive, in one call. + For example, a list of files received from + System.IO.Directory.GetFiles() can be added to a zip archive in one + call. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The collection of names of the files to add. Each string should refer to a + file in the filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + This example shows how to create a zip file, and add a few files into it. + + String ZipFileToCreate = "archive1.zip"; + String DirectoryToZip = "c:\\reports"; + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames); + zip.Save(ZipFileToCreate); + } + + + + Dim ZipFileToCreate As String = "archive1.zip" + Dim DirectoryToZip As String = "c:\reports" + Using zip As ZipFile = New ZipFile + ' Store all files found in the top level directory, into the zip archive. + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames) + zip.Save(ZipFileToCreate) + End Using + + + + + + + + Adds or updates a set of files in the ZipFile. + + + + + Any files that already exist in the archive are updated. Any files that + don't yet exist in the archive are added. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The collection of names of the files to update. Each string should refer to a file in + the filesystem. The name of the file may be a relative path or a fully-qualified path. + + + + + + Adds a set of files to the ZipFile, using the + specified directory path in the archive. + + + + + Any directory structure that may be present in the + filenames contained in the list is "flattened" in the + archive. Each file in the list is added to the archive in + the specified top-level directory. + + + + For ZipFile properties including , , , , , , and , their respective values at the + time of this call will be applied to each ZipEntry added. + + + + + The names of the files to add. Each string should refer to + a file in the filesystem. The name of the file may be a + relative path or a fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + Th is path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + + + Adds a set of files to the ZipFile, using the specified directory + path in the archive, and preserving the full directory structure in the + filenames. + + + + + If preserveDirHierarchy is true, any directory structure present in the + filenames contained in the list is preserved in the archive. On the other + hand, if preserveDirHierarchy is false, any directory structure that may + be present in the filenames contained in the list is "flattened" in the + archive; Each file in the list is added to the archive in the specified + top-level directory. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + The names of the files to add. Each string should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + whether the entries in the zip archive will reflect the directory + hierarchy that is present in the various filenames. For example, if + includes two paths, \Animalia\Chordata\Mammalia\Info.txt and + \Plantae\Magnoliophyta\Dicotyledon\Info.txt, then calling this method with + = false will result in an + exception because of a duplicate entry name, while calling this method + with = true will result in the + full direcory paths being included in the entries added to the ZipFile. + + + + + + Adds or updates a set of files to the ZipFile, using the specified + directory path in the archive. + + + + + + Any files that already exist in the archive are updated. Any files that + don't yet exist in the archive are added. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + The names of the files to add or update. Each string should refer to a + file in the filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the file name. + This path may, or may not, correspond to a real directory in the current + filesystem. If the files within the zip are later extracted, this is the + path used for the extracted file. Passing null (Nothing in + VB) will use the path on each of the fileNames, if any. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + + + Adds or Updates a File in a Zip file archive. + + + + + This method adds a file to a zip archive, or, if the file already exists + in the zip archive, this method Updates the content of that given filename + in the zip archive. The UpdateFile method might more accurately be + called "AddOrUpdateFile". + + + + Upon success, there is no way for the application to learn whether the file + was added versus updated. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + This example shows how to Update an existing entry in a zipfile. The first + call to UpdateFile adds the file to the newly-created zip archive. The + second call to UpdateFile updates the content for that file in the zip + archive. + + + using (ZipFile zip1 = new ZipFile()) + { + // UpdateFile might more accurately be called "AddOrUpdateFile" + zip1.UpdateFile("MyDocuments\\Readme.txt"); + zip1.UpdateFile("CustomerList.csv"); + zip1.Comment = "This zip archive has been created."; + zip1.Save("Content.zip"); + } + + using (ZipFile zip2 = ZipFile.Read("Content.zip")) + { + zip2.UpdateFile("Updates\\Readme.txt"); + zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed."; + zip2.Save(); + } + + + + Using zip1 As New ZipFile + ' UpdateFile might more accurately be called "AddOrUpdateFile" + zip1.UpdateFile("MyDocuments\Readme.txt") + zip1.UpdateFile("CustomerList.csv") + zip1.Comment = "This zip archive has been created." + zip1.Save("Content.zip") + End Using + + Using zip2 As ZipFile = ZipFile.Read("Content.zip") + zip2.UpdateFile("Updates\Readme.txt") + zip2.Comment = "This zip archive has been updated: The Readme.txt file has been changed." + zip2.Save + End Using + + + + + + + + + The name of the file to add or update. It should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + The ZipEntry corresponding to the File that was added or updated. + + + + + Adds or Updates a File in a Zip file archive. + + + + + This method adds a file to a zip archive, or, if the file already exists + in the zip archive, this method Updates the content of that given filename + in the zip archive. + + + + This version of the method allows the caller to explicitly specify the + directory path to be used in the archive. The entry to be added or + updated is found by using the specified directory path, combined with the + basename of the specified filename. + + + + Upon success, there is no way for the application to learn if the file was + added versus updated. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The name of the file to add or update. It should refer to a file in the + filesystem. The name of the file may be a relative path or a + fully-qualified path. + + + + Specifies a directory path to use to override any path in the + fileName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + fileName, if any. Passing the empty string ("") will insert the + item at the root path within the archive. + + + + The ZipEntry corresponding to the File that was added or updated. + + + + + Add or update a directory in a zip archive. + + + + If the specified directory does not exist in the archive, then this method + is equivalent to calling AddDirectory(). If the specified + directory already exists in the archive, then this method updates any + existing entries, and adds any new entries. Any entries that are in the + zip archive but not in the specified directory, are left alone. In other + words, the contents of the zip file will be a union of the previous + contents and the new files. + + + + + + + + The path to the directory to be added to the zip archive, or updated in + the zip archive. + + + + The ZipEntry corresponding to the Directory that was added or updated. + + + + + Add or update a directory in the zip archive at the specified root + directory in the archive. + + + + If the specified directory does not exist in the archive, then this method + is equivalent to calling AddDirectory(). If the specified + directory already exists in the archive, then this method updates any + existing entries, and adds any new entries. Any entries that are in the + zip archive but not in the specified directory, are left alone. In other + words, the contents of the zip file will be a union of the previous + contents and the new files. + + + + + + + + The path to the directory to be added to the zip archive, or updated + in the zip archive. + + + + Specifies a directory path to use to override any path in the + directoryName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + directoryName, if any. Passing the empty string ("") will insert + the item at the root path within the archive. + + + + The ZipEntry corresponding to the Directory that was added or updated. + + + + + Add or update a file or directory in the zip archive. + + + + + This is useful when the application is not sure or does not care if the + item to be added is a file or directory, and does not know or does not + care if the item already exists in the ZipFile. Calling this method + is equivalent to calling RemoveEntry() if an entry by the same name + already exists, followed calling by AddItem(). + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + the path to the file or directory to be added or updated. + + + + + Add or update a file or directory. + + + + + This method is useful when the application is not sure or does not care if + the item to be added is a file or directory, and does not know or does not + care if the item already exists in the ZipFile. Calling this method + is equivalent to calling RemoveEntry(), if an entry by that name + exists, and then calling AddItem(). + + + + This version of the method allows the caller to explicitly specify the + directory path to be used for the item being added to the archive. The + entry or entries that are added or updated will use the specified + DirectoryPathInArchive. Extracting the entry from the archive will + result in a file stored in that directory path. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The path for the File or Directory to be added or updated. + + + Specifies a directory path to use to override any path in the + itemName. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (Nothing in VB) will use the path on the + itemName, if any. Passing the empty string ("") will insert the + item at the root path within the archive. + + + + + Adds a named entry into the zip archive, taking content for the entry + from a string. + + + + Calling this method creates an entry using the given fileName and + directory path within the archive. There is no need for a file by the + given name to exist in the filesystem; the name is used within the zip + archive only. The content for the entry is encoded using the default text + encoding for the machine, or on Silverlight, using UTF-8. + + + + The content of the file, should it be extracted from the zip. + + + + The name, including any path, to use for the entry within the archive. + + + The ZipEntry added. + + + + This example shows how to add an entry to the zipfile, using a string as + content for that entry. + + + string Content = "This string will be the content of the Readme.txt file in the zip archive."; + using (ZipFile zip1 = new ZipFile()) + { + zip1.AddFile("MyDocuments\\Resume.doc", "files"); + zip1.AddEntry("Readme.txt", Content); + zip1.Comment = "This zip file was created at " + System.DateTime.Now.ToString("G"); + zip1.Save("Content.zip"); + } + + + + Public Sub Run() + Dim Content As String = "This string will be the content of the Readme.txt file in the zip archive." + Using zip1 As ZipFile = New ZipFile + zip1.AddEntry("Readme.txt", Content) + zip1.AddFile("MyDocuments\Resume.doc", "files") + zip1.Comment = ("This zip file was created at " & DateTime.Now.ToString("G")) + zip1.Save("Content.zip") + End Using + End Sub + + + + + + Adds a named entry into the zip archive, taking content for the entry + from a string, and using the specified text encoding. + + + + + + Calling this method creates an entry using the given fileName and + directory path within the archive. There is no need for a file by the + given name to exist in the filesystem; the name is used within the zip + archive only. + + + + The content for the entry, a string value, is encoded using the given + text encoding. A BOM (byte-order-mark) is emitted into the file, if the + Encoding parameter is set for that. + + + + Most Encoding classes support a constructor that accepts a boolean, + indicating whether to emit a BOM or not. For example see . + + + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + + The text encoding to use when encoding the string. Be aware: This is + distinct from the text encoding used to encode the fileName, as specified + in . + + + The ZipEntry added. + + + + + Create an entry in the ZipFile using the given Stream + as input. The entry will have the given filename. + + + + + + The application should provide an open, readable stream; in this case it + will be read during the call to or one of + its overloads. + + + + The passed stream will be read from its current position. If + necessary, callers should set the position in the stream before + calling AddEntry(). This might be appropriate when using this method + with a MemoryStream, for example. + + + + In cases where a large number of streams will be added to the + ZipFile, the application may wish to avoid maintaining all of the + streams open simultaneously. To handle this situation, the application + should use the + overload. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + This example adds a single entry to a ZipFile via a Stream. + + + + String zipToCreate = "Content.zip"; + String fileNameInArchive = "Content-From-Stream.bin"; + using (System.IO.Stream streamToRead = MyStreamOpener()) + { + using (ZipFile zip = new ZipFile()) + { + ZipEntry entry= zip.AddEntry(fileNameInArchive, streamToRead); + zip.AddFile("Readme.txt"); + zip.Save(zipToCreate); // the stream is read implicitly here + } + } + + + + Dim zipToCreate As String = "Content.zip" + Dim fileNameInArchive As String = "Content-From-Stream.bin" + Using streamToRead as System.IO.Stream = MyStreamOpener() + Using zip As ZipFile = New ZipFile() + Dim entry as ZipEntry = zip.AddEntry(fileNameInArchive, streamToRead) + zip.AddFile("Readme.txt") + zip.Save(zipToCreate) '' the stream is read implicitly, here + End Using + End Using + + + + + + + The name, including any path, which is shown in the zip file for the added + entry. + + + The input stream from which to grab content for the file + + The ZipEntry added. + + + + Add a ZipEntry for which content is written directly by the application. + + + + + When the application needs to write the zip entry data, use this + method to add the ZipEntry. For example, in the case that the + application wishes to write the XML representation of a DataSet into + a ZipEntry, the application can use this method to do so. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + About progress events: When using the WriteDelegate, DotNetZip does + not issue any SaveProgress events with EventType = + Saving_EntryBytesRead. (This is because it is the + application's code that runs in WriteDelegate - there's no way for + DotNetZip to know when to issue a EntryBytesRead event.) + Applications that want to update a progress bar or similar status + indicator should do so from within the WriteDelegate + itself. DotNetZip will issue the other SaveProgress events, + including + Saving_Started, + + Saving_BeforeWriteEntry, and + Saving_AfterWriteEntry. + + + + Note: When you use PKZip encryption, it's normally necessary to + compute the CRC of the content to be encrypted, before compressing or + encrypting it. Therefore, when using PKZip encryption with a + WriteDelegate, the WriteDelegate CAN BE called twice: once to compute + the CRC, and the second time to potentially compress and + encrypt. Surprising, but true. This is because PKWARE specified that + the encryption initialization data depends on the CRC. + If this happens, for each call of the delegate, your + application must stream the same entry data in its entirety. If your + application writes different data during the second call, it will + result in a corrupt zip file. + + + + The double-read behavior happens with all types of entries, not only + those that use WriteDelegate. It happens if you add an entry from a + filesystem file, or using a string, or a stream, or an opener/closer + pair. But in those cases, DotNetZip takes care of reading twice; in + the case of the WriteDelegate, the application code gets invoked + twice. Be aware. + + + + As you can imagine, this can cause performance problems for large + streams, and it can lead to correctness problems when you use a + WriteDelegate. This is a pretty big pitfall. There are two + ways to avoid it. First, and most preferred: don't use PKZIP + encryption. If you use the WinZip AES encryption, this problem + doesn't occur, because the encryption protocol doesn't require the CRC + up front. Second: if you do choose to use PKZIP encryption, write out + to a non-seekable stream (like standard output, or the + Response.OutputStream in an ASP.NET application). In this case, + DotNetZip will use an alternative encryption protocol that does not + rely on the CRC of the content. This also implies setting bit 3 in + the zip entry, which still presents problems for some zip tools. + + + + In the future I may modify DotNetZip to *always* use bit 3 when PKZIP + encryption is in use. This seems like a win overall, but there will + be some work involved. If you feel strongly about it, visit the + DotNetZip forums and vote up the Workitem + tracking this issue. + + + + + the name of the entry to add + the delegate which will write the entry content + the ZipEntry added + + + + This example shows an application filling a DataSet, then saving the + contents of that DataSet as XML, into a ZipEntry in a ZipFile, using an + anonymous delegate in C#. The DataSet XML is never saved to a disk file. + + + var c1= new System.Data.SqlClient.SqlConnection(connstring1); + var da = new System.Data.SqlClient.SqlDataAdapter() + { + SelectCommand= new System.Data.SqlClient.SqlCommand(strSelect, c1) + }; + + DataSet ds1 = new DataSet(); + da.Fill(ds1, "Invoices"); + + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, (name,stream) => ds1.WriteXml(stream) ); + zip.Save(zipFileName); + } + + + + + + This example uses an anonymous method in C# as the WriteDelegate to provide + the data for the ZipEntry. The example is a bit contrived - the + AddFile() method is a simpler way to insert the contents of a file + into an entry in a zip file. On the other hand, if there is some sort of + processing or transformation of the file contents required before writing, + the application could use the WriteDelegate to do it, in this way. + + + using (var input = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite )) + { + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, (name,output) => + { + byte[] buffer = new byte[BufferSize]; + int n; + while ((n = input.Read(buffer, 0, buffer.Length)) != 0) + { + // could transform the data here... + output.Write(buffer, 0, n); + // could update a progress bar here + } + }); + + zip.Save(zipFileName); + } + } + + + + + + This example uses a named delegate in VB to write data for the given + ZipEntry (VB9 does not have anonymous delegates). The example here is a bit + contrived - a simpler way to add the contents of a file to a ZipEntry is to + simply use the appropriate AddFile() method. The key scenario for + which the WriteDelegate makes sense is saving a DataSet, in XML + format, to the zip file. The DataSet can write XML to a stream, and the + WriteDelegate is the perfect place to write into the zip file. There may be + other data structures that can write to a stream, but cannot be read as a + stream. The WriteDelegate would be appropriate for those cases as + well. + + + Private Sub WriteEntry (ByVal name As String, ByVal output As Stream) + Using input As FileStream = File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer = -1 + Dim buffer As Byte() = New Byte(BufferSize){} + Do While n <> 0 + n = input.Read(buffer, 0, buffer.Length) + output.Write(buffer, 0, n) + Loop + End Using + End Sub + + Public Sub Run() + Using zip = New ZipFile + zip.AddEntry(zipEntryName, New WriteDelegate(AddressOf WriteEntry)) + zip.Save(zipFileName) + End Using + End Sub + + + + + + Add an entry, for which the application will provide a stream, + just-in-time. + + + + + In cases where the application wishes to open the stream that holds + the content for the ZipEntry, on a just-in-time basis, the application + can use this method and provide delegates to open and close the + stream. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + This example uses anonymous methods in C# to open and close the + source stream for the content for a zip entry. In a real + application, the logic for the OpenDelegate would probably be more + involved. + + + using(Ionic.Zip.ZipFile zip = new Ionic.Zip.ZipFile()) + { + zip.AddEntry(zipEntryName, + (name) => File.Open(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite ), + (name, stream) => stream.Close() + ); + + zip.Save(zipFileName); + } + + + + + + + This example uses delegates in VB.NET to open and close the + the source stream for the content for a zip entry. VB 9.0 lacks + support for "Sub" lambda expressions, and so the CloseDelegate must + be an actual, named Sub. + + + + Function MyStreamOpener(ByVal entryName As String) As Stream + '' This simply opens a file. You probably want to do somethinig + '' more involved here: open a stream to read from a database, + '' open a stream on an HTTP connection, and so on. + Return File.OpenRead(entryName) + End Function + + Sub MyStreamCloser(entryName As String, stream As Stream) + stream.Close() + End Sub + + Public Sub Run() + Dim dirToZip As String = "fodder" + Dim zipFileToCreate As String = "Archive.zip" + Dim opener As OpenDelegate = AddressOf MyStreamOpener + Dim closer As CloseDelegate = AddressOf MyStreamCloser + Dim numFilestoAdd As Int32 = 4 + Using zip As ZipFile = New ZipFile + Dim i As Integer + For i = 0 To numFilesToAdd - 1 + zip.AddEntry(String.Format("content-{0:000}.txt"), opener, closer) + Next i + zip.Save(zipFileToCreate) + End Using + End Sub + + + + + the name of the entry to add + + the delegate that will be invoked to open the stream + + + the delegate that will be invoked to close the stream + + the ZipEntry added + + + + + Updates the given entry in the ZipFile, using the given + string as content for the ZipEntry. + + + + + + Calling this method is equivalent to removing the ZipEntry for + the given file name and directory path, if it exists, and then calling + . See the documentation for + that method for further explanation. The string content is encoded + using the default encoding for the machine, or on Silverlight, using + UTF-8. This encoding is distinct from the encoding used for the + filename itself. See . + + + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given string as + content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + + The content of the file, should it be extracted from the zip. + + + + The text encoding to use when encoding the string. Be aware: This is + distinct from the text encoding used to encode the filename. See . + + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given delegate + as the source for content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + the delegate which will write the entry content. + + The ZipEntry added. + + + + + Updates the given entry in the ZipFile, using the given delegates + to open and close the stream that provides the content for the ZipEntry. + + + + Calling this method is equivalent to removing the ZipEntry for the + given file name and directory path, if it exists, and then calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + + the delegate that will be invoked to open the stream + + + the delegate that will be invoked to close the stream + + + The ZipEntry added or updated. + + + + + Updates the given entry in the ZipFile, using the given stream as + input, and the given filename and given directory Path. + + + + + Calling the method is equivalent to calling RemoveEntry() if an + entry by the same name already exists, and then calling AddEntry() + with the given fileName and stream. + + + + The stream must be open and readable during the call to + ZipFile.Save. You can dispense the stream on a just-in-time basis + using the property. Check the + documentation of that property for more information. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to the + ZipEntry added. + + + + + + + + + The name, including any path, to use within the archive for the entry. + + + The input stream from which to read file data. + The ZipEntry added. + + + + Add an entry into the zip archive using the given filename and + directory path within the archive, and the given content for the + file. No file is created in the filesystem. + + + The data to use for the entry. + + + The name, including any path, to use within the archive for the entry. + + + The ZipEntry added. + + + + Updates the given entry in the ZipFile, using the given byte + array as content for the entry. + + + + Calling this method is equivalent to removing the ZipEntry + for the given filename and directory path, if it exists, and then + calling . See the + documentation for that method for further explanation. + + + + The name, including any path, to use within the archive for the entry. + + + The content to use for the ZipEntry. + + The ZipEntry added. + + + + + Adds the contents of a filesystem directory to a Zip file archive. + + + + + + The name of the directory may be a relative path or a fully-qualified + path. Any files within the named directory are added to the archive. Any + subdirectories within the named directory are also added to the archive, + recursively. + + + + Top-level entries in the named directory will appear as top-level entries + in the zip archive. Entries in subdirectories in the named directory will + result in entries in subdirectories in the zip archive. + + + + If you want the entries to appear in a containing directory in the zip + archive itself, then you should call the AddDirectory() overload that + allows you to explicitly specify a directory path for use in the archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + + + + + This method has 2 overloads. + + The name of the directory to add. + The ZipEntry added. + + + + Adds the contents of a filesystem directory to a Zip file archive, + overriding the path to be used for entries in the archive. + + + + + The name of the directory may be a relative path or a fully-qualified + path. The add operation is recursive, so that any files or subdirectories + within the name directory are also added to the archive. + + + + Top-level entries in the named directory will appear as top-level entries + in the zip archive. Entries in subdirectories in the named directory will + result in entries in subdirectories in the zip archive. + + + + For ZipFile properties including , , , , , + , and , their + respective values at the time of this call will be applied to each + ZipEntry added. + + + + + + + In this code, calling the ZipUp() method with a value of "c:\reports" for + the directory parameter will result in a zip file structure in which all + entries are contained in a toplevel "reports" directory. + + + + public void ZipUp(string targetZip, string directory) + { + using (var zip = new ZipFile()) + { + zip.AddDirectory(directory, System.IO.Path.GetFileName(directory)); + zip.Save(targetZip); + } + } + + + + + + + + The name of the directory to add. + + + Specifies a directory path to use to override any path in the + DirectoryName. This path may, or may not, correspond to a real directory + in the current filesystem. If the zip is later extracted, this is the + path used for the extracted file or directory. Passing null + (Nothing in VB) or the empty string ("") will insert the items at + the root path within the archive. + + + The ZipEntry added. + + + + Creates a directory in the zip archive. + + + + + + Use this when you want to create a directory in the archive but there is + no corresponding filesystem representation for that directory. + + + + You will probably not need to do this in your code. One of the only times + you will want to do this is if you want an empty directory in the zip + archive. The reason: if you add a file to a zip archive that is stored + within a multi-level directory, all of the directory tree is implicitly + created in the zip archive. + + + + + + The name of the directory to create in the archive. + + The ZipEntry added. + + + + Checks a zip file to see if its directory is consistent. + + + + + + In cases of data error, the directory within a zip file can get out + of synch with the entries in the zip file. This method checks the + given zip file and returns true if this has occurred. + + + This method may take a long time to run for large zip files. + + + This method is not supported in the Reduced or Compact Framework + versions of DotNetZip. + + + + Developers using COM can use the ComHelper.CheckZip(String) + method. + + + + + The filename to of the zip file to check. + + true if the named zip file checks OK. Otherwise, false. + + + + + + + Checks a zip file to see if its directory is consistent, + and optionally fixes the directory if necessary. + + + + + + In cases of data error, the directory within a zip file can get out of + synch with the entries in the zip file. This method checks the given + zip file, and returns true if this has occurred. It also optionally + fixes the zipfile, saving the fixed copy in Name_Fixed.zip. + + + + This method may take a long time to run for large zip files. It + will take even longer if the file actually needs to be fixed, and if + fixIfNecessary is true. + + + + This method is not supported in the Reduced or Compact + Framework versions of DotNetZip. + + + + + The filename to of the zip file to check. + + If true, the method will fix the zip file if + necessary. + + + a TextWriter in which messages generated while checking will be written. + + + true if the named zip is OK; false if the file needs to be fixed. + + + + + + + Rewrite the directory within a zipfile. + + + + + + In cases of data error, the directory in a zip file can get out of + synch with the entries in the zip file. This method attempts to fix + the zip file if this has occurred. + + + This can take a long time for large zip files. + + This won't work if the zip file uses a non-standard + code page - neither IBM437 nor UTF-8. + + + This method is not supported in the Reduced or Compact Framework + versions of DotNetZip. + + + + Developers using COM can use the ComHelper.FixZipDirectory(String) + method. + + + + + The filename to of the zip file to fix. + + + + + + + Verify the password on a zip file. + + + + + Keep in mind that passwords in zipfiles are applied to + zip entries, not to the entire zip file. So testing a + zipfile for a particular password doesn't work in the + general case. On the other hand, it's often the case + that a single password will be used on all entries in a + zip file. This method works for that case. + + + There is no way to check a password without doing the + decryption. So this code decrypts and extracts the given + zipfile into + + + + The filename to of the zip file to fix. + + The password to check. + + a bool indicating whether the password matches. + + + + Returns true if an entry by the given name exists in the ZipFile. + + + the name of the entry to find + true if an entry with the given name exists; otherwise false. + + + + Provides a string representation of the instance. + a string representation of the instance. + + + + Creates a new ZipFile instance, using the specified filename. + + + + + Applications can use this constructor to create a new ZipFile for writing, + or to slurp in an existing zip archive for read and update purposes. + + + + To create a new zip archive, an application can call this constructor, + passing the name of a file that does not exist. The name may be a fully + qualified path. Then the application can add directories or files to the + ZipFile via AddDirectory(), AddFile(), AddItem() + and then write the zip archive to the disk by calling Save(). The + zip file is not actually opened and written to the disk until the + application calls ZipFile.Save(). At that point the new zip file + with the given name is created. + + + + If you won't know the name of the Zipfile until the time you call + ZipFile.Save(), or if you plan to save to a stream (which has no + name), then you should use the no-argument constructor. + + + + The application can also call this constructor to read an existing zip + archive. passing the name of a valid zip file that does exist. But, it's + better form to use the static method, + passing the name of the zip file, because using ZipFile.Read() in + your code communicates very clearly what you are doing. In either case, + the file is then read into the ZipFile instance. The app can then + enumerate the entries or can modify the zip file, for example adding + entries, removing entries, changing comments, and so on. + + + + One advantage to this parameterized constructor: it allows applications to + use the same code to add items to a zip archive, regardless of whether the + zip file exists. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + By the way, since DotNetZip is so easy to use, don't you think you should + donate $5 or $10? + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + + This example shows how to create a zipfile, and add a few files into it. + + String ZipFileToCreate = "archive1.zip"; + String DirectoryToZip = "c:\\reports"; + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames, "files"); + zip.Save(ZipFileToCreate); + } + + + + Dim ZipFileToCreate As String = "archive1.zip" + Dim DirectoryToZip As String = "c:\reports" + Using zip As ZipFile = New ZipFile() + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames, "files") + zip.Save(ZipFileToCreate) + End Using + + + + The filename to use for the new zip archive. + + + + + Creates a new ZipFile instance, using the specified name for the + filename, and the specified Encoding. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + This is equivalent to setting the property on the ZipFile + instance after construction. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + The filename to use for the new zip archive. + The Encoding is used as the default alternate + encoding for entries with filenames or comments that cannot be encoded + with the IBM437 code page. + + + + Create a zip file, without specifying a target filename or stream to save to. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + After instantiating with this constructor and adding entries to the + archive, the application should call or + to save to a file or a + stream, respectively. The application can also set the + property and then call the no-argument method. (This + is the preferred approach for applications that use the library through + COM interop.) If you call the no-argument method + without having set the Name of the ZipFile, either through + the parameterized constructor or through the explicit property , the + Save() will throw, because there is no place to save the file. + + + Instances of the ZipFile class are not multi-thread safe. You may + have multiple threads that each use a distinct ZipFile instance, or + you can synchronize multi-thread access to a single instance. + + + + + This example creates a Zip archive called Backup.zip, containing all the files + in the directory DirectoryToZip. Files within subdirectories are not zipped up. + + using (ZipFile zip = new ZipFile()) + { + // Store all files found in the top level directory, into the zip archive. + // note: this code does not recurse subdirectories! + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames, "files"); + zip.Save("Backup.zip"); + } + + + + Using zip As New ZipFile + ' Store all files found in the top level directory, into the zip archive. + ' note: this code does not recurse subdirectories! + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames, "files") + zip.Save("Backup.zip") + End Using + + + + + + Create a zip file, specifying a text Encoding, but without specifying a + target filename or stream to save to. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + + + + + Creates a new ZipFile instance, using the specified name for the + filename, and the specified status message writer. + + + + + See the documentation on the ZipFile + constructor that accepts a single string argument for basic + information on all the ZipFile constructors. + + + + This version of the constructor allows the caller to pass in a TextWriter, + to which verbose messages will be written during extraction or creation of + the zip archive. A console application may wish to pass + System.Console.Out to get messages on the Console. A graphical or headless + application may wish to capture the messages in a different + TextWriter, for example, a StringWriter, and then display + the messages in a TextBox, or generate an audit log of ZipFile operations. + + + + To encrypt the data for the files added to the ZipFile instance, + set the Password property after creating the ZipFile instance. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if name refers to an existing file that is not a valid zip file. + + + + + using (ZipFile zip = new ZipFile("Backup.zip", Console.Out)) + { + // Store all files found in the top level directory, into the zip archive. + // note: this code does not recurse subdirectories! + // Status messages will be written to Console.Out + String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip); + zip.AddFiles(filenames); + zip.Save(); + } + + + + Using zip As New ZipFile("Backup.zip", Console.Out) + ' Store all files found in the top level directory, into the zip archive. + ' note: this code does not recurse subdirectories! + ' Status messages will be written to Console.Out + Dim filenames As String() = System.IO.Directory.GetFiles(DirectoryToZip) + zip.AddFiles(filenames) + zip.Save() + End Using + + + + The filename to use for the new zip archive. + A TextWriter to use for writing + verbose status messages. + + + + Creates a new ZipFile instance, using the specified name for the + filename, the specified status message writer, and the specified Encoding. + + + + + This constructor works like the ZipFile + constructor that accepts a single string argument. See that + reference for detail on what this constructor does. + + + + This version of the constructor allows the caller to pass in a + TextWriter, and an Encoding. The TextWriter will collect + verbose messages that are generated by the library during extraction or + creation of the zip archive. A console application may wish to pass + System.Console.Out to get messages on the Console. A graphical or + headless application may wish to capture the messages in a different + TextWriter, for example, a StringWriter, and then display + the messages in a TextBox, or generate an audit log of + ZipFile operations. + + + + The Encoding is used as the default alternate encoding for entries + with filenames or comments that cannot be encoded with the IBM437 code + page. This is a equivalent to setting the property on the ZipFile + instance after construction. + + + + To encrypt the data for the files added to the ZipFile instance, + set the Password property after creating the ZipFile + instance. + + + + Instances of the ZipFile class are not multi-thread safe. You may + not party on a single instance with multiple threads. You may have + multiple threads that each use a distinct ZipFile instance, or you + can synchronize multi-thread access to a single instance. + + + + + + Thrown if fileName refers to an existing file that is not a valid zip file. + + + The filename to use for the new zip archive. + A TextWriter to use for writing verbose + status messages. + + The Encoding is used as the default alternate encoding for entries with + filenames or comments that cannot be encoded with the IBM437 code page. + + + + + Initialize a ZipFile instance by reading in a zip file. + + + + + + This method is primarily useful from COM Automation environments, when + reading or extracting zip files. In COM, it is not possible to invoke + parameterized constructors for a class. A COM Automation application can + update a zip file by using the default (no argument) + constructor, then calling Initialize() to read the contents + of an on-disk zip archive into the ZipFile instance. + + + + .NET applications are encouraged to use the ZipFile.Read() methods + for better clarity. + + + + the name of the existing zip file to read in. + + + + Removes the given ZipEntry from the zip archive. + + + + + After calling RemoveEntry, the application must call Save to + make the changes permanent. + + + + + Thrown if the specified ZipEntry does not exist in the ZipFile. + + + + In this example, all entries in the zip archive dating from before + December 31st, 2007, are removed from the archive. This is actually much + easier if you use the RemoveSelectedEntries method. But I needed an + example for RemoveEntry, so here it is. + + String ZipFileToRead = "ArchiveToModify.zip"; + System.DateTime Threshold = new System.DateTime(2007,12,31); + using (ZipFile zip = ZipFile.Read(ZipFileToRead)) + { + var EntriesToRemove = new System.Collections.Generic.List<ZipEntry>(); + foreach (ZipEntry e in zip) + { + if (e.LastModified < Threshold) + { + // We cannot remove the entry from the list, within the context of + // an enumeration of said list. + // So we add the doomed entry to a list to be removed later. + EntriesToRemove.Add(e); + } + } + + // actually remove the doomed entries. + foreach (ZipEntry zombie in EntriesToRemove) + zip.RemoveEntry(zombie); + + zip.Comment= String.Format("This zip archive was updated at {0}.", + System.DateTime.Now.ToString("G")); + + // save with a different name + zip.Save("Archive-Updated.zip"); + } + + + + Dim ZipFileToRead As String = "ArchiveToModify.zip" + Dim Threshold As New DateTime(2007, 12, 31) + Using zip As ZipFile = ZipFile.Read(ZipFileToRead) + Dim EntriesToRemove As New System.Collections.Generic.List(Of ZipEntry) + Dim e As ZipEntry + For Each e In zip + If (e.LastModified < Threshold) Then + ' We cannot remove the entry from the list, within the context of + ' an enumeration of said list. + ' So we add the doomed entry to a list to be removed later. + EntriesToRemove.Add(e) + End If + Next + + ' actually remove the doomed entries. + Dim zombie As ZipEntry + For Each zombie In EntriesToRemove + zip.RemoveEntry(zombie) + Next + zip.Comment = String.Format("This zip archive was updated at {0}.", DateTime.Now.ToString("G")) + 'save as a different name + zip.Save("Archive-Updated.zip") + End Using + + + + + The ZipEntry to remove from the zip. + + + + + + + + Removes the ZipEntry with the given filename from the zip archive. + + + + + After calling RemoveEntry, the application must call Save to + make the changes permanent. + + + + + + Thrown if the ZipFile is not updatable. + + + + Thrown if a ZipEntry with the specified filename does not exist in + the ZipFile. + + + + + This example shows one way to remove an entry with a given filename from + an existing zip archive. + + + String zipFileToRead= "PackedDocuments.zip"; + string candidate = "DatedMaterial.xps"; + using (ZipFile zip = ZipFile.Read(zipFileToRead)) + { + if (zip.EntryFilenames.Contains(candidate)) + { + zip.RemoveEntry(candidate); + zip.Comment= String.Format("The file '{0}' has been removed from this archive.", + Candidate); + zip.Save(); + } + } + + + Dim zipFileToRead As String = "PackedDocuments.zip" + Dim candidate As String = "DatedMaterial.xps" + Using zip As ZipFile = ZipFile.Read(zipFileToRead) + If zip.EntryFilenames.Contains(candidate) Then + zip.RemoveEntry(candidate) + zip.Comment = String.Format("The file '{0}' has been removed from this archive.", Candidate) + zip.Save + End If + End Using + + + + + The name of the file, including any directory path, to remove from the zip. + The filename match is not case-sensitive by default; you can use the + CaseSensitiveRetrieval property to change this behavior. The + pathname can use forward-slashes or backward slashes. + + + + + + Closes the read and write streams associated + to the ZipFile, if necessary. + + + + The Dispose() method is generally employed implicitly, via a using(..) {..} + statement. (Using...End Using in VB) If you do not employ a using + statement, insure that your application calls Dispose() explicitly. For + example, in a Powershell application, or an application that uses the COM + interop interface, you must call Dispose() explicitly. + + + + This example extracts an entry selected by name, from the Zip file to the + Console. + + using (ZipFile zip = ZipFile.Read(zipfile)) + { + foreach (ZipEntry e in zip) + { + if (WantThisEntry(e.FileName)) + zip.Extract(e.FileName, Console.OpenStandardOutput()); + } + } // Dispose() is called implicitly here. + + + + Using zip As ZipFile = ZipFile.Read(zipfile) + Dim e As ZipEntry + For Each e In zip + If WantThisEntry(e.FileName) Then + zip.Extract(e.FileName, Console.OpenStandardOutput()) + End If + Next + End Using ' Dispose is implicity called here + + + + + + Disposes any managed resources, if the flag is set, then marks the + instance disposed. This method is typically not called explicitly from + application code. + + + + Applications should call the no-arg Dispose method. + + + + indicates whether the method should dispose streams or not. + + + + + Default size of the buffer used for IO. + + + + + Extracts all of the items in the zip archive, to the specified path in the + filesystem. The path can be relative or fully-qualified. + + + + + This method will extract all entries in the ZipFile to the + specified path. + + + + If an extraction of a file from the zip archive would overwrite an + existing file in the filesystem, the action taken is dictated by the + ExtractExistingFile property, which overrides any setting you may have + made on individual ZipEntry instances. By default, if you have not + set that property on the ZipFile instance, the entry will not + be extracted, the existing file will not be overwritten and an + exception will be thrown. To change this, set the property, or use the + overload that allows you to + specify an ExtractExistingFileAction parameter. + + + + The action to take when an extract would overwrite an existing file + applies to all entries. If you want to set this on a per-entry basis, + then you must use one of the ZipEntry.Extract methods. + + + + This method will send verbose output messages to the , if it is set on the ZipFile + instance. + + + + You may wish to take advantage of the ExtractProgress event. + + + + About timestamps: When extracting a file entry from a zip archive, the + extracted file gets the last modified time of the entry as stored in + the archive. The archive may also store extended file timestamp + information, including last accessed and created times. If these are + present in the ZipEntry, then the extracted file will also get + these times. + + + + A Directory entry is somewhat different. It will get the times as + described for a file entry, but, if there are file entries in the zip + archive that, when extracted, appear in the just-created directory, + then when those file entries are extracted, the last modified and last + accessed times of the directory will change, as a side effect. The + result is that after an extraction of a directory and a number of + files within the directory, the last modified and last accessed + timestamps on the directory will reflect the time that the last file + was extracted into the directory, rather than the time stored in the + zip archive for the directory. + + + + To compensate, when extracting an archive with ExtractAll, + DotNetZip will extract all the file and directory entries as described + above, but it will then make a second pass on the directories, and + reset the times on the directories to reflect what is stored in the + zip archive. + + + + This compensation is performed only within the context of an + ExtractAll. If you call ZipEntry.Extract on a directory + entry, the timestamps on directory in the filesystem will reflect the + times stored in the zip. If you then call ZipEntry.Extract on + a file entry, which is extracted into the directory, the timestamps on + the directory will be updated to the current time. + + + + + This example extracts all the entries in a zip archive file, to the + specified target directory. The extraction will overwrite any + existing files silently. + + + String TargetDirectory= "unpack"; + using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) + { + zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently; + zip.ExtractAll(TargetDirectory); + } + + + + Dim TargetDirectory As String = "unpack" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + zip.ExtractExistingFile= ExtractExistingFileAction.OverwriteSilently + zip.ExtractAll(TargetDirectory) + End Using + + + + + + + + The path to which the contents of the zipfile will be extracted. + The path can be relative or fully-qualified. + + + + + + Extracts all of the items in the zip archive, to the specified path in the + filesystem, using the specified behavior when extraction would overwrite an + existing file. + + + + + + This method will extract all entries in the ZipFile to the specified + path. For an extraction that would overwrite an existing file, the behavior + is dictated by , which overrides any + setting you may have made on individual ZipEntry instances. + + + + The action to take when an extract would overwrite an existing file + applies to all entries. If you want to set this on a per-entry basis, + then you must use or one of the similar methods. + + + + Calling this method is equivalent to setting the property and then calling . + + + + This method will send verbose output messages to the + , if it is set on the ZipFile instance. + + + + + This example extracts all the entries in a zip archive file, to the + specified target directory. It does not overwrite any existing files. + + String TargetDirectory= "c:\\unpack"; + using(ZipFile zip= ZipFile.Read(ZipFileToExtract)) + { + zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite); + } + + + + Dim TargetDirectory As String = "c:\unpack" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + zip.ExtractAll(TargetDirectory, ExtractExistingFileAction.DontOverwrite) + End Using + + + + + The path to which the contents of the zipfile will be extracted. + The path can be relative or fully-qualified. + + + + The action to take if extraction would overwrite an existing file. + + + + + + Reads a zip file archive and returns the instance. + + + + + The stream is read using the default System.Text.Encoding, which is the + IBM437 codepage. + + + + + Thrown if the ZipFile cannot be read. The implementation of this method + relies on System.IO.File.OpenRead, which can throw a variety of exceptions, + including specific exceptions if a file is not found, an unauthorized access + exception, exceptions for poorly formatted filenames, and so on. + + + + The name of the zip archive to open. This can be a fully-qualified or relative + pathname. + + + . + + The instance read from the zip archive. + + + + + Reads a zip file archive from the named filesystem file using the + specified options. + + + + + This version of the Read() method allows the caller to pass + in a TextWriter an Encoding, via an instance of the + ReadOptions class. The ZipFile is read in using the + specified encoding for entries where UTF-8 encoding is not + explicitly specified. + + + + + + + This example shows how to read a zip file using the Big-5 Chinese + code page (950), and extract each entry in the zip file, while + sending status messages out to the Console. + + + + For this code to work as intended, the zipfile must have been + created using the big5 code page (CP950). This is typical, for + example, when using WinRar on a machine with CP950 set as the + default code page. In that case, the names of entries within the + Zip archive will be stored in that code page, and reading the zip + archive must be done using that code page. If the application did + not use the correct code page in ZipFile.Read(), then names of + entries within the zip archive would not be correctly retrieved. + + + + string zipToExtract = "MyArchive.zip"; + string extractDirectory = "extract"; + var options = new ReadOptions + { + StatusMessageWriter = System.Console.Out, + Encoding = System.Text.Encoding.GetEncoding(950) + }; + using (ZipFile zip = ZipFile.Read(zipToExtract, options)) + { + foreach (ZipEntry e in zip) + { + e.Extract(extractDirectory); + } + } + + + + + Dim zipToExtract as String = "MyArchive.zip" + Dim extractDirectory as String = "extract" + Dim options as New ReadOptions + options.Encoding = System.Text.Encoding.GetEncoding(950) + options.StatusMessageWriter = System.Console.Out + Using zip As ZipFile = ZipFile.Read(zipToExtract, options) + Dim e As ZipEntry + For Each e In zip + e.Extract(extractDirectory) + Next + End Using + + + + + + + + This example shows how to read a zip file using the default + code page, to remove entries that have a modified date before a given threshold, + sending status messages out to a StringWriter. + + + + var options = new ReadOptions + { + StatusMessageWriter = new System.IO.StringWriter() + }; + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip", options)) + { + var Threshold = new DateTime(2007,7,4); + // We cannot remove the entry from the list, within the context of + // an enumeration of said list. + // So we add the doomed entry to a list to be removed later. + // pass 1: mark the entries for removal + var MarkedEntries = new System.Collections.Generic.List<ZipEntry>(); + foreach (ZipEntry e in zip) + { + if (e.LastModified < Threshold) + MarkedEntries.Add(e); + } + // pass 2: actually remove the entry. + foreach (ZipEntry zombie in MarkedEntries) + zip.RemoveEntry(zombie); + zip.Comment = "This archive has been updated."; + zip.Save(); + } + // can now use contents of sw, eg store in an audit log + + + + Dim options as New ReadOptions + options.StatusMessageWriter = New System.IO.StringWriter + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip", options) + Dim Threshold As New DateTime(2007, 7, 4) + ' We cannot remove the entry from the list, within the context of + ' an enumeration of said list. + ' So we add the doomed entry to a list to be removed later. + ' pass 1: mark the entries for removal + Dim MarkedEntries As New System.Collections.Generic.List(Of ZipEntry) + Dim e As ZipEntry + For Each e In zip + If (e.LastModified < Threshold) Then + MarkedEntries.Add(e) + End If + Next + ' pass 2: actually remove the entry. + Dim zombie As ZipEntry + For Each zombie In MarkedEntries + zip.RemoveEntry(zombie) + Next + zip.Comment = "This archive has been updated." + zip.Save + End Using + ' can now use contents of sw, eg store in an audit log + + + + + Thrown if the zipfile cannot be read. The implementation of + this method relies on System.IO.File.OpenRead, which + can throw a variety of exceptions, including specific + exceptions if a file is not found, an unauthorized access + exception, exceptions for poorly formatted filenames, and so + on. + + + + The name of the zip archive to open. + This can be a fully-qualified or relative pathname. + + + + The set of options to use when reading the zip file. + + + The ZipFile instance read from the zip archive. + + + + + + + Reads a zip file archive using the specified text encoding, the specified + TextWriter for status messages, and the specified ReadProgress event handler, + and returns the instance. + + + + The name of the zip archive to open. + This can be a fully-qualified or relative pathname. + + + + An event handler for Read operations. + + + + The System.IO.TextWriter to use for writing verbose status messages + during operations on the zip archive. A console application may wish to + pass System.Console.Out to get messages on the Console. A graphical + or headless application may wish to capture the messages in a different + TextWriter, such as a System.IO.StringWriter. + + + + The System.Text.Encoding to use when reading in the zip archive. Be + careful specifying the encoding. If the value you use here is not the same + as the Encoding used when the zip archive was created (possibly by a + different archiver) you will get unexpected results and possibly exceptions. + + + The instance read from the zip archive. + + + + + Reads a zip archive from a stream. + + + + + + When reading from a file, it's probably easier to just use + ZipFile.Read(String, ReadOptions). This + overload is useful when when the zip archive content is + available from an already-open stream. The stream must be + open and readable and seekable when calling this method. The + stream is left open when the reading is completed. + + + + Using this overload, the stream is read using the default + System.Text.Encoding, which is the IBM437 + codepage. If you want to specify the encoding to use when + reading the zipfile content, see + ZipFile.Read(Stream, ReadOptions). This + + + + Reading of zip content begins at the current position in the + stream. This means if you have a stream that concatenates + regular data and zip data, if you position the open, readable + stream at the start of the zip data, you will be able to read + the zip archive using this constructor, or any of the ZipFile + constructors that accept a as + input. Some examples of where this might be useful: the zip + content is concatenated at the end of a regular EXE file, as + some self-extracting archives do. (Note: SFX files produced + by DotNetZip do not work this way; they can be read as normal + ZIP files). Another example might be a stream being read from + a database, where the zip content is embedded within an + aggregate stream of data. + + + + + + + This example shows how to Read zip content from a stream, and + extract one entry into a different stream. In this example, + the filename "NameOfEntryInArchive.doc", refers only to the + name of the entry within the zip archive. A file by that + name is not created in the filesystem. The I/O is done + strictly with the given streams. + + + + using (ZipFile zip = ZipFile.Read(InputStream)) + { + zip.Extract("NameOfEntryInArchive.doc", OutputStream); + } + + + + Using zip as ZipFile = ZipFile.Read(InputStream) + zip.Extract("NameOfEntryInArchive.doc", OutputStream) + End Using + + + + the stream containing the zip data. + + The ZipFile instance read from the stream + + + + + Reads a zip file archive from the given stream using the + specified options. + + + + + + When reading from a file, it's probably easier to just use + ZipFile.Read(String, ReadOptions). This + overload is useful when when the zip archive content is + available from an already-open stream. The stream must be + open and readable and seekable when calling this method. The + stream is left open when the reading is completed. + + + + Reading of zip content begins at the current position in the + stream. This means if you have a stream that concatenates + regular data and zip data, if you position the open, readable + stream at the start of the zip data, you will be able to read + the zip archive using this constructor, or any of the ZipFile + constructors that accept a as + input. Some examples of where this might be useful: the zip + content is concatenated at the end of a regular EXE file, as + some self-extracting archives do. (Note: SFX files produced + by DotNetZip do not work this way; they can be read as normal + ZIP files). Another example might be a stream being read from + a database, where the zip content is embedded within an + aggregate stream of data. + + + + the stream containing the zip data. + + + The set of options to use when reading the zip file. + + + + Thrown if the zip archive cannot be read. + + + The ZipFile instance read from the stream. + + + + + + + Reads a zip archive from a stream, using the specified text Encoding, the + specified TextWriter for status messages, + and the specified ReadProgress event handler. + + + + + Reading of zip content begins at the current position in the stream. This + means if you have a stream that concatenates regular data and zip data, if + you position the open, readable stream at the start of the zip data, you + will be able to read the zip archive using this constructor, or any of the + ZipFile constructors that accept a as + input. Some examples of where this might be useful: the zip content is + concatenated at the end of a regular EXE file, as some self-extracting + archives do. (Note: SFX files produced by DotNetZip do not work this + way). Another example might be a stream being read from a database, where + the zip content is embedded within an aggregate stream of data. + + + + the stream containing the zip data. + + + The System.IO.TextWriter to which verbose status messages are written + during operations on the ZipFile. For example, in a console + application, System.Console.Out works, and will get a message for each entry + added to the ZipFile. If the TextWriter is null, no verbose messages + are written. + + + + The text encoding to use when reading entries that do not have the UTF-8 + encoding bit set. Be careful specifying the encoding. If the value you use + here is not the same as the Encoding used when the zip archive was created + (possibly by a different archiver) you will get unexpected results and + possibly exceptions. See the + property for more information. + + + + An event handler for Read operations. + + + an instance of ZipFile + + + + Checks the given file to see if it appears to be a valid zip file. + + + + + Calling this method is equivalent to calling with the testExtract parameter set to false. + + + + The file to check. + true if the file appears to be a zip file. + + + + Checks a file to see if it is a valid zip file. + + + + + This method opens the specified zip file, reads in the zip archive, + verifying the ZIP metadata as it reads. + + + + If everything succeeds, then the method returns true. If anything fails - + for example if an incorrect signature or CRC is found, indicating a + corrupt file, the the method returns false. This method also returns + false for a file that does not exist. + + + + If is true, as part of its check, this + method reads in the content for each entry, expands it, and checks CRCs. + This provides an additional check beyond verifying the zip header and + directory data. + + + + If is true, and if any of the zip entries + are protected with a password, this method will return false. If you want + to verify a ZipFile that has entries which are protected with a + password, you will need to do that manually. + + + + + The zip file to check. + true if the caller wants to extract each entry. + true if the file contains a valid zip file. + + + + Checks a stream to see if it contains a valid zip archive. + + + + + This method reads the zip archive contained in the specified stream, verifying + the ZIP metadata as it reads. If testExtract is true, this method also extracts + each entry in the archive, dumping all the bits into . + + + + If everything succeeds, then the method returns true. If anything fails - + for example if an incorrect signature or CRC is found, indicating a corrupt + file, the the method returns false. This method also returns false for a + file that does not exist. + + + + If testExtract is true, this method reads in the content for each + entry, expands it, and checks CRCs. This provides an additional check + beyond verifying the zip header data. + + + + If testExtract is true, and if any of the zip entries are protected + with a password, this method will return false. If you want to verify a + ZipFile that has entries which are protected with a password, you will need + to do that manually. + + + + + + The stream to check. + true if the caller wants to extract each entry. + true if the stream contains a valid zip archive. + + + + Delete file with retry on UnauthorizedAccessException. + + + + + When calling File.Delete() on a file that has been "recently" + created, the call sometimes fails with + UnauthorizedAccessException. This method simply retries the Delete 3 + times with a sleep between tries. + + + + the name of the file to be deleted + + + + Saves the Zip archive to a file, specified by the Name property of the + ZipFile. + + + + + The ZipFile instance is written to storage, typically a zip file + in a filesystem, only when the caller calls Save. In the typical + case, the Save operation writes the zip content to a temporary file, and + then renames the temporary file to the desired name. If necessary, this + method will delete a pre-existing file before the rename. + + + + The property is specified either explicitly, + or implicitly using one of the parameterized ZipFile constructors. For + COM Automation clients, the Name property must be set explicitly, + because COM Automation clients cannot call parameterized constructors. + + + + When using a filesystem file for the Zip output, it is possible to call + Save multiple times on the ZipFile instance. With each + call the zip content is re-written to the same output file. + + + + Data for entries that have been added to the ZipFile instance is + written to the output when the Save method is called. This means + that the input streams for those entries must be available at the time + the application calls Save. If, for example, the application + adds entries with AddEntry using a dynamically-allocated + MemoryStream, the memory stream must not have been disposed + before the call to Save. See the property for more discussion of the + availability requirements of the input stream for an entry, and an + approach for providing just-in-time stream lifecycle management. + + + + + + + + Thrown if you haven't specified a location or stream for saving the zip, + either in the constructor or by setting the Name property, or if you try + to save a regular zip archive to a filename with a .exe extension. + + + + Thrown if is non-zero, and the number + of segments that would be generated for the spanned zip file during the + save operation exceeds 99. If this happens, you need to increase the + segment size. + + + + + + Save the file to a new zipfile, with the given name. + + + + + This method allows the application to explicitly specify the name of the zip + file when saving. Use this when creating a new zip file, or when + updating a zip archive. + + + + An application can also save a zip archive in several places by calling this + method multiple times in succession, with different filenames. + + + + The ZipFile instance is written to storage, typically a zip file in a + filesystem, only when the caller calls Save. The Save operation writes + the zip content to a temporary file, and then renames the temporary file + to the desired name. If necessary, this method will delete a pre-existing file + before the rename. + + + + + + Thrown if you specify a directory for the filename. + + + + The name of the zip archive to save to. Existing files will + be overwritten with great prejudice. + + + + This example shows how to create and Save a zip file. + + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(@"c:\reports\January"); + zip.Save("January.zip"); + } + + + + Using zip As New ZipFile() + zip.AddDirectory("c:\reports\January") + zip.Save("January.zip") + End Using + + + + + + This example shows how to update a zip file. + + using (ZipFile zip = ZipFile.Read("ExistingArchive.zip")) + { + zip.AddFile("NewData.csv"); + zip.Save("UpdatedArchive.zip"); + } + + + + Using zip As ZipFile = ZipFile.Read("ExistingArchive.zip") + zip.AddFile("NewData.csv") + zip.Save("UpdatedArchive.zip") + End Using + + + + + + + Save the zip archive to the specified stream. + + + + + The ZipFile instance is written to storage - typically a zip file + in a filesystem, but using this overload, the storage can be anything + accessible via a writable stream - only when the caller calls Save. + + + + Use this method to save the zip content to a stream directly. A common + scenario is an ASP.NET application that dynamically generates a zip file + and allows the browser to download it. The application can call + Save(Response.OutputStream) to write a zipfile directly to the + output stream, without creating a zip file on the disk on the ASP.NET + server. + + + + Be careful when saving a file to a non-seekable stream, including + Response.OutputStream. When DotNetZip writes to a non-seekable + stream, the zip archive is formatted in such a way that may not be + compatible with all zip tools on all platforms. It's a perfectly legal + and compliant zip file, but some people have reported problems opening + files produced this way using the Mac OS archive utility. + + + + + + + This example saves the zipfile content into a MemoryStream, and + then gets the array of bytes from that MemoryStream. + + + using (var zip = new Ionic.Zip.ZipFile()) + { + zip.CompressionLevel= Ionic.Zlib.CompressionLevel.BestCompression; + zip.Password = "VerySecret."; + zip.Encryption = EncryptionAlgorithm.WinZipAes128; + zip.AddFile(sourceFileName); + MemoryStream output = new MemoryStream(); + zip.Save(output); + + byte[] zipbytes = output.ToArray(); + } + + + + + + This example shows a pitfall you should avoid. DO NOT read + from a stream, then try to save to the same stream. DO + NOT DO THIS: + + + + using (var fs = new FileSteeam(filename, FileMode.Open)) + { + using (var zip = Ionic.Zip.ZipFile.Read(inputStream)) + { + zip.AddEntry("Name1.txt", "this is the content"); + zip.Save(inputStream); // NO NO NO!! + } + } + + + + Better like this: + + + + using (var zip = Ionic.Zip.ZipFile.Read(filename)) + { + zip.AddEntry("Name1.txt", "this is the content"); + zip.Save(); // YES! + } + + + + + + The System.IO.Stream to write to. It must be + writable. If you created the ZipFile instanct by calling + ZipFile.Read(), this stream must not be the same stream + you passed to ZipFile.Read(). + + + + + Saves the ZipFile instance to a self-extracting zip archive. + + + + + + The generated exe image will execute on any machine that has the .NET + Framework 2.0 installed on it. The generated exe image is also a + valid ZIP file, readable with DotNetZip or another Zip library or tool + such as WinZip. + + + + There are two "flavors" of self-extracting archive. The + WinFormsApplication version will pop up a GUI and allow the + user to select a target directory into which to extract. There's also + a checkbox allowing the user to specify to overwrite existing files, + and another checkbox to allow the user to request that Explorer be + opened to see the extracted files after extraction. The other flavor + is ConsoleApplication. A self-extractor generated with that + flavor setting will run from the command line. It accepts command-line + options to set the overwrite behavior, and to specify the target + extraction directory. + + + + There are a few temporary files created during the saving to a + self-extracting zip. These files are created in the directory pointed + to by , which defaults to . These temporary files are + removed upon successful completion of this method. + + + + When a user runs the WinForms SFX, the user's personal directory (Environment.SpecialFolder.Personal) + will be used as the default extract location. If you want to set the + default extract location, you should use the other overload of + SaveSelfExtractor()/ The user who runs the SFX will have the + opportunity to change the extract directory before extracting. When + the user runs the Command-Line SFX, the user must explicitly specify + the directory to which to extract. The .NET Framework 2.0 is required + on the computer when the self-extracting archive is run. + + + + NB: This method is not available in the version of DotNetZip build for + the .NET Compact Framework, nor in the "Reduced" DotNetZip library. + + + + + + + string DirectoryPath = "c:\\Documents\\Project7"; + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)); + zip.Comment = "This will be embedded into a self-extracting console-based exe"; + zip.SaveSelfExtractor("archive.exe", SelfExtractorFlavor.ConsoleApplication); + } + + + Dim DirectoryPath As String = "c:\Documents\Project7" + Using zip As New ZipFile() + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)) + zip.Comment = "This will be embedded into a self-extracting console-based exe" + zip.SaveSelfExtractor("archive.exe", SelfExtractorFlavor.ConsoleApplication) + End Using + + + + + a pathname, possibly fully qualified, to be created. Typically it + will end in an .exe extension. + + Indicates whether a Winforms or Console self-extractor is + desired. + + + + Saves the ZipFile instance to a self-extracting zip archive, using + the specified save options. + + + + + This method saves a self extracting archive, using the specified save + options. These options include the flavor of the SFX, the default extract + directory, the icon file, and so on. See the documentation + for for more + details. + + + + The user who runs the SFX will have the opportunity to change the extract + directory before extracting. If at the time of extraction, the specified + directory does not exist, the SFX will create the directory before + extracting the files. + + + + + + This example saves a WinForms-based self-extracting archive EXE that + will use c:\ExtractHere as the default extract location. The C# code + shows syntax for .NET 3.0, which uses an object initializer for + the SelfExtractorOptions object. + + string DirectoryPath = "c:\\Documents\\Project7"; + using (ZipFile zip = new ZipFile()) + { + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)); + zip.Comment = "This will be embedded into a self-extracting WinForms-based exe"; + var options = new SelfExtractorOptions + { + Flavor = SelfExtractorFlavor.WinFormsApplication, + DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere", + PostExtractCommandLine = ExeToRunAfterExtract, + SfxExeWindowTitle = "My Custom Window Title", + RemoveUnpackedFilesAfterExecute = true + }; + zip.SaveSelfExtractor("archive.exe", options); + } + + + Dim DirectoryPath As String = "c:\Documents\Project7" + Using zip As New ZipFile() + zip.AddDirectory(DirectoryPath, System.IO.Path.GetFileName(DirectoryPath)) + zip.Comment = "This will be embedded into a self-extracting console-based exe" + Dim options As New SelfExtractorOptions() + options.Flavor = SelfExtractorFlavor.WinFormsApplication + options.DefaultExtractDirectory = "%USERPROFILE%\\ExtractHere" + options.PostExtractCommandLine = ExeToRunAfterExtract + options.SfxExeWindowTitle = "My Custom Window Title" + options.RemoveUnpackedFilesAfterExecute = True + zip.SaveSelfExtractor("archive.exe", options) + End Using + + + + The name of the EXE to generate. + provides the options for creating the + Self-extracting archive. + + + + Adds to the ZipFile a set of files from the current working directory on + disk, that conform to the specified criteria. + + + + + This method selects files from the the current working directory matching + the specified criteria, and adds them to the ZipFile. + + + + Specify the criteria in statements of 3 elements: a noun, an operator, and + a value. Consider the string "name != *.doc" . The noun is "name". The + operator is "!=", implying "Not Equal". The value is "*.doc". That + criterion, in English, says "all files with a name that does not end in + the .doc extension." + + + + Supported nouns include "name" (or "filename") for the filename; "atime", + "mtime", and "ctime" for last access time, last modfied time, and created + time of the file, respectively; "attributes" (or "attrs") for the file + attributes; "size" (or "length") for the file length (uncompressed), and + "type" for the type of object, either a file or a directory. The + "attributes", "name" and "type" nouns both support = and != as operators. + The "size", "atime", "mtime", and "ctime" nouns support = and !=, and + >, >=, <, <= as well. The times are taken to be expressed in + local time. + + + + Specify values for the file attributes as a string with one or more of the + characters H,R,S,A,I,L in any order, implying file attributes of Hidden, + ReadOnly, System, Archive, NotContextIndexed, and ReparsePoint (symbolic + link) respectively. + + + + To specify a time, use YYYY-MM-DD-HH:mm:ss or YYYY/MM/DD-HH:mm:ss as the + format. If you omit the HH:mm:ss portion, it is assumed to be 00:00:00 + (midnight). + + + + The value for a size criterion is expressed in integer quantities of bytes, + kilobytes (use k or kb after the number), megabytes (m or mb), or gigabytes + (g or gb). + + + + The value for a name is a pattern to match against the filename, potentially + including wildcards. The pattern follows CMD.exe glob rules: * implies one + or more of any character, while ? implies one character. If the name + pattern contains any slashes, it is matched to the entire filename, + including the path; otherwise, it is matched against only the filename + without the path. This means a pattern of "*\*.*" matches all files one + directory level deep, while a pattern of "*.*" matches all files in all + directories. + + + + To specify a name pattern that includes spaces, use single quotes around the + pattern. A pattern of "'* *.*'" will match all files that have spaces in + the filename. The full criteria string for that would be "name = '* *.*'" . + + + + The value for a type criterion is either F (implying a file) or D (implying + a directory). + + + + Some examples: + + + + + criteria + Files retrieved + + + + name != *.xls + any file with an extension that is not .xls + + + + + name = *.mp3 + any file with a .mp3 extension. + + + + + *.mp3 + (same as above) any file with a .mp3 extension. + + + + + attributes = A + all files whose attributes include the Archive bit. + + + + + attributes != H + all files whose attributes do not include the Hidden bit. + + + + + mtime > 2009-01-01 + all files with a last modified time after January 1st, 2009. + + + + + size > 2gb + all files whose uncompressed size is greater than 2gb. + + + + + type = D + all directories in the filesystem. + + + + + + You can combine criteria with the conjunctions AND or OR. Using a string + like "name = *.txt AND size >= 100k" for the selectionCriteria retrieves + entries whose names end in .txt, and whose uncompressed size is greater than + or equal to 100 kilobytes. + + + + For more complex combinations of criteria, you can use parenthesis to group + clauses in the boolean logic. Without parenthesis, the precedence of the + criterion atoms is determined by order of appearance. Unlike the C# + language, the AND conjunction does not take precendence over the logical OR. + This is important only in strings that contain 3 or more criterion atoms. + In other words, "name = *.txt and size > 1000 or attributes = H" implies + "((name = *.txt AND size > 1000) OR attributes = H)" while "attributes = + H OR name = *.txt and size > 1000" evaluates to "((attributes = H OR name + = *.txt) AND size > 1000)". When in doubt, use parenthesis. + + + + Using time properties requires some extra care. If you want to retrieve all + entries that were last updated on 2009 February 14, specify a time range + like so:"mtime >= 2009-02-14 AND mtime < 2009-02-15". Read this to + say: all files updated after 12:00am on February 14th, until 12:00am on + February 15th. You can use the same bracketing approach to specify any time + period - a year, a month, a week, and so on. + + + + The syntax allows one special case: if you provide a string with no spaces, it is + treated as a pattern to match for the filename. Therefore a string like "*.xls" + will be equivalent to specifying "name = *.xls". + + + + There is no logic in this method that insures that the file inclusion + criteria are internally consistent. For example, it's possible to specify + criteria that says the file must have a size of less than 100 bytes, as well + as a size that is greater than 1000 bytes. Obviously no file will ever + satisfy such criteria, but this method does not detect such logical + inconsistencies. The caller is responsible for insuring the criteria are + sensible. + + + + Using this method, the file selection does not recurse into + subdirectories, and the full path of the selected files is included in the + entries added into the zip archive. If you don't like these behaviors, + see the other overloads of this method. + + + + + This example zips up all *.csv files in the current working directory. + + using (ZipFile zip = new ZipFile()) + { + // To just match on filename wildcards, + // use the shorthand form of the selectionCriteria string. + zip.AddSelectedFiles("*.csv"); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + zip.AddSelectedFiles("*.csv") + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + + Adds to the ZipFile a set of files from the disk that conform to the + specified criteria, optionally recursing into subdirectories. + + + + + This method selects files from the the current working directory matching + the specified criteria, and adds them to the ZipFile. If + recurseDirectories is true, files are also selected from + subdirectories, and the directory structure in the filesystem is + reproduced in the zip archive, rooted at the current working directory. + + + + Using this method, the full path of the selected files is included in the + entries added into the zip archive. If you don't want this behavior, use + one of the overloads of this method that allows the specification of a + directoryInArchive. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + + This example zips up all *.xml files in the current working directory, or any + subdirectory, that are larger than 1mb. + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", true) + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + If true, the file selection will recurse into subdirectories. + + + + + Adds to the ZipFile a set of files from a specified directory in the + filesystem, that conform to the specified criteria. + + + + + This method selects files that conform to the specified criteria, from the + the specified directory on disk, and adds them to the ZipFile. The search + does not recurse into subdirectores. + + + + Using this method, the full filesystem path of the files on disk is + reproduced on the entries added to the zip file. If you don't want this + behavior, use one of the other overloads of this method. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + + This example zips up all *.xml files larger than 1mb in the directory + given by "d:\rawdata". + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\\rawdata"); + zip.Save(PathToZipArchive); + } + + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.xml and size > 1024kb", "d:\rawdata) + zip.Save(PathToZipArchive) + End Using + + + + The criteria for file selection + + + The name of the directory on the disk from which to select files. + + + + + Adds to the ZipFile a set of files from the specified directory on disk, + that conform to the specified criteria. + + + + + + This method selects files from the the specified disk directory matching + the specified selection criteria, and adds them to the ZipFile. If + recurseDirectories is true, files are also selected from + subdirectories. + + + + The full directory structure in the filesystem is reproduced on the + entries added to the zip archive. If you don't want this behavior, use + one of the overloads of this method that allows the specification of a + directoryInArchive. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + + + This example zips up all *.csv files in the "files" directory, or any + subdirectory, that have been saved since 2009 February 14th. + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile() + ' Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.csv and mtime > 2009-02-14", "files", true) + zip.Save(PathToZipArchive) + End Using + + + + + This example zips up all files in the current working + directory, and all its child directories, except those in + the excludethis subdirectory. + + Using Zip As ZipFile = New ZipFile(zipfile) + Zip.AddSelectedFfiles("name != 'excludethis\*.*'", datapath, True) + Zip.Save() + End Using + + + + The criteria for file selection + + + The filesystem path from which to select files. + + + + If true, the file selection will recurse into subdirectories. + + + + + Adds to the ZipFile a selection of files from the specified directory on + disk, that conform to the specified criteria, and using a specified root + path for entries added to the zip archive. + + + + + This method selects files from the specified disk directory matching the + specified selection criteria, and adds those files to the ZipFile, using + the specified directory path in the archive. The search does not recurse + into subdirectories. For details on the syntax for the selectionCriteria + parameter, see . + + + + + + + This example zips up all *.psd files in the "photos" directory that have + been saved since 2009 February 14th, and puts them all in a zip file, + using the directory name of "content" in the zip archive itself. When the + zip archive is unzipped, the folder containing the .psd files will be + named "content". + + + using (ZipFile zip = new ZipFile()) + { + // Use a compound expression in the selectionCriteria string. + zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content"); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile + zip.AddSelectedFiles("name = *.psd and mtime > 2009-02-14", "photos", "content") + zip.Save(PathToZipArchive) + End Using + + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (nothing in VB) will use the path on the file name, if any; in other + words it would use directoryOnDisk, plus any subdirectory. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + + Adds to the ZipFile a selection of files from the specified directory on + disk, that conform to the specified criteria, optionally recursing through + subdirectories, and using a specified root path for entries added to the + zip archive. + + + + This method selects files from the specified disk directory that match the + specified selection criteria, and adds those files to the ZipFile, using + the specified directory path in the archive. If recurseDirectories + is true, files are also selected from subdirectories, and the directory + structure in the filesystem is reproduced in the zip archive, rooted at + the directory specified by directoryOnDisk. For details on the + syntax for the selectionCriteria parameter, see . + + + + + This example zips up all files that are NOT *.pst files, in the current + working directory and any subdirectories. + + + using (ZipFile zip = new ZipFile()) + { + zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true); + zip.Save(PathToZipArchive); + } + + + Using zip As ZipFile = New ZipFile + zip.AddSelectedFiles("name != *.pst", SourceDirectory, "backup", true) + zip.Save(PathToZipArchive) + End Using + + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a real + directory in the current filesystem. If the files within the zip are + later extracted, this is the path used for the extracted file. Passing + null (nothing in VB) will use the path on the file name, if any; in other + words it would use directoryOnDisk, plus any subdirectory. Passing + the empty string ("") will insert the item at the root path within the + archive. + + + + If true, the method also scans subdirectories for files matching the + criteria. + + + + + Updates the ZipFile with a selection of files from the disk that conform + to the specified criteria. + + + + This method selects files from the specified disk directory that match the + specified selection criteria, and Updates the ZipFile with those + files, using the specified directory path in the archive. If + recurseDirectories is true, files are also selected from + subdirectories, and the directory structure in the filesystem is + reproduced in the zip archive, rooted at the directory specified by + directoryOnDisk. For details on the syntax for the + selectionCriteria parameter, see . + + + + The criteria for selection of files to add to the ZipFile. + + + + The path to the directory in the filesystem from which to select files. + + + + Specifies a directory path to use to in place of the + directoryOnDisk. This path may, or may not, correspond to a + real directory in the current filesystem. If the files within the zip + are later extracted, this is the path used for the extracted file. + Passing null (nothing in VB) will use the path on the file name, if + any; in other words it would use directoryOnDisk, plus any + subdirectory. Passing the empty string ("") will insert the item at + the root path within the archive. + + + + If true, the method also scans subdirectories for files matching the criteria. + + + + + + + Retrieve entries from the zipfile by specified criteria. + + + + + This method allows callers to retrieve the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + This example selects all the PhotoShop files from within an archive, and extracts them + to the current working directory. + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + var PhotoShopFiles = zip1.SelectEntries("*.psd"); + foreach (ZipEntry psd in PhotoShopFiles) + { + psd.Extract(); + } + } + + + Using zip1 As ZipFile = ZipFile.Read(ZipFileName) + Dim PhotoShopFiles as ICollection(Of ZipEntry) + PhotoShopFiles = zip1.SelectEntries("*.psd") + Dim psd As ZipEntry + For Each psd In PhotoShopFiles + psd.Extract + Next + End Using + + + the string that specifies which entries to select + a collection of ZipEntry objects that conform to the inclusion spec + + + + Retrieve entries from the zipfile by specified criteria. + + + + + This method allows callers to retrieve the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + var UpdatedPhotoShopFiles = zip1.SelectEntries("*.psd", "UpdatedFiles"); + foreach (ZipEntry e in UpdatedPhotoShopFiles) + { + // prompt for extract here + if (WantExtract(e.FileName)) + e.Extract(); + } + } + + + Using zip1 As ZipFile = ZipFile.Read(ZipFileName) + Dim UpdatedPhotoShopFiles As ICollection(Of ZipEntry) = zip1.SelectEntries("*.psd", "UpdatedFiles") + Dim e As ZipEntry + For Each e In UpdatedPhotoShopFiles + ' prompt for extract here + If Me.WantExtract(e.FileName) Then + e.Extract + End If + Next + End Using + + + the string that specifies which entries to select + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + a collection of ZipEntry objects that conform to the inclusion spec + + + + Remove entries from the zipfile by specified criteria. + + + + + This method allows callers to remove the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + This example removes all entries in a zip file that were modified prior to January 1st, 2008. + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + // remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01"); + // don't forget to save the archive! + zip1.Save(); + } + + + Using zip As ZipFile = ZipFile.Read(ZipFileName) + ' remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01") + ' do not forget to save the archive! + zip1.Save + End Using + + + the string that specifies which entries to select + the number of entries removed + + + + Remove entries from the zipfile by specified criteria, and within the specified + path in the archive. + + + + + This method allows callers to remove the collection of entries from the zipfile + that fit the specified criteria. The criteria are described in a string format, and + can include patterns for the filename; constraints on the size of the entry; + constraints on the last modified, created, or last accessed time for the file + described by the entry; or the attributes of the entry. + + + + For details on the syntax for the selectionCriteria parameter, see . + + + + This method is intended for use with a ZipFile that has been read from storage. + When creating a new ZipFile, this method will work only after the ZipArchive has + been Saved to the disk (the ZipFile class subsequently and implicitly reads the Zip + archive from storage.) Calling SelectEntries on a ZipFile that has not yet been + saved will deliver undefined results. + + + + + Thrown if selectionCriteria has an invalid syntax. + + + + + using (ZipFile zip1 = ZipFile.Read(ZipFileName)) + { + // remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01", "documents"); + // a call to ZipFile.Save will make the modifications permanent + zip1.Save(); + } + + + Using zip As ZipFile = ZipFile.Read(ZipFileName) + ' remove all entries from prior to Jan 1, 2008 + zip1.RemoveEntries("mtime < 2008-01-01", "documents") + ' a call to ZipFile.Save will make the modifications permanent + zip1.Save + End Using + + + + the string that specifies which entries to select + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + the number of entries removed + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the current working directory. + + + + If any of the files to be extracted already exist, then the action taken is as + specified in the property on the + corresponding ZipEntry instance. By default, the action taken in this case is to + throw an exception. + + + + For information on the syntax of the selectionCriteria string, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15"); + } + + + the selection criteria for entries to extract. + + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the current working directory. When extraction would would + overwrite an existing filesystem file, the action taken is as specified in the + parameter. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009, + overwriting any existing files. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15", + ExtractExistingFileAction.OverwriteSilently); + } + + + + the selection criteria for entries to extract. + + + The action to take if extraction would overwrite an existing file. + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are selected from the specified directory within the archive, and then + extracted into the current working directory. + + + + If any of the files to be extracted already exist, then the action taken is as + specified in the property on the + corresponding ZipEntry instance. By default, the action taken in this case is to + throw an exception. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all XML files modified after 15 January 2009, + and writes them to the "unpack" directory. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml and mtime > 2009-01-15","unpack"); + } + + + + the selection criteria for entries to extract. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the specified directory. If any of the files to be + extracted already exist, an exception will be thrown. + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + the selection criteria for entries to extract. + + + the directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + the directory on the disk into which to extract. It will be created + if it does not exist. + + + + + Selects and Extracts a set of Entries from the ZipFile. + + + + + The entries are extracted into the specified directory. When extraction would would + overwrite an existing filesystem file, the action taken is as specified in the + parameter. + + + + For information on the syntax of the string describing the entry selection criteria, + see . + + + + + This example shows how extract all files with an XML extension or with a size larger than 100,000 bytes, + and puts them in the unpack directory. For any files that already exist in + that destination directory, they will not be overwritten. + + using (ZipFile zip = ZipFile.Read(zipArchiveName)) + { + zip.ExtractSelectedEntries("name = *.xml or size > 100000", + null, + "unpack", + ExtractExistingFileAction.DontOverwrite); + } + + + + the selection criteria for entries to extract. + + + The directory on the disk into which to extract. It will be created if it does not exist. + + + + The directory in the archive from which to select entries. If null, then + all directories in the archive are used. + + + + The action to take if extraction would overwrite an existing file. + + + + + + Generic IEnumerator support, for use of a ZipFile in an enumeration. + + + + You probably do not want to call GetEnumerator explicitly. Instead + it is implicitly called when you use a loop in C#, or a + For Each loop in VB.NET. + + + + This example reads a zipfile of a given name, then enumerates the + entries in that zip file, and displays the information about each + entry on the Console. + + using (ZipFile zip = ZipFile.Read(zipfile)) + { + bool header = true; + foreach (ZipEntry e in zip) + { + if (header) + { + System.Console.WriteLine("Zipfile: {0}", zip.Name); + System.Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded); + System.Console.WriteLine("BitField: 0x{0:X2}", e.BitField); + System.Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod); + System.Console.WriteLine("\n{1,-22} {2,-6} {3,4} {4,-8} {0}", + "Filename", "Modified", "Size", "Ratio", "Packed"); + System.Console.WriteLine(new System.String('-', 72)); + header = false; + } + + System.Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", + e.FileName, + e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), + e.UncompressedSize, + e.CompressionRatio, + e.CompressedSize); + + e.Extract(); + } + } + + + + Dim ZipFileToExtract As String = "c:\foo.zip" + Using zip As ZipFile = ZipFile.Read(ZipFileToExtract) + Dim header As Boolean = True + Dim e As ZipEntry + For Each e In zip + If header Then + Console.WriteLine("Zipfile: {0}", zip.Name) + Console.WriteLine("Version Needed: 0x{0:X2}", e.VersionNeeded) + Console.WriteLine("BitField: 0x{0:X2}", e.BitField) + Console.WriteLine("Compression Method: 0x{0:X2}", e.CompressionMethod) + Console.WriteLine(ChrW(10) & "{1,-22} {2,-6} {3,4} {4,-8} {0}", _ + "Filename", "Modified", "Size", "Ratio", "Packed" ) + Console.WriteLine(New String("-"c, 72)) + header = False + End If + Console.WriteLine("{1,-22} {2,-6} {3,4:F0}% {4,-8} {0}", _ + e.FileName, _ + e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), _ + e.UncompressedSize, _ + e.CompressionRatio, _ + e.CompressedSize ) + e.Extract + Next + End Using + + + + A generic enumerator suitable for use within a foreach loop. + + + + An IEnumerator, for use of a ZipFile in a foreach construct. + + + + This method is included for COM support. An application generally does not call + this method directly. It is called implicitly by COM clients when enumerating + the entries in the ZipFile instance. In VBScript, this is done with a For Each + statement. In Javascript, this is done with new Enumerator(zipfile). + + + + The IEnumerator over the entries in the ZipFile. + + + + + Provides a human-readable string with information about the ZipFile. + + + + + The information string contains 10 lines or so, about each ZipEntry, + describing whether encryption is in use, the compressed and uncompressed + length of the entry, the offset of the entry, and so on. As a result the + information string can be very long for zip files that contain many + entries. + + + This information is mostly useful for diagnostic purposes. + + + + + + Indicates whether to perform a full scan of the zip file when reading it. + + + + + + You almost never want to use this property. + + + + When reading a zip file, if this flag is true (True in + VB), the entire zip archive will be scanned and searched for entries. + For large archives, this can take a very, long time. The much more + efficient default behavior is to read the zip directory, which is + stored at the end of the zip file. But, in some cases the directory is + corrupted and you need to perform a full scan of the zip file to + determine the contents of the zip file. This property lets you do + that, when necessary. + + + + This flag is effective only when calling . Normally you would read a ZipFile with the + static ZipFile.Read + method. But you can't set the FullScan property on the + ZipFile instance when you use a static factory method like + ZipFile.Read. + + + + + + + This example shows how to read a zip file using the full scan approach, + and then save it, thereby producing a corrected zip file. + + + using (var zip = new ZipFile()) + { + zip.FullScan = true; + zip.Initialize(zipFileName); + zip.Save(newName); + } + + + + Using zip As New ZipFile + zip.FullScan = True + zip.Initialize(zipFileName) + zip.Save(newName) + End Using + + + + + + + Whether to sort the ZipEntries before saving the file. + + + + The default is false. If you have a large number of zip entries, the sort + alone can consume significant time. + + + + + using (var zip = new ZipFile()) + { + zip.AddFiles(filesToAdd); + zip.SortEntriesBeforeSaving = true; + zip.Save(name); + } + + + + Using zip As New ZipFile + zip.AddFiles(filesToAdd) + zip.SortEntriesBeforeSaving = True + zip.Save(name) + End Using + + + + + + + Indicates whether NTFS Reparse Points, like junctions, should be + traversed during calls to AddDirectory(). + + + + By default, calls to AddDirectory() will traverse NTFS reparse + points, like mounted volumes, and directory junctions. An example + of a junction is the "My Music" directory in Windows Vista. In some + cases you may not want DotNetZip to traverse those directories. In + that case, set this property to false. + + + + + using (var zip = new ZipFile()) + { + zip.AddDirectoryWillTraverseReparsePoints = false; + zip.AddDirectory(dirToZip,"fodder"); + zip.Save(zipFileToCreate); + } + + + + + + Size of the IO buffer used while saving. + + + + + + First, let me say that you really don't need to bother with this. It is + here to allow for optimizations that you probably won't make! It will work + fine if you don't set or get this property at all. Ok? + + + + Now that we have that out of the way, the fine print: This + property affects the size of the buffer that is used for I/O for each + entry contained in the zip file. When a file is read in to be compressed, + it uses a buffer given by the size here. When you update a zip file, the + data for unmodified entries is copied from the first zip file to the + other, through a buffer given by the size here. + + + + Changing the buffer size affects a few things: first, for larger buffer + sizes, the memory used by the ZipFile, obviously, will be larger + during I/O operations. This may make operations faster for very much + larger files. Last, for any given entry, when you use a larger buffer + there will be fewer progress events during I/O operations, because there's + one progress event generated for each time the buffer is filled and then + emptied. + + + + The default buffer size is 8k. Increasing the buffer size may speed + things up as you compress larger files. But there are no hard-and-fast + rules here, eh? You won't know til you test it. And there will be a + limit where ever larger buffers actually slow things down. So as I said + in the beginning, it's probably best if you don't set or get this property + at all. + + + + + + This example shows how you might set a large buffer size for efficiency when + dealing with zip entries that are larger than 1gb. + + using (ZipFile zip = new ZipFile()) + { + zip.SaveProgress += this.zip1_SaveProgress; + zip.AddDirectory(directoryToZip, ""); + zip.UseZip64WhenSaving = Zip64Option.Always; + zip.BufferSize = 65536*8; // 65536 * 8 = 512k + zip.Save(ZipFileToCreate); + } + + + + + + Size of the work buffer to use for the ZLIB codec during compression. + + + + + When doing ZLIB or Deflate compression, the library fills a buffer, + then passes it to the compressor for compression. Then the library + reads out the compressed bytes. This happens repeatedly until there + is no more uncompressed data to compress. This property sets the + size of the buffer that will be used for chunk-wise compression. In + order for the setting to take effect, your application needs to set + this property before calling one of the ZipFile.Save() + overloads. + + + Setting this affects the performance and memory efficiency of + compression and decompression. For larger files, setting this to a + larger size may improve compression performance, but the exact + numbers vary depending on available memory, the size of the streams + you are compressing, and a bunch of other variables. I don't have + good firm recommendations on how to set it. You'll have to test it + yourself. Or just leave it alone and accept the default. + + + + + + Indicates whether extracted files should keep their paths as + stored in the zip archive. + + + + + This property affects Extraction. It is not used when creating zip + archives. + + + + With this property set to false, the default, extracting entries + from a zip file will create files in the filesystem that have the full + path associated to the entry within the zip file. With this property set + to true, extracting entries from the zip file results in files + with no path: the folders are "flattened." + + + + An example: suppose the zip file contains entries /directory1/file1.txt and + /directory2/file2.txt. With FlattenFoldersOnExtract set to false, + the files created will be \directory1\file1.txt and \directory2\file2.txt. + With the property set to true, the files created are file1.txt and file2.txt. + + + + + + + The compression strategy to use for all entries. + + + + Set the Strategy used by the ZLIB-compatible compressor, when + compressing entries using the DEFLATE method. Different compression + strategies work better on different sorts of data. The strategy + parameter can affect the compression ratio and the speed of + compression but not the correctness of the compresssion. For more + information see Ionic.Zlib.CompressionStrategy. + + + + + The name of the ZipFile, on disk. + + + + + + When the ZipFile instance was created by reading an archive using + one of the ZipFile.Read methods, this property represents the name + of the zip file that was read. When the ZipFile instance was + created by using the no-argument constructor, this value is null + (Nothing in VB). + + + + If you use the no-argument constructor, and you then explicitly set this + property, when you call , this name will + specify the name of the zip file created. Doing so is equivalent to + calling . When instantiating a + ZipFile by reading from a stream or byte array, the Name + property remains null. When saving to a stream, the Name + property is implicitly set to null. + + + + + + Sets the compression level to be used for entries subsequently added to + the zip archive. + + + + + Varying the compression level used on entries can affect the + size-vs-speed tradeoff when compression and decompressing data streams + or files. + + + + As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile + instance will cause the specified CompressionLevel to be used on all + items that are subsequently added to the + ZipFile instance. If you set this property after you have added + items to the ZipFile, but before you have called Save(), + those items will not use the specified compression level. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + + + The compression method for the zipfile. + + + + By default, the compression method is CompressionMethod.Deflate. + + + + + + + A comment attached to the zip archive. + + + + + + This property is read/write. It allows the application to specify a + comment for the ZipFile, or read the comment for the + ZipFile. After setting this property, changes are only made + permanent when you call a Save() method. + + + + According to PKWARE's + zip specification, the comment is not encrypted, even if there is a + password set on the zip file. + + + + The specification does not describe how to indicate the encoding used + on a comment string. Many "compliant" zip tools and libraries use + IBM437 as the code page for comments; DotNetZip, too, follows that + practice. On the other hand, there are situations where you want a + Comment to be encoded with something else, for example using code page + 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the + comment following the same procedure it follows for encoding + filenames: (a) if is + Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the + alternate encoding (). (c) if is AsNecessary, it uses the + alternate encoding only if the default encoding is not sufficient for + encoding the comment - in other words if decoding the result does not + produce the original string. This decision is taken at the time of + the call to ZipFile.Save(). + + + + When creating a zip archive using this library, it is possible to change + the value of between each + entry you add, and between adding entries and the call to + Save(). Don't do this. It will likely result in a zip file that is + not readable by any tool or application. For best interoperability, leave + alone, or specify it only + once, before adding any entries to the ZipFile instance. + + + + + + + Specifies whether the Creation, Access, and Modified times for entries + added to the zip file will be emitted in “Windows format” + when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entries should or should not be stored + in the zip archive in the format used by Windows. By default this flag is + true, meaning the Windows-format times are stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are + automatically set from the filesystem values. When adding an entry from a + stream or string, all three values are implicitly set to + DateTime.Now. Applications can also explicitly set those times by + calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since January 1, 1601 UTC. The other is a format Unix applications typically + use: seconds since January 1, 1970 UTC. Each format can be stored in an + "extra field" in the zip entry when saving the zip archive. The former + uses an extra field with a Header Id of 0x000A, while the latter uses a + header ID of 0x5455, although you probably don't need to know that. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Some tools and libraries + may be able to read only one or the other. DotNetZip can read or write + times in either or both formats. + + + + The times stored are taken from , , and . + + + + The value set here applies to all entries subsequently added to the + ZipFile. + + + + This property is not mutually exclusive of the property. It is possible and + legal and valid to produce a zip file that contains timestamps encoded in + the Unix format as well as in the Windows format, in addition to the LastModified time attached to each + entry in the archive, a time that is always stored in "DOS format". And, + notwithstanding the names PKWare uses for these time formats, any of them + can be read and written by any computer, on any operating system. But, + there are no guarantees that a program running on Mac or Linux will + gracefully handle a zip file with "Windows" formatted times, or that an + application that does not use DotNetZip but runs on Windows will be able to + handle file times in Unix format. + + + + When in doubt, test. Sorry, I haven't got a complete list of tools and + which sort of timestamps they can use and will tolerate. If you get any + good information and would like to pass it on, please do so and I will + include that information in this documentation. + + + + + This example shows how to save a zip file that contains file timestamps + in a format normally used by Unix. + + using (var zip = new ZipFile()) + { + // produce a zip file the Mac will like + zip.EmitTimesInWindowsFormatWhenSaving = false; + zip.EmitTimesInUnixFormatWhenSaving = true; + zip.AddDirectory(directoryToZip, "files"); + zip.Save(outputFile); + } + + + + Using zip As New ZipFile + '' produce a zip file the Mac will like + zip.EmitTimesInWindowsFormatWhenSaving = False + zip.EmitTimesInUnixFormatWhenSaving = True + zip.AddDirectory(directoryToZip, "files") + zip.Save(outputFile) + End Using + + + + + + + + + Specifies whether the Creation, Access, and Modified times + for entries added to the zip file will be emitted in "Unix(tm) + format" when the zip archive is saved. + + + + + An application creating a zip archive can use this flag to explicitly + specify that the file times for the entries should or should not be stored + in the zip archive in the format used by Unix. By default this flag is + false, meaning the Unix-format times are not stored in the zip + archive. + + + + When adding an entry from a file or directory, the Creation (), Access (), and Modified () times for the given entry are + automatically set from the filesystem values. When adding an entry from a + stream or string, all three values are implicitly set to DateTime.Now. + Applications can also explicitly set those times by calling . + + + + PKWARE's + zip specification describes multiple ways to format these times in a + zip file. One is the format Windows applications normally use: 100ns ticks + since January 1, 1601 UTC. The other is a format Unix applications + typically use: seconds since January 1, 1970 UTC. Each format can be + stored in an "extra field" in the zip entry when saving the zip + archive. The former uses an extra field with a Header Id of 0x000A, while + the latter uses a header ID of 0x5455, although you probably don't need to + know that. + + + + Not all tools and libraries can interpret these fields. Windows + compressed folders is one that can read the Windows Format timestamps, + while I believe the Infozip + tools can read the Unix format timestamps. Some tools and libraries may be + able to read only one or the other. DotNetZip can read or write times in + either or both formats. + + + + The times stored are taken from , , and . + + + + This property is not mutually exclusive of the property. It is possible and + legal and valid to produce a zip file that contains timestamps encoded in + the Unix format as well as in the Windows format, in addition to the LastModified time attached to each + entry in the zip archive, a time that is always stored in "DOS + format". And, notwithstanding the names PKWare uses for these time + formats, any of them can be read and written by any computer, on any + operating system. But, there are no guarantees that a program running on + Mac or Linux will gracefully handle a zip file with "Windows" formatted + times, or that an application that does not use DotNetZip but runs on + Windows will be able to handle file times in Unix format. + + + + When in doubt, test. Sorry, I haven't got a complete list of tools and + which sort of timestamps they can use and will tolerate. If you get any + good information and would like to pass it on, please do so and I will + include that information in this documentation. + + + + + + + + + Indicates whether verbose output is sent to the during AddXxx() and + ReadXxx() operations. + + + + This is a synthetic property. It returns true if the is non-null. + + + + + Indicates whether to perform case-sensitive matching on the filename when + retrieving entries in the zipfile via the string-based indexer. + + + + The default value is false, which means don't do case-sensitive + matching. In other words, retrieving zip["ReadMe.Txt"] is the same as + zip["readme.txt"]. It really makes sense to set this to true only + if you are not running on Windows, which has case-insensitive + filenames. But since this library is not built for non-Windows platforms, + in most cases you should just leave this property alone. + + + + + Indicates whether to encode entry filenames and entry comments using Unicode + (UTF-8). + + + + + The + PKWare zip specification provides for encoding file names and file + comments in either the IBM437 code page, or in UTF-8. This flag selects + the encoding according to that specification. By default, this flag is + false, and filenames and comments are encoded into the zip file in the + IBM437 codepage. Setting this flag to true will specify that filenames + and comments that cannot be encoded with IBM437 will be encoded with + UTF-8. + + + + Zip files created with strict adherence to the PKWare specification with + respect to UTF-8 encoding can contain entries with filenames containing + any combination of Unicode characters, including the full range of + characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other + alphabets. However, because at this time, the UTF-8 portion of the PKWare + specification is not broadly supported by other zip libraries and + utilities, such zip files may not be readable by your favorite zip tool or + archiver. In other words, interoperability will decrease if you set this + flag to true. + + + + In particular, Zip files created with strict adherence to the PKWare + specification with respect to UTF-8 encoding will not work well with + Explorer in Windows XP or Windows Vista, because Windows compressed + folders, as far as I know, do not support UTF-8 in zip files. Vista can + read the zip files, but shows the filenames incorrectly. Unpacking from + Windows Vista Explorer will result in filenames that have rubbish + characters in place of the high-order UTF-8 bytes. + + + + Also, zip files that use UTF-8 encoding will not work well with Java + applications that use the java.util.zip classes, as of v5.0 of the Java + runtime. The Java runtime does not correctly implement the PKWare + specification in this regard. + + + + As a result, we have the unfortunate situation that "correct" behavior by + the DotNetZip library with regard to Unicode encoding of filenames during + zip creation will result in zip files that are readable by strictly + compliant and current tools (for example the most recent release of the + commercial WinZip tool); but these zip files will not be readable by + various other tools or libraries, including Windows Explorer. + + + + The DotNetZip library can read and write zip files with UTF8-encoded + entries, according to the PKware spec. If you use DotNetZip for both + creating and reading the zip file, and you use UTF-8, there will be no + loss of information in the filenames. For example, using a self-extractor + created by this library will allow you to unpack files correctly with no + loss of information in the filenames. + + + + If you do not set this flag, it will remain false. If this flag is false, + your ZipFile will encode all filenames and comments using the + IBM437 codepage. This can cause "loss of information" on some filenames, + but the resulting zipfile will be more interoperable with other + utilities. As an example of the loss of information, diacritics can be + lost. The o-tilde character will be down-coded to plain o. The c with a + cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. + Likewise, the O-stroke character (Unicode 248), used in Danish and + Norwegian, will be down-coded to plain o. Chinese characters cannot be + represented in codepage IBM437; when using the default encoding, Chinese + characters in filenames will be represented as ?. These are all examples + of "information loss". + + + + The loss of information associated to the use of the IBM437 encoding is + inconvenient, and can also lead to runtime errors. For example, using + IBM437, any sequence of 4 Chinese characters will be encoded as ????. If + your application creates a ZipFile, then adds two files, each with + names of four Chinese characters each, this will result in a duplicate + filename exception. In the case where you add a single file with a name + containing four Chinese characters, calling Extract() on the entry that + has question marks in the filename will result in an exception, because + the question mark is not legal for use within filenames on Windows. These + are just a few examples of the problems associated to loss of information. + + + + This flag is independent of the encoding of the content within the entries + in the zip file. Think of the zip file as a container - it supports an + encoding. Within the container are other "containers" - the file entries + themselves. The encoding within those entries is independent of the + encoding of the zip archive container for those entries. + + + + Rather than specify the encoding in a binary fashion using this flag, an + application can specify an arbitrary encoding via the property. Setting the encoding + explicitly when creating zip archives will result in non-compliant zip + files that, curiously, are fairly interoperable. The challenge is, the + PKWare specification does not provide for a way to specify that an entry + in a zip archive uses a code page that is neither IBM437 nor UTF-8. + Therefore if you set the encoding explicitly when creating a zip archive, + you must take care upon reading the zip archive to use the same code page. + If you get it wrong, the behavior is undefined and may result in incorrect + filenames, exceptions, stomach upset, hair loss, and acne. + + + + + + + Specify whether to use ZIP64 extensions when saving a zip archive. + + + + + + When creating a zip file, the default value for the property is . is + safest, in the sense that you will not get an Exception if a pre-ZIP64 + limit is exceeded. + + + + You may set the property at any time before calling Save(). + + + + When reading a zip file via the Zipfile.Read() method, DotNetZip + will properly read ZIP64-endowed zip archives, regardless of the value of + this property. DotNetZip will always read ZIP64 archives. This property + governs only whether DotNetZip will write them. Therefore, when updating + archives, be careful about setting this property after reading an archive + that may use ZIP64 extensions. + + + + An interesting question is, if you have set this property to + AsNecessary, and then successfully saved, does the resulting + archive use ZIP64 extensions or not? To learn this, check the property, after calling Save(). + + + + Have you thought about + donating? + + + + + + + + Indicates whether the archive requires ZIP64 extensions. + + + + + + This property is null (or Nothing in VB) if the archive has + not been saved, and there are fewer than 65334 ZipEntry items + contained in the archive. + + + + The Value is true if any of the following four conditions holds: + the uncompressed size of any entry is larger than 0xFFFFFFFF; the + compressed size of any entry is larger than 0xFFFFFFFF; the relative + offset of any entry within the zip archive is larger than 0xFFFFFFFF; or + there are more than 65534 entries in the archive. (0xFFFFFFFF = + 4,294,967,295). The result may not be known until a Save() is attempted + on the zip archive. The Value of this + property may be set only AFTER one of the Save() methods has been called. + + + + If none of the four conditions holds, and the archive has been saved, then + the Value is false. + + + + A Value of false does not indicate that the zip archive, as saved, + does not use ZIP64. It merely indicates that ZIP64 is not required. An + archive may use ZIP64 even when not required if the property is set to , or if the property is set to and the output stream was not + seekable. Use the property to determine if + the most recent Save() method resulted in an archive that utilized + the ZIP64 extensions. + + + + + + + + + Indicates whether the most recent Save() operation used ZIP64 extensions. + + + + + The use of ZIP64 extensions within an archive is not always necessary, and + for interoperability concerns, it may be desired to NOT use ZIP64 if + possible. The property can be + set to use ZIP64 extensions only when necessary. In those cases, + Sometimes applications want to know whether a Save() actually used ZIP64 + extensions. Applications can query this read-only property to learn + whether ZIP64 has been used in a just-saved ZipFile. + + + + The value is null (or Nothing in VB) if the archive has not + been saved. + + + + Non-null values (HasValue is true) indicate whether ZIP64 + extensions were used during the most recent Save() operation. The + ZIP64 extensions may have been used as required by any particular entry + because of its uncompressed or compressed size, or because the archive is + larger than 4294967295 bytes, or because there are more than 65534 entries + in the archive, or because the UseZip64WhenSaving property was set + to , or because the + UseZip64WhenSaving property was set to and the output stream was not seekable. + The value of this property does not indicate the reason the ZIP64 + extensions were used. + + + + + + + + + Indicates whether the most recent Read() operation read a zip file that uses + ZIP64 extensions. + + + + This property will return null (Nothing in VB) if you've added an entry after reading + the zip file. + + + + + The text encoding to use when writing new entries to the ZipFile, + for those entries that cannot be encoded with the default (IBM437) + encoding; or, the text encoding that was used when reading the entries + from the ZipFile. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to write zip archives that will be read by one of + these other archivers, set this property to specify the code page to use + when encoding the and for each ZipEntry in the zip file, for + values that cannot be encoded with the default codepage for zip files, + IBM437. This is why this property is "provisional". In all cases, IBM437 + is used where possible, in other words, where no loss of data would + result. It is possible, therefore, to have a given entry with a + Comment encoded in IBM437 and a FileName encoded with the + specified "provisional" codepage. + + + + Be aware that a zip file created after you've explicitly set the property to a value other than + IBM437 may not be compliant to the PKWare specification, and may not be + readable by compliant archivers. On the other hand, many (most?) + archivers are non-compliant and can read zip files created in arbitrary + code pages. The trick is to use or specify the proper codepage when + reading the zip. + + + + When creating a zip archive using this library, it is possible to change + the value of between each + entry you add, and between adding entries and the call to + Save(). Don't do this. It will likely result in a zipfile that is + not readable. For best interoperability, either leave alone, or specify it only once, + before adding any entries to the ZipFile instance. There is one + exception to this recommendation, described later. + + + + When using an arbitrary, non-UTF8 code page for encoding, there is no + standard way for the creator application - whether DotNetZip, WinZip, + WinRar, or something else - to formally specify in the zip file which + codepage has been used for the entries. As a result, readers of zip files + are not able to inspect the zip file and determine the codepage that was + used for the entries contained within it. It is left to the application + or user to determine the necessary codepage when reading zip files encoded + this way. In other words, if you explicitly specify the codepage when you + create the zipfile, you must explicitly specify the same codepage when + reading the zipfile. + + + + The way you specify the code page to use when reading a zip file varies + depending on the tool or library you use to read the zip. In DotNetZip, + you use a ZipFile.Read() method that accepts an encoding parameter. It + isn't possible with Windows Explorer, as far as I know, to specify an + explicit codepage to use when reading a zip. If you use an incorrect + codepage when reading a zipfile, you will get entries with filenames that + are incorrect, and the incorrect filenames may even contain characters + that are not legal for use within filenames in Windows. Extracting entries + with illegal characters in the filenames will lead to exceptions. It's too + bad, but this is just the way things are with code pages in zip + files. Caveat Emptor. + + + + Example: Suppose you create a zipfile that contains entries with + filenames that have Danish characters. If you use equal to "iso-8859-1" (cp 28591), + the filenames will be correctly encoded in the zip. But, to read that + zipfile correctly, you have to specify the same codepage at the time you + read it. If try to read that zip file with Windows Explorer or another + application that is not flexible with respect to the codepage used to + decode filenames in zipfiles, you will get a filename like "Inf°.txt". + + + + When using DotNetZip to read a zip archive, and the zip archive uses an + arbitrary code page, you must specify the encoding to use before or when + the Zipfile is READ. This means you must use a ZipFile.Read() + method that allows you to specify a System.Text.Encoding parameter. Setting + the ProvisionalAlternateEncoding property after your application has read in + the zip archive will not affect the entry names of entries that have already + been read in. + + + + And now, the exception to the rule described above. One strategy for + specifying the code page for a given zip file is to describe the code page + in a human-readable form in the Zip comment. For example, the comment may + read "Entries in this archive are encoded in the Big5 code page". For + maximum interoperability, the zip comment in this case should be encoded + in the default, IBM437 code page. In this case, the zip comment is + encoded using a different page than the filenames. To do this, Specify + ProvisionalAlternateEncoding to your desired region-specific code + page, once before adding any entries, and then reset + ProvisionalAlternateEncoding to IBM437 before setting the property and calling Save(). + + + + + This example shows how to read a zip file using the Big-5 Chinese code page + (950), and extract each entry in the zip file. For this code to work as + desired, the Zipfile must have been created using the big5 code page + (CP950). This is typical, for example, when using WinRar on a machine with + CP950 set as the default code page. In that case, the names of entries + within the Zip archive will be stored in that code page, and reading the zip + archive must be done using that code page. If the application did not use + the correct code page in ZipFile.Read(), then names of entries within the + zip archive would not be correctly retrieved. + + using (var zip = ZipFile.Read(zipFileName, System.Text.Encoding.GetEncoding("big5"))) + { + // retrieve and extract an entry using a name encoded with CP950 + zip[MyDesiredEntry].Extract("unpack"); + } + + + + Using zip As ZipFile = ZipFile.Read(ZipToExtract, System.Text.Encoding.GetEncoding("big5")) + ' retrieve and extract an entry using a name encoded with CP950 + zip(MyDesiredEntry).Extract("unpack") + End Using + + + + DefaultEncoding + + + + A Text Encoding to use when encoding the filenames and comments for + all the ZipEntry items, during a ZipFile.Save() operation. + + + + Whether the encoding specified here is used during the save depends + on . + + + + + + A flag that tells if and when this instance should apply + AlternateEncoding to encode the filenames and comments associated to + of ZipEntry objects contained within this instance. + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + Gets or sets the TextWriter to which status messages are delivered + for the instance. + + + + If the TextWriter is set to a non-null value, then verbose output is sent + to the TextWriter during Add, Read, Save and + Extract operations. Typically, console applications might use + Console.Out and graphical or headless applications might use a + System.IO.StringWriter. The output of this is suitable for viewing + by humans. + + + + + In this example, a console application instantiates a ZipFile, then + sets the StatusMessageTextWriter to Console.Out. At that + point, all verbose status messages for that ZipFile are sent to the + console. + + + + using (ZipFile zip= ZipFile.Read(FilePath)) + { + zip.StatusMessageTextWriter= System.Console.Out; + // messages are sent to the console during extraction + zip.ExtractAll(); + } + + + + Using zip As ZipFile = ZipFile.Read(FilePath) + zip.StatusMessageTextWriter= System.Console.Out + 'Status Messages will be sent to the console during extraction + zip.ExtractAll() + End Using + + + + In this example, a Windows Forms application instantiates a + ZipFile, then sets the StatusMessageTextWriter to a + StringWriter. At that point, all verbose status messages for that + ZipFile are sent to the StringWriter. + + + + var sw = new System.IO.StringWriter(); + using (ZipFile zip= ZipFile.Read(FilePath)) + { + zip.StatusMessageTextWriter= sw; + zip.ExtractAll(); + } + Console.WriteLine("{0}", sw.ToString()); + + + + Dim sw as New System.IO.StringWriter + Using zip As ZipFile = ZipFile.Read(FilePath) + zip.StatusMessageTextWriter= sw + zip.ExtractAll() + End Using + 'Status Messages are now available in sw + + + + + + + Gets or sets the name for the folder to store the temporary file + this library writes when saving a zip archive. + + + + + This library will create a temporary file when saving a Zip archive to a + file. This file is written when calling one of the Save() methods + that does not save to a stream, or one of the SaveSelfExtractor() + methods. + + + + By default, the library will create the temporary file in the directory + specified for the file itself, via the property or via + the method. + + + + Setting this property allows applications to override this default + behavior, so that the library will create the temporary file in the + specified folder. For example, to have the library create the temporary + file in the current working directory, regardless where the ZipFile + is saved, specfy ".". To revert to the default behavior, set this + property to null (Nothing in VB). + + + + When setting the property to a non-null value, the folder specified must + exist; if it does not an exception is thrown. The application should have + write and delete permissions on the folder. The permissions are not + explicitly checked ahead of time; if the application does not have the + appropriate rights, an exception will be thrown at the time Save() + is called. + + + + There is no temporary file created when reading a zip archive. When + saving to a Stream, there is no temporary file created. For example, if + the application is an ASP.NET application and calls Save() + specifying the Response.OutputStream as the output stream, there is + no temporary file created. + + + + + Thrown when setting the property if the directory does not exist. + + + + + + Sets the password to be used on the ZipFile instance. + + + + + + When writing a zip archive, this password is applied to the entries, not + to the zip archive itself. It applies to any ZipEntry subsequently + added to the ZipFile, using one of the AddFile, + AddDirectory, AddEntry, or AddItem methods, etc. + When reading a zip archive, this property applies to any entry + subsequently extracted from the ZipFile using one of the Extract + methods on the ZipFile class. + + + + When writing a zip archive, keep this in mind: though the password is set + on the ZipFile object, according to the Zip spec, the "directory" of the + archive - in other words the list of entries or files contained in the archive - is + not encrypted with the password, or protected in any way. If you set the + Password property, the password actually applies to individual entries + that are added to the archive, subsequent to the setting of this property. + The list of filenames in the archive that is eventually created will + appear in clear text, but the contents of the individual files are + encrypted. This is how Zip encryption works. + + + + One simple way around this limitation is to simply double-wrap sensitive + filenames: Store the files in a zip file, and then store that zip file + within a second, "outer" zip file. If you apply a password to the outer + zip file, then readers will be able to see that the outer zip file + contains an inner zip file. But readers will not be able to read the + directory or file list of the inner zip file. + + + + If you set the password on the ZipFile, and then add a set of files + to the archive, then each entry is encrypted with that password. You may + also want to change the password between adding different entries. If you + set the password, add an entry, then set the password to null + (Nothing in VB), and add another entry, the first entry is + encrypted and the second is not. If you call AddFile(), then set + the Password property, then call ZipFile.Save, the file + added will not be password-protected, and no warning will be generated. + + + + When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added + to the ZipFile. If you set the Password to a non-null value and do not + set , then PKZip 2.0 ("Weak") encryption is used. + This encryption is relatively weak but is very interoperable. If you set + the password to a null value (Nothing in VB), Encryption is + reset to None. + + + + All of the preceding applies to writing zip archives, in other words when + you use one of the Save methods. To use this property when reading or an + existing ZipFile, do the following: set the Password property on the + ZipFile, then call one of the Extract() overloads on the . In this case, the entry is extracted using the + Password that is specified on the ZipFile instance. If you + have not set the Password property, then the password is + null, and the entry is extracted with no password. + + + + If you set the Password property on the ZipFile, then call + Extract() an entry that has not been encrypted with a password, the + password is not used for that entry, and the ZipEntry is extracted + as normal. In other words, the password is used only if necessary. + + + + The class also has a Password property. It takes precedence + over this property on the ZipFile. Typically, you would use the + per-entry Password when most entries in the zip archive use one password, + and a few entries use a different password. If all entries in the zip + file use the same password, then it is simpler to just set this property + on the ZipFile itself, whether creating a zip archive or extracting + a zip archive. + + + + + + + This example creates a zip file, using password protection for the + entries, and then extracts the entries from the zip file. When creating + the zip file, the Readme.txt file is not protected with a password, but + the other two are password-protected as they are saved. During extraction, + each file is extracted with the appropriate password. + + + // create a file with encryption + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt"); + zip.Password= "!Secret1"; + zip.AddFile("MapToTheSite-7440-N49th.png"); + zip.AddFile("2008-Regional-Sales-Report.pdf"); + zip.Save("EncryptedArchive.zip"); + } + + // extract entries that use encryption + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + zip.Password= "!Secret1"; + zip.ExtractAll("extractDir"); + } + + + + + Using zip As New ZipFile + zip.AddFile("ReadMe.txt") + zip.Password = "123456!" + zip.AddFile("MapToTheSite-7440-N49th.png") + zip.Password= "!Secret1"; + zip.AddFile("2008-Regional-Sales-Report.pdf") + zip.Save("EncryptedArchive.zip") + End Using + + + ' extract entries that use encryption + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + zip.Password= "!Secret1" + zip.ExtractAll("extractDir") + End Using + + + + + + ZipFile.Encryption + ZipEntry.Password + + + + The action the library should take when extracting a file that already + exists. + + + + + This property affects the behavior of the Extract methods (one of the + Extract() or ExtractWithPassword() overloads), when + extraction would would overwrite an existing filesystem file. If you do + not set this property, the library throws an exception when extracting an + entry would overwrite an existing file. + + + + This property has no effect when extracting to a stream, or when the file + to be extracted does not already exist. + + + + + + + The action the library should take when an error is encountered while + opening or reading files as they are saved into a zip archive. + + + + + Errors can occur as a file is being saved to the zip archive. For + example, the File.Open may fail, or a File.Read may fail, because of + lock conflicts or other reasons. + + + + The first problem might occur after having called AddDirectory() on a + directory that contains a Clipper .dbf file; the file is locked by + Clipper and cannot be opened for read by another process. An example of + the second problem might occur when trying to zip a .pst file that is in + use by Microsoft Outlook. Outlook locks a range on the file, which allows + other processes to open the file, but not read it in its entirety. + + + + This property tells DotNetZip what you would like to do in the case of + these errors. The primary options are: ZipErrorAction.Throw to + throw an exception (this is the default behavior if you don't set this + property); ZipErrorAction.Skip to Skip the file for which there + was an error and continue saving; ZipErrorAction.Retry to Retry + the entry that caused the problem; or + ZipErrorAction.InvokeErrorEvent to invoke an event handler. + + + + This property is implicitly set to ZipErrorAction.InvokeErrorEvent + if you add a handler to the event. If you set + this property to something other than + ZipErrorAction.InvokeErrorEvent, then the ZipError + event is implicitly cleared. What it means is you can set one or the + other (or neither), depending on what you want, but you never need to set + both. + + + + As with some other properties on the ZipFile class, like , , and , setting this property on a ZipFile + instance will cause the specified ZipErrorAction to be used on all + items that are subsequently added to the + ZipFile instance. If you set this property after you have added + items to the ZipFile, but before you have called Save(), + those items will not use the specified error handling action. + + + + If you want to handle any errors that occur with any entry in the zip + file in the same way, then set this property once, before adding any + entries to the zip archive. + + + + If you set this property to ZipErrorAction.Skip and you'd like to + learn which files may have been skipped after a Save(), you can + set the on the ZipFile before + calling Save(). A message will be emitted into that writer for + each skipped file, if any. + + + + + + This example shows how to tell DotNetZip to skip any files for which an + error is generated during the Save(). + + Public Sub SaveZipFile() + Dim SourceFolder As String = "fodder" + Dim DestFile As String = "eHandler.zip" + Dim sw as New StringWriter + Using zipArchive As ZipFile = New ZipFile + ' Tell DotNetZip to skip any files for which it encounters an error + zipArchive.ZipErrorAction = ZipErrorAction.Skip + zipArchive.StatusMessageTextWriter = sw + zipArchive.AddDirectory(SourceFolder) + zipArchive.Save(DestFile) + End Using + ' examine sw here to see any messages + End Sub + + + + + + + + + + The Encryption to use for entries added to the ZipFile. + + + + + Set this when creating a zip archive, or when updating a zip archive. The + specified Encryption is applied to the entries subsequently added to the + ZipFile instance. Applications do not need to set the + Encryption property when reading or extracting a zip archive. + + + + If you set this to something other than EncryptionAlgorithm.None, you + will also need to set the . + + + + As with some other properties on the ZipFile class, like and , setting this + property on a ZipFile instance will cause the specified + EncryptionAlgorithm to be used on all items + that are subsequently added to the ZipFile instance. In other + words, if you set this property after you have added items to the + ZipFile, but before you have called Save(), those items will + not be encrypted or protected with a password in the resulting zip + archive. To get a zip archive with encrypted entries, set this property, + along with the property, before calling + AddFile, AddItem, or AddDirectory (etc.) on the + ZipFile instance. + + + + If you read a ZipFile, you can modify the Encryption on an + encrypted entry, only by setting the Encryption property on the + ZipEntry itself. Setting the Encryption property on the + ZipFile, once it has been created via a call to + ZipFile.Read(), does not affect entries that were previously read. + + + + For example, suppose you read a ZipFile, and there is an encrypted + entry. Setting the Encryption property on that ZipFile and + then calling Save() on the ZipFile does not update the + Encryption used for the entries in the archive. Neither is an + exception thrown. Instead, what happens during the Save() is that + all previously existing entries are copied through to the new zip archive, + with whatever encryption and password that was used when originally + creating the zip archive. Upon re-reading that archive, to extract + entries, applications should use the original password or passwords, if + any. + + + + Suppose an application reads a ZipFile, and there is an encrypted + entry. Setting the Encryption property on that ZipFile and + then adding new entries (via AddFile(), AddEntry(), etc) + and then calling Save() on the ZipFile does not update the + Encryption on any of the entries that had previously been in the + ZipFile. The Encryption property applies only to the + newly-added entries. + + + + + + + This example creates a zip archive that uses encryption, and then extracts + entries from the archive. When creating the zip archive, the ReadMe.txt + file is zipped without using a password or encryption. The other files + use encryption. + + + + // Create a zip archive with AES Encryption. + using (ZipFile zip = new ZipFile()) + { + zip.AddFile("ReadMe.txt"); + zip.Encryption= EncryptionAlgorithm.WinZipAes256; + zip.Password= "Top.Secret.No.Peeking!"; + zip.AddFile("7440-N49th.png"); + zip.AddFile("2008-Regional-Sales-Report.pdf"); + zip.Save("EncryptedArchive.zip"); + } + + // Extract a zip archive that uses AES Encryption. + // You do not need to specify the algorithm during extraction. + using (ZipFile zip = ZipFile.Read("EncryptedArchive.zip")) + { + zip.Password= "Top.Secret.No.Peeking!"; + zip.ExtractAll("extractDirectory"); + } + + + + ' Create a zip that uses Encryption. + Using zip As New ZipFile() + zip.Encryption= EncryptionAlgorithm.WinZipAes256 + zip.Password= "Top.Secret.No.Peeking!" + zip.AddFile("ReadMe.txt") + zip.AddFile("7440-N49th.png") + zip.AddFile("2008-Regional-Sales-Report.pdf") + zip.Save("EncryptedArchive.zip") + End Using + + ' Extract a zip archive that uses AES Encryption. + ' You do not need to specify the algorithm during extraction. + Using (zip as ZipFile = ZipFile.Read("EncryptedArchive.zip")) + zip.Password= "Top.Secret.No.Peeking!" + zip.ExtractAll("extractDirectory") + End Using + + + + + ZipFile.Password + ZipEntry.Encryption + + + + A callback that allows the application to specify the compression level + to use for entries subsequently added to the zip archive. + + + + + + With this callback, the DotNetZip library allows the application to + determine whether compression will be used, at the time of the + Save. This may be useful if the application wants to favor + speed over size, and wants to defer the decision until the time of + Save. + + + + Typically applications set the property on + the ZipFile or on each ZipEntry to determine the level of + compression used. This is done at the time the entry is added to the + ZipFile. Setting the property to + Ionic.Zlib.CompressionLevel.None means no compression will be used. + + + + This callback allows the application to defer the decision on the + CompressionLevel to use, until the time of the call to + ZipFile.Save(). The callback is invoked once per ZipEntry, + at the time the data for the entry is being written out as part of a + Save() operation. The application can use whatever criteria it + likes in determining the level to return. For example, an application may + wish that no .mp3 files should be compressed, because they are already + compressed and the extra compression is not worth the CPU time incurred, + and so can return None for all .mp3 entries. + + + + The library determines whether compression will be attempted for an entry + this way: If the entry is a zero length file, or a directory, no + compression is used. Otherwise, if this callback is set, it is invoked + and the CompressionLevel is set to the return value. If this + callback has not been set, then the previously set value for + CompressionLevel is used. + + + + + + + The maximum size of an output segment, when saving a split Zip file. + + + + Set this to a non-zero value before calling or to specify that the ZipFile should be saved as a + split archive, also sometimes called a spanned archive. Some also + call them multi-file archives. + + + + A split zip archive is saved in a set of discrete filesystem files, + rather than in a single file. This is handy when transmitting the + archive in email or some other mechanism that has a limit to the size of + each file. The first file in a split archive will be named + basename.z01, the second will be named basename.z02, and + so on. The final file is named basename.zip. According to the zip + specification from PKWare, the minimum value is 65536, for a 64k segment + size. The maximum number of segments allows in a split archive is 99. + + + + The value of this property determines the maximum size of a split + segment when writing a split archive. For example, suppose you have a + ZipFile that would save to a single file of 200k. If you set the + MaxOutputSegmentSize to 65536 before calling Save(), you + will get four distinct output files. On the other hand if you set this + property to 256k, then you will get a single-file archive for that + ZipFile. + + + + The size of each split output file will be as large as possible, up to + the maximum size set here. The zip specification requires that some data + fields in a zip archive may not span a split boundary, and an output + segment may be smaller than the maximum if necessary to avoid that + problem. Also, obviously the final segment of the archive may be smaller + than the maximum segment size. Segments will never be larger than the + value set with this property. + + + + You can save a split Zip file only when saving to a regular filesystem + file. It's not possible to save a split zip file as a self-extracting + archive, nor is it possible to save a split zip file to a stream. When + saving to a SFX or to a Stream, this property is ignored. + + + + About interoperability: Split or spanned zip files produced by DotNetZip + can be read by WinZip or PKZip, and vice-versa. Segmented zip files may + not be readable by other tools, if those other tools don't support zip + spanning or splitting. When in doubt, test. I don't believe Windows + Explorer can extract a split archive. + + + + This property has no effect when reading a split archive. You can read + a split archive in the normal way with DotNetZip. + + + + When saving a zip file, if you want a regular zip file rather than a + split zip file, don't set this property, or set it to Zero. + + + + If you read a split archive, with and + then subsequently call ZipFile.Save(), unless you set this + property before calling Save(), you will get a normal, + single-file archive. + + + + + + + + Returns the number of segments used in the most recent Save() operation. + + + + This is normally zero, unless you have set the property. If you have set , and then you save a file, after the call to + Save() completes, you can read this value to learn the number of segments that + were created. + + + If you call Save("Archive.zip"), and it creates 5 segments, then you + will have filesystem files named Archive.z01, Archive.z02, Archive.z03, + Archive.z04, and Archive.zip, and the value of this property will be 5. + + + + + + + The size threshold for an entry, above which a parallel deflate is used. + + + + + + DotNetZip will use multiple threads to compress any ZipEntry, + if the entry is larger than the given size. Zero means "always + use parallel deflate", while -1 means "never use parallel + deflate". The default value for this property is 512k. Aside + from the special values of 0 and 1, the minimum value is 65536. + + + + If the entry size cannot be known before compression, as with a + read-forward stream, then Parallel deflate will never be + performed, unless the value of this property is zero. + + + + A parallel deflate operations will speed up the compression of + large files, on computers with multiple CPUs or multiple CPU + cores. For files above 1mb, on a dual core or dual-cpu (2p) + machine, the time required to compress the file can be 70% of the + single-threaded deflate. For very large files on 4p machines the + compression can be done in 30% of the normal time. The downside + is that parallel deflate consumes extra memory during the deflate, + and the deflation is not as effective. + + + + Parallel deflate tends to yield slightly less compression when + compared to as single-threaded deflate; this is because the original + data stream is split into multiple independent buffers, each of which + is compressed in parallel. But because they are treated + independently, there is no opportunity to share compression + dictionaries. For that reason, a deflated stream may be slightly + larger when compressed using parallel deflate, as compared to a + traditional single-threaded deflate. Sometimes the increase over the + normal deflate is as much as 5% of the total compressed size. For + larger files it can be as small as 0.1%. + + + + Multi-threaded compression does not give as much an advantage when + using Encryption. This is primarily because encryption tends to slow + down the entire pipeline. Also, multi-threaded compression gives less + of an advantage when using lower compression levels, for example . You may have to + perform some tests to determine the best approach for your situation. + + + + + + + + + + The maximum number of buffer pairs to use when performing + parallel compression. + + + + + This property sets an upper limit on the number of memory + buffer pairs to create when performing parallel + compression. The implementation of the parallel + compression stream allocates multiple buffers to + facilitate parallel compression. As each buffer fills up, + the stream uses + ThreadPool.QueueUserWorkItem() to compress those + buffers in a background threadpool thread. After a buffer + is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time + before calling ZipFile.Save(). + + + + + + + + + Returns the version number on the DotNetZip assembly. + + + + + This property is exposed as a convenience. Callers could also get the + version value by retrieving GetName().Version on the + System.Reflection.Assembly object pointing to the DotNetZip + assembly. But sometimes it is not clear which assembly is being loaded. + This property makes it clear. + + + This static property is primarily useful for diagnostic purposes. + + + + + + This is an integer indexer into the Zip archive. + + + + + This property is read-only. + + + + Internally, the ZipEntry instances that belong to the + ZipFile are stored in a Dictionary. When you use this + indexer the first time, it creates a read-only + List<ZipEntry> from the Dictionary.Values Collection. + If at any time you modify the set of entries in the ZipFile, + either by adding an entry, removing an entry, or renaming an + entry, a new List will be created, and the numeric indexes for the + remaining entries may be different. + + + + This means you cannot rename any ZipEntry from + inside an enumeration of the zip file. + + + + The index value. + + + + + + The ZipEntry within the Zip archive at the specified index. If the + entry does not exist in the archive, this indexer throws. + + + + + + This is a name-based indexer into the Zip archive. + + + + + This property is read-only. + + + + The property on the ZipFile + determines whether retrieval via this indexer is done via case-sensitive + comparisons. By default, retrieval is not case sensitive. This makes + sense on Windows, in which filesystems are not case sensitive. + + + + Regardless of case-sensitivity, it is not always the case that + this[value].FileName == value. In other words, the FileName + property of the ZipEntry retrieved with this indexer, may or may + not be equal to the index value. + + + + This is because DotNetZip performs a normalization of filenames passed to + this indexer, before attempting to retrieve the item. That normalization + includes: removal of a volume letter and colon, swapping backward slashes + for forward slashes. So, zip["dir1\\entry1.txt"].FileName == + "dir1/entry.txt". + + + + Directory entries in the zip file may be retrieved via this indexer only + with names that have a trailing slash. DotNetZip automatically appends a + trailing slash to the names of any directory entries added to a zip. + + + + + + This example extracts only the entries in a zip file that are .txt files. + + using (ZipFile zip = ZipFile.Read("PackedDocuments.zip")) + { + foreach (string s1 in zip.EntryFilenames) + { + if (s1.EndsWith(".txt")) + zip[s1].Extract("textfiles"); + } + } + + + Using zip As ZipFile = ZipFile.Read("PackedDocuments.zip") + Dim s1 As String + For Each s1 In zip.EntryFilenames + If s1.EndsWith(".txt") Then + zip(s1).Extract("textfiles") + End If + Next + End Using + + + + + + Thrown if the caller attempts to assign a non-null value to the indexer. + + + + The name of the file, including any directory path, to retrieve from the + zip. The filename match is not case-sensitive by default; you can use the + property to change this behavior. The + pathname can use forward-slashes or backward slashes. + + + + The ZipEntry within the Zip archive, given by the specified + filename. If the named entry does not exist in the archive, this indexer + returns null (Nothing in VB). + + + + + + The list of filenames for the entries contained within the zip archive. + + + + According to the ZIP specification, the names of the entries use forward + slashes in pathnames. If you are scanning through the list, you may have + to swap forward slashes for backslashes. + + + + + + This example shows one way to test if a filename is already contained + within a zip archive. + + String zipFileToRead= "PackedDocuments.zip"; + string candidate = "DatedMaterial.xps"; + using (ZipFile zip = new ZipFile(zipFileToRead)) + { + if (zip.EntryFilenames.Contains(candidate)) + Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", + candidate, + zipFileName); + else + Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", + candidate, + zipFileName); + Console.WriteLine(); + } + + + Dim zipFileToRead As String = "PackedDocuments.zip" + Dim candidate As String = "DatedMaterial.xps" + Using zip As ZipFile.Read(ZipFileToRead) + If zip.EntryFilenames.Contains(candidate) Then + Console.WriteLine("The file '{0}' exists in the zip archive '{1}'", _ + candidate, _ + zipFileName) + Else + Console.WriteLine("The file, '{0}', does not exist in the zip archive '{1}'", _ + candidate, _ + zipFileName) + End If + Console.WriteLine + End Using + + + + + The list of strings for the filenames contained within the Zip archive. + + + + + + Returns the readonly collection of entries in the Zip archive. + + + + + + If there are no entries in the current ZipFile, the value returned is a + non-null zero-element collection. If there are entries in the zip file, + the elements are returned in no particular order. + + + This is the implied enumerator on the ZipFile class. If you use a + ZipFile instance in a context that expects an enumerator, you will + get this collection. + + + + + + + Returns a readonly collection of entries in the Zip archive, sorted by FileName. + + + + If there are no entries in the current ZipFile, the value returned + is a non-null zero-element collection. If there are entries in the zip + file, the elements are returned sorted by the name of the entry. + + + + + This example fills a Windows Forms ListView with the entries in a zip file. + + + using (ZipFile zip = ZipFile.Read(zipFile)) + { + foreach (ZipEntry entry in zip.EntriesSorted) + { + ListViewItem item = new ListViewItem(n.ToString()); + n++; + string[] subitems = new string[] { + entry.FileName.Replace("/","\\"), + entry.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), + entry.UncompressedSize.ToString(), + String.Format("{0,5:F0}%", entry.CompressionRatio), + entry.CompressedSize.ToString(), + (entry.UsesEncryption) ? "Y" : "N", + String.Format("{0:X8}", entry.Crc)}; + + foreach (String s in subitems) + { + ListViewItem.ListViewSubItem subitem = new ListViewItem.ListViewSubItem(); + subitem.Text = s; + item.SubItems.Add(subitem); + } + + this.listView1.Items.Add(item); + } + } + + + + + + + + Returns the number of entries in the Zip archive. + + + + + An event handler invoked when a Save() starts, before and after each + entry has been written to the archive, when a Save() completes, and + during other Save events. + + + + + Depending on the particular event, different properties on the parameter are set. The following + table summarizes the available EventTypes and the conditions under + which this event handler is invoked with a + SaveProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Saving_Started + Fired when ZipFile.Save() begins. + + + + + ZipProgressEventType.Saving_BeforeSaveEntry + + Fired within ZipFile.Save(), just before writing data for each + particular entry. + + + + + ZipProgressEventType.Saving_AfterSaveEntry + + Fired within ZipFile.Save(), just after having finished writing data + for each particular entry. + + + + + ZipProgressEventType.Saving_Completed + Fired when ZipFile.Save() has completed. + + + + + ZipProgressEventType.Saving_AfterSaveTempArchive + + Fired after the temporary file has been created. This happens only + when saving to a disk file. This event will not be invoked when + saving to a stream. + + + + + ZipProgressEventType.Saving_BeforeRenameTempArchive + + Fired just before renaming the temporary file to the permanent + location. This happens only when saving to a disk file. This event + will not be invoked when saving to a stream. + + + + + ZipProgressEventType.Saving_AfterRenameTempArchive + + Fired just after renaming the temporary file to the permanent + location. This happens only when saving to a disk file. This event + will not be invoked when saving to a stream. + + + + + ZipProgressEventType.Saving_AfterCompileSelfExtractor + + Fired after a self-extracting archive has finished compiling. This + EventType is used only within SaveSelfExtractor(). + + + + + ZipProgressEventType.Saving_BytesRead + + Set during the save of a particular entry, to update progress of the + Save(). When this EventType is set, the BytesTransferred is the + number of bytes that have been read from the source stream. The + TotalBytesToTransfer is the number of bytes in the uncompressed + file. + + + + + + + + + This example uses an anonymous method to handle the + SaveProgress event, by updating a progress bar. + + + progressBar1.Value = 0; + progressBar1.Max = listbox1.Items.Count; + using (ZipFile zip = new ZipFile()) + { + // listbox1 contains a list of filenames + zip.AddFiles(listbox1.Items); + + // do the progress bar: + zip.SaveProgress += (sender, e) => { + if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) { + progressBar1.PerformStep(); + } + }; + + zip.Save(fs); + } + + + + + This example uses a named method as the + SaveProgress event handler, to update the user, in a + console-based application. + + + static bool justHadByteUpdate= false; + public static void SaveProgress(object sender, SaveProgressEventArgs e) + { + if (e.EventType == ZipProgressEventType.Saving_Started) + Console.WriteLine("Saving: {0}", e.ArchiveName); + + else if (e.EventType == ZipProgressEventType.Saving_Completed) + { + justHadByteUpdate= false; + Console.WriteLine(); + Console.WriteLine("Done: {0}", e.ArchiveName); + } + + else if (e.EventType == ZipProgressEventType.Saving_BeforeWriteEntry) + { + if (justHadByteUpdate) + Console.WriteLine(); + Console.WriteLine(" Writing: {0} ({1}/{2})", + e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal); + justHadByteUpdate= false; + } + + else if (e.EventType == ZipProgressEventType.Saving_EntryBytesRead) + { + if (justHadByteUpdate) + Console.SetCursorPosition(0, Console.CursorTop); + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, + e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); + justHadByteUpdate= true; + } + } + + public static ZipUp(string targetZip, string directory) + { + using (var zip = new ZipFile()) { + zip.SaveProgress += SaveProgress; + zip.AddDirectory(directory); + zip.Save(targetZip); + } + } + + + + + Public Sub ZipUp(ByVal targetZip As String, ByVal directory As String) + Using zip As ZipFile = New ZipFile + AddHandler zip.SaveProgress, AddressOf MySaveProgress + zip.AddDirectory(directory) + zip.Save(targetZip) + End Using + End Sub + + Private Shared justHadByteUpdate As Boolean = False + + Public Shared Sub MySaveProgress(ByVal sender As Object, ByVal e As SaveProgressEventArgs) + If (e.EventType Is ZipProgressEventType.Saving_Started) Then + Console.WriteLine("Saving: {0}", e.ArchiveName) + + ElseIf (e.EventType Is ZipProgressEventType.Saving_Completed) Then + justHadByteUpdate = False + Console.WriteLine + Console.WriteLine("Done: {0}", e.ArchiveName) + + ElseIf (e.EventType Is ZipProgressEventType.Saving_BeforeWriteEntry) Then + If justHadByteUpdate Then + Console.WriteLine + End If + Console.WriteLine(" Writing: {0} ({1}/{2})", e.CurrentEntry.FileName, e.EntriesSaved, e.EntriesTotal) + justHadByteUpdate = False + + ElseIf (e.EventType Is ZipProgressEventType.Saving_EntryBytesRead) Then + If justHadByteUpdate Then + Console.SetCursorPosition(0, Console.CursorTop) + End If + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, _ + e.TotalBytesToTransfer, _ + (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) + justHadByteUpdate = True + End If + End Sub + + + + + + This is a more complete example of using the SaveProgress + events in a Windows Forms application, with a + Thread object. + + + delegate void SaveEntryProgress(SaveProgressEventArgs e); + delegate void ButtonClick(object sender, EventArgs e); + + public class WorkerOptions + { + public string ZipName; + public string Folder; + public string Encoding; + public string Comment; + public int ZipFlavor; + public Zip64Option Zip64; + } + + private int _progress2MaxFactor; + private bool _saveCanceled; + private long _totalBytesBeforeCompress; + private long _totalBytesAfterCompress; + private Thread _workerThread; + + + private void btnZipup_Click(object sender, EventArgs e) + { + KickoffZipup(); + } + + private void btnCancel_Click(object sender, EventArgs e) + { + if (this.lblStatus.InvokeRequired) + { + this.lblStatus.Invoke(new ButtonClick(this.btnCancel_Click), new object[] { sender, e }); + } + else + { + _saveCanceled = true; + lblStatus.Text = "Canceled..."; + ResetState(); + } + } + + private void KickoffZipup() + { + _folderName = tbDirName.Text; + + if (_folderName == null || _folderName == "") return; + if (this.tbZipName.Text == null || this.tbZipName.Text == "") return; + + // check for existence of the zip file: + if (System.IO.File.Exists(this.tbZipName.Text)) + { + var dlgResult = MessageBox.Show(String.Format("The file you have specified ({0}) already exists." + + " Do you want to overwrite this file?", this.tbZipName.Text), + "Confirmation is Required", MessageBoxButtons.YesNo, MessageBoxIcon.Question); + if (dlgResult != DialogResult.Yes) return; + System.IO.File.Delete(this.tbZipName.Text); + } + + _saveCanceled = false; + _nFilesCompleted = 0; + _totalBytesAfterCompress = 0; + _totalBytesBeforeCompress = 0; + this.btnOk.Enabled = false; + this.btnOk.Text = "Zipping..."; + this.btnCancel.Enabled = true; + lblStatus.Text = "Zipping..."; + + var options = new WorkerOptions + { + ZipName = this.tbZipName.Text, + Folder = _folderName, + Encoding = "ibm437" + }; + + if (this.comboBox1.SelectedIndex != 0) + { + options.Encoding = this.comboBox1.SelectedItem.ToString(); + } + + if (this.radioFlavorSfxCmd.Checked) + options.ZipFlavor = 2; + else if (this.radioFlavorSfxGui.Checked) + options.ZipFlavor = 1; + else options.ZipFlavor = 0; + + if (this.radioZip64AsNecessary.Checked) + options.Zip64 = Zip64Option.AsNecessary; + else if (this.radioZip64Always.Checked) + options.Zip64 = Zip64Option.Always; + else options.Zip64 = Zip64Option.Never; + + options.Comment = String.Format("Encoding:{0} || Flavor:{1} || ZIP64:{2}\r\nCreated at {3} || {4}\r\n", + options.Encoding, + FlavorToString(options.ZipFlavor), + options.Zip64.ToString(), + System.DateTime.Now.ToString("yyyy-MMM-dd HH:mm:ss"), + this.Text); + + if (this.tbComment.Text != TB_COMMENT_NOTE) + options.Comment += this.tbComment.Text; + + _workerThread = new Thread(this.DoSave); + _workerThread.Name = "Zip Saver thread"; + _workerThread.Start(options); + this.Cursor = Cursors.WaitCursor; + } + + + private void DoSave(Object p) + { + WorkerOptions options = p as WorkerOptions; + try + { + using (var zip1 = new ZipFile()) + { + zip1.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding(options.Encoding); + zip1.Comment = options.Comment; + zip1.AddDirectory(options.Folder); + _entriesToZip = zip1.EntryFileNames.Count; + SetProgressBars(); + zip1.SaveProgress += this.zip1_SaveProgress; + + zip1.UseZip64WhenSaving = options.Zip64; + + if (options.ZipFlavor == 1) + zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.WinFormsApplication); + else if (options.ZipFlavor == 2) + zip1.SaveSelfExtractor(options.ZipName, SelfExtractorFlavor.ConsoleApplication); + else + zip1.Save(options.ZipName); + } + } + catch (System.Exception exc1) + { + MessageBox.Show(String.Format("Exception while zipping: {0}", exc1.Message)); + btnCancel_Click(null, null); + } + } + + + + void zip1_SaveProgress(object sender, SaveProgressEventArgs e) + { + switch (e.EventType) + { + case ZipProgressEventType.Saving_AfterWriteEntry: + StepArchiveProgress(e); + break; + case ZipProgressEventType.Saving_EntryBytesRead: + StepEntryProgress(e); + break; + case ZipProgressEventType.Saving_Completed: + SaveCompleted(); + break; + case ZipProgressEventType.Saving_AfterSaveTempArchive: + // this event only occurs when saving an SFX file + TempArchiveSaved(); + break; + } + if (_saveCanceled) + e.Cancel = true; + } + + + + private void StepArchiveProgress(SaveProgressEventArgs e) + { + if (this.progressBar1.InvokeRequired) + { + this.progressBar1.Invoke(new SaveEntryProgress(this.StepArchiveProgress), new object[] { e }); + } + else + { + if (!_saveCanceled) + { + _nFilesCompleted++; + this.progressBar1.PerformStep(); + _totalBytesAfterCompress += e.CurrentEntry.CompressedSize; + _totalBytesBeforeCompress += e.CurrentEntry.UncompressedSize; + + // reset the progress bar for the entry: + this.progressBar2.Value = this.progressBar2.Maximum = 1; + + this.Update(); + } + } + } + + + private void StepEntryProgress(SaveProgressEventArgs e) + { + if (this.progressBar2.InvokeRequired) + { + this.progressBar2.Invoke(new SaveEntryProgress(this.StepEntryProgress), new object[] { e }); + } + else + { + if (!_saveCanceled) + { + if (this.progressBar2.Maximum == 1) + { + // reset + Int64 max = e.TotalBytesToTransfer; + _progress2MaxFactor = 0; + while (max > System.Int32.MaxValue) + { + max /= 2; + _progress2MaxFactor++; + } + this.progressBar2.Maximum = (int)max; + lblStatus.Text = String.Format("{0} of {1} files...({2})", + _nFilesCompleted + 1, _entriesToZip, e.CurrentEntry.FileName); + } + + int xferred = e.BytesTransferred >> _progress2MaxFactor; + + this.progressBar2.Value = (xferred >= this.progressBar2.Maximum) + ? this.progressBar2.Maximum + : xferred; + + this.Update(); + } + } + } + + private void SaveCompleted() + { + if (this.lblStatus.InvokeRequired) + { + this.lblStatus.Invoke(new MethodInvoker(this.SaveCompleted)); + } + else + { + lblStatus.Text = String.Format("Done, Compressed {0} files, {1:N0}% of original.", + _nFilesCompleted, (100.00 * _totalBytesAfterCompress) / _totalBytesBeforeCompress); + ResetState(); + } + } + + private void ResetState() + { + this.btnCancel.Enabled = false; + this.btnOk.Enabled = true; + this.btnOk.Text = "Zip it!"; + this.progressBar1.Value = 0; + this.progressBar2.Value = 0; + this.Cursor = Cursors.Default; + if (!_workerThread.IsAlive) + _workerThread.Join(); + } + + + + + + + + + + + An event handler invoked before, during, and after the reading of a zip archive. + + + + + Depending on the particular event being signaled, different properties on the + parameter are set. The following table + summarizes the available EventTypes and the conditions under which this + event handler is invoked with a ReadProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Reading_Started + Fired just as ZipFile.Read() begins. Meaningful properties: ArchiveName. + + + + + ZipProgressEventType.Reading_Completed + Fired when ZipFile.Read() has completed. Meaningful properties: ArchiveName. + + + + + ZipProgressEventType.Reading_ArchiveBytesRead + Fired while reading, updates the number of bytes read for the entire archive. + Meaningful properties: ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. + + + + + ZipProgressEventType.Reading_BeforeReadEntry + Indicates an entry is about to be read from the archive. + Meaningful properties: ArchiveName, EntriesTotal. + + + + + ZipProgressEventType.Reading_AfterReadEntry + Indicates an entry has just been read from the archive. + Meaningful properties: ArchiveName, EntriesTotal, CurrentEntry. + + + + + + + + + + + + + An event handler invoked before, during, and after extraction of + entries in the zip archive. + + + + + Depending on the particular event, different properties on the parameter are set. The following + table summarizes the available EventTypes and the conditions under + which this event handler is invoked with a + ExtractProgressEventArgs with the given EventType. + + + + + value of EntryType + Meaning and conditions + + + + ZipProgressEventType.Extracting_BeforeExtractAll + + Set when ExtractAll() begins. The ArchiveName, Overwrite, and + ExtractLocation properties are meaningful. + + + + ZipProgressEventType.Extracting_AfterExtractAll + + Set when ExtractAll() has completed. The ArchiveName, Overwrite, + and ExtractLocation properties are meaningful. + + + + + ZipProgressEventType.Extracting_BeforeExtractEntry + + Set when an Extract() on an entry in the ZipFile has begun. + Properties that are meaningful: ArchiveName, EntriesTotal, + CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. + + + + + ZipProgressEventType.Extracting_AfterExtractEntry + + Set when an Extract() on an entry in the ZipFile has completed. + Properties that are meaningful: ArchiveName, EntriesTotal, + CurrentEntry, Overwrite, ExtractLocation, EntriesExtracted. + + + + + ZipProgressEventType.Extracting_EntryBytesWritten + + Set within a call to Extract() on an entry in the ZipFile, as data + is extracted for the entry. Properties that are meaningful: + ArchiveName, CurrentEntry, BytesTransferred, TotalBytesToTransfer. + + + + + ZipProgressEventType.Extracting_ExtractEntryWouldOverwrite + + Set within a call to Extract() on an entry in the ZipFile, when the + extraction would overwrite an existing file. This event type is used + only when ExtractExistingFileAction on the ZipFile or + ZipEntry is set to InvokeExtractProgressEvent. + + + + + + + + + + private static bool justHadByteUpdate = false; + public static void ExtractProgress(object sender, ExtractProgressEventArgs e) + { + if(e.EventType == ZipProgressEventType.Extracting_EntryBytesWritten) + { + if (justHadByteUpdate) + Console.SetCursorPosition(0, Console.CursorTop); + + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, + e.BytesTransferred / (0.01 * e.TotalBytesToTransfer )); + justHadByteUpdate = true; + } + else if(e.EventType == ZipProgressEventType.Extracting_BeforeExtractEntry) + { + if (justHadByteUpdate) + Console.WriteLine(); + Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName); + justHadByteUpdate= false; + } + } + + public static ExtractZip(string zipToExtract, string directory) + { + string TargetDirectory= "extract"; + using (var zip = ZipFile.Read(zipToExtract)) { + zip.ExtractProgress += ExtractProgress; + foreach (var e in zip1) + { + e.Extract(TargetDirectory, true); + } + } + } + + + + Public Shared Sub Main(ByVal args As String()) + Dim ZipToUnpack As String = "C1P3SML.zip" + Dim TargetDir As String = "ExtractTest_Extract" + Console.WriteLine("Extracting file {0} to {1}", ZipToUnpack, TargetDir) + Using zip1 As ZipFile = ZipFile.Read(ZipToUnpack) + AddHandler zip1.ExtractProgress, AddressOf MyExtractProgress + Dim e As ZipEntry + For Each e In zip1 + e.Extract(TargetDir, True) + Next + End Using + End Sub + + Private Shared justHadByteUpdate As Boolean = False + + Public Shared Sub MyExtractProgress(ByVal sender As Object, ByVal e As ExtractProgressEventArgs) + If (e.EventType = ZipProgressEventType.Extracting_EntryBytesWritten) Then + If ExtractTest.justHadByteUpdate Then + Console.SetCursorPosition(0, Console.CursorTop) + End If + Console.Write(" {0}/{1} ({2:N0}%)", e.BytesTransferred, e.TotalBytesToTransfer, (CDbl(e.BytesTransferred) / (0.01 * e.TotalBytesToTransfer))) + ExtractTest.justHadByteUpdate = True + ElseIf (e.EventType = ZipProgressEventType.Extracting_BeforeExtractEntry) Then + If ExtractTest.justHadByteUpdate Then + Console.WriteLine + End If + Console.WriteLine("Extracting: {0}", e.CurrentEntry.FileName) + ExtractTest.justHadByteUpdate = False + End If + End Sub + + + + + + + + + + An event handler invoked before, during, and after Adding entries to a zip archive. + + + + Adding a large number of entries to a zip file can take a long + time. For example, when calling on a + directory that contains 50,000 files, it could take 3 minutes or so. + This event handler allws an application to track the progress of the Add + operation, and to optionally cancel a lengthy Add operation. + + + + + + int _numEntriesToAdd= 0; + int _numEntriesAdded= 0; + void AddProgressHandler(object sender, AddProgressEventArgs e) + { + switch (e.EventType) + { + case ZipProgressEventType.Adding_Started: + Console.WriteLine("Adding files to the zip..."); + break; + case ZipProgressEventType.Adding_AfterAddEntry: + _numEntriesAdded++; + Console.WriteLine(String.Format("Adding file {0}/{1} :: {2}", + _numEntriesAdded, _numEntriesToAdd, e.CurrentEntry.FileName)); + break; + case ZipProgressEventType.Adding_Completed: + Console.WriteLine("Added all files"); + break; + } + } + + void CreateTheZip() + { + using (ZipFile zip = new ZipFile()) + { + zip.AddProgress += AddProgressHandler; + zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)); + zip.Save(ZipFileToCreate); + } + } + + + + + + Private Sub AddProgressHandler(ByVal sender As Object, ByVal e As AddProgressEventArgs) + Select Case e.EventType + Case ZipProgressEventType.Adding_Started + Console.WriteLine("Adding files to the zip...") + Exit Select + Case ZipProgressEventType.Adding_AfterAddEntry + Console.WriteLine(String.Format("Adding file {0}", e.CurrentEntry.FileName)) + Exit Select + Case ZipProgressEventType.Adding_Completed + Console.WriteLine("Added all files") + Exit Select + End Select + End Sub + + Sub CreateTheZip() + Using zip as ZipFile = New ZipFile + AddHandler zip.AddProgress, AddressOf AddProgressHandler + zip.AddDirectory(System.IO.Path.GetFileName(DirToZip)) + zip.Save(ZipFileToCreate); + End Using + End Sub + + + + + + + + + + + + An event that is raised when an error occurs during open or read of files + while saving a zip archive. + + + + + Errors can occur as a file is being saved to the zip archive. For + example, the File.Open may fail, or a File.Read may fail, because of + lock conflicts or other reasons. If you add a handler to this event, + you can handle such errors in your own code. If you don't add a + handler, the library will throw an exception if it encounters an I/O + error during a call to Save(). + + + + Setting a handler implicitly sets to + ZipErrorAction.InvokeErrorEvent. + + + + The handler you add applies to all items that are + subsequently added to the ZipFile instance. If you set this + property after you have added items to the ZipFile, but before you + have called Save(), errors that occur while saving those items + will not cause the error handler to be invoked. + + + + If you want to handle any errors that occur with any entry in the zip + file using the same error handler, then add your error handler once, + before adding any entries to the zip archive. + + + + In the error handler method, you need to set the property on the + ZipErrorEventArgs.CurrentEntry. This communicates back to + DotNetZip what you would like to do with this particular error. Within + an error handler, if you set the ZipEntry.ZipErrorAction property + on the ZipEntry to ZipErrorAction.InvokeErrorEvent or if + you don't set it at all, the library will throw the exception. (It is the + same as if you had set the ZipEntry.ZipErrorAction property on the + ZipEntry to ZipErrorAction.Throw.) If you set the + ZipErrorEventArgs.Cancel to true, the entire Save() will be + canceled. + + + + In the case that you use ZipErrorAction.Skip, implying that + you want to skip the entry for which there's been an error, DotNetZip + tries to seek backwards in the output stream, and truncate all bytes + written on behalf of that particular entry. This works only if the + output stream is seekable. It will not work, for example, when using + ASPNET's Response.OutputStream. + + + + + + + This example shows how to use an event handler to handle + errors during save of the zip file. + + + public static void MyZipError(object sender, ZipErrorEventArgs e) + { + Console.WriteLine("Error saving {0}...", e.FileName); + Console.WriteLine(" Exception: {0}", e.exception); + ZipEntry entry = e.CurrentEntry; + string response = null; + // Ask the user whether he wants to skip this error or not + do + { + Console.Write("Retry, Skip, Throw, or Cancel ? (R/S/T/C) "); + response = Console.ReadLine(); + Console.WriteLine(); + + } while (response != null && + response[0]!='S' && response[0]!='s' && + response[0]!='R' && response[0]!='r' && + response[0]!='T' && response[0]!='t' && + response[0]!='C' && response[0]!='c'); + + e.Cancel = (response[0]=='C' || response[0]=='c'); + + if (response[0]=='S' || response[0]=='s') + entry.ZipErrorAction = ZipErrorAction.Skip; + else if (response[0]=='R' || response[0]=='r') + entry.ZipErrorAction = ZipErrorAction.Retry; + else if (response[0]=='T' || response[0]=='t') + entry.ZipErrorAction = ZipErrorAction.Throw; + } + + public void SaveTheFile() + { + string directoryToZip = "fodder"; + string directoryInArchive = "files"; + string zipFileToCreate = "Archive.zip"; + using (var zip = new ZipFile()) + { + // set the event handler before adding any entries + zip.ZipError += MyZipError; + zip.AddDirectory(directoryToZip, directoryInArchive); + zip.Save(zipFileToCreate); + } + } + + + + Private Sub MyZipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs) + ' At this point, the application could prompt the user for an action to take. + ' But in this case, this application will simply automatically skip the file, in case of error. + Console.WriteLine("Zip Error, entry {0}", e.CurrentEntry.FileName) + Console.WriteLine(" Exception: {0}", e.exception) + ' set the desired ZipErrorAction on the CurrentEntry to communicate that to DotNetZip + e.CurrentEntry.ZipErrorAction = Zip.ZipErrorAction.Skip + End Sub + + Public Sub SaveTheFile() + Dim directoryToZip As String = "fodder" + Dim directoryInArchive As String = "files" + Dim zipFileToCreate as String = "Archive.zip" + Using zipArchive As ZipFile = New ZipFile + ' set the event handler before adding any entries + AddHandler zipArchive.ZipError, AddressOf MyZipError + zipArchive.AddDirectory(directoryToZip, directoryInArchive) + zipArchive.Save(zipFileToCreate) + End Using + End Sub + + + + + + + + + Options for using ZIP64 extensions when saving zip archives. + + + + + + Designed many years ago, the original zip + specification from PKWARE allowed for 32-bit quantities for the + compressed and uncompressed sizes of zip entries, as well as a 32-bit quantity + for specifying the length of the zip archive itself, and a maximum of 65535 + entries. These limits are now regularly exceeded in many backup and archival + scenarios. Recently, PKWare added extensions to the original zip spec, called + "ZIP64 extensions", to raise those limitations. This property governs whether + DotNetZip will use those extensions when writing zip archives. The use of + these extensions is optional and explicit in DotNetZip because, despite the + status of ZIP64 as a bona fide standard, many other zip tools and libraries do + not support ZIP64, and therefore a zip file with ZIP64 extensions may be + unreadable by some of those other tools. + + + + Set this property to to always use ZIP64 + extensions when saving, regardless of whether your zip archive needs it. + Suppose you add 5 files, each under 100k, to a ZipFile. If you specify Always + for this flag, you will get a ZIP64 archive, though the archive does not need + to use ZIP64 because none of the original zip limits had been exceeded. + + + + Set this property to to tell the DotNetZip + library to never use ZIP64 extensions. This is useful for maximum + compatibility and interoperability, at the expense of the capability of + handling large files or large archives. NB: Windows Explorer in Windows XP + and Windows Vista cannot currently extract files from a zip64 archive, so if + you want to guarantee that a zip archive produced by this library will work in + Windows Explorer, use Never. If you set this property to , and your application creates a zip that would + exceed one of the Zip limits, the library will throw an exception while saving + the zip file. + + + + Set this property to to tell the + DotNetZip library to use the ZIP64 extensions when required by the + entry. After the file is compressed, the original and compressed sizes are + checked, and if they exceed the limits described above, then zip64 can be + used. That is the general idea, but there is an additional wrinkle when saving + to a non-seekable device, like the ASP.NET Response.OutputStream, or + Console.Out. When using non-seekable streams for output, the entry + header - which indicates whether zip64 is in use - is emitted before it is + known if zip64 is necessary. It is only after all entries have been saved + that it can be known if ZIP64 will be required. On seekable output streams, + after saving all entries, the library can seek backward and re-emit the zip + file header to be consistent with the actual ZIP64 requirement. But using a + non-seekable output stream, the library cannot seek backward, so the header + can never be changed. In other words, the archive's use of ZIP64 extensions is + not alterable after the header is emitted. Therefore, when saving to + non-seekable streams, using is the same + as using : it will always produce a zip + archive that uses ZIP64 extensions. + + + + + + + The default behavior, which is "Never". + (For COM clients, this is a 0 (zero).) + + + + + Do not use ZIP64 extensions when writing zip archives. + (For COM clients, this is a 0 (zero).) + + + + + Use ZIP64 extensions when writing zip archives, as necessary. + For example, when a single entry exceeds 0xFFFFFFFF in size, or when the archive as a whole + exceeds 0xFFFFFFFF in size, or when there are more than 65535 entries in an archive. + (For COM clients, this is a 1.) + + + + + Always use ZIP64 extensions when writing zip archives, even when unnecessary. + (For COM clients, this is a 2.) + + + + + An enum representing the values on a three-way toggle switch + for various options in the library. This might be used to + specify whether to employ a particular text encoding, or to use + ZIP64 extensions, or some other option. + + + + + The default behavior. This is the same as "Never". + (For COM clients, this is a 0 (zero).) + + + + + Never use the associated option. + (For COM clients, this is a 0 (zero).) + + + + + Use the associated behavior "as necessary." + (For COM clients, this is a 1.) + + + + + Use the associated behavior Always, whether necessary or not. + (For COM clients, this is a 2.) + + + + + A class for collecting the various options that can be used when + Reading zip files for extraction or update. + + + + + When reading a zip file, there are several options an + application can set, to modify how the file is read, or what + the library does while reading. This class collects those + options into one container. + + + + Pass an instance of the ReadOptions class into the + ZipFile.Read() method. + + + . + . + + + + + An event handler for Read operations. When opening large zip + archives, you may want to display a progress bar or other + indicator of status progress while reading. This parameter + allows you to specify a ReadProgress Event Handler directly. + When you call Read(), the progress event is invoked as + necessary. + + + + + The System.IO.TextWriter to use for writing verbose status messages + during operations on the zip archive. A console application may wish to + pass System.Console.Out to get messages on the Console. A graphical + or headless application may wish to capture the messages in a different + TextWriter, such as a System.IO.StringWriter. + + + + + The System.Text.Encoding to use when reading in the zip archive. Be + careful specifying the encoding. If the value you use here is not the same + as the Encoding used when the zip archive was created (possibly by a + different archiver) you will get unexpected results and possibly exceptions. + + + + + + + + An enum that provides the different self-extractor flavors + + + + + A self-extracting zip archive that runs from the console or + command line. + + + + + A self-extracting zip archive that presents a graphical user + interface when it is executed. + + + + + The options for generating a self-extracting archive. + + + + + The type of SFX to create. + + + + + The command to run after extraction. + + + + + This is optional. Leave it empty (null in C# or Nothing in + VB) to run no command after extraction. + + + + If it is non-empty, the SFX will execute the command specified in this + string on the user's machine, and using the extract directory as the + working directory for the process, after unpacking the archive. The + program to execute can include a path, if you like. If you want to execute + a program that accepts arguments, specify the program name, followed by a + space, and then the arguments for the program, each separated by a space, + just as you would on a normal command line. Example: program.exe arg1 + arg2. The string prior to the first space will be taken as the + program name, and the string following the first space specifies the + arguments to the program. + + + + If you want to execute a program that has a space in the name or path of + the file, surround the program name in double-quotes. The first character + of the command line should be a double-quote character, and there must be + a matching double-quote following the end of the program file name. Any + optional arguments to the program follow that, separated by + spaces. Example: "c:\project files\program name.exe" arg1 arg2. + + + + If the flavor of the SFX is SelfExtractorFlavor.ConsoleApplication, + then the SFX starts a new process, using this string as the post-extract + command line. The SFX waits for the process to exit. The exit code of + the post-extract command line is returned as the exit code of the + command-line self-extractor exe. A non-zero exit code is typically used to + indicated a failure by the program. In the case of an SFX, a non-zero exit + code may indicate a failure during extraction, OR, it may indicate a + failure of the run-after-extract program if specified, OR, it may indicate + the run-after-extract program could not be fuond. There is no way to + distinguish these conditions from the calling shell, aside from parsing + the output of the SFX. If you have Quiet set to true, you may not + see error messages, if a problem occurs. + + + + If the flavor of the SFX is + SelfExtractorFlavor.WinFormsApplication, then the SFX starts a new + process, using this string as the post-extract command line, and using the + extract directory as the working directory for the process. The SFX does + not wait for the command to complete, and does not check the exit code of + the program. If the run-after-extract program cannot be fuond, a message + box is displayed indicating that fact. + + + + You can specify environment variables within this string, with a format like + %NAME%. The value of these variables will be expanded at the time + the SFX is run. Example: %WINDIR%\system32\xcopy.exe may expand at + runtime to c:\Windows\System32\xcopy.exe. + + + + By combining this with the RemoveUnpackedFilesAfterExecute + flag, you can create an SFX that extracts itself, runs a file that + was extracted, then deletes all the files that were extracted. If + you want it to run "invisibly" then set Flavor to + SelfExtractorFlavor.ConsoleApplication, and set Quiet + to true. The user running such an EXE will see a console window + appear, then disappear quickly. You may also want to specify the + default extract location, with DefaultExtractDirectory. + + + + If you set Flavor to + SelfExtractorFlavor.WinFormsApplication, and set Quiet to + true, then a GUI with progressbars is displayed, but it is + "non-interactive" - it accepts no input from the user. Instead the SFX + just automatically unpacks and exits. + + + + + + + The default extract directory the user will see when + running the self-extracting archive. + + + + + Passing null (or Nothing in VB) here will cause the Self Extractor to use + the the user's personal directory () for the default extract + location. + + + + This is only a default location. The actual extract location will be + settable on the command line when the SFX is executed. + + + + You can specify environment variables within this string, + with %NAME%. The value of these variables will be + expanded at the time the SFX is run. Example: + %USERPROFILE%\Documents\unpack may expand at runtime to + c:\users\melvin\Documents\unpack. + + + + + + The name of an .ico file in the filesystem to use for the application icon + for the generated SFX. + + + + + Normally, DotNetZip will embed an "zipped folder" icon into the generated + SFX. If you prefer to use a different icon, you can specify it here. It + should be a .ico file. This file is passed as the /win32icon + option to the csc.exe compiler when constructing the SFX file. + + + + + + + Whether the ConsoleApplication SFX will be quiet during extraction. + + + + + This option affects the way the generated SFX runs. By default it is + false. When you set it to true,... + + + + + Flavor + Behavior + + + + ConsoleApplication + no messages will be emitted during successful + operation. Double-clicking the SFX in Windows + Explorer or as an attachment in an email will cause a console + window to appear briefly, before it disappears. If you run the + ConsoleApplication SFX from the cmd.exe prompt, it runs as a + normal console app; by default, because it is quiet, it displays + no messages to the console. If you pass the -v+ command line + argument to the Console SFX when you run it, you will get verbose + messages to the console. + + + + + WinFormsApplication + the SFX extracts automatically when the application + is launched, with no additional user input. + + + + + + + When you set it to false,... + + + + + Flavor + Behavior + + + + ConsoleApplication + the extractor will emit a + message to the console for each entry extracted. + + When double-clicking to launch the SFX, the console window will + remain, and the SFX will emit a message for each file as it + extracts. The messages fly by quickly, they won't be easily + readable, unless the extracted files are fairly large. + + + + + + WinFormsApplication + the SFX presents a forms UI and allows the user to select + options before extracting. + + + + + + + + + + Specify what the self-extractor will do when extracting an entry + would overwrite an existing file. + + + + The default behavvior is to Throw. + + + + + + Whether to remove the files that have been unpacked, after executing the + PostExtractCommandLine. + + + + + If true, and if there is a + PostExtractCommandLine, and if the command runs successfully, + then the files that the SFX unpacked will be removed, afterwards. If + the command does not complete successfully (non-zero return code), + that is interpreted as a failure, and the extracted files will not be + removed. + + + + Setting this flag, and setting Flavor to + SelfExtractorFlavor.ConsoleApplication, and setting Quiet to + true, results in an SFX that extracts itself, runs a file that was + extracted, then deletes all the files that were extracted, with no + intervention by the user. You may also want to specify the default + extract location, with DefaultExtractDirectory. + + + + + + + The file version number to embed into the generated EXE. It will show up, for + example, during a mouseover in Windows Explorer. + + + + + + The product version to embed into the generated EXE. It will show up, for + example, during a mouseover in Windows Explorer. + + + + You can use any arbitrary string, but a human-readable version number is + recommended. For example "v1.2 alpha" or "v4.2 RC2". If you specify nothing, + then there is no product version embedded into the EXE. + + + + + + The copyright notice, if any, to embed into the generated EXE. + + + + It will show up, for example, while viewing properties of the file in + Windows Explorer. You can use any arbitrary string, but typically you + want something like "Copyright © Dino Chiesa 2011". + + + + + + The description to embed into the generated EXE. + + + + Use any arbitrary string. This text will be displayed during a + mouseover in Windows Explorer. If you specify nothing, then the string + "DotNetZip SFX Archive" is embedded into the EXE as the description. + + + + + + The product name to embed into the generated EXE. + + + + Use any arbitrary string. This text will be displayed + while viewing properties of the EXE file in + Windows Explorer. + + + + + + The title to display in the Window of a GUI SFX, while it extracts. + + + + + By default the title show in the GUI window of a self-extractor + is "DotNetZip Self-extractor (http://DotNetZip.codeplex.com/)". + You can change that by setting this property before saving the SFX. + + + + This property has an effect only when producing a Self-extractor + of flavor SelfExtractorFlavor.WinFormsApplication. + + + + + + + Additional options for the csc.exe compiler, when producing the SFX + EXE. + + + + + + Provides a stream metaphor for reading zip files. + + + + + This class provides an alternative programming model for reading zip files to + the one enabled by the class. Use this when reading zip + files, as an alternative to the class, when you would + like to use a Stream class to read the file. + + + + Some application designs require a readable stream for input. This stream can + be used to read a zip file, and extract entries. + + + + Both the ZipInputStream class and the ZipFile class can be used + to read and extract zip files. Both of them support many of the common zip + features, including Unicode, different compression levels, and ZIP64. The + programming models differ. For example, when extracting entries via calls to + the GetNextEntry() and Read() methods on the + ZipInputStream class, the caller is responsible for creating the file, + writing the bytes into the file, setting the attributes on the file, and + setting the created, last modified, and last accessed timestamps on the + file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the + ZipInputStream is generally recommended for when your application wants + to extract the data, without storing that data into a file. + + + + Aside from the obvious differences in programming model, there are some + differences in capability between the ZipFile class and the + ZipInputStream class. + + + + + ZipFile can be used to create or update zip files, or read and + extract zip files. ZipInputStream can be used only to read and + extract zip files. If you want to use a stream to create zip files, check + out the . + + + + ZipInputStream cannot read segmented or spanned + zip files. + + + + ZipInputStream will not read Zip file comments. + + + + When reading larger files, ZipInputStream will always underperform + ZipFile. This is because the ZipInputStream does a full scan on the + zip file, while the ZipFile class reads the central directory of the + zip file. + + + + + + + + + Create a ZipInputStream, wrapping it around an existing stream. + + + + + + While the class is generally easier + to use, this class provides an alternative to those + applications that want to read from a zipfile directly, + using a . + + + + Both the ZipInputStream class and the ZipFile class can be used + to read and extract zip files. Both of them support many of the common zip + features, including Unicode, different compression levels, and ZIP64. The + programming models differ. For example, when extracting entries via calls to + the GetNextEntry() and Read() methods on the + ZipInputStream class, the caller is responsible for creating the file, + writing the bytes into the file, setting the attributes on the file, and + setting the created, last modified, and last accessed timestamps on the + file. All of these things are done automatically by a call to ZipEntry.Extract(). For this reason, the + ZipInputStream is generally recommended for when your application wants + to extract the data, without storing that data into a file. + + + + Aside from the obvious differences in programming model, there are some + differences in capability between the ZipFile class and the + ZipInputStream class. + + + + + ZipFile can be used to create or update zip files, or read and extract + zip files. ZipInputStream can be used only to read and extract zip + files. If you want to use a stream to create zip files, check out the . + + + + ZipInputStream cannot read segmented or spanned + zip files. + + + + ZipInputStream will not read Zip file comments. + + + + When reading larger files, ZipInputStream will always underperform + ZipFile. This is because the ZipInputStream does a full scan on the + zip file, while the ZipFile class reads the central directory of the + zip file. + + + + + + + + The stream to read. It must be readable. This stream will be closed at + the time the ZipInputStream is closed. + + + + + This example shows how to read a zip file, and extract entries, using the + ZipInputStream class. + + + private void Unzip() + { + byte[] buffer= new byte[2048]; + int n; + using (var raw = File.Open(inputFileName, FileMode.Open, FileAccess.Read)) + { + using (var input= new ZipInputStream(raw)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + if (e.IsDirectory) continue; + string outputPath = Path.Combine(extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + } + + + + Private Sub UnZip() + Dim inputFileName As String = "MyArchive.zip" + Dim extractDir As String = "extract" + Dim buffer As Byte() = New Byte(2048) {} + Using raw As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read) + Using input As ZipInputStream = New ZipInputStream(raw) + Dim e As ZipEntry + Do While (Not e = input.GetNextEntry Is Nothing) + If Not e.IsDirectory Then + Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ + FileMode.Create, FileAccess.ReadWrite) + Dim n As Integer + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + End If + Loop + End Using + End Using + End Sub + + + + + + Create a ZipInputStream, given the name of an existing zip file. + + + + + + This constructor opens a FileStream for the given zipfile, and + wraps a ZipInputStream around that. See the documentation for the + constructor for full details. + + + + While the class is generally easier + to use, this class provides an alternative to those + applications that want to read from a zipfile directly, + using a . + + + + + + The name of the filesystem file to read. + + + + + This example shows how to read a zip file, and extract entries, using the + ZipInputStream class. + + + private void Unzip() + { + byte[] buffer= new byte[2048]; + int n; + using (var input= new ZipInputStream(inputFileName)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + if (e.IsDirectory) continue; + string outputPath = Path.Combine(extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + Private Sub UnZip() + Dim inputFileName As String = "MyArchive.zip" + Dim extractDir As String = "extract" + Dim buffer As Byte() = New Byte(2048) {} + Using input As ZipInputStream = New ZipInputStream(inputFileName) + Dim e As ZipEntry + Do While (Not e = input.GetNextEntry Is Nothing) + If Not e.IsDirectory Then + Using output As FileStream = File.Open(Path.Combine(extractDir, e.FileName), _ + FileMode.Create, FileAccess.ReadWrite) + Dim n As Integer + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + End If + Loop + End Using + End Sub + + + + + + Create a ZipInputStream, explicitly specifying whether to + keep the underlying stream open. + + + + See the documentation for the ZipInputStream(Stream) + constructor for a discussion of the class, and an example of how to use the class. + + + + The stream to read from. It must be readable. + + + + true if the application would like the stream + to remain open after the ZipInputStream has been closed. + + + + Provides a string representation of the instance. + + + This can be useful for debugging purposes. + + + a string representation of the instance. + + + + Read the data from the stream into the buffer. + + + + + The data for the zipentry will be decrypted and uncompressed, as + necessary, before being copied into the buffer. + + + + You must set the property before calling + Read() the first time for an encrypted entry. To determine if an + entry is encrypted and requires a password, check the ZipEntry.Encryption property. + + + + The buffer to hold the data read from the stream. + the offset within the buffer to copy the first byte read. + the number of bytes to read. + the number of bytes read, after decryption and decompression. + + + + Read the next entry from the zip file. + + + + + Call this method just before calling , + to position the pointer in the zip file to the next entry that can be + read. Subsequent calls to Read(), will decrypt and decompress the + data in the zip file, until Read() returns 0. + + + + Each time you call GetNextEntry(), the pointer in the wrapped + stream is moved to the next entry in the zip file. If you call , and thus re-position the pointer within + the file, you will need to call GetNextEntry() again, to insure + that the file pointer is positioned at the beginning of a zip entry. + + + + This method returns the ZipEntry. Using a stream approach, you will + read the raw bytes for an entry in a zip file via calls to Read(). + Alternatively, you can extract an entry into a file, or a stream, by + calling , or one of its siblings. + + + + + + The ZipEntry read. Returns null (or Nothing in VB) if there are no more + entries in the zip file. + + + + + + Dispose the stream. + + + + + This method disposes the ZipInputStream. It may also close the + underlying stream, depending on which constructor was used. + + + + Typically the application will call Dispose() implicitly, via + a using statement in C#, or a Using statement in VB. + + + + Application code won't call this code directly. This method may + be invoked in two distinct scenarios. If disposing == true, the + method has been called directly or indirectly by a user's code, + for example via the public Dispose() method. In this case, both + managed and unmanaged resources can be referenced and disposed. + If disposing == false, the method has been called by the runtime + from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources + must be referenced or disposed. + + + + + true if the Dispose method was invoked by user code. + + + + + This is a no-op. + + + + + This method always throws a NotSupportedException. + + ignored + ignored + ignored + + + + This method seeks in the underlying stream. + + + + + Call this method if you want to seek around within the zip file for random access. + + + + Applications can intermix calls to Seek() with calls to . After a call to Seek(), + GetNextEntry() will get the next ZipEntry that falls after + the current position in the input stream. You're on your own for finding + out just where to seek in the stream, to get to the various entries. + + + + + the offset point to seek to + the reference point from which to seek + The new position + + + + This method always throws a NotSupportedException. + + ignored + + + + The text encoding to use when reading entries into the zip archive, for + those entries whose filenames or comments cannot be encoded with the + default (IBM437) encoding. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to read zip archives that use something other than + UTF-8 or IBM437, set this property to specify the code page to use when + reading encoded filenames and comments for each ZipEntry in the zip + file. + + + + This property is "provisional". When the entry in the zip archive is not + explicitly marked as using UTF-8, then IBM437 is used to decode filenames + and comments. If a loss of data would result from using IBM436 - + specifically when encoding and decoding is not reflexive - the codepage + specified here is used. It is possible, therefore, to have a given entry + with a Comment encoded in IBM437 and a FileName encoded with + the specified "provisional" codepage. + + + + When a zip file uses an arbitrary, non-UTF8 code page for encoding, there + is no standard way for the reader application - whether DotNetZip, WinZip, + WinRar, or something else - to know which codepage has been used for the + entries. Readers of zip files are not able to inspect the zip file and + determine the codepage that was used for the entries contained within it. + It is left to the application or user to determine the necessary codepage + when reading zip files encoded this way. If you use an incorrect codepage + when reading a zipfile, you will get entries with filenames that are + incorrect, and the incorrect filenames may even contain characters that + are not legal for use within filenames in Windows. Extracting entries with + illegal characters in the filenames will lead to exceptions. It's too bad, + but this is just the way things are with code pages in zip files. Caveat + Emptor. + + + + + + + Size of the work buffer to use for the ZLIB codec during decompression. + + + + Setting this affects the performance and memory efficiency of compression + and decompression. For larger files, setting this to a larger size may + improve performance, but the exact numbers vary depending on available + memory, and a bunch of other variables. I don't have good firm + recommendations on how to set it. You'll have to test it yourself. Or + just leave it alone and accept the default. + + + + + Sets the password to be used on the ZipInputStream instance. + + + + + + When reading a zip archive, this password is used to read and decrypt the + entries that are encrypted within the zip file. When entries within a zip + file use different passwords, set the appropriate password for the entry + before the first call to Read() for each entry. + + + + When reading an entry that is not encrypted, the value of this property is + ignored. + + + + + + + This example uses the ZipInputStream to read and extract entries from a + zip file, using a potentially different password for each entry. + + + byte[] buffer= new byte[2048]; + int n; + using (var raw = File.Open(_inputFileName, FileMode.Open, FileAccess.Read )) + { + using (var input= new ZipInputStream(raw)) + { + ZipEntry e; + while (( e = input.GetNextEntry()) != null) + { + input.Password = PasswordForEntry(e.FileName); + if (e.IsDirectory) continue; + string outputPath = Path.Combine(_extractDir, e.FileName); + using (var output = File.Open(outputPath, FileMode.Create, FileAccess.ReadWrite)) + { + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + + + + Always returns true. + + + + + Returns the value of CanSeek for the underlying (wrapped) stream. + + + + + Always returns false. + + + + + Returns the length of the underlying stream. + + + + + Gets or sets the position of the underlying stream. + + + Setting the position is equivalent to calling Seek(value, SeekOrigin.Begin). + + + + + Provides a stream metaphor for generating zip files. + + + + + This class writes zip files, as defined in the specification + for zip files described by PKWare. The compression for this + implementation is provided by a managed-code version of Zlib, included with + DotNetZip in the classes in the Ionic.Zlib namespace. + + + + This class provides an alternative programming model to the one enabled by the + class. Use this when creating zip files, as an + alternative to the class, when you would like to use a + Stream type to write the zip file. + + + + Both the ZipOutputStream class and the ZipFile class can be used + to create zip files. Both of them support many of the common zip features, + including Unicode, different compression levels, and ZIP64. They provide + very similar performance when creating zip files. + + + + The ZipFile class is generally easier to use than + ZipOutputStream and should be considered a higher-level interface. For + example, when creating a zip file via calls to the PutNextEntry() and + Write() methods on the ZipOutputStream class, the caller is + responsible for opening the file, reading the bytes from the file, writing + those bytes into the ZipOutputStream, setting the attributes on the + ZipEntry, and setting the created, last modified, and last accessed + timestamps on the zip entry. All of these things are done automatically by a + call to ZipFile.AddFile(). + For this reason, the ZipOutputStream is generally recommended for use + only when your application emits arbitrary data, not necessarily data from a + filesystem file, directly into a zip file, and does so using a Stream + metaphor. + + + + Aside from the differences in programming model, there are other + differences in capability between the two classes. + + + + + ZipFile can be used to read and extract zip files, in addition to + creating zip files. ZipOutputStream cannot read zip files. If you want + to use a stream to read zip files, check out the class. + + + + ZipOutputStream does not support the creation of segmented or spanned + zip files. + + + + ZipOutputStream cannot produce a self-extracting archive. + + + + + Be aware that the ZipOutputStream class implements the interface. In order for + ZipOutputStream to produce a valid zip file, you use use it within + a using clause (Using in VB), or call the Dispose() method + explicitly. See the examples for how to employ a using clause. + + + + Also, a note regarding compression performance: On the desktop .NET + Framework, DotNetZip can use a multi-threaded compression implementation + that provides significant speed increases on large files, over 300k or so, + at the cost of increased memory use at runtime. (The output of the + compression is almost exactly the same size). But, the multi-threaded + approach incurs a performance hit on smaller files. There's no way for the + ZipOutputStream to know whether parallel compression will be beneficial, + because the ZipOutputStream does not know how much data you will write + through the stream. You may wish to set the property to zero, if you are compressing + large files through ZipOutputStream. This will cause parallel + compression to be used, always. + + + + + + Create a ZipOutputStream, wrapping an existing stream. + + + + + The class is generally easier to use when creating + zip files. The ZipOutputStream offers a different metaphor for creating a + zip file, based on the class. + + + + + + The stream to wrap. It must be writable. This stream will be closed at + the time the ZipOutputStream is closed. + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + if (filesToZip.Count == 0) + { + System.Console.WriteLine("Nothing to do."); + return; + } + + using (var raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) + { + using (var output= new ZipOutputStream(raw)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + + foreach (string inputFileName in filesToZip) + { + System.Console.WriteLine("file: {0}", inputFileName); + + output.PutNextEntry(inputFileName); + using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Write )) + { + byte[] buffer= new byte[2048]; + int n; + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + } + + + + Private Sub Zipup() + Dim outputFileName As String = "XmlData.zip" + Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") + If (filesToZip.Length = 0) Then + Console.WriteLine("Nothing to do.") + Else + Using raw As FileStream = File.Open(outputFileName, FileMode.Create, FileAccess.ReadWrite) + Using output As ZipOutputStream = New ZipOutputStream(raw) + output.Password = "VerySecret!" + output.Encryption = EncryptionAlgorithm.WinZipAes256 + Dim inputFileName As String + For Each inputFileName In filesToZip + Console.WriteLine("file: {0}", inputFileName) + output.PutNextEntry(inputFileName) + Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer + Dim buffer As Byte() = New Byte(2048) {} + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + Next + End Using + End Using + End If + End Sub + + + + + + Create a ZipOutputStream that writes to a filesystem file. + + + + The class is generally easier to use when creating + zip files. The ZipOutputStream offers a different metaphor for creating a + zip file, based on the class. + + + + The name of the zip file to create. + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + if (filesToZip.Count == 0) + { + System.Console.WriteLine("Nothing to do."); + return; + } + + using (var output= new ZipOutputStream(outputFileName)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + + foreach (string inputFileName in filesToZip) + { + System.Console.WriteLine("file: {0}", inputFileName); + + output.PutNextEntry(inputFileName); + using (var input = File.Open(inputFileName, FileMode.Open, FileAccess.Read, + FileShare.Read | FileShare.Write )) + { + byte[] buffer= new byte[2048]; + int n; + while ((n= input.Read(buffer,0,buffer.Length)) > 0) + { + output.Write(buffer,0,n); + } + } + } + } + } + + + + Private Sub Zipup() + Dim outputFileName As String = "XmlData.zip" + Dim filesToZip As String() = Directory.GetFiles(".", "*.xml") + If (filesToZip.Length = 0) Then + Console.WriteLine("Nothing to do.") + Else + Using output As ZipOutputStream = New ZipOutputStream(outputFileName) + output.Password = "VerySecret!" + output.Encryption = EncryptionAlgorithm.WinZipAes256 + Dim inputFileName As String + For Each inputFileName In filesToZip + Console.WriteLine("file: {0}", inputFileName) + output.PutNextEntry(inputFileName) + Using input As FileStream = File.Open(inputFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) + Dim n As Integer + Dim buffer As Byte() = New Byte(2048) {} + Do While (n = input.Read(buffer, 0, buffer.Length) > 0) + output.Write(buffer, 0, n) + Loop + End Using + Next + End Using + End If + End Sub + + + + + + Create a ZipOutputStream. + + + + See the documentation for the ZipOutputStream(Stream) + constructor for an example. + + + + The stream to wrap. It must be writable. + + + + true if the application would like the stream + to remain open after the ZipOutputStream has been closed. + + + + Provides a string representation of the instance. + + + This can be useful for debugging purposes. + + + a string representation of the instance. + + + + Returns true if an entry by the given name has already been written + to the ZipOutputStream. + + + + The name of the entry to scan for. + + + + true if an entry by the given name has already been written. + + + + + Write the data from the buffer to the stream. + + + + As the application writes data into this stream, the data may be + compressed and encrypted before being written out to the underlying + stream, depending on the settings of the + and the properties. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Specify the name of the next entry that will be written to the zip file. + + + + + Call this method just before calling , to + specify the name of the entry that the next set of bytes written to + the ZipOutputStream belongs to. All subsequent calls to Write, + until the next call to PutNextEntry, + will be inserted into the named entry in the zip file. + + + + If the used in PutNextEntry() ends in + a slash, then the entry added is marked as a directory. Because directory + entries do not contain data, a call to Write(), before an + intervening additional call to PutNextEntry(), will throw an + exception. + + + + If you don't call Write() between two calls to + PutNextEntry(), the first entry is inserted into the zip file as a + file of zero size. This may be what you want. + + + + Because PutNextEntry() closes out the prior entry, if any, this + method may throw if there is a problem with the prior entry. + + + + This method returns the ZipEntry. You can modify public properties + on the ZipEntry, such as , , and so on, until the first call to + ZipOutputStream.Write(), or until the next call to + PutNextEntry(). If you modify the ZipEntry after + having called Write(), you may get a runtime exception, or you may + silently get an invalid zip archive. + + + + + + + This example shows how to create a zip file, using the + ZipOutputStream class. + + + private void Zipup() + { + using (FileStream fs raw = File.Open(_outputFileName, FileMode.Create, FileAccess.ReadWrite )) + { + using (var output= new ZipOutputStream(fs)) + { + output.Password = "VerySecret!"; + output.Encryption = EncryptionAlgorithm.WinZipAes256; + output.PutNextEntry("entry1.txt"); + byte[] buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #1."); + output.Write(buffer,0,buffer.Length); + output.PutNextEntry("entry2.txt"); // this will be zero length + output.PutNextEntry("entry3.txt"); + buffer= System.Text.Encoding.ASCII.GetBytes("This is the content for entry #3."); + output.Write(buffer,0,buffer.Length); + } + } + } + + + + + The name of the entry to be added, including any path to be used + within the zip file. + + + + The ZipEntry created. + + + + + + Dispose the stream + + + + + This method writes the Zip Central directory, then closes the stream. The + application must call Dispose() (or Close) in order to produce a valid zip file. + + + + Typically the application will call Dispose() implicitly, via a using + statement in C#, or a Using statement in VB. + + + + + set this to true, always. + + + + This is a no-op. + + + + + This method always throws a NotSupportedException. + + ignored + ignored + ignored + nothing + + + + This method always throws a NotSupportedException. + + ignored + ignored + nothing + + + + This method always throws a NotSupportedException. + + ignored + + + + Sets the password to be used on the ZipOutputStream instance. + + + + + + When writing a zip archive, this password is applied to the entries, not + to the zip archive itself. It applies to any ZipEntry subsequently + written to the ZipOutputStream. + + + + Using a password does not encrypt or protect the "directory" of the + archive - the list of entries contained in the archive. If you set the + Password property, the password actually applies to individual + entries that are added to the archive, subsequent to the setting of this + property. The list of filenames in the archive that is eventually created + will appear in clear text, but the contents of the individual files are + encrypted. This is how Zip encryption works. + + + + If you set this property, and then add a set of entries to the archive via + calls to PutNextEntry, then each entry is encrypted with that + password. You may also want to change the password between adding + different entries. If you set the password, add an entry, then set the + password to null (Nothing in VB), and add another entry, the + first entry is encrypted and the second is not. + + + + When setting the Password, you may also want to explicitly set the property, to specify how to encrypt the entries added + to the ZipFile. If you set the Password to a non-null value and do not + set , then PKZip 2.0 ("Weak") encryption is used. + This encryption is relatively weak but is very interoperable. If + you set the password to a null value (Nothing in VB), + Encryption is reset to None. + + + + Special case: if you wrap a ZipOutputStream around a non-seekable stream, + and use encryption, and emit an entry of zero bytes, the Close() or + PutNextEntry() following the entry will throw an exception. + + + + + + + The Encryption to use for entries added to the ZipOutputStream. + + + + + The specified Encryption is applied to the entries subsequently + written to the ZipOutputStream instance. + + + + If you set this to something other than + EncryptionAlgorithm.None, you will also need to set the + to a non-null, non-empty value in + order to actually get encryption on the entry. + + + + + ZipOutputStream.Password + ZipEntry.Encryption + + + + Size of the work buffer to use for the ZLIB codec during compression. + + + + Setting this may affect performance. For larger files, setting this to a + larger size may improve performance, but I'm not sure. Sorry, I don't + currently have good recommendations on how to set it. You can test it if + you like. + + + + + The compression strategy to use for all entries. + + + + Set the Strategy used by the ZLIB-compatible compressor, when compressing + data for the entries in the zip archive. Different compression strategies + work better on different sorts of data. The strategy parameter can affect + the compression ratio and the speed of compression but not the correctness + of the compresssion. For more information see . + + + + + The type of timestamp attached to the ZipEntry. + + + + Set this in order to specify the kind of timestamp that should be emitted + into the zip file for each entry. + + + + + Sets the compression level to be used for entries subsequently added to + the zip archive. + + + + + Varying the compression level used on entries can affect the + size-vs-speed tradeoff when compression and decompressing data streams + or files. + + + + As with some other properties on the ZipOutputStream class, like , and , + setting this property on a ZipOutputStream + instance will cause the specified CompressionLevel to be used on all + items that are subsequently added to the + ZipOutputStream instance. + + + + If you do not set this property, the default compression level is used, + which normally gives a good balance of compression efficiency and + compression speed. In some tests, using BestCompression can + double the time it takes to compress, while delivering just a small + increase in compression efficiency. This behavior will vary with the + type of data you compress. If you are in doubt, just leave this setting + alone, and accept the default. + + + + + + The compression method used on each entry added to the ZipOutputStream. + + + + + A comment attached to the zip archive. + + + + + + The application sets this property to specify a comment to be embedded + into the generated zip archive. + + + + According to PKWARE's + zip specification, the comment is not encrypted, even if there is a + password set on the zip file. + + + + The specification does not describe how to indicate the encoding used + on a comment string. Many "compliant" zip tools and libraries use + IBM437 as the code page for comments; DotNetZip, too, follows that + practice. On the other hand, there are situations where you want a + Comment to be encoded with something else, for example using code page + 950 "Big-5 Chinese". To fill that need, DotNetZip will encode the + comment following the same procedure it follows for encoding + filenames: (a) if is + Never, it uses the default encoding (IBM437). (b) if is Always, it always uses the + alternate encoding (). (c) if is AsNecessary, it uses the + alternate encoding only if the default encoding is not sufficient for + encoding the comment - in other words if decoding the result does not + produce the original string. This decision is taken at the time of + the call to ZipFile.Save(). + + + + + + + Specify whether to use ZIP64 extensions when saving a zip archive. + + + + + The default value for the property is . is + safest, in the sense that you will not get an Exception if a + pre-ZIP64 limit is exceeded. + + + + You must set this property before calling Write(). + + + + + + + Indicates whether ZIP64 extensions were used when saving the zip archive. + + + + The value is defined only after the ZipOutputStream has been closed. + + + + + Whether the ZipOutputStream should use case-insensitive comparisons when + checking for uniqueness of zip entries. + + + + + Though the zip specification doesn't prohibit zipfiles with duplicate + entries, Sane zip files have no duplicates, and the DotNetZip library + cannot create zip files with duplicate entries. If an application attempts + to call with a name that duplicates one + already used within the archive, the library will throw an Exception. + + + This property allows the application to specify whether the + ZipOutputStream instance considers ordinal case when checking for + uniqueness of zip entries. + + + + + + Indicates whether to encode entry filenames and entry comments using + Unicode (UTF-8). + + + + + The + PKWare zip specification provides for encoding file names and file + comments in either the IBM437 code page, or in UTF-8. This flag selects + the encoding according to that specification. By default, this flag is + false, and filenames and comments are encoded into the zip file in the + IBM437 codepage. Setting this flag to true will specify that filenames + and comments that cannot be encoded with IBM437 will be encoded with + UTF-8. + + + + Zip files created with strict adherence to the PKWare specification with + respect to UTF-8 encoding can contain entries with filenames containing + any combination of Unicode characters, including the full range of + characters from Chinese, Latin, Hebrew, Greek, Cyrillic, and many other + alphabets. However, because at this time, the UTF-8 portion of the PKWare + specification is not broadly supported by other zip libraries and + utilities, such zip files may not be readable by your favorite zip tool or + archiver. In other words, interoperability will decrease if you set this + flag to true. + + + + In particular, Zip files created with strict adherence to the PKWare + specification with respect to UTF-8 encoding will not work well with + Explorer in Windows XP or Windows Vista, because Windows compressed + folders, as far as I know, do not support UTF-8 in zip files. Vista can + read the zip files, but shows the filenames incorrectly. Unpacking from + Windows Vista Explorer will result in filenames that have rubbish + characters in place of the high-order UTF-8 bytes. + + + + Also, zip files that use UTF-8 encoding will not work well with Java + applications that use the java.util.zip classes, as of v5.0 of the Java + runtime. The Java runtime does not correctly implement the PKWare + specification in this regard. + + + + As a result, we have the unfortunate situation that "correct" behavior by + the DotNetZip library with regard to Unicode encoding of filenames during + zip creation will result in zip files that are readable by strictly + compliant and current tools (for example the most recent release of the + commercial WinZip tool); but these zip files will not be readable by + various other tools or libraries, including Windows Explorer. + + + + The DotNetZip library can read and write zip files with UTF8-encoded + entries, according to the PKware spec. If you use DotNetZip for both + creating and reading the zip file, and you use UTF-8, there will be no + loss of information in the filenames. For example, using a self-extractor + created by this library will allow you to unpack files correctly with no + loss of information in the filenames. + + + + If you do not set this flag, it will remain false. If this flag is false, + the ZipOutputStream will encode all filenames and comments using + the IBM437 codepage. This can cause "loss of information" on some + filenames, but the resulting zipfile will be more interoperable with other + utilities. As an example of the loss of information, diacritics can be + lost. The o-tilde character will be down-coded to plain o. The c with a + cedilla (Unicode 0xE7) used in Portugese will be downcoded to a c. + Likewise, the O-stroke character (Unicode 248), used in Danish and + Norwegian, will be down-coded to plain o. Chinese characters cannot be + represented in codepage IBM437; when using the default encoding, Chinese + characters in filenames will be represented as ?. These are all examples + of "information loss". + + + + The loss of information associated to the use of the IBM437 encoding is + inconvenient, and can also lead to runtime errors. For example, using + IBM437, any sequence of 4 Chinese characters will be encoded as ????. If + your application creates a ZipOutputStream, does not set the + encoding, then adds two files, each with names of four Chinese characters + each, this will result in a duplicate filename exception. In the case + where you add a single file with a name containing four Chinese + characters, the zipfile will save properly, but extracting that file + later, with any zip tool, will result in an error, because the question + mark is not legal for use within filenames on Windows. These are just a + few examples of the problems associated to loss of information. + + + + This flag is independent of the encoding of the content within the entries + in the zip file. Think of the zip file as a container - it supports an + encoding. Within the container are other "containers" - the file entries + themselves. The encoding within those entries is independent of the + encoding of the zip archive container for those entries. + + + + Rather than specify the encoding in a binary fashion using this flag, an + application can specify an arbitrary encoding via the property. Setting the encoding + explicitly when creating zip archives will result in non-compliant zip + files that, curiously, are fairly interoperable. The challenge is, the + PKWare specification does not provide for a way to specify that an entry + in a zip archive uses a code page that is neither IBM437 nor UTF-8. + Therefore if you set the encoding explicitly when creating a zip archive, + you must take care upon reading the zip archive to use the same code page. + If you get it wrong, the behavior is undefined and may result in incorrect + filenames, exceptions, stomach upset, hair loss, and acne. + + + + + + + The text encoding to use when emitting entries into the zip archive, for + those entries whose filenames or comments cannot be encoded with the + default (IBM437) encoding. + + + + + In its + zip specification, PKWare describes two options for encoding + filenames and comments: using IBM437 or UTF-8. But, some archiving tools + or libraries do not follow the specification, and instead encode + characters using the system default code page. For example, WinRAR when + run on a machine in Shanghai may encode filenames with the Big-5 Chinese + (950) code page. This behavior is contrary to the Zip specification, but + it occurs anyway. + + + + When using DotNetZip to write zip archives that will be read by one of + these other archivers, set this property to specify the code page to use + when encoding the and for each ZipEntry in the zip file, for + values that cannot be encoded with the default codepage for zip files, + IBM437. This is why this property is "provisional". In all cases, IBM437 + is used where possible, in other words, where no loss of data would + result. It is possible, therefore, to have a given entry with a + Comment encoded in IBM437 and a FileName encoded with the + specified "provisional" codepage. + + + + Be aware that a zip file created after you've explicitly set the + ProvisionalAlternateEncoding property to a value other than + IBM437 may not be compliant to the PKWare specification, and may not be + readable by compliant archivers. On the other hand, many (most?) + archivers are non-compliant and can read zip files created in arbitrary + code pages. The trick is to use or specify the proper codepage when + reading the zip. + + + + When creating a zip archive using this library, it is possible to change + the value of ProvisionalAlternateEncoding between each entry you + add, and between adding entries and the call to Close(). Don't do + this. It will likely result in a zipfile that is not readable. For best + interoperability, either leave ProvisionalAlternateEncoding + alone, or specify it only once, before adding any entries to the + ZipOutputStream instance. There is one exception to this + recommendation, described later. + + + + When using an arbitrary, non-UTF8 code page for encoding, there is no + standard way for the creator application - whether DotNetZip, WinZip, + WinRar, or something else - to formally specify in the zip file which + codepage has been used for the entries. As a result, readers of zip files + are not able to inspect the zip file and determine the codepage that was + used for the entries contained within it. It is left to the application + or user to determine the necessary codepage when reading zip files encoded + this way. If you use an incorrect codepage when reading a zipfile, you + will get entries with filenames that are incorrect, and the incorrect + filenames may even contain characters that are not legal for use within + filenames in Windows. Extracting entries with illegal characters in the + filenames will lead to exceptions. It's too bad, but this is just the way + things are with code pages in zip files. Caveat Emptor. + + + + One possible approach for specifying the code page for a given zip file is + to describe the code page in a human-readable form in the Zip comment. For + example, the comment may read "Entries in this archive are encoded in the + Big5 code page". For maximum interoperability, the zip comment in this + case should be encoded in the default, IBM437 code page. In this case, + the zip comment is encoded using a different page than the filenames. To + do this, Specify ProvisionalAlternateEncoding to your desired + region-specific code page, once before adding any entries, and then set + the property and reset + ProvisionalAlternateEncoding to IBM437 before calling Close(). + + + + + + A Text Encoding to use when encoding the filenames and comments for + all the ZipEntry items, during a ZipFile.Save() operation. + + + + Whether the encoding specified here is used during the save depends + on . + + + + + + A flag that tells if and when this instance should apply + AlternateEncoding to encode the filenames and comments associated to + of ZipEntry objects contained within this instance. + + + + + The default text encoding used in zip archives. It is numeric 437, also + known as IBM437. + + + + + + The size threshold for an entry, above which a parallel deflate is used. + + + + + + DotNetZip will use multiple threads to compress any ZipEntry, when + the CompressionMethod is Deflate, and if the entry is + larger than the given size. Zero means "always use parallel + deflate", while -1 means "never use parallel deflate". + + + + If the entry size cannot be known before compression, as with any entry + added via a ZipOutputStream, then Parallel deflate will never be + performed, unless the value of this property is zero. + + + + A parallel deflate operations will speed up the compression of + large files, on computers with multiple CPUs or multiple CPU + cores. For files above 1mb, on a dual core or dual-cpu (2p) + machine, the time required to compress the file can be 70% of the + single-threaded deflate. For very large files on 4p machines the + compression can be done in 30% of the normal time. The downside + is that parallel deflate consumes extra memory during the deflate, + and the deflation is slightly less effective. + + + + Parallel deflate tends to not be as effective as single-threaded deflate + because the original data stream is split into multiple independent + buffers, each of which is compressed in parallel. But because they are + treated independently, there is no opportunity to share compression + dictionaries, and additional framing bytes must be added to the output + stream. For that reason, a deflated stream may be slightly larger when + compressed using parallel deflate, as compared to a traditional + single-threaded deflate. For files of about 512k, the increase over the + normal deflate is as much as 5% of the total compressed size. For larger + files, the difference can be as small as 0.1%. + + + + Multi-threaded compression does not give as much an advantage when using + Encryption. This is primarily because encryption tends to slow down + the entire pipeline. Also, multi-threaded compression gives less of an + advantage when using lower compression levels, for example . You may have to perform + some tests to determine the best approach for your situation. + + + + The default value for this property is -1, which means parallel + compression will not be performed unless you set it to zero. + + + + + + + The maximum number of buffer pairs to use when performing + parallel compression. + + + + + This property sets an upper limit on the number of memory + buffer pairs to create when performing parallel + compression. The implementation of the parallel + compression stream allocates multiple buffers to + facilitate parallel compression. As each buffer fills up, + the stream uses + ThreadPool.QueueUserWorkItem() to compress those + buffers in a background threadpool thread. After a buffer + is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time, but it is + effective only if set before calling + ZipOutputStream.Write() for the first time. + + + + + + + + + Always returns false. + + + + + Always returns false. + + + + + Always returns true. + + + + + Always returns a NotSupportedException. + + + + + Setting this property always returns a NotSupportedException. Getting it + returns the value of the Position on the underlying stream. + + + + + Sort-of like a factory method, ForUpdate is used only when + the application needs to update the zip entry metadata for + a segmented zip file, when the starting segment is earlier + than the ending segment, for a particular entry. + + + + The update is always contiguous, never rolls over. As a + result, this method doesn't need to return a ZSS; it can + simply return a FileStream. That's why it's "sort of" + like a Factory method. + + + Caller must Close/Dispose the stream object returned by + this method. + + + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Name of the filesystem file corresponding to the current segment. + + + + The name is not always the name currently being used in the + filesystem. When rwMode is RwMode.Write, the filesystem file has a + temporary name until the stream is closed or until the next segment is + started. + + + + + + Reset the BitWriter. + + + + This is useful when the BitWriter writes into a MemoryStream, and + is used by a BZip2Compressor, which itself is re-used for multiple + distinct data blocks. + + + + + + Write some number of bits from the given value, into the output. + + + + The nbits value should be a max of 25, for safety. For performance + reasons, this method does not check! + + + + + + Write a full 8-bit byte into the output. + + + + + Write four 8-bit bytes into the output. + + + + + Write all available byte-aligned bytes. + + + + This method writes no new output, but flushes any accumulated + bits. At completion, the accumulator may contain up to 7 + bits. + + + This is necessary when re-assembling output from N independent + compressors, one for each of N blocks. The output of any + particular compressor will in general have some fragment of a byte + remaining. This fragment needs to be accumulated into the + parent BZip2OutputStream. + + + + + + Writes all available bytes, and emits padding for the final byte as + necessary. This must be the last method invoked on an instance of + BitWriter. + + + + + Delivers the remaining bits, left-aligned, in a byte. + + + + This is valid only if NumRemainingBits is less than 8; + in other words it is valid only after a call to Flush(). + + + + + Knuth's increments seem to work better than Incerpi-Sedgewick here. + Possibly because the number of elems to sort is usually small, typically + <= 20. + + + + BZip2Compressor writes its compressed data out via a BitWriter. This + is necessary because BZip2 does byte shredding. + + + + + Accept new bytes into the compressor data buffer + + + + This method does the first-level (cheap) run-length encoding, and + stores the encoded data into the rle block. + + + + + + Process one input byte into the block. + + + + + To "process" the byte means to do the run-length encoding. + There are 3 possible return values: + + 0 - the byte was not written, in other words, not + encoded into the block. This happens when the + byte b would require the start of a new run, and + the block has no more room for new runs. + + 1 - the byte was written, and the block is not full. + + 2 - the byte was written, and the block is full. + + + + 0 if the byte was not written, non-zero if written. + + + + Append one run to the output block. + + + + + This compressor does run-length-encoding before BWT and etc. This + method simply appends a run to the output block. The append always + succeeds. The return value indicates whether the block is full: + false (not full) implies that at least one additional run could be + processed. + + + true if the block is now full; otherwise false. + + + + Compress the data that has been placed (Run-length-encoded) into the + block. The compressed data goes into the CompressedBytes array. + + + + Side effects: 1. fills the CompressedBytes array. 2. sets the + AvailableBytesOut property. + + + + + This is the most hammered method of this class. + +

+ This is the version using unrolled loops. +

+
+ + Method "mainQSort3", file "blocksort.c", BZip2 1.0.2 + + + + The number of uncompressed bytes being held in the buffer. + + + + I am thinking this may be useful in a Stream that uses this + compressor class. In the Close() method on the stream it could + check this value to see if anything has been written at all. You + may think the stream could easily track the number of bytes it + wrote, which would eliminate the need for this. But, there is the + case where the stream writes a complete block, and it is full, and + then writes no more. In that case the stream may want to check. + + + + + Array instance identical to sfmap, both are used only + temporarily and independently, so we do not need to allocate + additional memory. + + + + A read-only decorator stream that performs BZip2 decompression on Read. + + + + + Create a BZip2InputStream, wrapping it around the given input Stream. + + + + The input stream will be closed when the BZip2InputStream is closed. + + + The stream from which to read compressed data + + + + Create a BZip2InputStream with the given stream, and + specifying whether to leave the wrapped stream open when + the BZip2InputStream is closed. + + The stream from which to read compressed data + + Whether to leave the input stream open, when the BZip2InputStream closes. + + + + + This example reads a bzip2-compressed file, decompresses it, + and writes the decompressed data into a newly created file. + + + var fname = "logfile.log.bz2"; + using (var fs = File.OpenRead(fname)) + { + using (var decompressor = new Ionic.BZip2.BZip2InputStream(fs)) + { + var outFname = fname + ".decompressed"; + using (var output = File.Create(outFname)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = decompressor.Read(buffer, 0, buffer.Length)) > 0) + { + output.Write(buffer, 0, n); + } + } + } + } + + + + + + Read data from the stream. + + + + + To decompress a BZip2 data stream, create a BZip2InputStream, + providing a stream that reads compressed data. Then call Read() on + that BZip2InputStream, and the data read will be decompressed + as you read. + + + + A BZip2InputStream can be used only for Read(), not for Write(). + + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Read a single byte from the stream. + + the byte read from the stream, or -1 if EOF + + + + Flush the stream. + + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + + + + Dispose the stream. + + + indicates whether the Dispose method was invoked by user code. + + + + + Close the stream. + + + + + Read n bits from input, right justifying the result. + + + + For example, if you read 1 bit, the result is either 0 + or 1. + + + + The number of bits to read, always between 1 and 32. + + + + Called by createHuffmanDecodingTables() exclusively. + + + Called by recvDecodingTables() exclusively. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes read in. + + + + + Compressor State + + + + Freq table collected to save a pass over the data during + decompression. + + + Initializes the tt array. + + This method is called when the required length of the array is known. + I don't initialize it at construction time to avoid unneccessary + memory allocation when compressing small files. + + + + A write-only decorator stream that compresses data as it is + written using the BZip2 algorithm. + + + + + Constructs a new BZip2OutputStream, that sends its + compressed output to the given output stream. + + + + The destination stream, to which compressed output will be sent. + + + + + This example reads a file, then compresses it with bzip2 file, + and writes the compressed data into a newly created file. + + + var fname = "logfile.log"; + using (var fs = File.OpenRead(fname)) + { + var outFname = fname + ".bz2"; + using (var output = File.Create(outFname)) + { + using (var compressor = new Ionic.BZip2.BZip2OutputStream(output)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + + + Constructs a new BZip2OutputStream with specified blocksize. + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + + + Constructs a new BZip2OutputStream. + + the destination stream. + + whether to leave the captive stream open upon closing this stream. + + + + + Constructs a new BZip2OutputStream with specified blocksize, + and explicitly specifies whether to leave the wrapped stream open. + + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + whether to leave the captive stream open upon closing this stream. + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + Write data to the stream. + + + + + Use the BZip2OutputStream to compress data while writing: + create a BZip2OutputStream with a writable output stream. + Then call Write() on that BZip2OutputStream, providing + uncompressed data as input. The data sent to the output stream will + be the compressed form of the input data. + + + + A BZip2OutputStream can be used only for Write() not for Read(). + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + never returns anything; always throws + + + + The blocksize parameter specified at construction time. + + + + + Indicates whether the stream can be read. + + + The return value is always false. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value should always be true, unless and until the + object is disposed and closed. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes written through. + + + + + A write-only decorator stream that compresses data as it is + written using the BZip2 algorithm. This stream compresses by + block using multiple threads. + + + This class performs BZIP2 compression through writing. For + more information on the BZIP2 algorithm, see + . + + + + This class is similar to , + except that this implementation uses an approach that employs multiple + worker threads to perform the compression. On a multi-cpu or multi-core + computer, the performance of this class can be significantly higher than + the single-threaded BZip2OutputStream, particularly for larger streams. + How large? Anything over 10mb is a good candidate for parallel + compression. + + + + The tradeoff is that this class uses more memory and more CPU than the + vanilla BZip2OutputStream. Also, for small files, the + ParallelBZip2OutputStream can be much slower than the vanilla + BZip2OutputStream, because of the overhead associated to using the + thread pool. + + + + + + + Constructs a new ParallelBZip2OutputStream, that sends its + compressed output to the given output stream. + + + + The destination stream, to which compressed output will be sent. + + + + + This example reads a file, then compresses it with bzip2 file, + and writes the compressed data into a newly created file. + + + var fname = "logfile.log"; + using (var fs = File.OpenRead(fname)) + { + var outFname = fname + ".bz2"; + using (var output = File.Create(outFname)) + { + using (var compressor = new Ionic.BZip2.ParallelBZip2OutputStream(output)) + { + byte[] buffer = new byte[2048]; + int n; + while ((n = fs.Read(buffer, 0, buffer.Length)) > 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + + + Constructs a new ParallelBZip2OutputStream with specified blocksize. + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + + + Constructs a new ParallelBZip2OutputStream. + + the destination stream. + + whether to leave the captive stream open upon closing this stream. + + + + + Constructs a new ParallelBZip2OutputStream with specified blocksize, + and explicitly specifies whether to leave the wrapped stream open. + + + the destination stream. + + The blockSize in units of 100000 bytes. + The valid range is 1..9. + + + whether to leave the captive stream open upon closing this stream. + + + + + Close the stream. + + + + This may or may not close the underlying stream. Check the + constructors that accept a bool value. + + + + + + Flush the stream. + + + + + Write data to the stream. + + + + + Use the ParallelBZip2OutputStream to compress data while + writing: create a ParallelBZip2OutputStream with a writable + output stream. Then call Write() on that + ParallelBZip2OutputStream, providing uncompressed data as + input. The data sent to the output stream will be the compressed + form of the input data. + + + + A ParallelBZip2OutputStream can be used only for + Write() not for Read(). + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Calling this method always throws a . + + this parameter is never used + this parameter is never used + this parameter is never used + never returns anything; always throws + + + + The maximum number of concurrent compression worker threads to use. + + + + + This property sets an upper limit on the number of concurrent worker + threads to employ for compression. The implementation of this stream + employs multiple threads from the .NET thread pool, via + ThreadPool.QueueUserWorkItem(), to compress the incoming data by + block. As each block of data is compressed, this stream re-orders the + compressed blocks and writes them to the output stream. + + + + A higher number of workers enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + By default, DotNetZip allocates 4 workers per CPU core, subject to the + upper limit specified in this property. For example, suppose the + application sets this property to 16. Then, on a machine with 2 + cores, DotNetZip will use 8 workers; that number does not exceed the + upper limit specified by this property, so the actual number of + workers used will be 4 * 2 = 8. On a machine with 4 cores, DotNetZip + will use 16 workers; again, the limit does not apply. On a machine + with 8 cores, DotNetZip will use 16 workers, because of the limit. + + + + For each compression "worker thread" that occurs in parallel, there is + up to 2mb of memory allocated, for buffering and processing. The + actual number depends on the property. + + + + CPU utilization will also go up with additional workers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + The application can set this value at any time, but it is effective + only before the first call to Write(), which is when the buffers are + allocated. + + + + + + The blocksize parameter specified at construction time. + + + + + Indicates whether the stream can be read. + + + The return value is always false. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the + total number of uncompressed bytes written through. + + + + + The total number of bytes written out by the stream. + + + This value is meaningful only after a call to Close(). + + + + + Returns the "random" number at a specific index. + + the index + the random number + + + + A class for compressing and decompressing streams using the Deflate algorithm. + + + + + + The DeflateStream is a Decorator on a . It adds DEFLATE compression or decompression to any + stream. + + + + Using this stream, applications can compress or decompress data via stream + Read and Write operations. Either compresssion or decompression + can occur through either reading or writing. The compression format used is + DEFLATE, which is documented in IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.". + + + + This class is similar to , except that + ZlibStream adds the RFC + 1950 - ZLIB framing bytes to a compressed stream when compressing, or + expects the RFC1950 framing bytes when decompressing. The DeflateStream + does not. + + + + + + + + + + Create a DeflateStream using the specified CompressionMode. + + + + When mode is CompressionMode.Compress, the DeflateStream will use + the default compression level. The "captive" stream will be closed when + the DeflateStream is closed. + + + + This example uses a DeflateStream to compress data from a file, and writes + the compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (Stream compressor = new DeflateStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".deflated") + Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the DeflateStream will compress or decompress. + + + + Create a DeflateStream using the specified CompressionMode and the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. The "captive" stream will be closed when the DeflateStream is + closed. + + + + + + + This example uses a DeflateStream to compress data from a file, and writes + the compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (Stream compressor = new DeflateStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + while (n != 0) + { + if (n > 0) + compressor.Write(buffer, 0, n); + n= input.Read(buffer, 0, buffer.Length); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".deflated") + Using compressor As Stream = New DeflateStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the DeflateStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a DeflateStream using the specified + CompressionMode, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compression. Specify true for + the parameter to leave the stream open. + + + + The DeflateStream will use the default compression level. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + + + + Indicates whether the DeflateStream will compress or decompress. + + + true if the application would like the stream to + remain open after inflation/deflation. + + + + Create a DeflateStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify whether + the stream should be left open after Deflation or Inflation. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter + to leave the stream open. + + + + + + + This example shows how to use a DeflateStream to compress data from + a file, and store the compressed data into another file. + + + using (var output = System.IO.File.Create(fileToCompress + ".deflated")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + while (n != 0) + { + if (n > 0) + compressor.Write(buffer, 0, n); + n= input.Read(buffer, 0, buffer.Length); + } + } + } + // can write additional data to the output stream here + } + + + + Using output As FileStream = File.Create(fileToCompress & ".deflated") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New DeflateStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + The stream which will be read or written. + Indicates whether the DeflateStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + Application code won't call this code directly. This method may be + invoked in two distinct scenarios. If disposing == true, the method + has been called directly or indirectly by a user's code, for example + via the public Dispose() method. In this case, both managed and + unmanaged resources can be referenced and disposed. If disposing == + false, the method has been called by the runtime from inside the + object finalizer and this method should not reference other objects; + in that case only unmanaged resources must be referenced or + disposed. + + + + true if the Dispose method was invoked by user code. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + If you wish to use the DeflateStream to compress data while + reading, you can create a DeflateStream with + CompressionMode.Compress, providing an uncompressed data stream. + Then call Read() on that DeflateStream, and the data read will be + compressed as you read. If you wish to use the DeflateStream to + decompress data while reading, you can create a DeflateStream with + CompressionMode.Decompress, providing a readable compressed data + stream. Then call Read() on that DeflateStream, and the data read + will be decompressed as you read. + + + + A DeflateStream can be used for Read() or Write(), but not both. + + + + The buffer into which the read data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + this is irrelevant, since it will always throw! + irrelevant! + + + + Calling this method always throws a . + + this is irrelevant, since it will always throw! + + + + Write data to the stream. + + + + + If you wish to use the DeflateStream to compress data while + writing, you can create a DeflateStream with + CompressionMode.Compress, and a writable output stream. Then call + Write() on that DeflateStream, providing uncompressed data + as input. The data sent to the output stream will be the compressed form + of the data written. If you wish to use the DeflateStream to + decompress data while writing, you can create a DeflateStream with + CompressionMode.Decompress, and a writable output stream. Then + call Write() on that stream, providing previously compressed + data. The data sent to the output stream will be the decompressed form of + the data written. + + + + A DeflateStream can be used for Read() or Write(), + but not both. + + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using DEFLATE (RFC 1951). + + + + Uncompress it with . + + + DeflateStream.UncompressString(byte[]) + DeflateStream.CompressBuffer(byte[]) + GZipStream.CompressString(string) + ZlibStream.CompressString(string) + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using DEFLATE. + + + + Uncompress it with . + + + DeflateStream.CompressString(string) + DeflateStream.UncompressBuffer(byte[]) + GZipStream.CompressBuffer(byte[]) + ZlibStream.CompressBuffer(byte[]) + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a DEFLATE'd byte array into a single string. + + + DeflateStream.CompressString(String) + DeflateStream.UncompressBuffer(byte[]) + GZipStream.UncompressString(byte[]) + ZlibStream.UncompressString(byte[]) + + + A buffer containing DEFLATE-compressed data. + + + The uncompressed string + + + + Uncompress a DEFLATE'd byte array into a byte array. + + + DeflateStream.CompressBuffer(byte[]) + DeflateStream.UncompressString(byte[]) + GZipStream.UncompressBuffer(byte[]) + ZlibStream.UncompressBuffer(byte[]) + + + A buffer containing data that has been compressed with DEFLATE. + + + The data in uncompressed form + + + + This property sets the flush behavior on the stream. + + See the ZLIB documentation for the meaning of the flush behavior. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + + The ZLIB strategy to be used during compression. + + + + By tweaking this parameter, you may be able to optimize the compression for + data with particular characteristics. + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + A class for compressing and decompressing GZIP streams. + + + + + The GZipStream is a Decorator on a + . It adds GZIP compression or decompression to any + stream. + + + + Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the + Ionic.Zlib.GZipStream can compress while writing, or decompress while + reading, but not vice versa. The compression method used is GZIP, which is + documented in IETF RFC + 1952, "GZIP file format specification version 4.3". + + + A GZipStream can be used to decompress data (through Read()) or + to compress data (through Write()), but not both. + + + + If you wish to use the GZipStream to compress data, you must wrap it + around a write-able stream. As you call Write() on the GZipStream, the + data will be compressed into the GZIP format. If you want to decompress data, + you must wrap the GZipStream around a readable stream that contains an + IETF RFC 1952-compliant stream. The data will be decompressed as you call + Read() on the GZipStream. + + + + Though the GZIP format allows data from multiple files to be concatenated + together, this stream handles only a single segment of GZIP format, typically + representing a single file. + + + + This class is similar to and . + ZlibStream handles RFC1950-compliant streams. + handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. + + + + + + + + + + The last modified time for the GZIP stream. + + + + GZIP allows the storage of a last modified time with each GZIP entry. + When compressing data, you can set this before the first call to + Write(). When decompressing, you can retrieve this value any time + after the first call to Read(). + + + + + Create a GZipStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the GZipStream will use the + default compression level. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with + CompressionMode.Decompress works only through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + + This example shows how to use a GZipStream to uncompress a file. + + private void GunZipFile(string filename) + { + if (!filename.EndsWith(".gz)) + throw new ArgumentException("filename"); + var DecompressedFile = filename.Substring(0,filename.Length-3); + byte[] working = new byte[WORKING_BUFFER_SIZE]; + int n= 1; + using (System.IO.Stream input = System.IO.File.OpenRead(filename)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(DecompressedFile)) + { + while (n !=0) + { + n= decompressor.Read(working, 0, working.Length); + if (n > 0) + { + output.Write(working, 0, n); + } + } + } + } + } + } + + + + Private Sub GunZipFile(ByVal filename as String) + If Not (filename.EndsWith(".gz)) Then + Throw New ArgumentException("filename") + End If + Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) + Dim working(WORKING_BUFFER_SIZE) as Byte + Dim n As Integer = 1 + Using input As Stream = File.OpenRead(filename) + Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) + Using output As Stream = File.Create(UncompressedFile) + Do + n= decompressor.Read(working, 0, working.Length) + If n > 0 Then + output.Write(working, 0, n) + End IF + Loop While (n > 0) + End Using + End Using + End Using + End Sub + + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + + + + Create a GZipStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + The CompressionMode (Compress or Decompress) also establishes the + "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A + GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + + This example shows how to use a GZipStream to compress a file into a .gz file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".gz")) + { + using (Stream compressor = new GZipStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".gz") + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to be read or written while deflating or inflating. + Indicates whether the GZipStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a GZipStream using the specified CompressionMode, and + explicitly specify whether the stream should be left open after Deflation + or Inflation. + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to leave + the stream open. + + + + The (Compress or Decompress) also + establishes the "direction" of the stream. A GZipStream with + CompressionMode.Compress works only through Write(). A GZipStream + with CompressionMode.Decompress works only through Read(). + + + + The GZipStream will use the default compression level. If you want + to specify the compression level, see . + + + + See the other overloads of this constructor for example code. + + + + + + The stream which will be read or written. This is called the "captive" + stream in other places in this documentation. + + + Indicates whether the GZipStream will compress or decompress. + + + + true if the application would like the base stream to remain open after + inflation/deflation. + + + + + Create a GZipStream using the specified CompressionMode and the + specified CompressionLevel, and explicitly specify whether the + stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + memory stream that will be re-read after compressed data has been written + to it. Specify true for the parameter to + leave the stream open. + + + + As noted in the class documentation, the CompressionMode (Compress + or Decompress) also establishes the "direction" of the stream. A + GZipStream with CompressionMode.Compress works only through + Write(). A GZipStream with CompressionMode.Decompress works only + through Read(). + + + + + + This example shows how to use a GZipStream to compress data. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream which will be read or written. + Indicates whether the GZipStream will compress or decompress. + true if the application would like the stream to remain open after inflation/deflation. + A tuning knob to trade speed for effectiveness. + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Flush the stream. + + + + + Read and decompress data from the source stream. + + + + With a GZipStream, decompression is done through reading. + + + + + byte[] working = new byte[WORKING_BUFFER_SIZE]; + using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) + { + using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) + { + using (var output = System.IO.File.Create(_DecompressedFile)) + { + int n; + while ((n= decompressor.Read(working, 0, working.Length)) !=0) + { + output.Write(working, 0, n); + } + } + } + } + + + The buffer into which the decompressed data should be placed. + the offset within that data array to put the first byte read. + the number of bytes to read. + the number of bytes actually read + + + + Calling this method always throws a . + + irrelevant; it will always throw! + irrelevant; it will always throw! + irrelevant! + + + + Calling this method always throws a . + + irrelevant; this method will always throw! + + + + Write data to the stream. + + + + + If you wish to use the GZipStream to compress data while writing, + you can create a GZipStream with CompressionMode.Compress, and a + writable output stream. Then call Write() on that GZipStream, + providing uncompressed data as input. The data sent to the output stream + will be the compressed form of the data written. + + + + A GZipStream can be used for Read() or Write(), but not + both. Writing implies compression. Reading implies decompression. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using GZip. + + + + Uncompress it with . + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using GZip. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a GZip'ed byte array into a single string. + + + + + + + A buffer containing GZIP-compressed data. + + + The uncompressed string + + + + Uncompress a GZip'ed byte array into a byte array. + + + + + + + A buffer containing data that has been compressed with GZip. + + + The data in uncompressed form + + + + The comment on the GZIP stream. + + + + + The GZIP format allows for each file to optionally have an associated + comment stored with the file. The comment is encoded with the ISO-8859-1 + code page. To include a comment in a GZIP stream you create, set this + property before calling Write() for the first time on the + GZipStream. + + + + When using GZipStream to decompress, you can retrieve this property + after the first call to Read(). If no comment has been set in the + GZIP bytestream, the Comment property will return null + (Nothing in VB). + + + + + + The FileName for the GZIP stream. + + + + + + The GZIP format optionally allows each file to have an associated + filename. When compressing data (through Write()), set this + FileName before calling Write() the first time on the GZipStream. + The actual filename is encoded into the GZIP bytestream with the + ISO-8859-1 code page, according to RFC 1952. It is the application's + responsibility to insure that the FileName can be encoded and decoded + correctly with this code page. + + + + When decompressing (through Read()), you can retrieve this value + any time after the first Read(). In the case where there was no filename + encoded into the GZIP bytestream, the property will return null (Nothing + in VB). + + + + + + The CRC on the GZIP stream. + + + This is used for internal error checking. You probably don't need to look at this property. + + + + + This property sets the flush behavior on the stream. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + A class for compressing streams using the + Deflate algorithm with multiple threads. + + + + + This class performs DEFLATE compression through writing. For + more information on the Deflate algorithm, see IETF RFC 1951, + "DEFLATE Compressed Data Format Specification version 1.3." + + + + This class is similar to , except + that this class is for compression only, and this implementation uses an + approach that employs multiple worker threads to perform the DEFLATE. On + a multi-cpu or multi-core computer, the performance of this class can be + significantly higher than the single-threaded DeflateStream, particularly + for larger streams. How large? Anything over 10mb is a good candidate + for parallel compression. + + + + The tradeoff is that this class uses more memory and more CPU than the + vanilla DeflateStream, and also is less efficient as a compressor. For + large files the size of the compressed data stream can be less than 1% + larger than the size of a compressed data stream from the vanialla + DeflateStream. For smaller files the difference can be larger. The + difference will also be larger if you set the BufferSize to be lower than + the default value. Your mileage may vary. Finally, for small files, the + ParallelDeflateOutputStream can be much slower than the vanilla + DeflateStream, because of the overhead associated to using the thread + pool. + + + + + + + + Create a ParallelDeflateOutputStream. + + + + + This stream compresses data written into it via the DEFLATE + algorithm (see RFC 1951), and writes out the compressed byte stream. + + + + The instance will use the default compression level, the default + buffer sizes and the default number of threads and buffers per + thread. + + + + This class is similar to , + except that this implementation uses an approach that employs + multiple worker threads to perform the DEFLATE. On a multi-cpu or + multi-core computer, the performance of this class can be + significantly higher than the single-threaded DeflateStream, + particularly for larger streams. How large? Anything over 10mb is + a good candidate for parallel compression. + + + + + + + This example shows how to use a ParallelDeflateOutputStream to compress + data. It reads a file, compresses it, and writes the compressed data to + a second, output file. + + + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n= -1; + String outputFile = fileToCompress + ".compressed"; + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(outputFile)) + { + using (Stream compressor = new ParallelDeflateOutputStream(raw)) + { + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Dim outputFile As String = (fileToCompress & ".compressed") + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(outputFile) + Using compressor As Stream = New ParallelDeflateOutputStream(raw) + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + The stream to which compressed data will be written. + + + + Create a ParallelDeflateOutputStream using the specified CompressionLevel. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + + + Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open + when the ParallelDeflateOutputStream is closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Create a ParallelDeflateOutputStream and specify whether to leave the captive stream open + when the ParallelDeflateOutputStream is closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Create a ParallelDeflateOutputStream using the specified + CompressionLevel and CompressionStrategy, and specifying whether to + leave the captive stream open when the ParallelDeflateOutputStream is + closed. + + + See the + constructor for example code. + + The stream to which compressed data will be written. + A tuning knob to trade speed for effectiveness. + + By tweaking this parameter, you may be able to optimize the compression for + data with particular characteristics. + + + true if the application would like the stream to remain open after inflation/deflation. + + + + + Write data to the stream. + + + + + + To use the ParallelDeflateOutputStream to compress data, create a + ParallelDeflateOutputStream with CompressionMode.Compress, passing a + writable output stream. Then call Write() on that + ParallelDeflateOutputStream, providing uncompressed data as input. The + data sent to the output stream will be the compressed form of the data + written. + + + + To decompress data, use the class. + + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Flush the stream. + + + + + Close the stream. + + + You must call Close on the stream to guarantee that all of the data written in has + been compressed, and the compressed data has been written out. + + + + Dispose the object + + + Because ParallelDeflateOutputStream is IDisposable, the + application must call this method when finished using the instance. + + + This method is generally called implicitly upon exit from + a using scope in C# (Using in VB). + + + + + The Dispose method + + indicates whether the Dispose method was invoked by user code. + + + + + Resets the stream for use with another stream. + + + Because the ParallelDeflateOutputStream is expensive to create, it + has been designed so that it can be recycled and re-used. You have + to call Close() on the stream first, then you can call Reset() on + it, to use it again on another stream. + + + + The new output stream for this era. + + + + + ParallelDeflateOutputStream deflater = null; + foreach (var inputFile in listOfFiles) + { + string outputFile = inputFile + ".compressed"; + using (System.IO.Stream input = System.IO.File.OpenRead(inputFile)) + { + using (var outStream = System.IO.File.Create(outputFile)) + { + if (deflater == null) + deflater = new ParallelDeflateOutputStream(outStream, + CompressionLevel.Best, + CompressionStrategy.Default, + true); + deflater.Reset(outStream); + + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + deflater.Write(buffer, 0, n); + } + } + } + } + + + + + + This method always throws a NotSupportedException. + + + The buffer into which data would be read, IF THIS METHOD + ACTUALLY DID ANYTHING. + + + The offset within that data array at which to insert the + data that is read, IF THIS METHOD ACTUALLY DID + ANYTHING. + + + The number of bytes to write, IF THIS METHOD ACTUALLY DID + ANYTHING. + + nothing. + + + + This method always throws a NotSupportedException. + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + nothing. It always throws. + + + + This method always throws a NotSupportedException. + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + The ZLIB strategy to be used during compression. + + + + + + The maximum number of buffer pairs to use. + + + + + This property sets an upper limit on the number of memory buffer + pairs to create. The implementation of this stream allocates + multiple buffers to facilitate parallel compression. As each buffer + fills up, this stream uses + ThreadPool.QueueUserWorkItem() + to compress those buffers in a background threadpool thread. After a + buffer is compressed, it is re-ordered and written to the output + stream. + + + + A higher number of buffer pairs enables a higher degree of + parallelism, which tends to increase the speed of compression on + multi-cpu computers. On the other hand, a higher number of buffer + pairs also implies a larger memory consumption, more active worker + threads, and a higher cpu utilization for any compression. This + property enables the application to limit its memory consumption and + CPU utilization behavior depending on requirements. + + + + For each compression "task" that occurs in parallel, there are 2 + buffers allocated: one for input and one for output. This property + sets a limit for the number of pairs. The total amount of storage + space allocated for buffering will then be (N*S*2), where N is the + number of buffer pairs, S is the size of each buffer (). By default, DotNetZip allocates 4 buffer + pairs per CPU core, so if your machine has 4 cores, and you retain + the default buffer size of 128k, then the + ParallelDeflateOutputStream will use 4 * 4 * 2 * 128kb of buffer + memory in total, or 4mb, in blocks of 128kb. If you then set this + property to 8, then the number will be 8 * 2 * 128kb of buffer + memory, or 2mb. + + + + CPU utilization will also go up with additional buffers, because a + larger number of buffer pairs allows a larger number of background + threads to compress in parallel. If you find that parallel + compression is consuming too much memory or CPU, you can adjust this + value downward. + + + + The default value is 16. Different values may deliver better or + worse results, depending on your priorities and the dynamic + performance characteristics of your storage and compute resources. + + + + This property is not the number of buffer pairs to use; it is an + upper limit. An illustration: Suppose you have an application that + uses the default value of this property (which is 16), and it runs + on a machine with 2 CPU cores. In that case, DotNetZip will allocate + 4 buffer pairs per CPU core, for a total of 8 pairs. The upper + limit specified by this property has no effect. + + + + The application can set this value at any time, but it is effective + only before the first call to Write(), which is when the buffers are + allocated. + + + + + + The size of the buffers used by the compressor threads. + + + + + The default buffer size is 128k. The application can set this value + at any time, but it is effective only before the first Write(). + + + + Larger buffer sizes implies larger memory consumption but allows + more efficient compression. Using smaller buffer sizes consumes less + memory but may result in less effective compression. For example, + using the default buffer size of 128k, the compression delivered is + within 1% of the compression delivered by the single-threaded . On the other hand, using a + BufferSize of 8k can result in a compressed data stream that is 5% + larger than that delivered by the single-threaded + DeflateStream. Excessively small buffer sizes can also cause + the speed of the ParallelDeflateOutputStream to drop, because of + larger thread scheduling overhead dealing with many many small + buffers. + + + + The total amount of storage space allocated for buffering will be + (N*S*2), where N is the number of buffer pairs, and S is the size of + each buffer (this property). There are 2 buffers used by the + compressor, one for input and one for output. By default, DotNetZip + allocates 4 buffer pairs per CPU core, so if your machine has 4 + cores, then the number of buffer pairs used will be 16. If you + accept the default value of this property, 128k, then the + ParallelDeflateOutputStream will use 16 * 2 * 128kb of buffer memory + in total, or 4mb, in blocks of 128kb. If you set this property to + 64kb, then the number will be 16 * 2 * 64kb of buffer memory, or + 2mb. + + + + + + + The CRC32 for the data that was written out, prior to compression. + + + This value is meaningful only after a call to Close(). + + + + + The total number of uncompressed bytes processed by the ParallelDeflateOutputStream. + + + This value is meaningful only after a call to Close(). + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream supports Read operations. + + + Always returns false. + + + + + Indicates whether the stream supports Write operations. + + + Returns true if the provided stream is writable. + + + + + Reading this property always throws a NotSupportedException. + + + + + Returns the current position of the output stream. + + + + Because the output gets written by a background thread, + the value may change asynchronously. Setting this + property always throws a NotSupportedException. + + + + + + Map from a distance to a distance code. + + + No side effects. _dist_code[256] and _dist_code[257] are never used. + + + + + Describes how to flush the current deflate operation. + + + The different FlushType values are useful when using a Deflate in a streaming application. + + + + No flush at all. + + + Closes the current block, but doesn't flush it to + the output. Used internally only in hypothetical + scenarios. This was supposed to be removed by Zlib, but it is + still in use in some edge cases. + + + + + Use this during compression to specify that all pending output should be + flushed to the output buffer and the output should be aligned on a byte + boundary. You might use this in a streaming communication scenario, so that + the decompressor can get all input data available so far. When using this + with a ZlibCodec, AvailableBytesIn will be zero after the call if + enough output space has been provided before the call. Flushing will + degrade compression and so it should be used only when necessary. + + + + + Use this during compression to specify that all output should be flushed, as + with FlushType.Sync, but also, the compression state should be reset + so that decompression can restart from this point if previous compressed + data has been damaged or if random access is desired. Using + FlushType.Full too often can significantly degrade the compression. + + + + Signals the end of the compression/decompression stream. + + + + The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. + + + + + None means that the data will be simply stored, with no change at all. + If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None + cannot be opened with the default zip reader. Use a different CompressionLevel. + + + + + Same as None. + + + + + The fastest but least effective compression. + + + + + A synonym for BestSpeed. + + + + + A little slower, but better, than level 1. + + + + + A little slower, but better, than level 2. + + + + + A little slower, but better, than level 3. + + + + + A little slower than level 4, but with better compression. + + + + + The default compression level, with a good balance of speed and compression efficiency. + + + + + A synonym for Default. + + + + + Pretty good compression! + + + + + Better compression than Level7! + + + + + The "best" compression, where best means greatest reduction in size of the input data stream. + This is also the slowest compression. + + + + + A synonym for BestCompression. + + + + + Describes options for how the compression algorithm is executed. Different strategies + work better on different sorts of data. The strategy parameter can affect the compression + ratio and the speed of compression but not the correctness of the compresssion. + + + + + The default strategy is probably the best for normal data. + + + + + The Filtered strategy is intended to be used most effectively with data produced by a + filter or predictor. By this definition, filtered data consists mostly of small + values with a somewhat random distribution. In this case, the compression algorithm + is tuned to compress them better. The effect of Filtered is to force more Huffman + coding and less string matching; it is a half-step between Default and HuffmanOnly. + + + + + Using HuffmanOnly will force the compressor to do Huffman encoding only, with no + string matching. + + + + + An enum to specify the direction of transcoding - whether to compress or decompress. + + + + + Used to specify that the stream should compress the data. + + + + + Used to specify that the stream should decompress the data. + + + + + A general purpose exception class for exceptions in the Zlib library. + + + + + The ZlibException class captures exception information generated + by the Zlib library. + + + + + This ctor collects a message attached to the exception. + + the message for the exception. + + + + Performs an unsigned bitwise right shift with the specified number + + Number to operate on + Ammount of bits to shift + The resulting number from the shift operation + + + + Reads a number of characters from the current source TextReader and writes + the data to the target array at the specified index. + + + The source TextReader to read from + Contains the array of characteres read from the source TextReader. + The starting index of the target array. + The maximum number of characters to read from the source TextReader. + + + The number of characters read. The number will be less than or equal to + count depending on the data available in the source TextReader. Returns -1 + if the end of the stream is reached. + + + + + Computes an Adler-32 checksum. + + + The Adler checksum is similar to a CRC checksum, but faster to compute, though less + reliable. It is used in producing RFC1950 compressed streams. The Adler checksum + is a required part of the "ZLIB" standard. Applications will almost never need to + use this class directly. + + + + + + + Calculates the Adler32 checksum. + + + + This is used within ZLIB. You probably don't need to use this directly. + + + + To compute an Adler32 checksum on a byte array: + + var adler = Adler.Adler32(0, null, 0, 0); + adler = Adler.Adler32(adler, buffer, index, length); + + + + + + Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). + + + + This class compresses and decompresses data according to the Deflate algorithm + and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. + + + + + The buffer from which data is taken. + + + + + An index into the InputBuffer array, indicating where to start reading. + + + + + The number of bytes available in the InputBuffer, starting at NextIn. + + + Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes read so far, through all calls to Inflate()/Deflate(). + + + + + Buffer to store output data. + + + + + An index into the OutputBuffer array, indicating where to start writing. + + + + + The number of bytes available in the OutputBuffer, starting at NextOut. + + + Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. + The class will update this number as calls to Inflate/Deflate are made. + + + + + Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). + + + + + used for diagnostics, when something goes wrong! + + + + + The compression level to use in this codec. Useful only in compression mode. + + + + + The number of Window Bits to use. + + + This gauges the size of the sliding window, and hence the + compression effectiveness as well as memory consumption. It's best to just leave this + setting alone if you don't know what it is. The maximum value is 15 bits, which implies + a 32k window. + + + + + The compression strategy to use. + + + This is only effective in compression. The theory offered by ZLIB is that different + strategies could potentially produce significant differences in compression behavior + for different data sets. Unfortunately I don't have any good recommendations for how + to set it differently. When I tested changing the strategy I got minimally different + compression performance. It's best to leave this property alone if you don't have a + good feel for it. Or, you may want to produce a test harness that runs through the + different strategy options and evaluates them on different file types. If you do that, + let me know your results. + + + + + Create a ZlibCodec. + + + If you use this default constructor, you will later have to explicitly call + InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress + or decompress. + + + + + Create a ZlibCodec that either compresses or decompresses. + + + Indicates whether the codec should compress (deflate) or decompress (inflate). + + + + + Initialize the inflation state. + + + It is not necessary to call this before using the ZlibCodec to inflate data; + It is implicitly called when you call the constructor. + + Z_OK if everything goes well. + + + + Initialize the inflation state with an explicit flag to + govern the handling of RFC1950 header bytes. + + + + By default, the ZLIB header defined in RFC 1950 is expected. If + you want to read a zlib stream you should specify true for + expectRfc1950Header. If you have a deflate stream, you will want to specify + false. It is only necessary to invoke this initializer explicitly if you + want to specify false. + + + whether to expect an RFC1950 header byte + pair when reading the stream of data to be inflated. + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for inflation, with the specified number of window bits. + + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if all goes well. + + + + Initialize the inflation state with an explicit flag to govern the handling of + RFC1950 header bytes. + + + + If you want to read a zlib stream you should specify true for + expectRfc1950Header. In this case, the library will expect to find a ZLIB + header, as defined in RFC + 1950, in the compressed stream. If you will be reading a DEFLATE or + GZIP stream, which does not have such a header, you will want to specify + false. + + + whether to expect an RFC1950 header byte pair when reading + the stream of data to be inflated. + The number of window bits to use. If you need to ask what that is, + then you shouldn't be calling this initializer. + Z_OK if everything goes well. + + + + Inflate the data in the InputBuffer, placing the result in the OutputBuffer. + + + You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and + AvailableBytesOut before calling this method. + + + + private void InflateBuffer() + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec decompressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); + MemoryStream ms = new MemoryStream(DecompressedBytes); + + int rc = decompressor.InitializeInflate(); + + decompressor.InputBuffer = CompressedBytes; + decompressor.NextIn = 0; + decompressor.AvailableBytesIn = CompressedBytes.Length; + + decompressor.OutputBuffer = buffer; + + // pass 1: inflate + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("inflating: " + decompressor.Message); + + ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + decompressor.NextOut = 0; + decompressor.AvailableBytesOut = buffer.Length; + rc = decompressor.Inflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("inflating: " + decompressor.Message); + + if (buffer.Length - decompressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); + } + while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); + + decompressor.EndInflate(); + } + + + + The flush to use when inflating. + Z_OK if everything goes well. + + + + Ends an inflation session. + + + Call this after successively calling Inflate(). This will cause all buffers to be flushed. + After calling this you cannot call Inflate() without a intervening call to one of the + InitializeInflate() overloads. + + Z_OK if everything goes well. + + + + I don't know what this does! + + Z_OK if everything goes well. + + + + Initialize the ZlibCodec for deflation operation. + + + The codec will use the MAX window bits and the default level of compression. + + + + int bufferSize = 40000; + byte[] CompressedBytes = new byte[bufferSize]; + byte[] DecompressedBytes = new byte[bufferSize]; + + ZlibCodec compressor = new ZlibCodec(); + + compressor.InitializeDeflate(CompressionLevel.Default); + + compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); + compressor.NextIn = 0; + compressor.AvailableBytesIn = compressor.InputBuffer.Length; + + compressor.OutputBuffer = CompressedBytes; + compressor.NextOut = 0; + compressor.AvailableBytesOut = CompressedBytes.Length; + + while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) + { + compressor.Deflate(FlushType.None); + } + + while (true) + { + int rc= compressor.Deflate(FlushType.Finish); + if (rc == ZlibConstants.Z_STREAM_END) break; + } + + compressor.EndDeflate(); + + + + Z_OK if all goes well. You generally don't need to check the return code. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. + + + The codec will use the maximum window bits (15) and the specified + CompressionLevel. It will emit a ZLIB stream as it compresses. + + The compression level for the codec. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the explicit flag governing whether to emit an RFC1950 header byte pair. + + + The codec will use the maximum window bits (15) and the specified CompressionLevel. + If you want to generate a zlib stream, you should specify true for + wantRfc1950Header. In this case, the library will emit a ZLIB + header, as defined in RFC + 1950, in the compressed stream. + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, + and the specified number of window bits. + + + The codec will use the specified number of window bits and the specified CompressionLevel. + + The compression level for the codec. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Initialize the ZlibCodec for deflation operation, using the specified + CompressionLevel, the specified number of window bits, and the explicit flag + governing whether to emit an RFC1950 header byte pair. + + + The compression level for the codec. + whether to emit an initial RFC1950 byte pair in the compressed stream. + the number of window bits to use. If you don't know what this means, don't use this method. + Z_OK if all goes well. + + + + Deflate one batch of data. + + + You must have set InputBuffer and OutputBuffer before calling this method. + + + + private void DeflateBuffer(CompressionLevel level) + { + int bufferSize = 1024; + byte[] buffer = new byte[bufferSize]; + ZlibCodec compressor = new ZlibCodec(); + + Console.WriteLine("\n============================================"); + Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); + MemoryStream ms = new MemoryStream(); + + int rc = compressor.InitializeDeflate(level); + + compressor.InputBuffer = UncompressedBytes; + compressor.NextIn = 0; + compressor.AvailableBytesIn = UncompressedBytes.Length; + + compressor.OutputBuffer = buffer; + + // pass 1: deflate + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.None); + + if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) + throw new Exception("deflating: " + compressor.Message); + + ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + // pass 2: finish and flush + do + { + compressor.NextOut = 0; + compressor.AvailableBytesOut = buffer.Length; + rc = compressor.Deflate(FlushType.Finish); + + if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) + throw new Exception("deflating: " + compressor.Message); + + if (buffer.Length - compressor.AvailableBytesOut > 0) + ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); + } + while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); + + compressor.EndDeflate(); + + ms.Seek(0, SeekOrigin.Begin); + CompressedBytes = new byte[compressor.TotalBytesOut]; + ms.Read(CompressedBytes, 0, CompressedBytes.Length); + } + + + whether to flush all data as you deflate. Generally you will want to + use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to + flush everything. + + Z_OK if all goes well. + + + + End a deflation session. + + + Call this after making a series of one or more calls to Deflate(). All buffers are flushed. + + Z_OK if all goes well. + + + + Reset a codec for another deflation session. + + + Call this to reset the deflation state. For example if a thread is deflating + non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first + block and before the next Deflate(None) of the second block. + + Z_OK if all goes well. + + + + Set the CompressionStrategy and CompressionLevel for a deflation session. + + the level of compression to use. + the strategy to use for compression. + Z_OK if all goes well. + + + + Set the dictionary to be used for either Inflation or Deflation. + + The dictionary bytes to use. + Z_OK if all goes well. + + + + The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. + + + + + A bunch of constants used in the Zlib interface. + + + + + The maximum number of window bits for the Deflate algorithm. + + + + + The default number of window bits for the Deflate algorithm. + + + + + indicates everything is A-OK + + + + + Indicates that the last operation reached the end of the stream. + + + + + The operation ended in need of a dictionary. + + + + + There was an error with the stream - not enough data, not open and readable, etc. + + + + + There was an error with the data - not enough data, bad data, etc. + + + + + There was an error with the working buffer. + + + + + The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. + + + + + The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. + + + + + Represents a Zlib stream for compression or decompression. + + + + + The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any + stream. + + + Using this stream, applications can compress or decompress data via + stream Read() and Write() operations. Either compresssion or + decompression can occur through either reading or writing. The compression + format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed + Data Format Specification version 3.3". This implementation of ZLIB always uses + DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE + Compressed Data Format Specification version 1.3.") + + + The ZLIB format allows for varying compression methods, window sizes, and dictionaries. + This implementation always uses the DEFLATE compression method, a preset dictionary, + and 15 window bits by default. + + + + This class is similar to , except that it adds the + RFC1950 header and trailer bytes to a compressed stream when compressing, or expects + the RFC1950 header and trailer bytes when decompressing. It is also similar to the + . + + + + + + + + Create a ZlibStream using the specified CompressionMode. + + + + + When mode is CompressionMode.Compress, the ZlibStream + will use the default compression level. The "captive" stream will be + closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress a file, and writes the + compressed data to another file. + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream which will be read or written. + Indicates whether the ZlibStream will compress or decompress. + + + + Create a ZlibStream using the specified CompressionMode and + the specified CompressionLevel. + + + + + + When mode is CompressionMode.Decompress, the level parameter is ignored. + The "captive" stream will be closed when the ZlibStream is closed. + + + + + + This example uses a ZlibStream to compress data from a file, and writes the + compressed data to another file. + + + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (Stream compressor = new ZlibStream(raw, + CompressionMode.Compress, + CompressionLevel.BestCompression)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + } + + + + Using input As Stream = File.OpenRead(fileToCompress) + Using raw As FileStream = File.Create(fileToCompress & ".zlib") + Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + End Using + + + + The stream to be read or written while deflating or inflating. + Indicates whether the ZlibStream will compress or decompress. + A tuning knob to trade speed for effectiveness. + + + + Create a ZlibStream using the specified CompressionMode, and + explicitly specify whether the captive stream should be left open after + Deflation or Inflation. + + + + + + When mode is CompressionMode.Compress, the ZlibStream will use + the default compression level. + + + + This constructor allows the application to request that the captive stream + remain open after the deflation or inflation occurs. By default, after + Close() is called on the stream, the captive stream is also + closed. In some cases this is not desired, for example if the stream is a + that will be re-read after + compression. Specify true for the parameter to leave the stream + open. + + + + See the other overloads of this constructor for example code. + + + + + The stream which will be read or written. This is called the + "captive" stream in other places in this documentation. + Indicates whether the ZlibStream will compress or decompress. + true if the application would like the stream to remain + open after inflation/deflation. + + + + Create a ZlibStream using the specified CompressionMode + and the specified CompressionLevel, and explicitly specify + whether the stream should be left open after Deflation or Inflation. + + + + + + This constructor allows the application to request that the captive + stream remain open after the deflation or inflation occurs. By + default, after Close() is called on the stream, the captive + stream is also closed. In some cases this is not desired, for example + if the stream is a that will be + re-read after compression. Specify true for the parameter to leave the stream open. + + + + When mode is CompressionMode.Decompress, the level parameter is + ignored. + + + + + + + This example shows how to use a ZlibStream to compress the data from a file, + and store the result into another file. The filestream remains open to allow + additional data to be written to it. + + + using (var output = System.IO.File.Create(fileToCompress + ".zlib")) + { + using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) + { + using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) + { + byte[] buffer = new byte[WORKING_BUFFER_SIZE]; + int n; + while ((n= input.Read(buffer, 0, buffer.Length)) != 0) + { + compressor.Write(buffer, 0, n); + } + } + } + // can write additional data to the output stream here + } + + + Using output As FileStream = File.Create(fileToCompress & ".zlib") + Using input As Stream = File.OpenRead(fileToCompress) + Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) + Dim buffer As Byte() = New Byte(4096) {} + Dim n As Integer = -1 + Do While (n <> 0) + If (n > 0) Then + compressor.Write(buffer, 0, n) + End If + n = input.Read(buffer, 0, buffer.Length) + Loop + End Using + End Using + ' can write additional data to the output stream here. + End Using + + + + The stream which will be read or written. + + Indicates whether the ZlibStream will compress or decompress. + + + true if the application would like the stream to remain open after + inflation/deflation. + + + + A tuning knob to trade speed for effectiveness. This parameter is + effective only when mode is CompressionMode.Compress. + + + + + Dispose the stream. + + + + This may or may not result in a Close() call on the captive + stream. See the constructors that have a leaveOpen parameter + for more information. + + + This method may be invoked in two distinct scenarios. If disposing + == true, the method has been called directly or indirectly by a + user's code, for example via the public Dispose() method. In this + case, both managed and unmanaged resources can be referenced and + disposed. If disposing == false, the method has been called by the + runtime from inside the object finalizer and this method should not + reference other objects; in that case only unmanaged resources must + be referenced or disposed. + + + + indicates whether the Dispose method was invoked by user code. + + + + + Flush the stream. + + + + + Read data from the stream. + + + + + + If you wish to use the ZlibStream to compress data while reading, + you can create a ZlibStream with CompressionMode.Compress, + providing an uncompressed data stream. Then call Read() on that + ZlibStream, and the data read will be compressed. If you wish to + use the ZlibStream to decompress data while reading, you can create + a ZlibStream with CompressionMode.Decompress, providing a + readable compressed data stream. Then call Read() on that + ZlibStream, and the data will be decompressed as it is read. + + + + A ZlibStream can be used for Read() or Write(), but + not both. + + + + + + The buffer into which the read data should be placed. + + + the offset within that data array to put the first byte read. + + the number of bytes to read. + + the number of bytes read + + + + Calling this method always throws a . + + + The offset to seek to.... + IF THIS METHOD ACTUALLY DID ANYTHING. + + + The reference specifying how to apply the offset.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + nothing. This method always throws. + + + + Calling this method always throws a . + + + The new value for the stream length.... IF + THIS METHOD ACTUALLY DID ANYTHING. + + + + + Write data to the stream. + + + + + + If you wish to use the ZlibStream to compress data while writing, + you can create a ZlibStream with CompressionMode.Compress, + and a writable output stream. Then call Write() on that + ZlibStream, providing uncompressed data as input. The data sent to + the output stream will be the compressed form of the data written. If you + wish to use the ZlibStream to decompress data while writing, you + can create a ZlibStream with CompressionMode.Decompress, and a + writable output stream. Then call Write() on that stream, + providing previously compressed data. The data sent to the output stream + will be the decompressed form of the data written. + + + + A ZlibStream can be used for Read() or Write(), but not both. + + + The buffer holding data to write to the stream. + the offset within that data array to find the first byte to write. + the number of bytes to write. + + + + Compress a string into a byte array using ZLIB. + + + + Uncompress it with . + + + + + + + + A string to compress. The string will first be encoded + using UTF8, then compressed. + + + The string in compressed form + + + + Compress a byte array into a new byte array using ZLIB. + + + + Uncompress it with . + + + + + + + A buffer to compress. + + + The data in compressed form + + + + Uncompress a ZLIB-compressed byte array into a single string. + + + + + + + A buffer containing ZLIB-compressed data. + + + The uncompressed string + + + + Uncompress a ZLIB-compressed byte array into a byte array. + + + + + + + A buffer containing ZLIB-compressed data. + + + The data in uncompressed form + + + + This property sets the flush behavior on the stream. + Sorry, though, not sure exactly how to describe all the various settings. + + + + + The size of the working buffer for the compression codec. + + + + + The working buffer is used for all stream operations. The default size is + 1024 bytes. The minimum size is 128 bytes. You may get better performance + with a larger buffer. Then again, you might not. You would have to test + it. + + + + Set this before the first call to Read() or Write() on the + stream. If you try to set it afterwards, it will throw. + + + + + Returns the total number of bytes input so far. + + + Returns the total number of bytes output so far. + + + + Indicates whether the stream can be read. + + + The return value depends on whether the captive stream supports reading. + + + + + Indicates whether the stream supports Seek operations. + + + Always returns false. + + + + + Indicates whether the stream can be written. + + + The return value depends on whether the captive stream supports writing. + + + + + Reading this property always throws a . + + + + + The position of the stream pointer. + + + + Setting this property always throws a . Reading will return the total bytes + written out, if used in writing, or the total bytes read in, if used in + reading. The count may refer to compressed bytes or uncompressed bytes, + depending on how you've used the stream. + + + + + Computes a CRC-32. The CRC-32 algorithm is parameterized - you + can set the polynomial and enable or disable bit + reversal. This can be used for GZIP, BZip2, or ZIP. + + + This type is used internally by DotNetZip; it is generally not used + directly by applications wishing to create, read, or manipulate zip + archive files. + + + + + Returns the CRC32 for the specified stream. + + The stream over which to calculate the CRC32 + the CRC32 calculation + + + + Returns the CRC32 for the specified stream, and writes the input into the + output stream. + + The stream over which to calculate the CRC32 + The stream into which to deflate the input + the CRC32 calculation + + + + Get the CRC32 for the given (word,byte) combo. This is a + computation defined by PKzip for PKZIP 2.0 (weak) encryption. + + The word to start with. + The byte to combine it with. + The CRC-ized result. + + + + Update the value for the running CRC32 using the given block of bytes. + This is useful when using the CRC32() class in a Stream. + + block of bytes to slurp + starting point in the block + how many bytes within the block to slurp + + + + Process one byte in the CRC. + + the byte to include into the CRC . + + + + Process a run of N identical bytes into the CRC. + + + + This method serves as an optimization for updating the CRC when a + run of identical bytes is found. Rather than passing in a buffer of + length n, containing all identical bytes b, this method accepts the + byte value and the length of the (virtual) buffer - the length of + the run. + + + the byte to include into the CRC. + the number of times that byte should be repeated. + + + + Combines the given CRC32 value with the current running total. + + + This is useful when using a divide-and-conquer approach to + calculating a CRC. Multiple threads can each calculate a + CRC32 on a segment of the data, and then combine the + individual CRC32 values at the end. + + the crc value to be combined with this one + the length of data the CRC value was calculated on + + + + Create an instance of the CRC32 class using the default settings: no + bit reversal, and a polynomial of 0xEDB88320. + + + + + Create an instance of the CRC32 class, specifying whether to reverse + data bits or not. + + + specify true if the instance should reverse data bits. + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here. In the CRC-32 used by GZIP and PKZIP, the bits are not + reversed; Therefore if you want a CRC32 with compatibility with + those, you should pass false. + + + + + + Create an instance of the CRC32 class, specifying the polynomial and + whether to reverse data bits or not. + + + The polynomial to use for the CRC, expressed in the reversed (LSB) + format: the highest ordered bit in the polynomial value is the + coefficient of the 0th power; the second-highest order bit is the + coefficient of the 1 power, and so on. Expressed this way, the + polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. + + + specify true if the instance should reverse data bits. + + + + + In the CRC-32 used by BZip2, the bits are reversed. Therefore if you + want a CRC32 with compatibility with BZip2, you should pass true + here for the reverseBits parameter. In the CRC-32 used by + GZIP and PKZIP, the bits are not reversed; Therefore if you want a + CRC32 with compatibility with those, you should pass false for the + reverseBits parameter. + + + + + + Reset the CRC-32 class - clear the CRC "remainder register." + + + + Use this when employing a single instance of this class to compute + multiple, distinct CRCs on multiple, distinct data blocks. + + + + + + Indicates the total number of bytes applied to the CRC. + + + + + Indicates the current CRC for all blocks slurped in. + + + + + A Stream that calculates a CRC32 (a checksum) on all bytes read, + or on all bytes written. + + + + + This class can be used to verify the CRC of a ZipEntry when + reading from a stream, or to calculate a CRC when writing to a + stream. The stream should be used to either read, or write, but + not both. If you intermix reads and writes, the results are not + defined. + + + + This class is intended primarily for use internally by the + DotNetZip library. + + + + + + The default constructor. + + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). The stream uses the default CRC32 + algorithm, which implies a polynomial of 0xEDB88320. + + + The underlying stream + + + + The constructor allows the caller to specify how to handle the + underlying stream at close. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read. + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + Instances returned from this constructor will leave the underlying + stream open upon Close(). + + + The underlying stream + The length of the stream to slurp + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(). + + + + The stream uses the default CRC32 algorithm, which implies a + polynomial of 0xEDB88320. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + + + + A constructor allowing the specification of the length of the stream + to read, as well as whether to keep the underlying stream open upon + Close(), and the CRC32 instance to use. + + + + The stream uses the specified CRC32 instance, which allows the + application to specify how the CRC gets calculated. + + + The underlying stream + The length of the stream to slurp + true to leave the underlying stream + open upon close of the CrcCalculatorStream; false otherwise. + the CRC32 instance to use to calculate the CRC32 + + + + Read from the stream + + the buffer to read + the offset at which to start + the number of bytes to read + the number of bytes actually read + + + + Write to the stream. + + the buffer from which to write + the offset at which to start writing + the number of bytes to write + + + + Flush the stream. + + + + + Seeking is not supported on this stream. This method always throws + + + N/A + N/A + N/A + + + + This method always throws + + + N/A + + + + Closes the stream. + + + + + Gets the total number of bytes run through the CRC32 calculator. + + + + This is either the total number of bytes read, or the total number of + bytes written, depending on the direction of this stream. + + + + + Provides the current CRC for all blocks slurped in. + + + + The running total of the CRC is kept as data is written or read + through the stream. read this property after all reads or writes to + get an accurate CRC for the entire stream. + + + + + + Indicates whether the underlying stream will be left open when the + CrcCalculatorStream is Closed. + + + + Set this at any point before calling . + + + + + + Indicates whether the stream supports reading. + + + + + Indicates whether the stream supports seeking. + + + + Always returns false. + + + + + + Indicates whether the stream supports writing. + + + + + Returns the length of the underlying stream. + + + + + The getter for this property returns the total bytes read. + If you use the setter, it will throw + . + + +
+
diff --git a/Source/Platforms/DotNet/Ionic.Zip.Reduced.dll b/Source/Platforms/DotNet/Ionic.Zip.Reduced.dll new file mode 100644 index 000000000..b416b46e7 --- /dev/null +++ b/Source/Platforms/DotNet/Ionic.Zip.Reduced.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4009288982e4c30d22b544167f72db882e34f0fda7d4061b2c02c84688c0ed1 +size 253440 diff --git a/Source/Platforms/DotNet/Microsoft.VisualStudio.Setup.Configuration.Interop.dll b/Source/Platforms/DotNet/Microsoft.VisualStudio.Setup.Configuration.Interop.dll new file mode 100644 index 000000000..993fcb2f3 --- /dev/null +++ b/Source/Platforms/DotNet/Microsoft.VisualStudio.Setup.Configuration.Interop.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:839f15d54bbbe5a3c297c9b46b62f69f6e09694b694be3bb9b1450b012403168 +size 28992 diff --git a/Source/Platforms/DotNet/Microsoft.VisualStudio.Setup.Configuration.Interop.xml b/Source/Platforms/DotNet/Microsoft.VisualStudio.Setup.Configuration.Interop.xml new file mode 100644 index 000000000..20bdc0763 --- /dev/null +++ b/Source/Platforms/DotNet/Microsoft.VisualStudio.Setup.Configuration.Interop.xml @@ -0,0 +1,886 @@ + + + + Microsoft.VisualStudio.Setup.Configuration.Interop + + + + + Information about errors that occured during install of an instance. + + + May also implement . + + + + + Gets the HRESULT of the error. + + The HRESULT of the error. + + + + Gets the class name of the error (exception). + + The class name of the error (exception). + + + + Gets the error message. + + The error message. + + + + Information about the error state of an instance. + + + + + Gets an array of failed package references. + + An array of failed package references. + + + + Gets an array of skipped package references. + + An array of skipped package references. + + + + Gets the path to the error log. + + The path to the error log. + + + + Gets the path to the main setup log. + + The path to the main setup log. + + + + Gets the runtime error that occured during install of an instance. + + The runtime error that occured during install of an instance. + + + + A reference to a failed package. + + + You can enumerate all properties of basic types by casting to an . + + + + + Gets the general package identifier. + + The general package identifier. + + + + Gets the version of the package. + + The version of the package. + + + + Gets the target process architecture of the package. + + The target process architecture of the package. + + + + Gets the language and optional region identifier. + + The language and optional region identifier. + + + + Gets the build branch of the package. + + The build branch of the package. + + + + Gets the type of the package. + + The type of the package. + + + + Gets the unique identifier consisting of all defined tokens. + + The unique identifier consisting of all defined tokens. + + + + Gets a value indicating whether the package refers to an external extension. + + A value indicating whether the package refers to an external extension. + + + + Gets the path to the optional package log. + + The path to the optional package log. + + + + Gets the description of the package failure. + + The description of the package failure. + + + + Gets the signature to use for feedback reporting. + + The signature to use for feedback reporting. + + + + Gets the array of details for this package failure. + + An array of details for this package failure. + + + + Gets an array of packages affected by this package failure. + + An array of packages affected by this package failure. This may be null. + + + + Gets the action attempted when the package failed. + + The action, eg. Install, Download, etc. + + + + Gets the return code of the failure. + + The return code. + + + + A reference to a failed package. + + + You can enumerate all properties of basic types by casting to an . + + + + + Gets the general package identifier. + + The general package identifier. + + + + Gets the version of the package. + + The version of the package. + + + + Gets the target process architecture of the package. + + The target process architecture of the package. + + + + Gets the language and optional region identifier. + + The language and optional region identifier. + + + + Gets the build branch of the package. + + The build branch of the package. + + + + Gets the type of the package. + + The type of the package. + + + + Gets the unique identifier consisting of all defined tokens. + + The unique identifier consisting of all defined tokens. + + + + Gets a value indicating whether the package refers to an external extension. + + A value indicating whether the package refers to an external extension. + + + + Gets the path to the optional package log. + + The path to the optional package log. + + + + Gets the description of the package failure. + + The description of the package failure. + + + + Gets the signature to use for feedback reporting. + + The signature to use for feedback reporting. + + + + Gets the array of details for this package failure. + + An array of details for this package failure. + + + + Gets an array of packages affected by this package failure. + + An array of packages affected by this package failure. This may be null. + + + + An enumerator of installed objects. + + + + + Retrieves the next set of product instances in the enumeration sequence. + + The number of product instances to retrieve. + A pointer to an array of . + A pointer to the number of product instances retrieved. If is 1 this parameter may be NULL. + + + + Skips the next set of product instances in the enumeration sequence. + + The number of product instances to skip. + + + + Resets the enumeration sequence to the beginning. + + + + + Creates a new enumeration object in the same state as the current enumeration object: the new object points to the same place in the enumeration sequence. + + A pointer to a pointer to a new interface. If the method fails, this parameter is undefined. + + + + Information about a catalog used to install an instance. + + + + + Gets catalog information properties. + + An containing catalog information properties. + The property is not defined or invalid. + + + + Gets a value indicating whether the catalog is a prerelease. + + A value indicating whether the catalog is a prerelease. + The property is not defined or invalid. + + + + Provides localized properties of an instance of a product. + + + + + Gets localized product-specific properties. + + An of localized product-specific properties, or null if no properties are defined. + + + + Gets localized channel-specific properties. + + An of localized channel-specific properties, or null if no properties are defined. + + + + The state of an . + + + + + The instance state has not been determined. + + + + + The instance installation path exists. + + + + + A product is registered to the instance. + + + + + No reboot is required for the instance. + + + + + No errors were reported for the instance. + + + + + The instance represents a complete install. + + + + + Gets information about product instances set up on the machine. + + + + + Enumerates all launchable product instances installed. + + An enumeration of installed product instances. + + + + Gets the instance for the current process path. + + The instance for the current process path. + + The returned instance may not be launchable. + + + + + Gets the instance for the given path. + + Path used to determine instance + The instance for the given path. + + The returned instance may not be launchable. + + + + + Enumerates all product instances. + + An enumeration of all product instances. + + + + Gets information about product instances installed on the machine. + + + + + Enumerates all launchable product instances installed. + + An enumeration of installed product instances. + + + + Gets the instance for the current process path. + + The instance for the current process path. + + The returned instance may not be launchable. + + + + + Gets the instance for the given path. + + Path used to determine instance + The instance for the given path. + + The returned instance may not be launchable. + + + + + Information about the error state of an instance. + + + + + Gets an array of failed package references. + + An array of failed package references. + + + + Gets an array of skipped package references. + + An array of skipped package references. + + + + Information about the error state of an instance. + + + + + Gets an array of failed package references. + + An array of failed package references. + + + + Gets an array of skipped package references. + + An array of skipped package references. + + + + Gets the path to the error log. + + The path to the error log. + + + + Gets the path to the main setup log. + + The path to the main setup log. + + + + A reference to a failed package. + + + You can enumerate all properties of basic types by casting to an . + + + + + Gets the general package identifier. + + The general package identifier. + + + + Gets the version of the package. + + The version of the package. + + + + Gets the target process architecture of the package. + + The target process architecture of the package. + + + + Gets the language and optional region identifier. + + The language and optional region identifier. + + + + Gets the build branch of the package. + + The build branch of the package. + + + + Gets the type of the package. + + The type of the package. + + + + Gets the unique identifier consisting of all defined tokens. + + The unique identifier consisting of all defined tokens. + + + + Gets a value indicating whether the package refers to an external extension. + + A value indicating whether the package refers to an external extension. + + + + Helper functions. + + + + + Parses a dotted quad version string into a 64-bit unsigned integer. + + The dotted quad version string to parse, e.g. 1.2.3.4. + A 64-bit unsigned integer representing the version. You can compare this to other versions. + + + + Parses a dotted quad version string into a 64-bit unsigned integer. + + The string containing 1 or 2 dotted quad version strings to parse, e.g. [1.0,) that means 1.0.0.0 or newer. + A 64-bit unsigned integer representing the minimum version, which may be 0. You can compare this to other versions. + A 64-bit unsigned integer representing the maximum version, which may be MAXULONGLONG. You can compare this to other versions. + + + + Information about an instance of a product. + + + You can enumerate all properties of basic types by casting to an . + + + + + Gets the instance identifier (should match the name of the parent instance directory). + + The instance identifier. + + + + Gets the local date and time when the installation was originally installed. + + The local date and time when the installation was originally installed. + + + + Gets the unique name of the installation, often indicating the branch and other information used for telemetry. + + The unique name of the installation, often indicating the branch and other information used for telemetry. + + + + Gets the path to the installation root of the product. + + The path to the installation root of the product. + + + + Gets the version of the product installed in this instance. + + The version of the product installed in this instance. + + + + Gets the display name (title) of the product installed in this instance. + + The LCID for the display name. + The display name (title) of the product installed in this instance. + + + + Gets the description of the product installed in this instance. + + The LCID for the description. + The description of the product installed in this instance. + + + + Resolves the optional relative path to the root path of the instance. + + A relative path within the instance to resolve, or NULL to get the root path. + The full path to the optional relative path within the instance. If the relative path is NULL, the root path will always terminate in a backslash. + + + + Gets the state of the instance. + + The state of the instance. + + + + Gets an array of package references registered to the instance. + + An array of package references registered to the instance. + + + + Gets a package reference to the product registered to the instance + + A package reference to the product registered to the instance. This may be null if does not return . + + + + Gets the relative path to the product application, if available. + + The relative path to the product application, if available. + + + + Gets the error state of the instance, if available. + + The error state of the instance, if available. + + + + Gets a value indicating whether the instance can be launched. + + Whether the instance can be launched. + + An instance could have had errors during install but still be launched. Some features may not work correctly, but others will. + + + + + Gets a value indicating whether the instance is complete. + + Whether the instance is complete. + + An instance is complete if it had no errors during install, resume, or repair. + + + + + Gets product-specific properties. + + An of product-specific properties, or null if no properties are defined. + + + + Gets the directory path to the setup engine that installed the instance. + + The directory path to the setup engine that installed the instance. + + + + Information about an instance of a product. + + + You can enumerate all properties of basic types by casting to an . + + + + + Gets the instance identifier (should match the name of the parent instance directory). + + The instance identifier. + + + + Gets the local date and time when the installation was originally installed. + + The local date and time when the installation was originally installed. + + + + Gets the unique name of the installation, often indicating the branch and other information used for telemetry. + + The unique name of the installation, often indicating the branch and other information used for telemetry. + + + + Gets the path to the installation root of the product. + + The path to the installation root of the product. + + + + Gets the version of the product installed in this instance. + + The version of the product installed in this instance. + + + + Gets the display name (title) of the product installed in this instance. + + The LCID for the display name. + The display name (title) of the product installed in this instance. + + + + Gets the description of the product installed in this instance. + + The LCID for the description. + The description of the product installed in this instance. + + + + Resolves the optional relative path to the root path of the instance. + + A relative path within the instance to resolve, or NULL to get the root path. + The full path to the optional relative path within the instance. If the relative path is NULL, the root path will always terminate in a backslash. + + + + Provides localized named properties. + + + + + Gets an array of property names in this property store. + + The LCID for the property names. + An array of property names in this property store. + + + + Gets the value of a named property in this property store. + + The name of the property to get. + The LCID for the property. + The value of the property. + + + + A reference to a package. + + + You can enumerate all properties of basic types by casting to an . + + + + + Gets the general package identifier. + + The general package identifier. + + + + Gets the version of the package. + + The version of the package. + + + + Gets the target process architecture of the package. + + The target process architecture of the package. + + + + Gets the language and optional region identifier. + + The language and optional region identifier. + + + + Gets the build branch of the package. + + The build branch of the package. + + + + Gets the type of the package. + + The type of the package. + + + + Gets the unique identifier consisting of all defined tokens. + + The unique identifier consisting of all defined tokens. + + + + Gets a value indicating whether the package refers to an external extension. + + A value indicating whether the package refers to an external extension. + + + + A reference to a product package. + + + + + Gets the general package identifier. + + The general package identifier. + + + + Gets the version of the package. + + The version of the package. + + + + Gets the target process architecture of the package. + + The target process architecture of the package. + + + + Gets the language and optional region identifier. + + The language and optional region identifier. + + + + Gets the build branch of the package. + + The build branch of the package. + + + + Gets the type of the package. + + The type of the package. + + + + Gets the unique identifier consisting of all defined tokens. + + The unique identifier consisting of all defined tokens. + + + + Gets a value indicating whether the package refers to an external extension. + + A value indicating whether the package refers to an external extension. + + + + Gets a value indicating whether the product package is installed. + + A value indicating whether the product package is installed. + + + + Provides named properties. + + + You can get this from an , , or derivative. + + + + + Gets an array of property names in this property store. + + An array of property names in this property store. + + + + Gets the value of a named property in this property store. + + The name of the property to get. + The value of the property. + + + + The implementation of . + + + + + Class that implements . + + + + diff --git a/Source/Platforms/DotNet/Newtonsoft.Json.dll b/Source/Platforms/DotNet/Newtonsoft.Json.dll new file mode 100644 index 000000000..17df31d86 --- /dev/null +++ b/Source/Platforms/DotNet/Newtonsoft.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:616780417730a6371909713a2d8150347870e67ed52803642caef37e8bda1891 +size 630272 diff --git a/Source/Platforms/DotNet/Newtonsoft.Json.pdb b/Source/Platforms/DotNet/Newtonsoft.Json.pdb new file mode 100644 index 000000000..68e8489b6 --- /dev/null +++ b/Source/Platforms/DotNet/Newtonsoft.Json.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9d4fc76d2ef9b0cd7b88da95f4894d9cc924703af0b02e052f8e78446f75e2d9 +size 239080 diff --git a/Source/Platforms/DotNet/Newtonsoft.Json.xml b/Source/Platforms/DotNet/Newtonsoft.Json.xml new file mode 100644 index 000000000..fb9404249 --- /dev/null +++ b/Source/Platforms/DotNet/Newtonsoft.Json.xml @@ -0,0 +1,10613 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets a value indicating whether integer values are allowed when deserializing. + The default value is true. + + true if integers are allowed when deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the used when serializing the property's collection items. + + The collection's items . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Clears all the cached types, attributes and methods to release references to any types of the other assemblies. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified difference to the other object of the same type. and writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + The reference object. + + + + Serializes the specified difference to the other object of the same type. Writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + The reference object. + + + + Serializes the specified difference to the other object of the same type. Writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + The reference object. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + The reference object. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + + The JSON line info handling. + + + + Specifies the settings used when merging JSON. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A , or null. + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + The JSON writer. + + + + + + Gets the size of the serialize stack (amount of the objects serialized in the hierachy before the current). + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Helper utilities. + + + + + Compares two objects data. + + The object a. + The object b. + True if both objects are equal, otherwise false. + + + + The custom value comparision callback. + + + + + The default implementation of the values comparision function. + + The object a. + The object b. + True if both objects are equal, otherwise false. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + diff --git a/Source/Platforms/Editor/Windows/.gitignore b/Source/Platforms/Editor/Windows/.gitignore new file mode 100644 index 000000000..c07cf8bfe --- /dev/null +++ b/Source/Platforms/Editor/Windows/.gitignore @@ -0,0 +1,2 @@ +!Binaries/ +!*.* diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/Browsers/Compat.browser b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/machine.config b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/machine.config new file mode 100644 index 000000000..2577c81dd --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/machine.config @@ -0,0 +1,280 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/settings.map b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/settings.map new file mode 100644 index 000000000..9a52ccc02 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/web.config b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/web.config new file mode 100644 index 000000000..e1428f8c3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/2.0/web.config @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/Browsers/Compat.browser b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/machine.config b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/machine.config new file mode 100644 index 000000000..f3b71c43c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/machine.config @@ -0,0 +1,307 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/settings.map b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/web.config b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/web.config new file mode 100644 index 000000000..2a7dfd2ed --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.0/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/Browsers/Compat.browser b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/machine.config b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/machine.config new file mode 100644 index 000000000..455709536 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/machine.config @@ -0,0 +1,310 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/settings.map b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/web.config b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/web.config new file mode 100644 index 000000000..324c529f0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/4.5/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/browscap.ini b/Source/Platforms/Editor/Windows/Mono/etc/mono/browscap.ini new file mode 100644 index 000000000..1267e1deb --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/browscap.ini @@ -0,0 +1,16979 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT + +[GJK_Browscap_Version] +Version=4476 +Released=Wed, 17 Jun 2009 06:30:21 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser=DefaultProperties +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser=Ask +Frames=true +Tables=true +Crawler=true + +[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser=Teoma + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser=AskJeeves + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser=Baidu +Frames=true +Tables=true +Crawler=true + +[BaiduImageSpider*] +Parent=Baidu +Browser=BaiduImageSpider + +[Baiduspider*] +Parent=Baidu +Browser=BaiDu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser=Google +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot-Mobile +Frames=false +IFrames=false +Tables=false + +[*Google Wireless Transcoder*] +Parent=Google +Browser=Google Wireless Transcoder + +[AdsBot-Google (?http://www.google.com/adsbot.html)] +Parent=Google +Browser=AdsBot-Google + +[Feedfetcher-Google-iGoogleGadgets;*] +Parent=Google +Browser=iGoogleGadgets +isBanned=true +isSyndicationReader=true + +[Feedfetcher-Google;*] +Parent=Google +Browser=Feedfetcher-Google +isBanned=true +isSyndicationReader=true + +[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] +Parent=Google +Browser=Google OpenSocial + +[Google-Site-Verification/1.0] +Parent=Google +Browser=Google-Site-Verification + +[Google-Sitemaps/*] +Parent=Google +Browser=Google-Sitemaps + +[Googlebot-Image/*] +Parent=Google +Browser=Googlebot-Image +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser=googlebot-urlconsole + +[Googlebot-Video/1.0] +Parent=Google +Browser=Google-Video + +[Googlebot/2.1 (?http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/Test*] +Parent=Google +Browser=Googlebot/Test + +[gsa-crawler*] +Parent=Google +Browser=Google Search Appliance +isBanned=true + +[Mediapartners-Google*] +Parent=Google +Browser=Mediapartners-Google + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser=Google Desktop + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser=Google Toolbar +isBanned=true + +[Mozilla/5.0 (compatible; Google Keyword Tool;*)] +Parent=Google +Browser=Google Keyword Tool + +[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] +Parent=Google +Browser=Google Webmaster Tools + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser=Inktomi +Frames=true +Tables=true +Crawler=true + +[* (compatible;YahooSeeker/M1A1-R2D2; *)] +Parent=Inktomi +Browser=YahooSeeker-Mobile +Frames=false +Tables=false + +[Mozilla/4.0] +Parent=Inktomi + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser=Yahoo! RobotStudy +isBanned=true + +[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMC + +[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMF + +[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] +Parent=Inktomi +Browser=Y!J-AGENT/BMI + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Directory Engine + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser=Yahoo! Slurp China + +[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp + +[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] +Parent=Inktomi +Browser=Yahoo! Verifier +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser=Slurp/cat + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] +Parent=Inktomi +Browser=Yahoo-MMCrawler +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Scooter/*] +Parent=Inktomi +Browser=Scooter + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser=Scooter/3.3Y!CrawlX +Version=3.3 +MajorVer=3 +MinorVer=3 + +[slurp] +Parent=Inktomi +Browser=slurp + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser=Y!J-BSC +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser=Y!J-SRD +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser=Yahoo Mindset + +[Yahoo Pipes*] +Parent=Inktomi +Browser=Yahoo Pipes + +[Yahoo! Mindset] +Parent=Inktomi +Browser=Yahoo! Mindset + +[Yahoo! Slurp/Site Explorer] +Parent=Inktomi +Browser=Yahoo! Site Explorer + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser=Yahoo-Blogs + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser=Yahoo-MMAudVid + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser=Yahoo-MMCrawler +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser=YahooFeedSeeker +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser=YahooSeeker +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser=YahooSeeker/CafeKelsa + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser=YahooVideoSearch + +[YahooYSMcm*] +Parent=Inktomi +Browser=YahooYSMcm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser=MSN +Frames=true +Tables=true +Crawler=true + +[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=adidxbot + +[librabot/1.0 (*)] +Parent=MSN +Browser=librabot + +[llssbot/1.0] +Parent=MSN +Browser=llssbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSMOBOT/1.1*] +Parent=MSN +Browser=msnbot-mobile +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-Academic/1.0*] +Parent=MSN +Browser=MSNBot-Academic +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.0*] +Parent=MSN +Browser=msnbot-media +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.1*] +Parent=MSN +Browser=msnbot-media +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-News/1.0*] +Parent=MSN +Browser=MSNBot-News +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSNBot-NewsBlogs/1.0*] +Parent=MSN +Browser=MSNBot-NewsBlogs +Version=1 +MajorVer=1 +MinorVer=0 + +[msnbot-products] +Parent=MSN +Browser=msnbot-products + +[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=msnbot-webmaster tools + +[msnbot/1.0*] +Parent=MSN +Browser=msnbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.1*] +Parent=MSN +Browser=msnbot +Version=1.1 +MajorVer=1 +MinorVer=1 + +[msnbot/2.0b*] +Parent=MSN +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[MSR-ISRCCrawler] +Parent=MSN +Browser=MSR-ISRCCrawler + +[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=renlifangbot + +[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] +Parent=MSN +Browser=msnbot-mobile + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser=Yahoo +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser=Y!J + +[Mozilla/5.0 (Yahoo-Test/4.0*)] +Parent=Yahoo +Browser=Yahoo-Test +Version=4.0 +MajorVer=4 +MinorVer=0 + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser=Yahoo! Media +isBanned=true + +[My Browser] +Parent=Yahoo +Browser=Yahoo! My Browser + +[Y!OASIS/*] +Parent=Yahoo +Browser=Y!OASIS +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser=YahooYSMcm +Version=2.0 +MajorVer=2 +MinorVer=0 +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser=YRL_ODP_CRAWLER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser=Yandex +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] +Parent=Yandex +Browser=VisualParser +isBanned=true + +[YaDirectBot/*] +Parent=Yandex +Browser=YaDirectBot + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser=YandexBlog +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser=YandexSomething +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web + +[Best of the Web] +Parent=DefaultProperties +Browser=Best of the Web +Frames=true +Tables=true + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Feed Grabber +isSyndicationReader=true +Crawler=false + +[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Spider +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser=Boitho +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser=boitho.com-dc + +[boitho.com-robot/*] +Parent=Boitho +Browser=boitho.com-robot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser=Convera +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser=ConveraCrawler + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser=ConveraMultiMediaCrawler +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser=CrawlConvera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot + +[DotBot] +Parent=DefaultProperties +Browser=DotBot +Frames=true +Tables=true +isBanned=true +Crawler=true + +[DotBot/* (http://www.dotnetdotcom.org/*)] +Parent=DotBot + +[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] +Parent=DotBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb + +[Entireweb] +Parent=DefaultProperties +Browser=Entireweb +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] +Parent=Entireweb + +[Speedy Spider (*Beta/*)] +Parent=Entireweb + +[Speedy?Spider?(http://www.entireweb.com*)] +Parent=Entireweb + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser=Envolk +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser=Exalead +Frames=true +Tables=true +isBanned=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser=Exabot-Images +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot-Test/*] +Parent=Exalead +Browser=Exabot-Test + +[Exabot/2.0] +Parent=Exalead +Browser=Exabot + +[Exabot/3.0] +Parent=Exalead +Browser=Exabot +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser=Exalead NG +isBanned=true + +[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] +Parent=Exalead +Browser=Exabot-Images + +[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] +Parent=Exalead +Browser=Exabot/BiggerBetter/tests + +[Mozilla/5.0 (compatible; Exabot/3.0;*)] +Parent=Exalead +Browser=Exabot +isBanned=false + +[Mozilla/5.0 (compatible; NGBot/*)] +Parent=Exalead + +[ng/*] +Parent=Exalead +Browser=Exalead Previewer +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser=Fast/AllTheWeb +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST Enterprise Crawler + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser=FAST Data Search Document Retriever + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser=FAST MetaWeb Crawler + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/FirstPage + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Fresh + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Multimedia + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser=FastSearch Web Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot + +[Gigabot] +Parent=DefaultProperties +Browser=Gigabot +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Gigabot*] +Parent=Gigabot + +[GigabotSiteSearch/*] +Parent=Gigabot +Browser=GigabotSiteSearch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser=Ilse +Frames=true +Tables=true +Crawler=true + +[IlseBot/*] +Parent=Ilse + +[INGRID/?.0*] +Parent=Ilse +Browser=Ilse + +[Mozilla/3.0 (INGRID/*] +Parent=Ilse +Browser=Ilse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project + +[iVia Project] +Parent=DefaultProperties +Browser=iVia Project +Frames=true +IFrames=true +Tables=true +Crawler=true + +[DataFountains/DMOZ Downloader*] +Parent=iVia Project +Browser=DataFountains/DMOZ Downloader +isBanned=true + +[DataFountains/DMOZ Feature Vector Corpus Creator*] +Parent=iVia Project +Browser=DataFountains/DMOZ Feature Vector Corpus + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser=Jayde Online +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser=ExactSeek Crawler + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser=exactseek-pagereaper +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser=exactseek.com + +[Jayde Crawler*] +Parent=Jayde Online +Browser=Jayde Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser=Lycos +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser=Lycos + +[Lycos-Proxy] +Parent=Lycos +Browser=Lycos-Proxy + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser=Lycos-Spider_(modspider) + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser=Lycos-Spider_(T-Rex) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser=Naver +isBanned=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver Cowbot + +[Mozilla/4.0 (compatible; NaverBot/*; *)] +Parent=Naver + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser=Naver NaverBot + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver NHN Corp + +[Yeti/*] +Parent=Naver +Browser=Yeti + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap + +[Snap] +Parent=DefaultProperties +Browser=Snap +isBanned=true +Crawler=true + +[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] +Parent=Snap + +[Snapbot/*] +Parent=Snap + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou + +[Sogou] +Parent=DefaultProperties +Browser=Sogou +Frames=true +Tables=true +isBanned=true +Crawler=true + +[shaboyi spider] +Parent=Sogou +Browser=Sogou/Shaboyi Spider + +[Sogou develop spider/*] +Parent=Sogou +Browser=Sogou Develop Spider + +[Sogou head spider*] +Parent=Sogou +Browser=Sogou/HEAD Spider + +[sogou js robot(*)] +Parent=Sogou + +[Sogou Orion spider/*] +Parent=Sogou +Browser=Sogou Orion spider + +[Sogou Pic Agent] +Parent=Sogou +Browser=Sogou/Image Crawler + +[Sogou Pic Spider] +Parent=Sogou +Browser=Sogou Pic Spider + +[Sogou Push Spider/*] +Parent=Sogou +Browser=Sogou Push Spider + +[sogou spider] +Parent=Sogou +Browser=Sogou/Spider + +[sogou web spider*] +Parent=Sogou +Browser=sogou web spider + +[Sogou-Test-Spider/*] +Parent=Sogou +Browser=Sogou-Test-Spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot + +[YodaoBot] +Parent=DefaultProperties +Browser=YodaoBot +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] +Parent=YodaoBot +Browser=YodaoBot-Image + +[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[YodaoBot/1.* (*)] +Parent=YodaoBot + +[Best Whois (http://www.bestwhois.net/)] +Parent=DNS Tools +Browser=Best Whois + +[DNSGroup/*] +Parent=DNS Tools +Browser=DNS Group Crawler + +[NG-Search/*] +Parent=Exalead +Browser=NG-SearchBot + +[TouchStone] +Parent=Feeds Syndicators +Browser=TouchStone +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser=General Crawlers +Crawler=true + +[A .NET Web Crawler] +Parent=General Crawlers +isBanned=true + +[BabalooSpider/1.*] +Parent=General Crawlers +Browser=BabalooSpider + +[BilgiBot/*] +Parent=General Crawlers +Browser=BilgiBot +isBanned=true + +[bot/* (bot; *bot@bot.bot)] +Parent=General Crawlers +Browser=bot +isBanned=true + +[CyberPatrol*] +Parent=General Crawlers +Browser=CyberPatrol +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser=Cynthia +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ddetailsbot (http://www.displaydetails.com)] +Parent=General Crawlers +Browser=ddetailsbot + +[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] +Parent=General Crawlers +Browser=DomainCrawler + +[DomainsBotBot/1.*] +Parent=General Crawlers +Browser=DomainsBotBot +isBanned=true + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser=DomainsDB + +[Drupal (*)] +Parent=General Crawlers +Browser=Drupal + +[Dumbot (version *)*] +Parent=General Crawlers +Browser=Dumbfind + +[EuripBot/*] +Parent=General Crawlers +Browser=Europe Internet Portal + +[eventax/*] +Parent=General Crawlers +Browser=eventax + +[FANGCrawl/*] +Parent=General Crawlers +Browser=Safe-t.net Web Filtering Service +isBanned=true + +[favorstarbot/*] +Parent=General Crawlers +Browser=favorstarbot +isBanned=true + +[FollowSite.com (*)] +Parent=General Crawlers +Browser=FollowSite +isBanned=true + +[Gaisbot*] +Parent=General Crawlers +Browser=Gaisbot + +[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] +Parent=General Crawlers +Browser=Healthbot +isBanned=true + +[hitcrawler_0.*] +Parent=General Crawlers +Browser=hitcrawler +isBanned=true + +[htdig/*] +Parent=General Crawlers +Browser=ht://Dig + +[http://hilfe.acont.de/bot.html ACONTBOT] +Parent=General Crawlers +Browser=ACONTBOT +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser=Omea Pro + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser=KakleBot + +[KBeeBot/0.*] +Parent=General Crawlers +Browser=KBeeBot +isBanned=true + +[Keyword Density/*] +Parent=General Crawlers +Browser=Keyword Density + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser=LetsCrawl.com +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser=Lincoln State Web Browser +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser=Links4US-Crawler +isBanned=true + +[Lorkyll *.* -- lorkyll@444.net] +Parent=General Crawlers +Browser=Lorkyll +isBanned=true + +[Lsearch/sondeur] +Parent=General Crawlers +Browser=Lsearch/sondeur +isBanned=true + +[LucidMedia ClickSense/4.?] +Parent=General Crawlers +Browser=LucidMedia-ClickSense +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser=MapoftheInternet +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser=MedHunt +Version=0.3 +MajorVer=0 +MinorVer=3 + +[masidani_bot_v0.6*] +Parent=General Crawlers +Browser=masidani_bot + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser=Metaspinner/0.01 +Version=0.01 +MajorVer=0 +MinorVer=01 + +[metatagsdir/*] +Parent=General Crawlers +Browser=metatagsdir +isBanned=true + +[Microsoft Windows Network Diagnostics] +Parent=General Crawlers +Browser=Microsoft Windows Network Diagnostics +isBanned=true + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser=Miva + +[moget/*] +Parent=General Crawlers +Browser=Goo + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser=Mozdex + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser=WebCapture + +[Mozilla/4.0 (compatible; DepSpid/*)] +Parent=General Crawlers +Browser=DepSpid + +[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] +Parent=General Crawlers +Browser=AVG + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser=Vonna.com +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser=MyFamilyBot + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser=N-Stealth + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Spider; Linux)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Win32)] +Parent=General Crawlers +Browser=Unknown Crawler +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +isBanned=true + +[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] +Parent=General Crawlers +Browser=Gnomit +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser=AboutUsBot +isBanned=true + +[Mozilla/5.0 (compatible; BuzzRankingBot/*)] +Parent=General Crawlers +Browser=BuzzRankingBot +isBanned=true + +[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] +Parent=General Crawlers +Browser=Diffbot + +[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] +Parent=General Crawlers +Browser=FirstSearchBot + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser=Healthdash + +[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] +Parent=General Crawlers +Browser=JadynAveBot +isBanned=true + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser=Kyluka + +[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] +Parent=General Crawlers +Browser=MJ12bot +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] +Parent=General Crawlers +Browser=Europe Web Archive + +[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] +Parent=General Crawlers +Browser=Seznam screenshot-generator +isBanned=true + +[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] +Parent=General Crawlers +Browser=Twingly Recon + +[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] +Parent=General Crawlers +Browser=UnWrap + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser=Vermut + +[Mozilla/5.0 (compatible; Webbot/*)] +Parent=General Crawlers +Browser=Webbot.ru +isBanned=true + +[n4p_bot*] +Parent=General Crawlers +Browser=n4p_bot + +[nabot*] +Parent=General Crawlers +Browser=Nabot + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser=NetCarta_WebMapper +isBanned=true + +[NetID.com Bot*] +Parent=General Crawlers +Browser=NetID.com Bot +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser=neTVision + +[NextopiaBOT*] +Parent=General Crawlers +Browser=NextopiaBOT + +[nicebot] +Parent=General Crawlers +Browser=nicebot +isBanned=true + +[niXXieBot?Foster*] +Parent=General Crawlers +Browser=niXXiebot-Foster + +[Nozilla/P.N (Just for IDS woring)] +Parent=General Crawlers +Browser=Nozilla/P.N +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser=Nudelsalat +isBanned=true + +[NV32ts] +Parent=General Crawlers +Browser=NV32ts +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser=Ocelli + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser=OpenTaggerBot + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser=Oracle Enterprise Search +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser=Oracle Ultra Search + +[Pajaczek/*] +Parent=General Crawlers +Browser=Pajaczek +isBanned=true + +[panscient.com] +Parent=General Crawlers +Browser=panscient.com +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser=Patwebbot + +[PDFBot (crawler@pdfind.com)] +Parent=General Crawlers +Browser=PDFBot + +[Pete-Spider/1.*] +Parent=General Crawlers +Browser=Pete-Spider +isBanned=true + +[PhpDig/*] +Parent=General Crawlers +Browser=PhpDig + +[PlantyNet_WebRobot*] +Parent=General Crawlers +Browser=PlantyNet +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt + +[PluckItCrawler/1.0 (*)] +Parent=General Crawlers +isMobileDevice=true + +[PMAFind] +Parent=General Crawlers +Browser=PMAFind +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser=Poodle Predictor + +[QuickFinder Crawler] +Parent=General Crawlers +Browser=QuickFinder +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser=Radiation Retriever +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser=RedCarpet +isBanned=true + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser=RixBot + +[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] +Parent=General Crawlers +Browser=TinyURL + +[SBIder/*] +Parent=General Crawlers +Browser=SiteSell + +[ScollSpider/2.*] +Parent=General Crawlers +Browser=ScollSpider +isBanned=true + +[Search Fst] +Parent=General Crawlers +Browser=Search Fst + +[searchbot admin@google.com] +Parent=General Crawlers +Browser=searchbot +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser=LookSeek +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser=Semantic Discovery + +[SeznamBot/*] +Parent=General Crawlers +Browser=SeznamBot +isBanned=true + +[Shelob (shelob@gmx.net)] +Parent=General Crawlers +Browser=Shelob +isBanned=true + +[shelob v1.*] +Parent=General Crawlers +Browser=shelob +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser=ShopWiki +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser=ShowXML +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser=Internetseer + +[SMBot/*] +Parent=General Crawlers +Browser=SMBot + +[sohu*] +Parent=General Crawlers +Browser=sohu-search +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser=SpankBot +isBanned=true + +[spider (tspyyp@tom.com)] +Parent=General Crawlers +Browser=spider (tspyyp@tom.com) +isBanned=true + +[Sunrise/0.*] +Parent=General Crawlers +Browser=Sunrise +isBanned=true + +[Superpages URL Verification Engine] +Parent=General Crawlers +Browser=Superpages + +[Surf Knight] +Parent=General Crawlers +Browser=Surf Knight +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser=SurveyBot +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser=SynapticSearch +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser=SyncMgr + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser=Tagyu + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser=Talkro Web-Shot +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser=Tecomi + +[TheInformant*] +Parent=General Crawlers +Browser=TheInformant +isBanned=true + +[Toata dragostea*] +Parent=General Crawlers +Browser=Toata dragostea +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser=UbiCrawler + +[UCmore] +Parent=General Crawlers +Browser=UCmore + +[User*Agent:*] +Parent=General Crawlers +isBanned=true + +[USER_AGENT] +Parent=General Crawlers +Browser=USER_AGENT +isBanned=true + +[VadixBot] +Parent=General Crawlers +Browser=VadixBot + +[VengaBot/*] +Parent=General Crawlers +Browser=VengaBot +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser=Visicom Toolbar + +[W3C-WebCon/*] +Parent=General Crawlers +Browser=W3C-WebCon + +[Webclipping.com] +Parent=General Crawlers +Browser=Webclipping.com +isBanned=true + +[webcollage/*] +Parent=General Crawlers +Browser=WebCollage +isBanned=true + +[WebCrawler_1.*] +Parent=General Crawlers +Browser=WebCrawler + +[WebFilter Robot*] +Parent=General Crawlers +Browser=WebFilter Robot + +[WeBoX/*] +Parent=General Crawlers +Browser=WeBoX + +[WebTrends/*] +Parent=General Crawlers +Browser=WebTrends + +[West Wind Internet Protocols*] +Parent=General Crawlers +Browser=Versatel +isBanned=true + +[WhizBang] +Parent=General Crawlers +Browser=WhizBang + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser=Willow Internet Crawler + +[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] +Parent=General Crawlers +Browser=WIRE +isBanned=true + +[www.fi crawler, contact crawler@www.fi] +Parent=General Crawlers +Browser=www.fi crawler + +[Xerka WebBot v1.*] +Parent=General Crawlers +Browser=Xerka +isBanned=true + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser=XML Sitemaps Generator + +[XSpider*] +Parent=General Crawlers +Browser=XSpider +isBanned=true + +[YooW!/* (?http://www.yoow.eu)] +Parent=General Crawlers +Browser=YooW! +isBanned=true + +[HiddenMarket-*] +Parent=General RSS +Browser=HiddenMarket +isBanned=true + +[FOTOCHECKER] +Parent=Image Crawlers +Browser=FOTOCHECKER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser=Search Engines +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser=FDSE Robot + +[*Fluffy the spider*] +Parent=Search Engines +Browser=SearchHippo + +[Abacho*] +Parent=Search Engines +Browser=Abacho + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser=Ah-Ha + +[AIBOT/*] +Parent=Search Engines +Browser=21Seek.Com + +[ALeadSoftbot/*] +Parent=Search Engines +Browser=ALeadSoftbot + +[Amfibibot/*] +Parent=Search Engines +Browser=Amfibi + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser=antibot + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser=Walhello + +[ASPSeek/*] +Parent=Search Engines +Browser=ASPSeek + +[BigCliqueBOT/*] +Parent=Search Engines +Browser=BigClique.com/BigClic.com + +[Blaiz-Bee/*] +Parent=Search Engines +Browser=RawGrunt + +[btbot/*] +Parent=Search Engines +Browser=Bit Torrent Search Engine + +[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] +Parent=Search Engines +Browser=Busiversebot +isBanned=true + +[CatchBot/*; http://www.catchbot.com] +Parent=Search Engines +Browser=CatchBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser=CipinetBot + +[Cogentbot/1.?*] +Parent=Search Engines +Browser=Cogentbot + +[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] +Parent=Search Engines +Browser=SqwidgeBot + +[cosmos*] +Parent=Search Engines +Browser=Xyleme + +[Deepindex] +Parent=Search Engines +Browser=Deepindex + +[DiamondBot] +Parent=Search Engines +Browser=DiamondBot + +[Dumbot*] +Parent=Search Engines +Browser=Dumbot +Version=0.2 +MajorVer=0 +MinorVer=2 +Beta=true + +[Eule?Robot*] +Parent=Search Engines +Browser=Eule-Robot + +[Faxobot/*] +Parent=Search Engines +Browser=Faxo + +[Filangy/*] +Parent=Search Engines +Browser=Filangy + +[flatlandbot/*] +Parent=Search Engines +Browser=Flatland + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser=ScorpionBot +isBanned=true + +[FyberSpider*] +Parent=Search Engines +Browser=FyberSpider +isBanned=true + +[Gaisbot/*] +Parent=Search Engines +Browser=Gaisbot + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser=gazz + +[geniebot*] +Parent=Search Engines +Browser=GenieKnows + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser=GoForIt + +[GoGuidesBot/*] +Parent=Search Engines +Browser=GoGuidesBot + +[GroschoBot/*] +Parent=Search Engines +Browser=GroschoBot + +[GurujiBot/1.*] +Parent=Search Engines +Browser=GurujiBot +isBanned=true + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser=Mirago + +[HolmesBot (http://holmes.ge)] +Parent=Search Engines +Browser=HolmesBot + +[Hotzonu/*] +Parent=Search Engines +Browser=Hotzonu + +[HyperEstraier/*] +Parent=Search Engines +Browser=HyperEstraier +isBanned=true + +[i1searchbot/*] +Parent=Search Engines +Browser=i1searchbot + +[IIITBOT/1.*] +Parent=Search Engines +Browser=Indian Language Web Search Engine + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser=Iltrovatore-Setaccio + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser=InfociousBot +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser=Infoseek + +[iSEEKbot/*] +Parent=Search Engines +Browser=iSEEKbot + +[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] +Parent=Search Engines +Browser=Knight + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser=Kolinka Forum Search +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser=KRetrieve +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser=LapozzBot + +[Linknzbot*] +Parent=Search Engines +Browser=Linknzbot + +[LocalcomBot/*] +Parent=Search Engines +Browser=LocalcomBot + +[Mail.Ru/1.0] +Parent=Search Engines +Browser=Mail.Ru + +[MaSagool/*] +Parent=Search Engines +Browser=Sagoo +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser=miniRank + +[Mnogosearch*] +Parent=Search Engines +Browser=Mnogosearch + +[Mozilla/0.9* no dos :) (Linux)] +Parent=Search Engines +Browser=goliat +isBanned=true + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser=Arachmo + +[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] +Parent=Search Engines +Browser=ThunderStone +isBanned=true + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser=Girafabot +Win32=true + +[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] +Parent=Search Engines +Browser=Vagabondo + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser=Qihoo + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser=Inxight Software + +[Mozilla/5.0 (*) VoilaBot*] +Parent=Search Engines +Browser=VoilaBot +isBanned=true + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser=ActiveTouristBot + +[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] +Parent=Search Engines +Browser=Butterfly + +[Mozilla/5.0 (compatible; Charlotte/*; *)] +Parent=Search Engines +Browser=Charlotte +Beta=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT*)] +Parent=Search Engines +Browser=FatAssANT + +[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] +Parent=Search Engines +Browser=DBLBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; EARTHCOM.info/*)] +Parent=Search Engines +Browser=EARTHCOM + +[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] +Parent=Search Engines +Browser=Lipperhey Spider + +[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser=MojeekBot + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser=Northern Light Web Search + +[Mozilla/5.0 (compatible; OsO;*] +Parent=Search Engines +Browser=Octopodus +isBanned=true + +[Mozilla/5.0 (compatible; Pogodak.*)] +Parent=Search Engines +Browser=Pogodak + +[Mozilla/5.0 (compatible; Quantcastbot/1.*)] +Parent=Search Engines +Browser=Quantcastbot + +[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] +Parent=Search Engines +Browser=ScoutJet + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser=Scrubby +isBanned=true + +[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] +Parent=Search Engines +Browser=YoudaoBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Twiceler*)] +Parent=Search Engines +Browser=Twiceler +isBanned=true + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser=CostaCider Search + +[Mozilla/5.0 GurujiBot/1.0 (*)] +Parent=Search Engines +Browser=GurujiBot + +[NavissoBot] +Parent=Search Engines +Browser=NavissoBot + +[NextGenSearchBot*(for information visit *)] +Parent=Search Engines +Browser=ZoomInfo +isBanned=true + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser=Norbert the Spider + +[NuSearch Spider*] +Parent=Search Engines +Browser=nuSearch + +[ObjectsSearch/*] +Parent=Search Engines +Browser=ObjectsSearch + +[OpenISearch/1.*] +Parent=Search Engines +Browser=OpenISearch (Amazon) + +[Pagebull http://www.pagebull.com/] +Parent=Search Engines +Browser=Pagebull + +[PEERbot*] +Parent=Search Engines +Browser=PEERbot + +[Pompos/*] +Parent=Search Engines +Browser=Pompos + +[Popdexter/*] +Parent=Search Engines +Browser=Popdex + +[Qweery*] +Parent=Search Engines +Browser=QweeryBot + +[RedCell/* (*)] +Parent=Search Engines +Browser=RedCell + +[Scrubby/*] +Parent=Search Engines +Browser=Scrub The Web + +[Search-10/*] +Parent=Search Engines +Browser=Search-10 + +[search.ch*] +Parent=Search Engines +Browser=Swiss Search Engine + +[Searchmee! Spider*] +Parent=Search Engines +Browser=Searchmee! + +[Seekbot/*] +Parent=Search Engines +Browser=Seekbot + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser=SiteSpider + +[Spinne/*] +Parent=Search Engines +Browser=Spinne + +[sproose/*] +Parent=Search Engines +Browser=Sproose + +[Sqeobot/0.*] +Parent=Search Engines +Browser=Branzel +isBanned=true + +[SquigglebotBot/*] +Parent=Search Engines +Browser=SquigglebotBot +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser=StackRambler + +[SygolBot*] +Parent=Search Engines +Browser=SygolBot + +[SynoBot] +Parent=Search Engines +Browser=SynoBot + +[Szukacz/*] +Parent=Search Engines +Browser=Szukacz + +[Tarantula/*] +Parent=Search Engines +Browser=Tarantula +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser=TerrawizBot +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser=Tkensaku + +[TMCrawler] +Parent=Search Engines +Browser=TMCrawler +isBanned=true + +[Twingly Recon] +Parent=Search Engines +Browser=Twingly Recon +isBanned=true + +[updated/*] +Parent=Search Engines +Browser=Updated! + +[URL Spider Pro/*] +Parent=Search Engines +Browser=URL Spider Pro + +[URL Spider SQL*] +Parent=Search Engines +Browser=Innerprise Enterprise Search + +[VMBot/*] +Parent=Search Engines +Browser=VMBot + +[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] +Parent=Search Engines +Browser=Voyager + +[wadaino.jp-crawler*] +Parent=Search Engines +Browser=wadaino.jp +isBanned=true + +[WebAlta Crawler/*] +Parent=Search Engines +Browser=WebAlta Crawler +isBanned=true + +[WebCorp/*] +Parent=Search Engines +Browser=WebCorp +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser=webcrawl.net + +[WISEbot/*] +Parent=Search Engines +Browser=WISEbot +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser=Wotbox + +[www.zatka.com] +Parent=Search Engines +Browser=Zatka + +[WWWeasel Robot v*] +Parent=Search Engines +Browser=World Wide Weasel + +[YadowsCrawler*] +Parent=Search Engines +Browser=YadowsCrawler + +[YodaoBot/*] +Parent=Search Engines +Browser=YodaoBot +isBanned=true + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser=ZE.bz + +[zibber-v*] +Parent=Search Engines +Browser=Zibb + +[ZipppBot/*] +Parent=Search Engines +Browser=ZipppBot + +[ATA-Translation-Service] +Parent=Translators +Browser=ATA-Translation-Service + +[GJK_Browser_Check] +Parent=Version Checkers +Browser=GJK_Browser_Check + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser=Hatena +isBanned=true +Crawler=true + +[Feed::Find/*] +Parent=Hatena +Browser=Feed Find +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser=Hatena Antenna + +[Hatena Bookmark/*] +Parent=Hatena +Browser=Hatena Bookmark + +[Hatena RSS/*] +Parent=Hatena +Browser=Hatena RSS +isSyndicationReader=true + +[Hatena::Crawler/*] +Parent=Hatena +Browser=Hatena Crawler + +[HatenaScreenshot*] +Parent=Hatena +Browser=HatenaScreenshot + +[URI::Fetch/*] +Parent=Hatena +Browser=URI::Fetch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser=Internet Archive +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*heritrix*] +Parent=Internet Archive +Browser=Heritrix +isBanned=true + +[ia_archiver*] +Parent=Internet Archive +Browser=Internet Archive + +[InternetArchive/*] +Parent=Internet Archive +Browser=InternetArchive + +[Mozilla/5.0 (compatible; archive.org_bot/1.*)] +Parent=Internet Archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser=Nutch +isBanned=true +Crawler=true + +[*Nutch*] +Parent=Nutch +isBanned=true + +[CazoodleBot/*] +Parent=Nutch +Browser=CazoodleBot + +[LOOQ/0.1*] +Parent=Nutch +Browser=LOOQ + +[Nutch/0.? (OpenX Spider)] +Parent=Nutch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo + +[Webaroo] +Parent=DefaultProperties +Browser=Webaroo + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] +Parent=Webaroo +Browser=Webaroo + +[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] +Parent=Webaroo +Browser=Webaroo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press + +[Word Press] +Parent=DefaultProperties +Browser=Word Press +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[WordPress-B-/2.*] +Parent=Word Press +Browser=WordPress-B + +[WordPress-Do-P-/2.*] +Parent=Word Press +Browser=WordPress-Do-P + +[BlueCoat ProxySG] +Parent=Blue Coat Systems +Browser=BlueCoat ProxySG + +[CerberianDrtrs/*] +Parent=Blue Coat Systems +Browser=Cerberian + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Blue Coat Systems +Browser=Bluecoat + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser=Copyright/Plagiarism +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser=BDFetch + +[copyright sheriff (*)] +Parent=Copyright/Plagiarism +Browser=copyright sheriff + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser=CopyRightCheck + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser=FairAd Client + +[iCopyright Conductor*] +Parent=Copyright/Plagiarism +Browser=iCopyright Conductor + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser=IPiumBot + +[IWAgent/*] +Parent=Copyright/Plagiarism +Browser=Brand Protect + +[Mozilla/5.0 (compatible; DKIMRepBot/*)] +Parent=Copyright/Plagiarism +Browser=DKIMRepBot + +[oBot] +Parent=Copyright/Plagiarism +Browser=oBot + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser=SlySearch + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser=TurnitinBot + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser=TutorGig + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools + +[DNS Tools] +Parent=DefaultProperties +Browser=DNS Tools +Crawler=true + +[Domain Dossier utility*] +Parent=DNS Tools +Browser=Domain Dossier + +[Mozilla/5.0 (compatible; DNS-Digger/*)] +Parent=DNS Tools +Browser=DNS-Digger + +[OpenDNS Domain Crawler noc@opendns.com] +Parent=DNS Tools +Browser=OpenDNS Domain Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser=Download Managers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[AndroidDownloadManager] +Parent=Download Managers +Browser=Android Download Manager + +[AutoMate5] +Parent=Download Managers +Browser=AutoMate5 + +[Beamer*] +Parent=Download Managers +Browser=Beamer + +[BitBeamer/*] +Parent=Download Managers +Browser=BitBeamer + +[BitTorrent/*] +Parent=Download Managers +Browser=BitTorrent + +[DA *] +Parent=Download Managers +Browser=Download Accelerator + +[Download Demon*] +Parent=Download Managers +Browser=Download Demon + +[Download Express*] +Parent=Download Managers +Browser=Download Express + +[Download Master*] +Parent=Download Managers +Browser=Download Master + +[Download Ninja*] +Parent=Download Managers +Browser=Download Ninja + +[Download Wonder*] +Parent=Download Managers +Browser=Download Wonder + +[DownloadSession*] +Parent=Download Managers +Browser=DownloadSession + +[EasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[FDM 1.x] +Parent=Download Managers +Browser=Free Download Manager + +[FlashGet] +Parent=Download Managers +Browser=FlashGet + +[FreshDownload/*] +Parent=Download Managers +Browser=FreshDownload + +[GetRight/*] +Parent=Download Managers +Browser=GetRight + +[GetRightPro/*] +Parent=Download Managers +Browser=GetRightPro + +[GetSmart/*] +Parent=Download Managers +Browser=GetSmart + +[Go!Zilla*] +Parent=Download Managers +Browser=GoZilla + +[Gozilla/*] +Parent=Download Managers +Browser=Gozilla + +[Internet Ninja*] +Parent=Download Managers +Browser=Internet Ninja + +[Kontiki Client*] +Parent=Download Managers +Browser=Kontiki Client + +[lftp/3.2.1] +Parent=Download Managers +Browser=lftp + +[LightningDownload/*] +Parent=Download Managers +Browser=LightningDownload + +[LMQueueBot/*] +Parent=Download Managers +Browser=LMQueueBot + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser=Download Express + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser=Getleft + +[Myzilla] +Parent=Download Managers +Browser=Myzilla + +[Net Vampire/*] +Parent=Download Managers +Browser=Net Vampire + +[Net_Vampire*] +Parent=Download Managers +Browser=Net_Vampire + +[NetAnts*] +Parent=Download Managers +Browser=NetAnts + +[NetPumper*] +Parent=Download Managers +Browser=NetPumper + +[NetSucker*] +Parent=Download Managers +Browser=NetSucker + +[NetZip Downloader*] +Parent=Download Managers +Browser=NetZip Downloader + +[NexTools WebAgent*] +Parent=Download Managers +Browser=NexTools WebAgent + +[Offline Downloader*] +Parent=Download Managers +Browser=Offline Downloader + +[P3P Client] +Parent=Download Managers +Browser=P3P Client + +[PageDown*] +Parent=Download Managers +Browser=PageDown + +[PicaLoader*] +Parent=Download Managers +Browser=PicaLoader + +[Prozilla*] +Parent=Download Managers +Browser=Prozilla + +[RealDownload/*] +Parent=Download Managers +Browser=RealDownload + +[sEasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[shareaza*] +Parent=Download Managers +Browser=shareaza + +[SmartDownload/*] +Parent=Download Managers +Browser=SmartDownload + +[SpeedDownload/*] +Parent=Download Managers +Browser=Speed Download + +[Star*Downloader/*] +Parent=Download Managers +Browser=StarDownloader + +[STEROID Download] +Parent=Download Managers +Browser=STEROID Download + +[SuperBot/*] +Parent=Download Managers +Browser=SuperBot + +[Vegas95/*] +Parent=Download Managers +Browser=Vegas95 + +[WebZIP*] +Parent=Download Managers +Browser=WebZIP + +[Wget*] +Parent=Download Managers +Browser=Wget + +[WinTools] +Parent=Download Managers +Browser=WinTools + +[Xaldon WebSpider*] +Parent=Download Managers +Browser=Xaldon WebSpider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser=E-Mail Harvesters +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser=E-Mail Address Extractor + +[*Larbin*] +Parent=E-Mail Harvesters +Browser=Larbin + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser=www4mail + +[8484 Boston Project*] +Parent=E-Mail Harvesters +Browser=8484 Boston Project + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser=CherryPickerElite + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser=Chilkat + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser=ContactBot + +[eCatch*] +Parent=E-Mail Harvesters +Browser=eCatch + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser=E-Mail Collector + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser=EMAILsearcher + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser=E-Mail Siphon + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser=EMailWolf + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser=MailMunky + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser=ExtractorPro + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser=Franklin Locator + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser=Missigua Locator + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser=Advanced Email Extractor + +[Netprospector*] +Parent=E-Mail Harvesters +Browser=Netprospector + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser=ProWebWalker + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser=Mike Elliott's E-Mail Harvester + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser=WebEnhancer + +[WebMiner*] +Parent=E-Mail Harvesters +Browser=WebMiner + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser=ZIBB Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser=Feeds Blogs +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser=Bloglines Title Fetch + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser=BlogLines Web + +[BlogPulseLive (support@blogpulse.com)] +Parent=Feeds Blogs +Browser=BlogPulseLive + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser=blogsearchbot-pumpkin +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser=Irish Blogs Aggregator +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser=kinjabot + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser=Net::Trackback + +[Reblog*] +Parent=Feeds Blogs +Browser=Reblog + +[WordPress/*] +Parent=Feeds Blogs +Browser=WordPress + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser=Feeds Syndicators +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser=LinkLint + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser=NetVisualize + +[AideRSS 2.* (postrank.com)] +Parent=Feeds Syndicators +Browser=AideRSS + +[AideRSS/2.0 (aiderss.com)] +Parent=Feeds Syndicators +Browser=AideRSS +isBanned=true + +[Akregator/*] +Parent=Feeds Syndicators +Browser=Akregator + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser=Safari RSS +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser=Cocoal.icio.us +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser=Feed For Free + +[FeedBurner/*] +Parent=Feeds Syndicators +Browser=FeedBurner + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser=FeedDemon +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser=FeedDigest + +[FeedGhost/1.*] +Parent=Feeds Syndicators +Browser=FeedGhost +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] +Parent=Feeds Syndicators +Browser=FeedOnFeeds +Version=0.1 +MajorVer=0 +MinorVer=1 + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser=Newsbrain + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser=Feedshow + +[Feedster Crawler/?.0; Feedster, Inc.] +Parent=Feeds Syndicators +Browser=Feedster + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser=GreatNews +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Gregarius/*] +Parent=Feeds Syndicators +Browser=Gregarius + +[intraVnews/*] +Parent=Feeds Syndicators +Browser=intraVnews + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser=Omea Reader +isBanned=true + +[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] +Parent=Feeds Syndicators +Browser=Liferea +isBanned=true + +[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] +Parent=Feeds Syndicators +Browser=FeedFetcher +Version=0.0 +MajorVer=0 +MinorVer=0 + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser=MagpieRSS + +[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] +Parent=Feeds Syndicators +Browser=Mobitype +Platform=Win32 + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser=Rojo + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser=TailRank + +[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] +Parent=Feeds Syndicators +Browser=Podtech Network + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser=Newz Crawler + +[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser=RSSMicro + +[Mozilla/5.0 (compatible;*newstin.com;*)] +Parent=Feeds Syndicators +Browser=NewsTin + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser=RSS Reader Panel + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser=FeedParser + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser=NewsMonster + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser=Rojo + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser=Netvibes + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser=NewsAlloy + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser=Omnipelagos + +[Particls] +Parent=Feeds Syndicators +Browser=Particls + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser=Protopage + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser=PubSub-RSS-Reader + +[RSS Menu/*] +Parent=Feeds Syndicators +Browser=RSS Menu + +[RssBandit/*] +Parent=Feeds Syndicators +Browser=RssBandit + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser=RssBar +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser=SharpReader + +[SimplePie/*] +Parent=Feeds Syndicators +Browser=SimplePie + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser=Strategic Board Bot +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser=TargetYourNews + +[Technoratibot/*] +Parent=Feeds Syndicators +Browser=Technoratibot + +[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] +Parent=Feeds Syndicators +Browser=Tumblr RSS syndication + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser=Windows-RSS-Platform +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser=Wizz + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS + +[General RSS] +Parent=DefaultProperties +Browser=General RSS +isSyndicationReader=true + +[AideRSS/1.0 (aiderss.com); * subscribers] +Parent=General RSS +Browser=AideRSS +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] +Parent=General RSS +Browser=CC Metadata Scaper + +[Mozilla/5.0 (compatible) GM RSS Panel] +Parent=General RSS +Browser=RSS Panel + +[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] +Parent=General RSS +Browser=Inclue + +[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] +Parent=General RSS +Browser=Ruunk + +[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] +Parent=General RSS +Browser=Windows-RSS-Platform +Platform=WinVista + +[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] +Parent=Google Code +Browser=Arora +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux +CssVersion=2 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser=HTML Validators +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser=Search Engine World HTML Validator + +[FeedValidator/1.3] +Parent=HTML Validators +Browser=FeedValidator +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser=Jigsaw CSS Validator + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser=Search Engine World Robots.txt Validator + +[W3C_Validator/*] +Parent=HTML Validators +Browser=W3C Validator + +[W3CLineMode/*] +Parent=HTML Validators +Browser=W3C Line Mode + +[Weblide/2.? beta*] +Parent=HTML Validators +Browser=Weblide +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser=WebmasterWorld Server Header Checker + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser=Image Crawlers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*CFNetwork*] +Parent=Image Crawlers +Browser=CFNetwork + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser=PhotoStickies + +[Camcrawler*] +Parent=Image Crawlers +Browser=Camcrawler + +[CydralSpider/*] +Parent=Image Crawlers +Browser=Cydral Web Image Search +isBanned=true + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser=Gallery Grabber + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser=Extreme Picture Finder + +[FLATARTS_FAVICO] +Parent=Image Crawlers +Browser=FlatArts Favorites Icon Tool + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser=HTML2JPG + +[IconSurf/2.*] +Parent=Image Crawlers +Browser=IconSurf + +[kalooga/KaloogaBot*] +Parent=Image Crawlers +Browser=KaloogaBot + +[Mister PIX*] +Parent=Image Crawlers +Browser=Mister PIX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] +Parent=Image Crawlers +Browser=Pandora + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser=naoFavicon4IE + +[pixfinder/*] +Parent=Image Crawlers +Browser=pixfinder + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser=rssImagesBot + +[Web Image Collector*] +Parent=Image Crawlers +Browser=Web Image Collector + +[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] +Parent=Image Crawlers +Browser=WebImages + +[WebPix*] +Parent=Image Crawlers +Browser=Custo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser=Link Checkers +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser=!Susie + +[*AgentName/*] +Parent=Link Checkers +Browser=AgentName + +[*Linkman*] +Parent=Link Checkers +Browser=Linkman + +[*LinksManager.com*] +Parent=Link Checkers +Browser=LinksManager + +[*Powermarks/*] +Parent=Link Checkers +Browser=Powermarks + +[*W3C-checklink/*] +Parent=Link Checkers +Browser=W3C Link Checker + +[*Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator + +[*Zeus*] +Parent=Link Checkers +Browser=Zeus +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser=ActiveBookmark + +[Bookdog/*] +Parent=Link Checkers +Browser=Bookdog + +[Bookmark Buddy*] +Parent=Link Checkers +Browser=Bookmark Buddy + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser=Bookmark Renewal Check Agent + +[Bookmark search tool*] +Parent=Link Checkers +Browser=Bookmark search tool + +[Bookmark-Manager] +Parent=Link Checkers +Browser=Bookmark-Manager + +[Checkbot*] +Parent=Link Checkers +Browser=Checkbot + +[CheckLinks/*] +Parent=Link Checkers +Browser=CheckLinks + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser=CyberSpyder Link Test + +[DLC/*] +Parent=Link Checkers +Browser=DLC + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser=DocWeb Link Crawler + +[FavOrg] +Parent=Link Checkers +Browser=FavOrg + +[Favorites Sweeper v.3.*] +Parent=Link Checkers +Browser=Favorites Sweeper + +[FindLinks/*] +Parent=Link Checkers +Browser=FindLinks + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser=Funnel Web Profiler + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser=HTML Link Validator + +[IECheck] +Parent=Link Checkers +Browser=IECheck + +[JCheckLinks/*] +Parent=Link Checkers +Browser=JCheckLinks + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser=JRTwine + +[Link Valet Online*] +Parent=Link Checkers +Browser=Link Valet +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser=LinkAlarm + +[Linkbot*] +Parent=Link Checkers +Browser=Linkbot + +[LinkChecker/*] +Parent=Link Checkers +Browser=LinkChecker + +[LinkextractorPro*] +Parent=Link Checkers +Browser=LinkextractorPro +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser=LinkLint + +[LinkScan/*] +Parent=Link Checkers +Browser=LinkScan + +[LinkSweeper/*] +Parent=Link Checkers +Browser=LinkSweeper + +[LinkWalker*] +Parent=Link Checkers +Browser=LinkWalker + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser=MetaGer-LinkChecker + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser=LinkTiger +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser=URLBase + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser=NetPromoter Link Utility + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser=Link Commander +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] +Parent=Link Checkers +Browser=smartBot + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser=SuperCleaner + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser=gURLChecker +isBanned=true + +[Newsgroupreporter LinkCheck] +Parent=Link Checkers +Browser=Newsgroupreporter LinkCheck + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser=onCHECK Linkchecker + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser=Dead-Links.com +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser=REL Link Checker + +[RLinkCheker*] +Parent=Link Checkers +Browser=RLinkCheker + +[Robozilla/*] +Parent=Link Checkers +Browser=Robozilla + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser=RPT-HTTPClient +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser=SafariBookmarkChecker +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser=Simpy + +[SiteBar/*] +Parent=Link Checkers +Browser=SiteBar + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser=Susie + +[URLBase/6.*] +Parent=Link Checkers + +[VSE/*] +Parent=Link Checkers +Browser=VSE Link Tester + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser=WebTrends Link Analyzer + +[WorQmada/*] +Parent=Link Checkers +Browser=WorQmada + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser=Xenu's Link Sleuth +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser=Z-Add Link Checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser=Microsoft +isBanned=true + +[Live (http://www.live.com/)] +Parent=Microsoft +Browser=Microsoft Live +isBanned=false +isSyndicationReader=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser=MFC Foundation Class Library + +[MFHttpScan] +Parent=Microsoft +Browser=MFHttpScan + +[Microsoft BITS/*] +Parent=Microsoft +Browser=BITS + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser=MS IPP + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser=MS IPP DAV + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser=MS IPPPD + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser=Fake IE + +[Microsoft Office Existence Discovery] +Parent=Microsoft +Browser=Microsoft Office Existence Discovery + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser=MS OPD + +[Microsoft Office/* (*Picture Manager*)] +Parent=Microsoft +Browser=Microsoft Office Picture Manager + +[Microsoft URL Control*] +Parent=Microsoft +Browser=Microsoft URL Control + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser=Microsoft Visio + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser=Microsoft-WebDAV + +[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] +Parent=Microsoft +Browser=Microsoft Excel +Version=12.0 +MajorVer=12 +MinorVer=0 +Platform=MacOSX + +[MSN Feed Manager] +Parent=Microsoft +Browser=MSN Feed Manager +isBanned=false +isSyndicationReader=true + +[MSProxy/*] +Parent=Microsoft +Browser=MS Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser=Miscellaneous Browsers +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser=Amiga +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser=Avant Browser + +[12345] +Parent=Miscellaneous Browsers +Browser=12345 +isBanned=true + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser=Ace Explorer + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser=Enigma Browser + +[EVE-minibrowser/*] +Parent=Miscellaneous Browsers +Browser=EVE-minibrowser +IFrames=false +Tables=false +BackgroundSounds=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +Crawler=false + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser=Godzilla + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser=GreenBrowser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Kopiczek/* (WyderOS*; *)] +Parent=Miscellaneous Browsers +Browser=Kopiczek +Platform=WyderOS +IFrames=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (*) - BrowseX (*)] +Parent=Miscellaneous Browsers +Browser=BrowseX + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser=Escape +Platform=Win32 + +[Mozilla/4.0 (compatible; ibisBrowser)] +Parent=Miscellaneous Browsers +Browser=ibisBrowser + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser=HistoryHound + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser=NetRecorder + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser=NetSurfer + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser=ogeb browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser=Wipeout Pure + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser=SlimBrowser + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser=WWW Browser +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CssVersion=3 +supportsCSS=true + +[*Netcraft Webserver Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser=Offline Browsers +Frames=true +Tables=true +Cookies=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser=Check&Get + +[*HTTrack*] +Parent=Offline Browsers +Browser=HTTrack + +[*MSIECrawler*] +Parent=Offline Browsers +Browser=IE Offline Browser + +[*TweakMASTER*] +Parent=Offline Browsers +Browser=TweakMASTER + +[BackStreet Browser *] +Parent=Offline Browsers +Browser=BackStreet Browser + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser=Go Ahead Got-It + +[iGetter/*] +Parent=Offline Browsers +Browser=iGetter + +[Teleport*] +Parent=Offline Browsers +Browser=Teleport + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser=Online Scanners +isBanned=true + +[JoeDog/* (X11; I; Siege *)] +Parent=Online Scanners +Browser=JoeDog +isBanned=false + +[Morfeus Fucking Scanner] +Parent=Online Scanners +Browser=Morfeus Fucking Scanner + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser=Trend Micro + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser=Panda Antivirus Titanium + +[virus_detector*] +Parent=Online Scanners +Browser=Secure Computing Corporation + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser=Proxy Servers +isBanned=true + +[*squid*] +Parent=Proxy Servers +Browser=Squid + +[Anonymisiert*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymizer/*] +Parent=Proxy Servers +Browser=Anonymizer + +[Anonymizied*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymous*] +Parent=Proxy Servers +Browser=Anonymous + +[Anonymous/*] +Parent=Proxy Servers +Browser=Anonymous + +[CE-Preload] +Parent=Proxy Servers +Browser=CE-Preload + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser=Anonymouse + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser=Anonymizer + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser=SaferSurf + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser=Yahoo! +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser=Squid + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Privoxy/*] +Parent=Proxy Servers +Browser=Privoxy + +[ProxyTester*] +Parent=Proxy Servers +Browser=ProxyTester +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser=SilentSurf + +[SmallProxy*] +Parent=Proxy Servers +Browser=SmallProxy + +[Space*Bison/*] +Parent=Proxy Servers +Browser=Proxomitron + +[Sqworm/*] +Parent=Proxy Servers +Browser=Websense + +[SurfControl] +Parent=Proxy Servers +Browser=SurfControl + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser=Research Projects +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser=AcadiaUniversityWebCensusClient + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser=Amico Alpha + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser=Annotate Google + +[CMS crawler (?http://buytaert.net/crawler/)] +Parent=Research Projects + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser=e-SocietyRobot + +[Forschungsportal/*] +Parent=Research Projects +Browser=Forschungsportal + +[Gulper Web *] +Parent=Research Projects +Browser=Gulper Web Bot + +[HooWWWer/*] +Parent=Research Projects +Browser=HooWWWer + +[http://buytaert.net/crawler] +Parent=Research Projects + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser=inetbot + +[IRLbot/*] +Parent=Research Projects +Browser=IRLbot + +[Lachesis] +Parent=Research Projects +Browser=Lachesis + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser=nextthing.org +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser=Theophrastus + +[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] +Parent=Research Projects +Browser=Webscan + +[MQbot*] +Parent=Research Projects +Browser=MQbot + +[OutfoxBot/*] +Parent=Research Projects +Browser=OutfoxBot + +[polybot?*] +Parent=Research Projects +Browser=Polybot + +[Shim?Crawler*] +Parent=Research Projects +Browser=Shim Crawler + +[Steeler/*] +Parent=Research Projects +Browser=Steeler + +[Taiga web spider] +Parent=Research Projects +Browser=Taiga + +[Theme Spider*] +Parent=Research Projects +Browser=Theme Spider + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser=UofTDB Experiment + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser=USyd-NLP-Spider + +[woriobot*] +Parent=Research Projects +Browser=woriobot + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser=wwwster +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser=Zao-Crawler + +[Zao/*] +Parent=Research Projects +Browser=Zao + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser=Rippers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*grub*] +Parent=Rippers +Browser=grub + +[*ickHTTP*] +Parent=Rippers +Browser=IP*Works + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser=libwww-perl + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser=WinHttp + +[3D-FTP/*] +Parent=Rippers +Browser=3D-FTP + +[3wGet/*] +Parent=Rippers +Browser=3wGet + +[ActiveRefresh*] +Parent=Rippers +Browser=ActiveRefresh + +[Artera (Version *)] +Parent=Rippers +Browser=Artera + +[AutoHotkey] +Parent=Rippers +Browser=AutoHotkey + +[b2w/*] +Parent=Rippers +Browser=b2w + +[BasicHTTP/*] +Parent=Rippers +Browser=BasicHTTP + +[BlockNote.Net] +Parent=Rippers +Browser=BlockNote.Net + +[CAST] +Parent=Rippers +Browser=CAST + +[CFNetwork/*] +Parent=Rippers +Browser=CFNetwork + +[CFSCHEDULE*] +Parent=Rippers +Browser=ColdFusion Task Scheduler + +[CobWeb/*] +Parent=Rippers +Browser=CobWeb + +[ColdFusion*] +Parent=Rippers +Browser=ColdFusion + +[Crawl_Application] +Parent=Rippers +Browser=Crawl_Application + +[curl/*] +Parent=Rippers +Browser=cURL + +[Custo*] +Parent=Rippers +Browser=Custo + +[DataCha0s/*] +Parent=Rippers +Browser=DataCha0s + +[DeepIndexer*] +Parent=Rippers +Browser=DeepIndexer + +[DISCo Pump *] +Parent=Rippers +Browser=DISCo Pump + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser=eStyleSearch +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser=Ezic.com + +[fetch libfetch/*] +Parent=Rippers + +[FGet*] +Parent=Rippers +Browser=FGet + +[Flaming AttackBot*] +Parent=Rippers +Browser=Flaming AttackBot + +[Foobot*] +Parent=Rippers +Browser=Foobot + +[GameSpyHTTP/*] +Parent=Rippers +Browser=GameSpyHTTP + +[gnome-vfs/*] +Parent=Rippers +Browser=gnome-vfs + +[Harvest/*] +Parent=Rippers +Browser=Harvest + +[hcat/*] +Parent=Rippers +Browser=hcat + +[HLoader] +Parent=Rippers +Browser=HLoader + +[Holmes/*] +Parent=Rippers +Browser=Holmes + +[HTMLParser/*] +Parent=Rippers +Browser=HTMLParser + +[http generic] +Parent=Rippers +Browser=http generic + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser=httperf + +[HTTPFetch/*] +Parent=Rippers +Browser=HTTPFetch + +[HTTPGrab] +Parent=Rippers +Browser=HTTPGrab + +[HttpSession] +Parent=Rippers +Browser=HttpSession + +[httpunit/*] +Parent=Rippers +Browser=HttpUnit + +[ICE_GetFile] +Parent=Rippers +Browser=ICE_GetFile + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser=Inet - Eureka App + +[INetURL/*] +Parent=Rippers +Browser=INetURL + +[InetURL:/*] +Parent=Rippers +Browser=InetURL + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser=Fake IE + +[Internet Explorer *] +Parent=Rippers +Browser=Fake IE + +[IP*Works!*/*] +Parent=Rippers +Browser=IP*Works! + +[IrssiUrlLog/*] +Parent=Rippers +Browser=IrssiUrlLog + +[JPluck/*] +Parent=Rippers +Browser=JPluck + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser=Kapere + +[LeechFTP] +Parent=Rippers +Browser=LeechFTP + +[LeechGet*] +Parent=Rippers +Browser=LeechGet + +[libcurl-agent/*] +Parent=Rippers +Browser=libcurl + +[libWeb/clsHTTP*] +Parent=Rippers +Browser=libWeb/clsHTTP + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser=MFC_Tear_Sample + +[Moozilla] +Parent=Rippers +Browser=Moozilla + +[MovableType/*] +Parent=Rippers +Browser=MovableType Web Log + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser=NEWT ActiveX +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser=Novell BorderManager + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] +Parent=Rippers +Browser=IPCheck Server Monitor + +[OCN-SOC/*] +Parent=Rippers +Browser=OCN-SOC + +[Offline Explorer*] +Parent=Rippers +Browser=Offline Explorer + +[Open Web Analytics Bot*] +Parent=Rippers +Browser=Open Web Analytics Bot + +[OSSProxy*] +Parent=Rippers +Browser=OSSProxy + +[Pageload*] +Parent=Rippers +Browser=PageLoad + +[PageNest/*] +Parent=Rippers +Browser=PageNest + +[pavuk/*] +Parent=Rippers +Browser=Pavuk + +[PEAR HTTP_Request*] +Parent=Rippers +Browser=PEAR-PHP + +[PHP*] +Parent=Rippers +Browser=PHP + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser=PigBlock +Win32=true + +[Pockey*] +Parent=Rippers +Browser=Pockey-GetHTML + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser=POE-Component-Client-HTTP + +[PycURL/*] +Parent=Rippers +Browser=PycURL + +[Python*] +Parent=Rippers +Browser=Python + +[RepoMonkey*] +Parent=Rippers +Browser=RepoMonkey + +[SBL-BOT*] +Parent=Rippers +Browser=BlackWidow + +[ScoutAbout*] +Parent=Rippers +Browser=ScoutAbout + +[sherlock/*] +Parent=Rippers +Browser=Sherlock + +[SiteParser/*] +Parent=Rippers +Browser=SiteParser + +[SiteSnagger*] +Parent=Rippers +Browser=SiteSnagger + +[SiteSucker/*] +Parent=Rippers +Browser=SiteSucker + +[SiteWinder*] +Parent=Rippers +Browser=SiteWinder + +[Snoopy*] +Parent=Rippers +Browser=Snoopy + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser=AspTear + +[SuperHTTP/*] +Parent=Rippers +Browser=SuperHTTP + +[Tcl http client package*] +Parent=Rippers +Browser=Tcl http client package + +[Twisted PageGetter] +Parent=Rippers +Browser=Twisted PageGetter + +[URL2File/*] +Parent=Rippers +Browser=URL2File + +[UtilMind HTTPGet] +Parent=Rippers +Browser=UtilMind HTTPGet + +[VCI WebViewer*] +Parent=Rippers +Browser=VCI WebViewer + +[W3CRobot/*] +Parent=Rippers +Browser=W3CRobot + +[Web Downloader*] +Parent=Rippers +Browser=Web Downloader + +[Web Downloader/*] +Parent=Rippers +Browser=Web Downloader + +[Web Magnet*] +Parent=Rippers +Browser=Web Magnet + +[WebAuto/*] +Parent=Rippers + +[webbandit/*] +Parent=Rippers +Browser=webbandit + +[WebCopier*] +Parent=Rippers +Browser=WebCopier + +[WebDownloader*] +Parent=Rippers +Browser=WebDownloader + +[WebFetch] +Parent=Rippers +Browser=WebFetch + +[webfetch/*] +Parent=Rippers +Browser=WebFetch + +[WebGatherer*] +Parent=Rippers +Browser=WebGatherer + +[WebGet] +Parent=Rippers +Browser=WebGet + +[WebReaper*] +Parent=Rippers +Browser=WebReaper + +[WebRipper] +Parent=Rippers +Browser=WebRipper + +[WebSauger*] +Parent=Rippers +Browser=WebSauger + +[Website Downloader*] +Parent=Rippers +Browser=Website Downloader + +[Website eXtractor*] +Parent=Rippers +Browser=Website eXtractor + +[Website Quester] +Parent=Rippers +Browser=Website Quester + +[WebsiteExtractor*] +Parent=Rippers +Browser=Website eXtractor + +[WebSnatcher*] +Parent=Rippers +Browser=WebSnatcher + +[Webster Pro*] +Parent=Rippers +Browser=Webster Pro + +[WebStripper*] +Parent=Rippers +Browser=WebStripper + +[WebWhacker*] +Parent=Rippers +Browser=WebWhacker + +[WinScripter iNet Tools] +Parent=Rippers +Browser=WinScripter iNet Tools + +[WWW-Mechanize/*] +Parent=Rippers +Browser=WWW-Mechanize + +[Zend_Http_Client] +Parent=Rippers +Browser=Zend_Http_Client + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser=Site Monitors +Cookies=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser=EasyRider + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser=maxamine.com--robot +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser=WebMon + +[Kenjin Spider*] +Parent=Site Monitors +Browser=Kenjin Spider + +[Kevin http://*] +Parent=Site Monitors +Browser=Kevin +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser=ChangeDetection + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser=Myst Monitor Service + +[Net Probe] +Parent=Site Monitors +Browser=Net Probe + +[NetMechanic*] +Parent=Site Monitors +Browser=NetMechanic + +[NetReality*] +Parent=Site Monitors +Browser=NetReality + +[Pingdom GIGRIB*] +Parent=Site Monitors +Browser=Pingdom + +[Site Valet Online*] +Parent=Site Monitors +Browser=Site Valet +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser=SITECHECKER + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser=ZoneEdit Failover Monitor +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser=UpTime Checker + +[URL Control*] +Parent=Site Monitors +Browser=URL Control + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser=URLCHECK + +[URLy Warning*] +Parent=Site Monitors +Browser=URLy Warning + +[Webcheck *] +Parent=Site Monitors +Browser=Webcheck +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser=WebPatrol + +[websitepulse checker/*] +Parent=Site Monitors +Browser=websitepulse checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser=Social Bookmarkers +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[BookmarkBase(2/;http://bookmarkbase.com)] +Parent=Social Bookmarkers +Browser=BookmarkBase + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser=Cocoalicious + +[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] +Parent=Social Bookmarkers +Browser=FriendFeedBot + +[Twitturly*] +Parent=Social Bookmarkers +Browser=Twitturly + +[WinkBot/*] +Parent=Social Bookmarkers +Browser=WinkBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser=Translators +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser=Seram Server + +[TeragramWebcrawler/*] +Parent=Translators +Browser=TeragramWebcrawler +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser=WorldLingo + +[WebTrans] +Parent=Translators +Browser=WebTrans + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser=Version Checkers +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser=Automated Browscap.ini Updater + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser=BMC Link Validator +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[Browscap updater] +Parent=Version Checkers +Browser=Browscap updater + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser=Gary Keith's Version Checker + +[Browser Capabilities Project AutoDownloader] +Parent=Version Checkers +Browser=TKC AutoDownloader + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Code Sample Web Client] +Parent=Version Checkers +Browser=Code Sample Web Client + +[Desktop Sidebar*] +Parent=Version Checkers +Browser=Desktop Sidebar +isBanned=true + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser=Mono Browser Capabilities Updater +isBanned=true + +[Rewmi/*] +Parent=Version Checkers +isBanned=true + +[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] +Parent=Version Checkers +Browser=Subtext + +[TherapeuticResearch] +Parent=Version Checkers +Browser=TherapeuticResearch + +[UpdateBrowscap*] +Parent=Version Checkers +Browser=UpdateBrowscap + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser=clarkson.edu + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser=Substncia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser=Become +Frames=true +Tables=true +isSyndicationReader=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser=BecomeBot + +[*BecomeBot@exava.com*] +Parent=Become +Browser=BecomeBot + +[*Exabot@exava.com*] +Parent=Become +Browser=Exabot + +[MonkeyCrawl/*] +Parent=Become +Browser=MonkeyCrawl + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser=BecomeJPBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems + +[Blue Coat Systems] +Parent=DefaultProperties +Browser=Blue Coat Systems +isBanned=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers + +[Browscap Abusers] +Parent=DefaultProperties +Browser=Browscap Abusers +isBanned=true + +[Apple-PubSub/*] +Parent=Browscap Abusers +Browser=Apple-PubSub + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub + +[FeedHub] +Parent=DefaultProperties +Browser=FeedHub +isSyndicationReader=true + +[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedDiscovery +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub MetaDataFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Internet Content Rating Association] +Parent=DefaultProperties +Browser= +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[ICRA_label_generator/1.?] +Parent=Internet Content Rating Association +Browser=ICRA_label_generator + +[ICRA_Semantic_spider/0.?] +Parent=Internet Content Rating Association +Browser=ICRA_Semantic_spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser=NameProtect +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser=NameProtect + +[NP/*] +Parent=NameProtect +Browser=NameProtect + +[NPBot*] +Parent=NameProtect +Browser=NameProtect + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft + +[Netcraft] +Parent=DefaultProperties +Browser=Netcraft +isBanned=true +Crawler=true + +[*Netcraft Web Server Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] +Parent=Netcraft +Browser=NetcraftSurveyAgent + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator + +[NewsGator] +Parent=DefaultProperties +Browser=NewsGator +isSyndicationReader=true + +[MarsEdit*] +Parent=NewsGator +Browser=MarsEdit + +[NetNewsWire*/*] +Parent=NewsGator +Browser=NetNewsWire +Platform=MacOSX + +[NewsFire/*] +Parent=NewsGator +Browser=NewsFire + +[NewsGator FetchLinks extension/*] +Parent=NewsGator +Browser=NewsGator FetchLinks + +[NewsGator/*] +Parent=NewsGator +Browser=NewsGator +isBanned=true + +[NewsGatorOnline/*] +Parent=NewsGator +Browser=NewsGatorOnline + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 + +[Chrome 0.2] +Parent=DefaultProperties +Browser=Chrome +Version=0.2 +MinorVer=2 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 + +[Chrome 0.3] +Parent=DefaultProperties +Browser=Chrome +Version=0.3 +MinorVer=3 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 + +[Chrome 0.4] +Parent=DefaultProperties +Browser=Chrome +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 + +[Chrome 0.5] +Parent=DefaultProperties +Browser=Chrome +Version=0.5 +MinorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 + +[Chrome 1.0] +Parent=DefaultProperties +Browser=Chrome +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 + +[Chrome 2.0] +Parent=DefaultProperties +Browser=Chrome +Version=2.0 +MajorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 + +[Chrome 3.0] +Parent=DefaultProperties +Browser=Chrome +Version=3.0 +MajorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code + +[Google Code] +Parent=DefaultProperties +Browser=Google Code +Tables=true +Cookies=true +JavaApplets=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 + +[Iron 0.2] +Parent=DefaultProperties +Browser=Iron +Version=0.2 +MinorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 + +[Iron 0.3] +Parent=DefaultProperties +Browser=Iron +Version=0.3 +MinorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 + +[Iron 0.4] +Parent=DefaultProperties +Browser=Iron +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod + +[iPod] +Parent=DefaultProperties +Browser=iPod +Platform=iPhone OSX +isMobileDevice=true + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] +Parent=iPod +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] +Parent=iPod + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes + +[iTunes] +Parent=DefaultProperties +Browser=iTunes +Platform=iPhone OSX + +[iTunes/* (Windows; ?)] +Parent=iTunes +Browser=iTunes +Platform=Win32 +Win32=true + +[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] +Parent=iTunes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser=Media Players +Cookies=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser=Microsoft NetShow + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser=RealPlayer +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser=MPlayer +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser=MPlayer +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser=MPlayer + +[RealPlayer*] +Parent=Media Players +Browser=RealPlayer + +[RMA/*] +Parent=Media Players +Browser=RMA + +[VLC media player*] +Parent=Media Players +Browser=VLC + +[vobsub] +Parent=Media Players +Browser=vobsub +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser=WinAmp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo + +[Nintendo Wii] +Parent=DefaultProperties +Browser= +isMobileDevice=true + +[Opera/* (Nintendo DSi; Opera/*; *; *)] +Parent=Nintendo Wii +Browser=DSi + +[Opera/* (Nintendo Wii; U; *)] +Parent=Nintendo Wii +Browser=Wii + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser=Windows Media Player +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser=Windows-Media-Player +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune + +[Zune] +Parent=DefaultProperties +Browser=Zune +Cookies=true + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] +Parent=Zune +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] +Parent=Zune +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] +Parent=Zune +Version=3.0 +MajorVer=3 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 + +[QuickTime 7.0] +Parent=DefaultProperties +Browser=QuickTime +Version=7.0 +MajorVer=7 +Cookies=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime 7.0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime 7.0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime 7.0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime 7.0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime 7.0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime 7.0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime 7.0 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 + +[QuickTime 7.1] +Parent=DefaultProperties +Browser=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Cookies=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime 7.1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime 7.1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime 7.1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime 7.1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime 7.1 +Platform=Win2003 +Win32=true + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 + +[QuickTime 7.2] +Parent=DefaultProperties +Browser=QuickTime +Version=7.2 +MajorVer=7 +MinorVer=2 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.2 +Platform=MacOSX + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.2 +Platform=MacPPC + +[QuickTime (qtver=7.2*;os=Windows 98*)] +Parent=QuickTime 7.2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] +Parent=QuickTime 7.2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] +Parent=QuickTime 7.2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] +Parent=QuickTime 7.2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] +Parent=QuickTime 7.2 +Platform=Win2003 +Win32=true + +[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 + +[QuickTime 7.3] +Parent=DefaultProperties +Browser=QuickTime +Version=7.3 +MajorVer=7 +MinorVer=3 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.3 +Platform=MacOSX + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.3 +Platform=MacPPC + +[QuickTime (qtver=7.3*;os=Windows 98*)] +Parent=QuickTime 7.3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] +Parent=QuickTime 7.3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] +Parent=QuickTime 7.3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] +Parent=QuickTime 7.3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] +Parent=QuickTime 7.3 +Platform=Win2003 +Win32=true + +[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.3 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 + +[QuickTime 7.4] +Parent=DefaultProperties +Browser=QuickTime +Version=7.4 +MajorVer=7 +MinorVer=4 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.4 +Platform=MacOSX + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.4 +Platform=MacPPC + +[QuickTime (qtver=7.4*;os=Windows 98*)] +Parent=QuickTime 7.4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] +Parent=QuickTime 7.4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] +Parent=QuickTime 7.4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] +Parent=QuickTime 7.4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] +Parent=QuickTime 7.4 +Platform=Win2003 +Win32=true + +[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.4 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android + +[Android] +Parent=DefaultProperties +Browser=Android +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser=BlackBerry +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*BlackBerry*] +Parent=BlackBerry + +[*BlackBerrySimulator/*] +Parent=BlackBerry + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser=Handspring Blazer +Platform=Palm +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] +Parent=Blazer +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] +Parent=Blazer +Version=4.2 +MajorVer=4 +MinorVer=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] +Parent=Blazer +Version=4.4 +MajorVer=4 +MinorVer=4 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] +Parent=Blazer +Version=4.5 +MajorVer=4 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser=DoCoMo +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile + +[IEMobile] +Parent=DefaultProperties +Browser=IEMobile +Platform=WinCE +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] +Parent=IEMobile +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] +Parent=IEMobile +Version=7.0 +MajorVer=7 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone + +[iPhone] +Parent=DefaultProperties +Browser=iPhone +Platform=iPhone OSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=3 +supportsCSS=true + +[Mozilla/4.0 (iPhone; *)] +Parent=iPhone + +[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] +Parent=iPhone +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] +Parent=iPhone +Browser=iTouch + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] +Parent=iPhone +Browser=iTouch +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser=KDDI +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[KDDI-* UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile + +[Miscellaneous Mobile] +Parent=DefaultProperties +Browser= +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] +Parent=Miscellaneous Mobile +Browser=Bolt + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Internet Browser] +Parent=DefaultProperties +Browser=Motorola Internet Browser +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[MOT-*/*] +Parent=Motorola Internet Browser + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T*/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy + +[MSN Mobile Proxy] +Parent=DefaultProperties +Browser=MSN Mobile Proxy +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true + +[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] +Parent=MSN Mobile Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser=NetFront +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*NetFront/*] +Parent=NetFront + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser=Nokia +Tables=true +Cookies=true +isMobileDevice=true + +[*Nokia*/*] +Parent=Nokia + +[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Nokia +Platform=SymbianOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser=Openwave Mobile Browser +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini + +[Opera Mini] +Parent=DefaultProperties +Browser=Opera Mini +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] +Parent=Opera Mini +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] +Parent=Opera Mini +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] +Parent=Opera Mini +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] +Parent=Opera Mini +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] +Parent=Opera Mini +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] +Parent=Opera Mini +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] +Parent=Opera Mini +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] +Parent=Opera Mini +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] +Parent=Opera Mini +Version=4.2 +MajorVer=4 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile + +[Opera Mobile] +Parent=DefaultProperties +Browser=Opera Mobi +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] +Parent=Opera Mobile +Version=9.51 +MajorVer=9 +MinorVer=51 +Beta=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser=Playstation +Platform=WAP +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/* (PLAYSTATION *; *)] +Parent=Playstation +Browser=PlayStation 3 +Frames=false + +[Mozilla/* (PSP (PlayStation Portable); *)] +Parent=Playstation + +[Sony PS2 (Linux)] +Parent=Playstation +Browser=Sony PS2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser=Pocket PC +Platform=WinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*(compatible; MSIE *.*; Windows CE; PPC; *)] +Parent=Pocket PC + +[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] +Parent=Pocket PC +Win32=true + +[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] +Parent=Pocket PC +Win32=true + +[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] +Parent=Pocket PC + +[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] +Parent=Pocket PC + +[Windows CE (Pocket PC) - Version *.*] +Parent=Pocket PC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser=SEMC Browser +Platform=JAVA +Tables=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson + +[SonyEricsson] +Parent=DefaultProperties +Browser=SonyEricsson +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*Ericsson*] +Parent=SonyEricsson + +[*SonyEricsson*] +Parent=SonyEricsson + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser=Netbox +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser=Netbox +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser=PowerTV +Platform=PowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser=WebTV/MSNTV +Platform=WebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser=Amaya +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser=Links +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser=Links +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +[Links (2.2*; FreeBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=FreeBSD + +[Links (2.2*; Linux *)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=Linux + +[Links (2.2*; OpenBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser=Lynx +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser=Lynx + +[Lynx/2.3*] +Parent=Lynx +Browser=Lynx +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser=Lynx +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser=Lynx +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser=Lynx +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser=Lynx +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser=Lynx +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser=w3m +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser=w3m +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser=w3m +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser=w3m +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser=w3m +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser=w3m +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 + +[ELinks 0.10] +Parent=DefaultProperties +Browser=ELinks +Version=0.10 +MinorVer=10 +Frames=true +Tables=true + +[ELinks (0.10*; *AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks (0.10*; *BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks (0.10*; *CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks (0.10*; *Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks (0.10*; *Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks (0.10*; *FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks (0.10*; *HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks (0.10*; *IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks (0.10*; *Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks (0.10*; *NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks (0.10*; *OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks (0.10*; *OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks (0.10*; *RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks (0.10*; *Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks (0.10*; *Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +[ELinks/0.10* (*AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks/0.10* (*BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks/0.10* (*CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks/0.10* (*Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks/0.10* (*Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks/0.10* (*FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks/0.10* (*HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks/0.10* (*IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks/0.10* (*Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks/0.10* (*NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks/0.10* (*OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks/0.10* (*OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks/0.10* (*RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks/0.10* (*Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks/0.10* (*Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 + +[ELinks 0.11] +Parent=DefaultProperties +Browser=ELinks +Version=0.11 +MinorVer=11 +Frames=true +Tables=true + +[ELinks (0.11*; *AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks (0.11*; *BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks (0.11*; *CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks (0.11*; *Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks (0.11*; *Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks (0.11*; *HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks (0.11*; *IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks (0.11*; *Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks (0.11*; *NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks (0.11*; *OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks (0.11*; *OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks (0.11*; *RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks (0.11*; *Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks (0.11*; *Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +[ELinks/0.11* (*AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks/0.11* (*BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks/0.11* (*CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks/0.11* (*Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks/0.11* (*Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks/0.11* (*FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks/0.11* (*HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks/0.11* (*IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks/0.11* (*Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks/0.11* (*NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks/0.11* (*OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks/0.11* (*OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks/0.11* (*RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks/0.11* (*Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks/0.11* (*Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 + +[ELinks 0.12] +Parent=DefaultProperties +Browser=ELinks +Version=0.12 +MinorVer=12 +Frames=true +Tables=true + +[ELinks (0.12*; *AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks (0.12*; *BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks (0.12*; *CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks (0.12*; *Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks (0.12*; *Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks (0.12*; *FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks (0.12*; *HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks (0.12*; *IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks (0.12*; *Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks (0.12*; *NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks (0.12*; *OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks (0.12*; *OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks (0.12*; *RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks (0.12*; *Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks (0.12*; *Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +[ELinks/0.12* (*AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks/0.12* (*BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks/0.12* (*CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks/0.12* (*Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks/0.12* (*Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks/0.12* (*FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks/0.12* (*HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks/0.12* (*IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks/0.12* (*Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks/0.12* (*NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks/0.12* (*OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks/0.12* (*OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks/0.12* (*RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks/0.12* (*Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks/0.12* (*Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 + +[ELinks 0.9] +Parent=DefaultProperties +Browser=ELinks +Version=0.9 +MinorVer=9 +Frames=true +Tables=true + +[ELinks (0.9*; *AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks (0.9*; *BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks (0.9*; *CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks (0.9*; *Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks (0.9*; *Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks (0.9*; *FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks (0.9*; *HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks (0.9*; *IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks (0.9*; *Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks (0.9*; *NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks (0.9*; *OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks (0.9*; *OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks (0.9*; *RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks (0.9*; *Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks (0.9*; *Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +[ELinks/0.9* (*AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks/0.9* (*BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks/0.9* (*CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks/0.9* (*Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks/0.9* (*Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks/0.9* (*HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks/0.9* (*IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks/0.9* (*Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks/0.9* (*NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks/0.9* (*OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks/0.9* (*OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks/0.9* (*RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks/0.9* (*Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks/0.9* (*Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit + +[AppleWebKit] +Parent=DefaultProperties +Browser=AppleWebKit +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] +Parent=AppleWebKit + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser=Camino +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] +Parent=Camino +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] +Parent=Camino +Version=1.4 +MajorVer=1 +MinorVer=4 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] +Parent=Camino +Version=1.5 +MajorVer=1 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] +Parent=Camino +Version=1.6 +MajorVer=1 +MinorVer=6 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser=Chimera +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser=Dillo +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +[Dillo/2.0] +Parent=Dillo +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser=Emacs/W3 +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser=fantomas +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser=fantomas cloakBrowser + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser=fantomas shadowMaker Browser + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser=fantomas fantomBrowser + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser=fantomas fantomCrew Browser + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser=fantomas stealthBrowser + +[multiBlocker browser*] +Parent=fantomas +Browser=fantomas multiBlocker browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser=FrontPage +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser=Galeon +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser=HP Secure Web Browser +Platform=OpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser=IBrowse +Platform=Amiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser=iCab +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[iCab/4.0 (Macintosh; U; *Mac OS X)] +Parent=iCab +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser=iSiloX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser=Lycoris Desktop/LX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser=NetPositive +Platform=BeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser=OmniWeb +Platform=MacOSX +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] +Parent=OmniWeb +Version=5. +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser=Shiira +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] +Parent=Shiira +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] +Parent=Shiira +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Windows Maker] +Parent=DefaultProperties +Browser=WMaker +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[WMaker*] +Parent=Windows Maker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 + +[K-Meleon 1.0] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 + +[K-Meleon 1.1] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.1 +MajorVer=1 +MinorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 + +[K-Meleon 1.5] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.5 +MajorVer=1 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 + +[Konqueror 3.0] +Parent=DefaultProperties +Browser=Konqueror +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[*Konqueror/3.0*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 + +[Konqueror 4.0] +Parent=DefaultProperties +Browser=Konqueror +Version=4.0 +MajorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 + +[Konqueror 4.1] +Parent=DefaultProperties +Browser=Konqueror +Version=4.1 +MajorVer=4 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 + +[Konqueror 4.2] +Parent=DefaultProperties +Browser=Konqueror +Version=4.2 +MajorVer=4 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser=Safari +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 + +[Safari 3.0] +Parent=DefaultProperties +Browser=Safari +Version=3.0 +MajorVer=3 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 + +[Safari 3.1] +Parent=DefaultProperties +Browser=Safari +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 + +[Safari 3.2] +Parent=DefaultProperties +Browser=Safari +Version=3.2 +MajorVer=3 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 + +[Safari 4.0] +Parent=DefaultProperties +Browser=Safari +Version=4.0 +MajorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 + +[Opera 10.0] +Parent=DefaultProperties +Browser=Opera +Version=10.0 +MajorVer=10 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] +Parent=Opera 10.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 10.0 +Platform=MacOSX + +[Opera/10.0* (Windows 95*)*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Opera/10.0* (Windows 98*)*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Opera/10.0* (Windows CE*)*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Opera/10.0* (Windows ME*)*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Opera/10.0* (Windows NT 4.0*)*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Opera/10.0* (Windows NT 5.0*)*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Opera/10.0* (Windows NT 5.1*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (Windows NT 5.2*)*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Opera/10.0* (Windows NT 6.0*)*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Opera/10.0* (Windows NT 6.1*)*] +Parent=Opera 10.0 +Platform=Win7 + +[Opera/10.0* (Windows XP*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (X11; FreeBSD*)*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Opera/10.0* (X11; Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (X11; SunOS*)*] +Parent=Opera 10.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser=Opera +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser=Opera +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser=Opera +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser=Opera +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser=Opera +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser=Opera +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser=Opera +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser=Opera +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser=Opera +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser=Opera +Version=9.1 +MajorVer=9 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (X11; SunOS*)*] +Parent=Opera 9.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 + +[Opera 9.2] +Parent=DefaultProperties +Browser=Opera +Version=9.2 +MajorVer=9 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] +Parent=Opera 9.2 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.2 +Platform=MacOSX + +[Opera/9.2* (Windows 95*)*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Opera/9.2* (Windows 98*)*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Opera/9.2* (Windows CE*)*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Opera/9.2* (Windows ME*)*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Opera/9.2* (Windows NT 4.0*)*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Opera/9.2* (Windows NT 5.0*)*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Opera/9.2* (Windows NT 5.1*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (Windows NT 5.2*)*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Opera/9.2* (Windows NT 6.0*)*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Opera/9.2* (Windows NT 6.1*)*] +Parent=Opera 9.2 +Platform=Win7 + +[Opera/9.2* (Windows XP*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (X11; FreeBSD*)*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Opera/9.2* (X11; Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (X11; SunOS*)*] +Parent=Opera 9.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 + +[Opera 9.3] +Parent=DefaultProperties +Browser=Opera +Version=9.3 +MajorVer=9 +MinorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] +Parent=Opera 9.3 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.3 +Platform=MacOSX + +[Opera/9.3* (Windows 95*)*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Opera/9.3* (Windows 98*)*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Opera/9.3* (Windows CE*)*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Opera/9.3* (Windows ME*)*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Opera/9.3* (Windows NT 4.0*)*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Opera/9.3* (Windows NT 5.0*)*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Opera/9.3* (Windows NT 5.1*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (Windows NT 5.2*)*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Opera/9.3* (Windows NT 6.0*)*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Opera/9.3* (Windows NT 6.1*)*] +Parent=Opera 9.3 +Platform=Win7 + +[Opera/9.3* (Windows XP*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (X11; FreeBSD*)*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Opera/9.3* (X11; Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (X11; SunOS*)*] +Parent=Opera 9.3 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 + +[Opera 9.4] +Parent=DefaultProperties +Browser=Opera +Version=9.4 +MajorVer=9 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] +Parent=Opera 9.4 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.4 +Platform=MacOSX + +[Opera/9.4* (Windows 95*)*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Opera/9.4* (Windows 98*)*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Opera/9.4* (Windows CE*)*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Opera/9.4* (Windows ME*)*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Opera/9.4* (Windows NT 4.0*)*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Opera/9.4* (Windows NT 5.0*)*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Opera/9.4* (Windows NT 5.1*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (Windows NT 5.2*)*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Opera/9.4* (Windows NT 6.0*)*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Opera/9.4* (Windows NT 6.1*)*] +Parent=Opera 9.4 +Platform=Win7 + +[Opera/9.4* (Windows XP*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (X11; FreeBSD*)*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Opera/9.4* (X11; Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (X11; SunOS*)*] +Parent=Opera 9.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 + +[Opera 9.5] +Parent=DefaultProperties +Browser=Opera +Version=9.5 +MajorVer=9 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] +Parent=Opera 9.5 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.5 +Platform=MacOSX + +[Opera/9.5* (Windows 95*)*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Opera/9.5* (Windows 98*)*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Opera/9.5* (Windows CE*)*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Opera/9.5* (Windows ME*)*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Opera/9.5* (Windows NT 4.0*)*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Opera/9.5* (Windows NT 5.0*)*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Opera/9.5* (Windows NT 5.1*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (Windows NT 5.2*)*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Opera/9.5* (Windows NT 6.0*)*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Opera/9.5* (Windows NT 6.1*)*] +Parent=Opera 9.5 +Platform=Win7 + +[Opera/9.5* (Windows XP*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (X11; FreeBSD*)*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Opera/9.5* (X11; Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (X11; SunOS*)*] +Parent=Opera 9.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 + +[Opera 9.6] +Parent=DefaultProperties +Browser=Opera +Version=9.6 +MajorVer=9 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] +Parent=Opera 9.6 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.6 +Platform=MacOSX + +[Opera/9.6* (Windows 95*)*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Opera/9.6* (Windows 98*)*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Opera/9.6* (Windows CE*)*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Opera/9.6* (Windows ME*)*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Opera/9.6* (Windows NT 4.0*)*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Opera/9.6* (Windows NT 5.0*)*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Opera/9.6* (Windows NT 5.1*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (Windows NT 5.2*)*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Opera/9.6* (Windows NT 6.0*)*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Opera/9.6* (Windows NT 6.1*)*] +Parent=Opera 9.6 +Platform=Win7 + +[Opera/9.6* (Windows XP*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (X11; FreeBSD*)*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Opera/9.6* (X11; Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (X11; SunOS*)*] +Parent=Opera 9.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser=Netscape +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser=Netscape +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser=Netscape +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser=Netscape +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser=Netscape +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser=Netscape +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser=Netscape +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser=Netscape +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser=Netscape +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser=Netscape +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser=Netscape +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser=Netscape +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser=Netscape +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 + +[SeaMonkey 1.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 + +[SeaMonkey 1.1] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.1 +MajorVer=1 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 + +[SeaMonkey 2.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=2.0 +MajorVer=2 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 + +[Flock 1.0] +Parent=DefaultProperties +Browser=Flock +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 + +[Flock 2.0] +Parent=DefaultProperties +Browser=Flock +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 + +[Sleipnir] +Parent=DefaultProperties +Browser=Sleipnir +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win7 + +[Sleipnir*] +Parent=Sleipnir + +[Sleipnir/2.*] +Parent=Sleipnir + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 + +[Fennec 1.0] +Parent=DefaultProperties +Browser=Firefox Mobile +Version=1.0 +MajorVer=1 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser=Firebird +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser=Firefox +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser=Firefox +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser=Firefox +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser=Firefox +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser=Firefox +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser=Firefox +Version=3.0 +MajorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 + +[Firefox 3.1] +Parent=DefaultProperties +Browser=Firefox +Version=3.1 +MajorVer=3 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 + +[Firefox 3.5] +Parent=DefaultProperties +Browser=Firefox +Version=3.5 +MajorVer=3 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser=Phoenix +Version=0.5 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel + +[Iceweasel] +Parent=DefaultProperties +Browser=Iceweasel +Platform=Linux +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] +Parent=Iceweasel +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser=Mozilla +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser=Mozilla +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser=Mozilla +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser=Mozilla +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser=Mozilla +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser=Mozilla +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser=Mozilla +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser=Mozilla +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser=Mozilla +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 + +[Mozilla 1.9] +Parent=DefaultProperties +Browser=Mozilla +Version=1.9 +MajorVer=1 +MinorVer=9 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser=IE +Platform=MacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser=AOL +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser=AOL +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser=AOL +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser + +[Avant Browser] +Parent=DefaultProperties +Browser=Avant Browser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Advanced Browser (http://www.avantbrowser.com)] +Parent=Avant Browser + +[Avant Browser*] +Parent=Avant Browser + +[Avant Browser/*] +Parent=Avant Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser=IE +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] +Parent=IE 4.01 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser=IE +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser=IE +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser=IE +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser=IE +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 +msdomversion=6.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser=IE +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=7.0 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] +Parent=IE 7.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] +Parent=IE 7.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 + +[IE 8.0] +Parent=DefaultProperties +Browser=IE +Version=8.0 +MajorVer=8 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=8.0 +w3cdomversion=1.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] +Parent=IE 8.0 +Platform=Win32 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] +Parent=IE 8.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] +Parent=IE 8.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] +Parent=IE 8.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser=Default Browser +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +AuthenticodeUpdate=0 +CSS=0 +WAP=false +netCLR=false +ClrVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/config b/Source/Platforms/Editor/Windows/Mono/etc/mono/config new file mode 100644 index 000000000..385128f74 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/etc/mono/mconfig/config.xml b/Source/Platforms/Editor/Windows/Mono/etc/mono/mconfig/config.xml new file mode 100644 index 000000000..a3df3b5e9 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/etc/mono/mconfig/config.xml @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + +
+
+
+ + + + + +
+ +
+
+
+
+ + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +]]> + + + + + + + +
+
+
+ + + + + +
+ +
+
+
+ + + + ]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + + + ]]> + + + + + + ]]> + + + + + + ]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +
+
+
+
+
+
+ + diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Accessibility.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Accessibility.dll new file mode 100644 index 000000000..6a19d88c6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f418319d6c6c3407828125fd3577b5751f0bac92e666d02ee52f5f83ca86af16 +size 9216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Mono.Posix.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Mono.Posix.dll new file mode 100644 index 000000000..9d42676f7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a65ab5a8d236bceb0a92f231df3360d9213f68dc9e106ae925fe5570b34d0f1 +size 91648 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Mono.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Mono.Security.dll new file mode 100644 index 000000000..fa3ecc844 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:143b73d95cfb381fc6f56f1a5fcf6ce288589e753e00205fca6863442f3cceb2 +size 76800 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ComponentModel.Composition.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..2ee210da3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00668aceeb5932b303da50390234b60ab394be3cfd94a85473bee4d43242f8f8 +size 30208 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..5d03c6a14 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eab8975998fd91680c7e69b7fa6a7c97317e236696c73044da4d7b4eb1e0a147 +size 17920 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Configuration.Install.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Configuration.Install.dll new file mode 100644 index 000000000..cc1288b4f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a0dd81759186bd5d2b828bfed9d285aebc4ac3192dc83aafa4e6f27535226db +size 13824 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Configuration.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Configuration.dll new file mode 100644 index 000000000..235192de5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b83f740bb35cab7e2becafca96d06e34045dce958f8c87bab9b02f713411c3dc +size 46592 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Core.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Core.dll new file mode 100644 index 000000000..48bcc500a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:02bb7140dde0f0717cc6836c1b461fd655f860fac0c811e75fbd3acbf334a308 +size 151552 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.DataSetExtensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..90da83068 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e4d0e95d191686bf8db25a4bf05ecfce35e09794b569abf96c26cf4276212077 +size 9216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Entity.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Entity.dll new file mode 100644 index 000000000..944e3b2fc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0596d5d898f588fa00456868ff14ca71852dec09f38cb8ac30027a3d8b3d66d8 +size 237056 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Linq.dll new file mode 100644 index 000000000..53d4b43c8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ee6fe97abcc2f76c3016f05c7a1a3b9300de7b74ad8c798edab9c191c18f294 +size 36352 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.OracleClient.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.OracleClient.dll new file mode 100644 index 000000000..720ebf9ed --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:314a0eabe221715ac452c7cc39089b51e95fde04a4f21761dcae043f529af86d +size 39936 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Services.Client.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Services.Client.dll new file mode 100644 index 000000000..64e136022 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f609548a9ea24d5c194e5a69d948fe204f21a241d15b6b4f882929e16a73d9 +size 20992 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Services.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Services.dll new file mode 100644 index 000000000..7adbf0c4f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e9b8c59aa08eb580079cdbe0a3f5aaf5175dc97b6f719506a88fe3e171184d4 +size 39936 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.dll new file mode 100644 index 000000000..8740597c7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c44d04706a708407c5289ed225b5afb25206aebbece74133c575ba43dff4e58 +size 193024 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.DirectoryServices.Protocols.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..5b2c7b18d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:be0fc9993294dc85f8b640ad6c5b0f9381b98c98fd0075ad41b788a015d7aa05 +size 40960 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.DirectoryServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.DirectoryServices.dll new file mode 100644 index 000000000..21b179b50 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ea0320dd6a9ce2a72e452ac39bae7f5549542a0736086eb5779deab821ea955 +size 72704 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Drawing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Drawing.dll new file mode 100644 index 000000000..6d82028b3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:10fd5f9c7e846597dc902721565fe73ecb2c28bbdb3532338e719465480ef2f6 +size 140288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Dynamic.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Dynamic.dll new file mode 100644 index 000000000..7b771bd42 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20f4a2772e3ab1868b74c780e82140ccd2107d7a0b67ac7097a7ba71c104f06c +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.EnterpriseServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.EnterpriseServices.dll new file mode 100644 index 000000000..23acdb5a5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a503b0361835e1bca720ff10810a3d2c3f940b4f1a22044dcef4df981c12f590 +size 35840 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IO.Compression.FileSystem.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..155d64c57 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e47dc79fa563627ac47665b1c12e84cca70ba3a0511ba5e622ecce41e3c927fc +size 6656 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IO.Compression.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IO.Compression.dll new file mode 100644 index 000000000..39e2b3c2a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6afd5d113510fdc41dafb5e2e97f2306edd842c954415161cedbac2cc54140eb +size 7168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IdentityModel.Selectors.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..e1ac3c28a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae3c31cb8546ccd45583338db934cf6126c9911c2b2794ac7e61c31f4c577f0b +size 8704 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IdentityModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IdentityModel.dll new file mode 100644 index 000000000..aff1d266a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0d1803e02c073b7d08122064d99e8181d22a90a836ac3b8dbe26f7fbb518c33 +size 138752 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Json.Microsoft.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Json.Microsoft.dll new file mode 100644 index 000000000..9e24068df --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82500f979119736e0b9e6b381a91e6465f91b033e6fbf37eb95f20bb775bb0d4 +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Json.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Json.dll new file mode 100644 index 000000000..984cedb44 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:862ad38f55710c88b5fcd75fa2358cf7de0384dd6eb5c935890279dd629933a9 +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Management.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Management.dll new file mode 100644 index 000000000..5610d336a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:245006b4dea9ac1244b437a3775ed3b52e1e5c32e32165f2ed5fb6113d397c70 +size 38912 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Messaging.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Messaging.dll new file mode 100644 index 000000000..ec95be06b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:877a107807a6c05f1fcd6c0738825105b5d89e2a87c4a20fbe1c759ee626e52b +size 45568 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.Formatting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..e2bc345df --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d695096fce1eff031f13b4ca689d0d0b5961538934999acbeeddcef8e944442a +size 19456 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.WebRequest.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..32dcdcae2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d480aea7d03b22ed7fefc205c595792f488da2e501ba2c6d437ed2ccb263c193 +size 7168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.dll new file mode 100644 index 000000000..f840d72c7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14cd23c05bba6303041d8de9a576f1fa944ca50a1f4d98358ad343d8be98d166 +size 30208 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.dll new file mode 100644 index 000000000..e026f87a5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f1d7b996114150d80d462eebec77b72240f4fa20e802cdc7f1433f8cd96aeb97 +size 30208 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Numerics.Vectors.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Numerics.Vectors.dll new file mode 100644 index 000000000..bd449ea8d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e482bef161ba12bcb5989a901fb21e90162041827feed23f90e22f0474c82c43 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Numerics.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Numerics.dll new file mode 100644 index 000000000..ae7d8c2b9 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b47b6661f2168b47d18e645b1b12548ba86dc5787be24862286a1f838b4be59 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Core.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Core.dll new file mode 100644 index 000000000..824927786 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1f7ca64eb13c3576b50b63cef8130a717f3e7d774731ea8f15ae17a63d13f369 +size 22528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Debugger.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Debugger.dll new file mode 100644 index 000000000..c8929afe2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e26bcf1fdcc249eab6d538f79432c0b9a478506c374d4eb0ed7bd521f610456 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Experimental.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Experimental.dll new file mode 100644 index 000000000..325b07a9b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c56c7dc413fa222b1926c38f00222a7da1badee9718cc54c57450c01abe09a +size 9216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Interfaces.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..6898dacde --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c12b395ce6caa4eee69a73f00fff7c66aa2a5695660c23ab241088e24c12c489 +size 7680 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Linq.dll new file mode 100644 index 000000000..567b2185a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:595bd82812ec34b94afa4ad07258098e0fa456afde6f80586f3c670f3cb2b6c5 +size 72704 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..5492c7f91 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e20a9ea5d5b009058b4b41b5d8bbcc958a9b0606829b3466140859bce708724 +size 8704 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.PlatformServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..bc69ac002 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57414c47cc7a8b002dd4f21a81bea522bce6993d8f71836352d35501aa0d173f +size 7168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Providers.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Providers.dll new file mode 100644 index 000000000..0dccfa8f1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41cd43ed2ea280662b871e7f00c6ccbc413d05d782b6f3cd21f2892a0bcf3047 +size 68096 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..07983cf3a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3c82eec64bd4c842129becf8d7c8bf5493e00b00b359eb0787a6ab4bb394b0f5 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Windows.Forms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..8f761c230 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d6198c1332e4a2f199579566634273d995a770fe81023c42557875617071f93 +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Windows.Threading.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..971cbb95b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fef7bbe9630fb0cac28e79fcba6403b729922723f20e99516be6707b44e06114 +size 7168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Caching.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Caching.dll new file mode 100644 index 000000000..f03d95b7f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d4b23dc6a1bf423545575b98a5ed7830795ebe87473e2fc9ea7230ab3ddddfd +size 16896 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.DurableInstancing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..4b639dcbe --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2feb72896932b115c43379c3b84ba1ffb9a456139999c7b59411215a6cbabe6a +size 29184 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Remoting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Remoting.dll new file mode 100644 index 000000000..e70574aba --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6cae8b048e6ad843cbe754245493c83c6ce1a9b3a3aa3cee52db4cd0312dc5e1 +size 20480 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..293037e51 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f303338dafa6113fce8b0d411c95e5bbfc9d6a9f49321df67cc61a9fb48531bb +size 7168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Serialization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Serialization.dll new file mode 100644 index 000000000..3aebe2f8d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e279ef544156ac22b7b7a6f1cf8136c8921555e3677dd2909b1c44c8b1cd5c1 +size 38912 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Security.dll new file mode 100644 index 000000000..e348a8aa1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b8ab41e7c190b247569d9d74cee53771d8d2f7fb87234df2d60b8f103d53609f +size 41472 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Activation.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..04ef50028 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11068d7488aeb17ad239f797216e967ae10aee3aebc827e15088a099825ae68e +size 7680 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Discovery.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..63bb2bebc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7c7f43e289c68df96db8f9eea38233706dc1ceed1e70be2d7e892501c4360c0 +size 36864 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Internals.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..2c12f6888 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:edae786715d120534ae5d66942723030a2eaa7cdc07a196fedc59869527da4a2 +size 18432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Routing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..fd3657a00 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fed98c0430e9f486281ccfb60c955c881ad66f6c27ccc4364a9a7f5366eda41b +size 20480 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Web.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Web.dll new file mode 100644 index 000000000..f35d63230 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3122bd3e254bd77d17ad63ad7061a30ea31440a3431d96d030b074eb7c851cf0 +size 39424 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.dll new file mode 100644 index 000000000..a9d1cbb41 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8607a197d53e798f8db553f9bcf9b56353a89555f9036b6ce93ebfa7e8231309 +size 551424 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceProcess.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceProcess.dll new file mode 100644 index 000000000..a19edf597 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d76d89b226f886c007ee6d3ded7e16c3e037b9d3bac9255cb295d6fd8e0d4008 +size 17408 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4ea1a88ef --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5a3a8d78926413c4a39a95ea2b4969d329a914b02b078499f2040a0178db5d4 +size 22016 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Transactions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Transactions.dll new file mode 100644 index 000000000..cc8486b86 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc70ac58220952bcbf3a80d2d8a0215df0d462c1f5a16938709b230f3d4a3361 +size 16384 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Abstractions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Abstractions.dll new file mode 100644 index 000000000..cc0048359 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5075b0145363b7e45a1b041fdbcb80e67aeddf3dcb4bea04f18ce3fedfafc76d +size 6656 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.ApplicationServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..edd2d0c71 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcef740e267ddee487319afeb2bb65a706421ce96e3781222eba59445c538544 +size 13824 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.DynamicData.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.DynamicData.dll new file mode 100644 index 000000000..8618bf102 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b5c084082f2df92014d345537bdc4f1d877416a2120db464310f460f71ef143 +size 36864 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Extensions.dll new file mode 100644 index 000000000..eb37c5e78 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:baa7603b9decee107df353502c3cff1bd420ba4eac11c4e516fdab58761adabc +size 98304 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.SelfHost.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..bae32f55b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d62561aefc96c3c852e4ba34ceffa9da1575ff9ab1bd172ff5c3513e875c061a +size 9216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.WebHost.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..c18a95dee --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c096053c7ecbc52145881c04663c55ee13e58d3db70788291decbe2df93164b3 +size 7680 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.dll new file mode 100644 index 000000000..9dcb7f105 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a0366e666f6fa6c2759a68b88a95c0db4cd019d9623ffa129b760d4bea89151 +size 56320 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Mvc.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Mvc.dll new file mode 100644 index 000000000..48d2d1675 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b89b7488afdddfa20f75d7eb72398d30ff21eb996f62335aaf57d31c7cf24178 +size 100864 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Razor.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Razor.dll new file mode 100644 index 000000000..8117fee52 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f27acfd4469e514e19615b8cd4770114cca563bf8031df807802297064d4a43 +size 60928 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Routing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Routing.dll new file mode 100644 index 000000000..40ffdc4c2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:392ecf2fa81d60e2e9b46eebee1cacc68f5cdd32fb73975266a1a61c044a5ae2 +size 6656 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Services.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Services.dll new file mode 100644 index 000000000..04664d5fb --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:72be2ede82989fa51f1eaf5ac56c9838ffafc0129d216dd37a512daf48038f85 +size 80384 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.Deployment.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..bcfa7da97 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b2dd91160769f23ee0ffa7fe7e48d961c76c0181bbc442bc097d3b53eba03a03 +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.Razor.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..ed6d0ddcc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23053ef0a76dbb6e07d7d00ccaf1961af81b0934f5716b522e26634d548496dc +size 10752 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.dll new file mode 100644 index 000000000..6bfa18eb0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:690a64f6ce4d5fb465114c78eb7ad55ccab1f06d1ade331eb1aa9ea43a93b2ac +size 35328 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.dll new file mode 100644 index 000000000..9f1e56bd3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:85b82ea5215471276157f9b310300fc6c6a4fdc6820e68551ac176014df80e42 +size 913920 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..3b614a192 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2e82eca4263c69bf4c02841cbbd81e246777554cd6cd07380ded1143ac670878 +size 101888 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.Forms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.Forms.dll new file mode 100644 index 000000000..f98b428f2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c93e17749f507b677b811a572e7de7a93e99d2532273a14261eb20927211e0eb +size 751616 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.dll new file mode 100644 index 000000000..f1015ae64 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b6b28979fdba11693c2e72b7855dac112420e821693cdd9376b00eff9858079 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xaml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xaml.dll new file mode 100644 index 000000000..3bef8218d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76f22594e51872517df1b9bfb9e3ae21c600d75472dd31eda70b09aa089e8c27 +size 46592 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.Linq.dll new file mode 100644 index 000000000..6aac055f2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d9b6bd7973c9d66659468e38bfb99c551fac1d92b71fd1c5701fbb54869aefc +size 22528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.Serialization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.Serialization.dll new file mode 100644 index 000000000..cda7cfbbc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e73314602086cf1aac4d06177d8e3277a219d1ca9119f07d9baae4e3d83a79d2 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.dll new file mode 100644 index 000000000..51fa02da6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1683fc53de62017fe812b9afeeefb8ac097d61a68bbb637714412594fcfeea1b +size 155648 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.dll new file mode 100644 index 000000000..450f3f28a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ddedcd3eea73801d789ffd69abd8cdedb5999b8c1824cf7f24620fac6a8b5eb1 +size 495616 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/WindowsBase.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/WindowsBase.dll new file mode 100644 index 000000000..dd81a697d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9aba66826546888ae8b68e64db6254ad2879339928c8444533dc9b049ac29c10 +size 82944 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/mscorlib.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/mscorlib.dll new file mode 100644 index 000000000..75cfc4c5f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5-api/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27be711f6c6d736712696b220775ecb2f49f12662718106462482adcd6768e9f +size 831488 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Accessibility.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Primitives.dll new file mode 100644 index 000000000..d61a5ae27 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ecf18f218ef39cd6b48c37a3ddfa8b1762405c830d7dba28266efed219bdb5ed +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.AccessControl.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.AccessControl.dll new file mode 100644 index 000000000..ad6bbd82c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.AccessControl.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:528de8d05a5a36a9def0aacbe654ee029a2e22e658622407dfed8c0039f7f2eb +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.dll new file mode 100644 index 000000000..5d5c09930 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/Microsoft.Win32.Registry.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0c963b7d5e10ece8b1c4749e9697c15dd8a0b4a63d9a2745fe2db6db6d8c86aa +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.AppContext.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.AppContext.dll new file mode 100644 index 000000000..6f1825282 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.AppContext.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:21d59dc6c476cb5b6046d2aabb1c546d2316d037800babeac4b3bd593b2e0f24 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.Concurrent.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.Concurrent.dll new file mode 100644 index 000000000..5751d62f3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.Concurrent.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f4d1ab088c05cc65e1ca8b5cbcacf8847b879e3a26ef0eb4c4c05e17248f860 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.NonGeneric.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.NonGeneric.dll new file mode 100644 index 000000000..94952c4d3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.NonGeneric.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8fb21d60f04e06bbac36682cbc0d4d92fb2ad749af0a2a3380410dbf2ae29432 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.Specialized.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.Specialized.dll new file mode 100644 index 000000000..87f61fffd --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.Specialized.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36561f5d20732afa1575b2c0dcf6a5f410476e1e82043a63dcc632bda1815195 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.dll new file mode 100644 index 000000000..14a27a56c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Collections.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b7e08d59a9546943dc06cc2cec224bab0ea02c73a7ea4a69c6a740cf243350a +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.Annotations.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.Annotations.dll new file mode 100644 index 000000000..a214ea20a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.Annotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42a1cd0d87ad65415e0662771edb761ab40e9d1bc9b7e845cfeb99dbda4da930 +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.EventBasedAsync.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.EventBasedAsync.dll new file mode 100644 index 000000000..2eb2170ff --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.EventBasedAsync.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8117fb0c8e3395c1399f22d93ba4b0984034f96eb5daa2e323c3f9aff07deb1e +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.Primitives.dll new file mode 100644 index 000000000..9561a3908 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:20a5dd35bb565e7baf6cba4d80b161dd46088d349f323f58088cbe8f95f7d053 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.TypeConverter.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.TypeConverter.dll new file mode 100644 index 000000000..d882c2d5f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.TypeConverter.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d1267c20427cca76cc39c909dc130ceb5525ee57f4a256c9b76db099db9dd5a +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.dll new file mode 100644 index 000000000..9454d5ce5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6e2d221a9f4577828e29d53236149bf4bc624594aaef75d478d2b46ee482fff4 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Console.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Console.dll new file mode 100644 index 000000000..55c4048b3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Console.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de8f340cc4b79a39d9082f66ff1267adbcb94a3deb4cf2486c90be9ff0a84b51 +size 4096 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Data.Common.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Data.Common.dll new file mode 100644 index 000000000..a16a505b5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Data.Common.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e10fa60ffb1f2d0416e6d4b32ef4256514322859624d3b2fa4c16036daa64e9b +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Data.SqlClient.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Data.SqlClient.dll new file mode 100644 index 000000000..eb89df4ea --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Data.SqlClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e461922ab23a60a9ccc3a3298adff8f0d0136dc93d14deea246b664fc751fbb4 +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Contracts.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Contracts.dll new file mode 100644 index 000000000..b3546ed8b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Contracts.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b07e1b3851be552690e01d37dd3b76dc7ecbcf4d21280be48edf5c095175e349 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Debug.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Debug.dll new file mode 100644 index 000000000..07cbecf06 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Debug.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8acc99f91a463abe106f06f6f5d2bf5dd5fdb755ea5745c52872365122bc5e26 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.FileVersionInfo.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.FileVersionInfo.dll new file mode 100644 index 000000000..b7d4a88c5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.FileVersionInfo.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18cbb06e7fa6268063f32ad6147581edc65c876ea7bb8bfedcda8167bc147efd +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Process.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Process.dll new file mode 100644 index 000000000..19cc70897 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Process.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ee60191fbb93926a540556af13896a9bbffdc8f05712bc1a20f177dfae714ba +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.StackTrace.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.StackTrace.dll new file mode 100644 index 000000000..1c5143fa0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.StackTrace.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d2956ecf2b31d4a971e76d9a777c7ea60491c3bd108b7e6c1bd66578e3d19f0a +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TextWriterTraceListener.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TextWriterTraceListener.dll new file mode 100644 index 000000000..b03de9763 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TextWriterTraceListener.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:30751101f4f31bd3d3c8023a412deada10875c0735ac6f31596e112d9f8fb7d1 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tools.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tools.dll new file mode 100644 index 000000000..f33a83738 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tools.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff2f1df9e1feb016a595424f48af1c1820bda4630680e5e1b6f178ab6bc83da0 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceEvent.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceEvent.dll new file mode 100644 index 000000000..931ed645f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceEvent.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d71212943eece9dbf5bd6c464b01ad20677dd233dabeea7a8035c2f54e83654b +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceSource.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceSource.dll new file mode 100644 index 000000000..01eb2646f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.TraceSource.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91efe8bdfcffabac4c71df60ac8f515668b41fc70d695835847b8810895b282f +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tracing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tracing.dll new file mode 100644 index 000000000..7500ed9a2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Diagnostics.Tracing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:263dfdd40d6701753a843fc13ccd7303e60e53ffbdcb1088fbbf240298edfd48 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Drawing.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Drawing.Primitives.dll new file mode 100644 index 000000000..8e2c066a6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Drawing.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d6188e64b0802a7a8805f63689f4a1f70f45d8fb85ce5d5338dfdb4ea599aab7 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Dynamic.Runtime.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Dynamic.Runtime.dll new file mode 100644 index 000000000..5a8af43b6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Dynamic.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:312f44cde35ee6b4327e1c0d7eb13e13ff400b98cdc2f1df4c2dbf652db141b3 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.Calendars.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.Calendars.dll new file mode 100644 index 000000000..938a32b8b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.Calendars.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:628e49f6a8cf333f0af9e702d00c720ed248c9a3332f750cb2fcfbb095f46ab1 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.Extensions.dll new file mode 100644 index 000000000..732f9f128 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae8b233a1265ad27479389ce76936f5664523bdb46d9ba1e94a328ddf6832e03 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.dll new file mode 100644 index 000000000..8b297f35b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Globalization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bfb79022e27b9c079b36a5920b82501416aea0b6e81536fb0b499119faaf9143 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.Compression.ZipFile.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.Compression.ZipFile.dll new file mode 100644 index 000000000..dcfa03b79 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.Compression.ZipFile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d505ea219c25aa42a89647bb15ccc172a669ac79d46345b7ec7ef7e3a91aa88c +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.AccessControl.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.AccessControl.dll new file mode 100644 index 000000000..fd422b20f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.AccessControl.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a1f94e9c3aacb10624121982b0a29d35b11126a3a2eacfd5a5ccd4dc4a71da72 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.DriveInfo.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.DriveInfo.dll new file mode 100644 index 000000000..7167768f3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.DriveInfo.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64e662b61483b1e1804eb78b70b62051371da6c5de0c0f193771173b97ed8b06 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Primitives.dll new file mode 100644 index 000000000..e54adcfe2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fafef8c0fce6a5f824880453e99060165b7612fa55d3d339a83d2111012d1997 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Watcher.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Watcher.dll new file mode 100644 index 000000000..9d38fb401 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.Watcher.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6aaff752b377337f4437629fe8fe6d79fe6bea2d84082f3e0f8eefb9cd7b352e +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.dll new file mode 100644 index 000000000..583106521 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82c4619f4af237058a1e7bd5742bb7481d3350602bc80747d60ad60aa973a151 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.IsolatedStorage.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.IsolatedStorage.dll new file mode 100644 index 000000000..f4eebb935 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.IsolatedStorage.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6490e1e1c18d44835a1e9190abd32b73744c250a71f7c9eaab78dbc39a80a97 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.MemoryMappedFiles.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.MemoryMappedFiles.dll new file mode 100644 index 000000000..6d32fc521 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.MemoryMappedFiles.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eac40bd86fcc58f0cc8ddde8fd2aa273031fb27496a0f9438e428f0e450914fe +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.Pipes.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.Pipes.dll new file mode 100644 index 000000000..368e659a8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.Pipes.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e892c5cca371cd24b931dbea6a03fc11dcc495ab3d318386c4b78184b63161 +size 4096 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.UnmanagedMemoryStream.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.UnmanagedMemoryStream.dll new file mode 100644 index 000000000..831a777dc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.UnmanagedMemoryStream.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6067b6388a1fb7e0d47a51cc3c1e2b04b87f5025c404fe8fd2770808bd863ec8 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.dll new file mode 100644 index 000000000..ee5a6cedf --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.IO.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:358d6a28aaae259a51e52a3f0933fa8f36cd10f96e6e6594232ec2faf567d483 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Expressions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Expressions.dll new file mode 100644 index 000000000..05936d034 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Expressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91aea8c6652e052bfec8ba5a4eed91a4d424921dd53c0606ab3620bacb5e08ba +size 6656 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Parallel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Parallel.dll new file mode 100644 index 000000000..0024df3cb --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Parallel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b458212adbfe1f2644ab0837cfa31297733c1d0af15718767f4986346a2935f9 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Queryable.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Queryable.dll new file mode 100644 index 000000000..b8e08ef71 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.Queryable.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7a37fe6c1c9c1716aedd5e93f3768c16ef78d96a52622960f1c396e1b3fb165 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.dll new file mode 100644 index 000000000..999fb0b88 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:61781d47caedf8005848828abced6399758244e78df2c643bc71552ceb31c0d3 +size 4096 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.AuthenticationManager.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.AuthenticationManager.dll new file mode 100644 index 000000000..03d195f45 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.AuthenticationManager.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28332ac4638e8e0a4a0fbf1f8cf7f007b1152aa57fa4d1373eaa2d862433fcbe +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Cache.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Cache.dll new file mode 100644 index 000000000..69f83689e --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Cache.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:336d6cd56d78dc97a65a4f999d2498e7a4a58cf9e1c02247f44e433f4bd0b51f +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Http.Rtc.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Http.Rtc.dll new file mode 100644 index 000000000..3c3754130 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Http.Rtc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cffc2dd5c81e8acd65dc093ad72a771950d1152556c96613ca729782bc21e330 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.HttpListener.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.HttpListener.dll new file mode 100644 index 000000000..2db9a9e16 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.HttpListener.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f547e7c407379b45774bde0f538a05deacaabac0219cf2c66754c95371affee7 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Mail.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Mail.dll new file mode 100644 index 000000000..a0ebbd7b8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Mail.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e612c7aaae3f072106a62c7194169af8eafd89884899f7b29fc241bb95ee9729 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.NameResolution.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.NameResolution.dll new file mode 100644 index 000000000..5ee785a06 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.NameResolution.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0fa3e0f3c298a853ed275a40ec2a34da9f5655077cd031dc3075b93472fd575a +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.NetworkInformation.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.NetworkInformation.dll new file mode 100644 index 000000000..3854653c1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.NetworkInformation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:89d31821d201378aebc741fc0339ad34287cc821cf6f448b259c4b60d18e8599 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Ping.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Ping.dll new file mode 100644 index 000000000..b45010c24 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Ping.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f3af7546e3ecca213b9dd88880501788f9b19ccf13fe681e1d72fb8feb81c1d +size 4096 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Primitives.dll new file mode 100644 index 000000000..4c83ccfd8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:793d91aea6911134d73151e81fe9868d68d01e1960e84d451fad53394550e856 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Requests.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Requests.dll new file mode 100644 index 000000000..bea85508a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Requests.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8b1179f9dceb80b46e396330fc0b70ebc16b872498e141647c2bc3b10a84416a +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Security.dll new file mode 100644 index 000000000..86207849e --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b9fee979b315e2933193b730a4450cb8c30832725367308265c91dee3ed484dd +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.ServicePoint.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.ServicePoint.dll new file mode 100644 index 000000000..252866103 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.ServicePoint.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:071eac5408a5a8a78d949a132a3bc3a926ea3b1bd553bb85e7f946e3249601ac +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Sockets.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Sockets.dll new file mode 100644 index 000000000..073d2c8f4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Sockets.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1333ed119afc6431fe36c0463bd68cdb4b822a8cb386fa8e8b19f65415d7ef5b +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Utilities.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Utilities.dll new file mode 100644 index 000000000..d1c20ed34 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.Utilities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:22bfe1d6e8df6935b1c848715a9ae894bb33b239a158b313866dd17094187199 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebHeaderCollection.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebHeaderCollection.dll new file mode 100644 index 000000000..db712a658 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebHeaderCollection.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0a5c10b3678dcf43a07bad958c5a4c175c2a2040591d6c7b3f162a05c6be726 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.Client.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.Client.dll new file mode 100644 index 000000000..bced53dfd --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:94e3303942342a38fd29b44ee2ba5223cdf311fb7ee613684b932cd596ce8e4a +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.dll new file mode 100644 index 000000000..6e703b166 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Net.WebSockets.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:400088263656217475f07a9a8a51e681d1bb75c347405b672decabbda3ea29e1 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ObjectModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ObjectModel.dll new file mode 100644 index 000000000..680771fc0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ObjectModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b53e91dea97bb30d1562fbbc328103a742056574c9a421262db26413a118bc5 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.ILGeneration.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.ILGeneration.dll new file mode 100644 index 000000000..c19b41c56 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.ILGeneration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c062cf871c125ca000930fcd2729afa111dff71203c500e000a0934a90d7a55d +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.Lightweight.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.Lightweight.dll new file mode 100644 index 000000000..e0f35eaf5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.Lightweight.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:08924131f3a0e433ae7eeb7fda17e6fc0bf1df283ed935fb5363304d15db05af +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.dll new file mode 100644 index 000000000..a130071a8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Emit.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a150682dab01b4aaba3a3764376f6a827f017f0c899a8b80a2f3677b8c8833a +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Extensions.dll new file mode 100644 index 000000000..5425cdd1d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ff87f7ef817b3d5ccb4505a0a296e361e22a0c6c85e216c5b39ca6b9d1add77d +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Primitives.dll new file mode 100644 index 000000000..aa0da2f86 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cd85a9c9d4a35485558f8f18d21a57d7a1ff87f4c318f96041733059f3ab1880 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.TypeExtensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.TypeExtensions.dll new file mode 100644 index 000000000..ef2196372 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.TypeExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b49fd40b0541635e8cb916d0297612874da03eca1babf47a8f09d6a49e89aed3 +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.dll new file mode 100644 index 000000000..38503348f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Reflection.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:add0c7788b57ed229a9bf6c2f13cfdbcd30a86aa593a4c871a7c03959db65e7a +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.Reader.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.Reader.dll new file mode 100644 index 000000000..5d859469d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.Reader.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4491b52b947cce0c71761f9ef92f58dffbc3abdaf1e9795f813b076fff6fd333 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.ReaderWriter.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.ReaderWriter.dll new file mode 100644 index 000000000..1d931510c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.ReaderWriter.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fc4a443302268d3b01e95abde264aa7c772327aff5e8ad9150caca07c8578c +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.ResourceManager.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.ResourceManager.dll new file mode 100644 index 000000000..64960f06b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.ResourceManager.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3077ef49a12e491102e8630e8e419ef255d32a767024097e1c7377804cbdae0e +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.Writer.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.Writer.dll new file mode 100644 index 000000000..f7563a2e0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Resources.Writer.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd3ea287d61f2ca9e36639b2fcf1863ad96b23d6cd797e4a2993d64b7bcfdcd5 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.CompilerServices.VisualC.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.CompilerServices.VisualC.dll new file mode 100644 index 000000000..be4af110f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.CompilerServices.VisualC.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e07b95b1a6374fa2a4c71690213509a8cbe0f9a2a57606dccb27bff1f5f26519 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Extensions.dll new file mode 100644 index 000000000..b2039ab7b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:13525a02ae75462cc3817721457789fbd5a5e58c9ebf6e1d903b6b52c846e4c6 +size 6656 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Handles.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Handles.dll new file mode 100644 index 000000000..8f1a20560 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Handles.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b6cf0896b399ec99b3b56757a6c818c7abbe30b9b93267896f5fae54dae4cd2 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.RuntimeInformation.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.RuntimeInformation.dll new file mode 100644 index 000000000..f21049139 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.RuntimeInformation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40cd19bdfcc27dd36b75224162cfa5154c1dbf6248333fa751ead8adeff269c3 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.WindowsRuntime.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.WindowsRuntime.dll new file mode 100644 index 000000000..e2466e877 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.WindowsRuntime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:933d853950379c3f8e5e3ecf54b692599537f95e227320996e4c7477239e9ad9 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.dll new file mode 100644 index 000000000..980cfc654 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.InteropServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:542763d139c13f3b1e01bbf9993ec178024789853fa0715d7a7a3c347eab99f5 +size 7680 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Numerics.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Numerics.dll new file mode 100644 index 000000000..43f776d85 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42c072774bfbf30cdb9fe47a23a1ea1d51fb04d2b4396961dfc286ea81aaea02 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Formatters.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Formatters.dll new file mode 100644 index 000000000..c5246c00e --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Formatters.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab9329d5571c53175cf96be3a65b62ef048196579ed7dff5fb3fab06591d4a38 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Json.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Json.dll new file mode 100644 index 000000000..16f51cf5a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ee5bd9cd1edaee9a7919cbecdec55d23094c3d03c6049f3bbdd70e3dac14bd91 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Primitives.dll new file mode 100644 index 000000000..360b181f8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:849e8b2591a3c28a9ffe9ff50d4d06453ce3b270083f47b3d8703ec88630b696 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Xml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Xml.dll new file mode 100644 index 000000000..2a3df15dc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.Serialization.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:42ab3a4bdde68f87b754abb34af78009349be135bb96c3923f33caa2a89b02d5 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.dll new file mode 100644 index 000000000..96e2966d7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00ac5330dd40c7e75f7a3c8a0b5d0edd83fe331bf22589d70d3dacc21f432a99 +size 22528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.AccessControl.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.AccessControl.dll new file mode 100644 index 000000000..f7316a34f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.AccessControl.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e354dc2d4c66071b36e8005e1f178d9ed82679aca4d7fa91d50f4d4c28d755a +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Claims.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Claims.dll new file mode 100644 index 000000000..8c10f1e0f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Claims.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de37aa2802a659d99b2e40959a73a97b7f541283cf825b869bac01d4d21d7409 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Algorithms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Algorithms.dll new file mode 100644 index 000000000..d15092632 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Algorithms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:736bffff3a1bd3981833abf793826a7b6e54c83ec4ce40f7de7f0b31820f3f95 +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Csp.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Csp.dll new file mode 100644 index 000000000..fc08637ea --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Csp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5942c805a45c40d7673f713f620083abb47a723417eb497739d3a1ac0f879258 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.DeriveBytes.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.DeriveBytes.dll new file mode 100644 index 000000000..e7512ba02 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.DeriveBytes.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:82797662651d9c77fd23f369555b8d0ea5adf9aac04cb6785768288f840b5ada +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encoding.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encoding.dll new file mode 100644 index 000000000..619ce04ca --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encoding.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ba58bca1e32aae58145a20bf15b67c0eb7b96d56f2dc419ea9131ab00e1b6415 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.Aes.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.Aes.dll new file mode 100644 index 000000000..8ca07a64b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.Aes.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8827414767dc78d032e92caf620bf743e3dede67bbd145935e7e57e93ea4553b +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman.dll new file mode 100644 index 000000000..d94185ba9 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDiffieHellman.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eb3b87b189eb332695f7c976db23884cd9e6dafc1c85c11ded4415296f848fa1 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDsa.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDsa.dll new file mode 100644 index 000000000..b11bdd630 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.ECDsa.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4e72099f69bdd5dc9e057ff4ca3c521bdd32c55613fded02d3e14f1c3406d37a +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.dll new file mode 100644 index 000000000..31c995e85 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Encryption.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50c94403c539664ce962658b2e335eaadb42e2ab5b91afd3c5c6d34f8a12adba +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.Algorithms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.Algorithms.dll new file mode 100644 index 000000000..b7e58e00d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.Algorithms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:222ce7be0ea905a53ba10ac76a24c9eb3ac0494ad48a83c0a1462c3c20b9d135 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.dll new file mode 100644 index 000000000..9d2ec3b89 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Hashing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0e2ae83f75eec5fa99df393a4fb6cc13c22da6cfbc2296f5bd60edf4a5bffbb4 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Primitives.dll new file mode 100644 index 000000000..a5424c90b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:269b0ca96a7cf92cc56c2fd8a0849c26ed912dd6c7bdd07c59b00976eac8fcf3 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.ProtectedData.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.ProtectedData.dll new file mode 100644 index 000000000..26a3707b3 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.ProtectedData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e9c76559acf84ff7b1fe2d2183b9625cea2d4b44d53ac1f04f9e007daf3b03d4 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RSA.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RSA.dll new file mode 100644 index 000000000..b6bc56bbc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RSA.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c75b6bd23375a62216fa12dcb633a3847534f4314cf1f3022be1007e5499e28d +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RandomNumberGenerator.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RandomNumberGenerator.dll new file mode 100644 index 000000000..889dd4477 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.RandomNumberGenerator.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f536bfc046095caf235cfc702800d3b9bf24547084d9f520f03056c80aed1db3 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.X509Certificates.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.X509Certificates.dll new file mode 100644 index 000000000..b250ae90f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Cryptography.X509Certificates.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e20e85011e4d1f1bb6d83768ba2400e703a85e3948a3d5a2904b80a5bc2fdcc1 +size 6144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Principal.Windows.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Principal.Windows.dll new file mode 100644 index 000000000..6175f95cb --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Principal.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73534745a7ef6ec8008263993d62fd82e2c0ca537af02d7adad866846f03a51d +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Principal.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Principal.dll new file mode 100644 index 000000000..ef19f6daa --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.Principal.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1fe2d68f59d40a4d832504277e26bea9fd1008303edb72dc7eabefc4cf32d08 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.SecureString.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.SecureString.dll new file mode 100644 index 000000000..c27de770d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Security.SecureString.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93608df9f07bc31b76b50b5c9bbabcbb5318163975cc8f9d6f5a60be05771b33 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Duplex.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Duplex.dll new file mode 100644 index 000000000..2b786eaa0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Duplex.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c772f86f4f1e84662152344b4a8647b6da82aeaa2ccf1941b8e64d34039d8d6 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Http.dll new file mode 100644 index 000000000..54fa39c92 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4c08f5686a3e581add444875e0d7c299b8928e3f98556bed78ab75bc08061d2d +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.NetTcp.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.NetTcp.dll new file mode 100644 index 000000000..7559e59f8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.NetTcp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:59562d37b24364dfeb886e37629d32d08caf160832c0cd48cf20266a09eeb59b +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Primitives.dll new file mode 100644 index 000000000..43a99f991 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf8b5fd4e892a2bad40909dbc5c15ee729e9eec830b67ac052a3ec6b94fab780 +size 10240 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Security.dll new file mode 100644 index 000000000..f77865fac --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceModel.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b44707098a4f052a063a947cd1482c6de42a08fa0d17ae847c35037ef694a109 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceProcess.ServiceController.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceProcess.ServiceController.dll new file mode 100644 index 000000000..836223f80 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ServiceProcess.ServiceController.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:401180ba787134671a4ec2c276755749d58e7e623b47e515cebba74e28d725ec +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.CodePages.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.CodePages.dll new file mode 100644 index 000000000..f8c8d4e10 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.CodePages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5d5adfac5e9cc4353f4f06eca0d53c0517205710e32aa829e805ce0187a9b09b +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.Extensions.dll new file mode 100644 index 000000000..eb78733ea --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dfcd01c9b609d0b9d1cb1b0cb4cbdb07415292d2f3c1a57d816bc49c7e643868 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.dll new file mode 100644 index 000000000..368f2a29a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.Encoding.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a26b2a2564c872c242cf36907bcbd5aadf0350fc17f6e5cf1836294d433b2505 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.RegularExpressions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.RegularExpressions.dll new file mode 100644 index 000000000..2c6031927 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Text.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f614cc87abed9ead104ce142cc5ddfc3fc64cb2424e835016cd45860f047c51c +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.AccessControl.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.AccessControl.dll new file mode 100644 index 000000000..10082194c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.AccessControl.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:33dfc1c63a7aa2a2a61b98cc36b59d71a534dda8b577cf416c6565cc38c1f288 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Overlapped.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Overlapped.dll new file mode 100644 index 000000000..0af3f61c9 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Overlapped.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fb13340cf72614a725afc8d93cdf98052ad4c8dc85fbd222e68b9da893b88693 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.Parallel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.Parallel.dll new file mode 100644 index 000000000..48efc3a71 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.Parallel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8a9dcbd5a3b6d0737395023d032db270f915381f9901f4dbc0fe111811893061 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.dll new file mode 100644 index 000000000..0f69e2cdc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Tasks.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1af5b9e36367c94913ffec8d880d9613f671b6d40e850db5e0482e2ec9136c08 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Thread.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Thread.dll new file mode 100644 index 000000000..33518d181 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Thread.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d303ca5ac9f2ed29abf5738cce3d49ec360bbd2087e80f91c357f5cb64493758 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.ThreadPool.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.ThreadPool.dll new file mode 100644 index 000000000..216f00406 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.ThreadPool.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eed57206b648eb4c47289b17a9a4b2db852a0b93eb160f57a943d061cde84ca8 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Timer.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Timer.dll new file mode 100644 index 000000000..d8b9df2ef --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.Timer.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e4faef06dc0b413a3c31db4a13bbaa9f02388242e78b56f86f46d0e7ca1d240 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.dll new file mode 100644 index 000000000..4052fd63d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:76212a15859dad4c7f69fac2bdadce26a379e009d42d78a098960e111647df36 +size 5632 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ValueTuple.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ValueTuple.dll new file mode 100644 index 000000000..ab8549725 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.ValueTuple.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4a5887f5ee33e62e0147a00090661f24564e15fd455c842c3578405d0b1d453 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.ReaderWriter.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.ReaderWriter.dll new file mode 100644 index 000000000..10b211f2d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.ReaderWriter.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc0f6366022916eaa428bd34d32f14a47785fde29474e3bf9c9e9949ed2da4a2 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XDocument.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XDocument.dll new file mode 100644 index 000000000..aaf1e4f8a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XDocument.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b91d4fde13a591aa3f6c8dca04f893cb69c81a930f611f3447879e7fa5d373e6 +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XPath.XDocument.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XPath.XDocument.dll new file mode 100644 index 000000000..c4f130e14 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XPath.XDocument.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:35edcdc0e6cb9a247138e90493a90dd65200f83561e9d3b5f64af48b96fc0d62 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XPath.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XPath.dll new file mode 100644 index 000000000..2a97346a4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XPath.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4939decbbff9e70d21e3c2adfb14df49a6e94e554c211d53e2d2b0378a6dfeec +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XmlDocument.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XmlDocument.dll new file mode 100644 index 000000000..a4a48d51f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XmlDocument.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a4bfe0ce7f99b319d79dd48d7b74ea51b4875a90a5273f3eb19d58494897a3fb +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XmlSerializer.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XmlSerializer.dll new file mode 100644 index 000000000..d7961229f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.XmlSerializer.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8cc223efdd551d548a548e97f3301f316820b08bd18fac80b148978592276fec +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.Xsl.Primitives.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.Xsl.Primitives.dll new file mode 100644 index 000000000..88efd713c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/System.Xml.Xsl.Primitives.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9f86a09515e53eac33bccad037fbbb6bc8ce94b8530062c575d31ca454e5e418 +size 4608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/netstandard.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/netstandard.dll new file mode 100644 index 000000000..2cd9d7d83 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Facades/netstandard.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:86aa1915e27de0fcdad675b686424f22945951a5317c7ef35753cafdbfa0a182 +size 84992 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CSharp.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CSharp.dll new file mode 100644 index 000000000..538fa6bf4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CSharp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c386383de3ae9e895f4e3702e7f44cf7b9b2b759f0859eba5f1c6cd1915b7d67 +size 300544 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.CSharp.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.CSharp.dll new file mode 100644 index 000000000..ecc41d125 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.CSharp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ad48fc93e7d3164f490e0a80230d2953b2f7120d9940e0af6d4ec17f3e4d5e97 +size 4681136 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.dll new file mode 100644 index 000000000..635806e5b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Microsoft.CodeAnalysis.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:478fa2f04a64256955f9682b8114a2f72f4a9e22de60fe5a15b2d846b6e2d6db +size 2414512 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Mono.Posix.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Mono.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Collections.Immutable.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Collections.Immutable.dll new file mode 100644 index 000000000..5b30d134d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Collections.Immutable.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8e9ce5d4db1897a939e60860154617300b0dfa4c4d3e10341f21af0de4bbfd5 +size 244432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Configuration.Install.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Configuration.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Core.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Entity.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.OracleClient.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Services.Client.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Services.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Deployment.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.DirectoryServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Drawing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Dynamic.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.EnterpriseServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IO.Compression.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IdentityModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Json.Microsoft.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Json.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Management.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Messaging.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Numerics.Vectors.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Numerics.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Core.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Debugger.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Experimental.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Providers.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reflection.Context.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reflection.Metadata.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reflection.Metadata.dll new file mode 100644 index 000000000..31031cd34 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Reflection.Metadata.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:652ded0ce5e153b85154ac65d00244aafb49e0fe8a958e2afb9c5bea83a957c0 +size 465104 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Caching.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Remoting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Serialization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Web.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceProcess.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Transactions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Abstractions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.DynamicData.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Mobile.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Mvc.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Razor.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Routing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Services.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.Forms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.Activities.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.Runtime.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xaml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.Serialization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/WindowsBase.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/csc.exe b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/csc.exe new file mode 100644 index 000000000..876727d78 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/csc.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f87824757de30ff92ca8dba1049c01855c0664f94d48980ce782b95fce7bb0e5 +size 49584 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/mscorlib.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/mscorlib.dll new file mode 100644 index 000000000..7b6afe057 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/4.5/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1945a39b4cc3ff3d16d1ed359fca1399248b54dc41da14c51db37ace45eddf9 +size 4498432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild-frameworks/.NETFramework/v4.5/RedistList/FrameworkList.xml b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild-frameworks/.NETFramework/v4.5/RedistList/FrameworkList.xml new file mode 100644 index 000000000..2741a7830 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild-frameworks/.NETFramework/v4.5/RedistList/FrameworkList.xml @@ -0,0 +1,3 @@ + + + diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Imports/Microsoft.Common.props/ImportBefore/Microsoft.NuGet.ImportBefore.props b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Imports/Microsoft.Common.props/ImportBefore/Microsoft.NuGet.ImportBefore.props new file mode 100644 index 000000000..0dea8c03f --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Imports/Microsoft.Common.props/ImportBefore/Microsoft.NuGet.ImportBefore.props @@ -0,0 +1,17 @@ + + + + $(MSBuildExtensionsPath)\Microsoft\NuGet\Microsoft.NuGet.props + + + diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Microsoft.Common.props b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Microsoft.Common.props new file mode 100644 index 000000000..6c4d33cda --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Microsoft.Common.props @@ -0,0 +1,16 @@ + + + true + true + + + + + + true + + + + diff --git a/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Microsoft.Common.targets/ImportAfter/Microsoft.NuGet.ImportAfter.targets b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Microsoft.Common.targets/ImportAfter/Microsoft.NuGet.ImportAfter.targets new file mode 100644 index 000000000..71b454796 --- /dev/null +++ b/Source/Platforms/Editor/Windows/Mono/lib/mono/xbuild/14.0/Microsoft.Common.targets/ImportAfter/Microsoft.NuGet.ImportAfter.targets @@ -0,0 +1,17 @@ + + + + $(MSBuildExtensionsPath)\Microsoft\NuGet\Microsoft.NuGet.targets + + + diff --git a/Source/Platforms/Linux/.gitignore b/Source/Platforms/Linux/.gitignore new file mode 100644 index 000000000..c07cf8bfe --- /dev/null +++ b/Source/Platforms/Linux/.gitignore @@ -0,0 +1,2 @@ +!Binaries/ +!*.* diff --git a/Source/Platforms/Linux/Binaries/.gitignore b/Source/Platforms/Linux/Binaries/.gitignore new file mode 100644 index 000000000..977f8d0c2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/.gitignore @@ -0,0 +1,2 @@ +# Ignore build binaries +/Game/ \ No newline at end of file diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/machine.config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/machine.config new file mode 100644 index 000000000..2577c81dd --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/machine.config @@ -0,0 +1,280 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/settings.map b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/settings.map new file mode 100644 index 000000000..9a52ccc02 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/web.config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/web.config new file mode 100644 index 000000000..e1428f8c3 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/2.0/web.config @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/machine.config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/machine.config new file mode 100644 index 000000000..f3b71c43c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/machine.config @@ -0,0 +1,307 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/settings.map b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/web.config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/web.config new file mode 100644 index 000000000..2a7dfd2ed --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.0/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/machine.config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/machine.config new file mode 100644 index 000000000..455709536 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/machine.config @@ -0,0 +1,310 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/settings.map b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/web.config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/web.config new file mode 100644 index 000000000..324c529f0 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/4.5/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/browscap.ini b/Source/Platforms/Linux/Binaries/Mono/etc/mono/browscap.ini new file mode 100644 index 000000000..1267e1deb --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/browscap.ini @@ -0,0 +1,16979 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT + +[GJK_Browscap_Version] +Version=4476 +Released=Wed, 17 Jun 2009 06:30:21 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser=DefaultProperties +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser=Ask +Frames=true +Tables=true +Crawler=true + +[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser=Teoma + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser=AskJeeves + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser=Baidu +Frames=true +Tables=true +Crawler=true + +[BaiduImageSpider*] +Parent=Baidu +Browser=BaiduImageSpider + +[Baiduspider*] +Parent=Baidu +Browser=BaiDu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser=Google +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot-Mobile +Frames=false +IFrames=false +Tables=false + +[*Google Wireless Transcoder*] +Parent=Google +Browser=Google Wireless Transcoder + +[AdsBot-Google (?http://www.google.com/adsbot.html)] +Parent=Google +Browser=AdsBot-Google + +[Feedfetcher-Google-iGoogleGadgets;*] +Parent=Google +Browser=iGoogleGadgets +isBanned=true +isSyndicationReader=true + +[Feedfetcher-Google;*] +Parent=Google +Browser=Feedfetcher-Google +isBanned=true +isSyndicationReader=true + +[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] +Parent=Google +Browser=Google OpenSocial + +[Google-Site-Verification/1.0] +Parent=Google +Browser=Google-Site-Verification + +[Google-Sitemaps/*] +Parent=Google +Browser=Google-Sitemaps + +[Googlebot-Image/*] +Parent=Google +Browser=Googlebot-Image +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser=googlebot-urlconsole + +[Googlebot-Video/1.0] +Parent=Google +Browser=Google-Video + +[Googlebot/2.1 (?http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/Test*] +Parent=Google +Browser=Googlebot/Test + +[gsa-crawler*] +Parent=Google +Browser=Google Search Appliance +isBanned=true + +[Mediapartners-Google*] +Parent=Google +Browser=Mediapartners-Google + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser=Google Desktop + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser=Google Toolbar +isBanned=true + +[Mozilla/5.0 (compatible; Google Keyword Tool;*)] +Parent=Google +Browser=Google Keyword Tool + +[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] +Parent=Google +Browser=Google Webmaster Tools + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser=Inktomi +Frames=true +Tables=true +Crawler=true + +[* (compatible;YahooSeeker/M1A1-R2D2; *)] +Parent=Inktomi +Browser=YahooSeeker-Mobile +Frames=false +Tables=false + +[Mozilla/4.0] +Parent=Inktomi + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser=Yahoo! RobotStudy +isBanned=true + +[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMC + +[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMF + +[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] +Parent=Inktomi +Browser=Y!J-AGENT/BMI + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Directory Engine + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser=Yahoo! Slurp China + +[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp + +[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] +Parent=Inktomi +Browser=Yahoo! Verifier +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser=Slurp/cat + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] +Parent=Inktomi +Browser=Yahoo-MMCrawler +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Scooter/*] +Parent=Inktomi +Browser=Scooter + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser=Scooter/3.3Y!CrawlX +Version=3.3 +MajorVer=3 +MinorVer=3 + +[slurp] +Parent=Inktomi +Browser=slurp + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser=Y!J-BSC +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser=Y!J-SRD +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser=Yahoo Mindset + +[Yahoo Pipes*] +Parent=Inktomi +Browser=Yahoo Pipes + +[Yahoo! Mindset] +Parent=Inktomi +Browser=Yahoo! Mindset + +[Yahoo! Slurp/Site Explorer] +Parent=Inktomi +Browser=Yahoo! Site Explorer + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser=Yahoo-Blogs + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser=Yahoo-MMAudVid + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser=Yahoo-MMCrawler +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser=YahooFeedSeeker +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser=YahooSeeker +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser=YahooSeeker/CafeKelsa + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser=YahooVideoSearch + +[YahooYSMcm*] +Parent=Inktomi +Browser=YahooYSMcm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser=MSN +Frames=true +Tables=true +Crawler=true + +[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=adidxbot + +[librabot/1.0 (*)] +Parent=MSN +Browser=librabot + +[llssbot/1.0] +Parent=MSN +Browser=llssbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSMOBOT/1.1*] +Parent=MSN +Browser=msnbot-mobile +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-Academic/1.0*] +Parent=MSN +Browser=MSNBot-Academic +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.0*] +Parent=MSN +Browser=msnbot-media +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.1*] +Parent=MSN +Browser=msnbot-media +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-News/1.0*] +Parent=MSN +Browser=MSNBot-News +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSNBot-NewsBlogs/1.0*] +Parent=MSN +Browser=MSNBot-NewsBlogs +Version=1 +MajorVer=1 +MinorVer=0 + +[msnbot-products] +Parent=MSN +Browser=msnbot-products + +[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=msnbot-webmaster tools + +[msnbot/1.0*] +Parent=MSN +Browser=msnbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.1*] +Parent=MSN +Browser=msnbot +Version=1.1 +MajorVer=1 +MinorVer=1 + +[msnbot/2.0b*] +Parent=MSN +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[MSR-ISRCCrawler] +Parent=MSN +Browser=MSR-ISRCCrawler + +[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=renlifangbot + +[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] +Parent=MSN +Browser=msnbot-mobile + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser=Yahoo +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser=Y!J + +[Mozilla/5.0 (Yahoo-Test/4.0*)] +Parent=Yahoo +Browser=Yahoo-Test +Version=4.0 +MajorVer=4 +MinorVer=0 + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser=Yahoo! Media +isBanned=true + +[My Browser] +Parent=Yahoo +Browser=Yahoo! My Browser + +[Y!OASIS/*] +Parent=Yahoo +Browser=Y!OASIS +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser=YahooYSMcm +Version=2.0 +MajorVer=2 +MinorVer=0 +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser=YRL_ODP_CRAWLER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser=Yandex +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] +Parent=Yandex +Browser=VisualParser +isBanned=true + +[YaDirectBot/*] +Parent=Yandex +Browser=YaDirectBot + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser=YandexBlog +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser=YandexSomething +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web + +[Best of the Web] +Parent=DefaultProperties +Browser=Best of the Web +Frames=true +Tables=true + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Feed Grabber +isSyndicationReader=true +Crawler=false + +[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Spider +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser=Boitho +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser=boitho.com-dc + +[boitho.com-robot/*] +Parent=Boitho +Browser=boitho.com-robot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser=Convera +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser=ConveraCrawler + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser=ConveraMultiMediaCrawler +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser=CrawlConvera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot + +[DotBot] +Parent=DefaultProperties +Browser=DotBot +Frames=true +Tables=true +isBanned=true +Crawler=true + +[DotBot/* (http://www.dotnetdotcom.org/*)] +Parent=DotBot + +[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] +Parent=DotBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb + +[Entireweb] +Parent=DefaultProperties +Browser=Entireweb +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] +Parent=Entireweb + +[Speedy Spider (*Beta/*)] +Parent=Entireweb + +[Speedy?Spider?(http://www.entireweb.com*)] +Parent=Entireweb + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser=Envolk +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser=Exalead +Frames=true +Tables=true +isBanned=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser=Exabot-Images +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot-Test/*] +Parent=Exalead +Browser=Exabot-Test + +[Exabot/2.0] +Parent=Exalead +Browser=Exabot + +[Exabot/3.0] +Parent=Exalead +Browser=Exabot +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser=Exalead NG +isBanned=true + +[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] +Parent=Exalead +Browser=Exabot-Images + +[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] +Parent=Exalead +Browser=Exabot/BiggerBetter/tests + +[Mozilla/5.0 (compatible; Exabot/3.0;*)] +Parent=Exalead +Browser=Exabot +isBanned=false + +[Mozilla/5.0 (compatible; NGBot/*)] +Parent=Exalead + +[ng/*] +Parent=Exalead +Browser=Exalead Previewer +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser=Fast/AllTheWeb +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST Enterprise Crawler + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser=FAST Data Search Document Retriever + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser=FAST MetaWeb Crawler + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/FirstPage + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Fresh + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Multimedia + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser=FastSearch Web Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot + +[Gigabot] +Parent=DefaultProperties +Browser=Gigabot +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Gigabot*] +Parent=Gigabot + +[GigabotSiteSearch/*] +Parent=Gigabot +Browser=GigabotSiteSearch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser=Ilse +Frames=true +Tables=true +Crawler=true + +[IlseBot/*] +Parent=Ilse + +[INGRID/?.0*] +Parent=Ilse +Browser=Ilse + +[Mozilla/3.0 (INGRID/*] +Parent=Ilse +Browser=Ilse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project + +[iVia Project] +Parent=DefaultProperties +Browser=iVia Project +Frames=true +IFrames=true +Tables=true +Crawler=true + +[DataFountains/DMOZ Downloader*] +Parent=iVia Project +Browser=DataFountains/DMOZ Downloader +isBanned=true + +[DataFountains/DMOZ Feature Vector Corpus Creator*] +Parent=iVia Project +Browser=DataFountains/DMOZ Feature Vector Corpus + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser=Jayde Online +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser=ExactSeek Crawler + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser=exactseek-pagereaper +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser=exactseek.com + +[Jayde Crawler*] +Parent=Jayde Online +Browser=Jayde Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser=Lycos +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser=Lycos + +[Lycos-Proxy] +Parent=Lycos +Browser=Lycos-Proxy + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser=Lycos-Spider_(modspider) + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser=Lycos-Spider_(T-Rex) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser=Naver +isBanned=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver Cowbot + +[Mozilla/4.0 (compatible; NaverBot/*; *)] +Parent=Naver + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser=Naver NaverBot + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver NHN Corp + +[Yeti/*] +Parent=Naver +Browser=Yeti + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap + +[Snap] +Parent=DefaultProperties +Browser=Snap +isBanned=true +Crawler=true + +[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] +Parent=Snap + +[Snapbot/*] +Parent=Snap + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou + +[Sogou] +Parent=DefaultProperties +Browser=Sogou +Frames=true +Tables=true +isBanned=true +Crawler=true + +[shaboyi spider] +Parent=Sogou +Browser=Sogou/Shaboyi Spider + +[Sogou develop spider/*] +Parent=Sogou +Browser=Sogou Develop Spider + +[Sogou head spider*] +Parent=Sogou +Browser=Sogou/HEAD Spider + +[sogou js robot(*)] +Parent=Sogou + +[Sogou Orion spider/*] +Parent=Sogou +Browser=Sogou Orion spider + +[Sogou Pic Agent] +Parent=Sogou +Browser=Sogou/Image Crawler + +[Sogou Pic Spider] +Parent=Sogou +Browser=Sogou Pic Spider + +[Sogou Push Spider/*] +Parent=Sogou +Browser=Sogou Push Spider + +[sogou spider] +Parent=Sogou +Browser=Sogou/Spider + +[sogou web spider*] +Parent=Sogou +Browser=sogou web spider + +[Sogou-Test-Spider/*] +Parent=Sogou +Browser=Sogou-Test-Spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot + +[YodaoBot] +Parent=DefaultProperties +Browser=YodaoBot +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] +Parent=YodaoBot +Browser=YodaoBot-Image + +[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[YodaoBot/1.* (*)] +Parent=YodaoBot + +[Best Whois (http://www.bestwhois.net/)] +Parent=DNS Tools +Browser=Best Whois + +[DNSGroup/*] +Parent=DNS Tools +Browser=DNS Group Crawler + +[NG-Search/*] +Parent=Exalead +Browser=NG-SearchBot + +[TouchStone] +Parent=Feeds Syndicators +Browser=TouchStone +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser=General Crawlers +Crawler=true + +[A .NET Web Crawler] +Parent=General Crawlers +isBanned=true + +[BabalooSpider/1.*] +Parent=General Crawlers +Browser=BabalooSpider + +[BilgiBot/*] +Parent=General Crawlers +Browser=BilgiBot +isBanned=true + +[bot/* (bot; *bot@bot.bot)] +Parent=General Crawlers +Browser=bot +isBanned=true + +[CyberPatrol*] +Parent=General Crawlers +Browser=CyberPatrol +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser=Cynthia +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ddetailsbot (http://www.displaydetails.com)] +Parent=General Crawlers +Browser=ddetailsbot + +[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] +Parent=General Crawlers +Browser=DomainCrawler + +[DomainsBotBot/1.*] +Parent=General Crawlers +Browser=DomainsBotBot +isBanned=true + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser=DomainsDB + +[Drupal (*)] +Parent=General Crawlers +Browser=Drupal + +[Dumbot (version *)*] +Parent=General Crawlers +Browser=Dumbfind + +[EuripBot/*] +Parent=General Crawlers +Browser=Europe Internet Portal + +[eventax/*] +Parent=General Crawlers +Browser=eventax + +[FANGCrawl/*] +Parent=General Crawlers +Browser=Safe-t.net Web Filtering Service +isBanned=true + +[favorstarbot/*] +Parent=General Crawlers +Browser=favorstarbot +isBanned=true + +[FollowSite.com (*)] +Parent=General Crawlers +Browser=FollowSite +isBanned=true + +[Gaisbot*] +Parent=General Crawlers +Browser=Gaisbot + +[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] +Parent=General Crawlers +Browser=Healthbot +isBanned=true + +[hitcrawler_0.*] +Parent=General Crawlers +Browser=hitcrawler +isBanned=true + +[htdig/*] +Parent=General Crawlers +Browser=ht://Dig + +[http://hilfe.acont.de/bot.html ACONTBOT] +Parent=General Crawlers +Browser=ACONTBOT +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser=Omea Pro + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser=KakleBot + +[KBeeBot/0.*] +Parent=General Crawlers +Browser=KBeeBot +isBanned=true + +[Keyword Density/*] +Parent=General Crawlers +Browser=Keyword Density + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser=LetsCrawl.com +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser=Lincoln State Web Browser +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser=Links4US-Crawler +isBanned=true + +[Lorkyll *.* -- lorkyll@444.net] +Parent=General Crawlers +Browser=Lorkyll +isBanned=true + +[Lsearch/sondeur] +Parent=General Crawlers +Browser=Lsearch/sondeur +isBanned=true + +[LucidMedia ClickSense/4.?] +Parent=General Crawlers +Browser=LucidMedia-ClickSense +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser=MapoftheInternet +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser=MedHunt +Version=0.3 +MajorVer=0 +MinorVer=3 + +[masidani_bot_v0.6*] +Parent=General Crawlers +Browser=masidani_bot + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser=Metaspinner/0.01 +Version=0.01 +MajorVer=0 +MinorVer=01 + +[metatagsdir/*] +Parent=General Crawlers +Browser=metatagsdir +isBanned=true + +[Microsoft Windows Network Diagnostics] +Parent=General Crawlers +Browser=Microsoft Windows Network Diagnostics +isBanned=true + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser=Miva + +[moget/*] +Parent=General Crawlers +Browser=Goo + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser=Mozdex + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser=WebCapture + +[Mozilla/4.0 (compatible; DepSpid/*)] +Parent=General Crawlers +Browser=DepSpid + +[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] +Parent=General Crawlers +Browser=AVG + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser=Vonna.com +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser=MyFamilyBot + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser=N-Stealth + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Spider; Linux)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Win32)] +Parent=General Crawlers +Browser=Unknown Crawler +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +isBanned=true + +[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] +Parent=General Crawlers +Browser=Gnomit +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser=AboutUsBot +isBanned=true + +[Mozilla/5.0 (compatible; BuzzRankingBot/*)] +Parent=General Crawlers +Browser=BuzzRankingBot +isBanned=true + +[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] +Parent=General Crawlers +Browser=Diffbot + +[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] +Parent=General Crawlers +Browser=FirstSearchBot + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser=Healthdash + +[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] +Parent=General Crawlers +Browser=JadynAveBot +isBanned=true + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser=Kyluka + +[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] +Parent=General Crawlers +Browser=MJ12bot +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] +Parent=General Crawlers +Browser=Europe Web Archive + +[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] +Parent=General Crawlers +Browser=Seznam screenshot-generator +isBanned=true + +[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] +Parent=General Crawlers +Browser=Twingly Recon + +[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] +Parent=General Crawlers +Browser=UnWrap + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser=Vermut + +[Mozilla/5.0 (compatible; Webbot/*)] +Parent=General Crawlers +Browser=Webbot.ru +isBanned=true + +[n4p_bot*] +Parent=General Crawlers +Browser=n4p_bot + +[nabot*] +Parent=General Crawlers +Browser=Nabot + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser=NetCarta_WebMapper +isBanned=true + +[NetID.com Bot*] +Parent=General Crawlers +Browser=NetID.com Bot +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser=neTVision + +[NextopiaBOT*] +Parent=General Crawlers +Browser=NextopiaBOT + +[nicebot] +Parent=General Crawlers +Browser=nicebot +isBanned=true + +[niXXieBot?Foster*] +Parent=General Crawlers +Browser=niXXiebot-Foster + +[Nozilla/P.N (Just for IDS woring)] +Parent=General Crawlers +Browser=Nozilla/P.N +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser=Nudelsalat +isBanned=true + +[NV32ts] +Parent=General Crawlers +Browser=NV32ts +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser=Ocelli + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser=OpenTaggerBot + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser=Oracle Enterprise Search +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser=Oracle Ultra Search + +[Pajaczek/*] +Parent=General Crawlers +Browser=Pajaczek +isBanned=true + +[panscient.com] +Parent=General Crawlers +Browser=panscient.com +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser=Patwebbot + +[PDFBot (crawler@pdfind.com)] +Parent=General Crawlers +Browser=PDFBot + +[Pete-Spider/1.*] +Parent=General Crawlers +Browser=Pete-Spider +isBanned=true + +[PhpDig/*] +Parent=General Crawlers +Browser=PhpDig + +[PlantyNet_WebRobot*] +Parent=General Crawlers +Browser=PlantyNet +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt + +[PluckItCrawler/1.0 (*)] +Parent=General Crawlers +isMobileDevice=true + +[PMAFind] +Parent=General Crawlers +Browser=PMAFind +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser=Poodle Predictor + +[QuickFinder Crawler] +Parent=General Crawlers +Browser=QuickFinder +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser=Radiation Retriever +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser=RedCarpet +isBanned=true + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser=RixBot + +[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] +Parent=General Crawlers +Browser=TinyURL + +[SBIder/*] +Parent=General Crawlers +Browser=SiteSell + +[ScollSpider/2.*] +Parent=General Crawlers +Browser=ScollSpider +isBanned=true + +[Search Fst] +Parent=General Crawlers +Browser=Search Fst + +[searchbot admin@google.com] +Parent=General Crawlers +Browser=searchbot +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser=LookSeek +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser=Semantic Discovery + +[SeznamBot/*] +Parent=General Crawlers +Browser=SeznamBot +isBanned=true + +[Shelob (shelob@gmx.net)] +Parent=General Crawlers +Browser=Shelob +isBanned=true + +[shelob v1.*] +Parent=General Crawlers +Browser=shelob +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser=ShopWiki +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser=ShowXML +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser=Internetseer + +[SMBot/*] +Parent=General Crawlers +Browser=SMBot + +[sohu*] +Parent=General Crawlers +Browser=sohu-search +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser=SpankBot +isBanned=true + +[spider (tspyyp@tom.com)] +Parent=General Crawlers +Browser=spider (tspyyp@tom.com) +isBanned=true + +[Sunrise/0.*] +Parent=General Crawlers +Browser=Sunrise +isBanned=true + +[Superpages URL Verification Engine] +Parent=General Crawlers +Browser=Superpages + +[Surf Knight] +Parent=General Crawlers +Browser=Surf Knight +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser=SurveyBot +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser=SynapticSearch +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser=SyncMgr + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser=Tagyu + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser=Talkro Web-Shot +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser=Tecomi + +[TheInformant*] +Parent=General Crawlers +Browser=TheInformant +isBanned=true + +[Toata dragostea*] +Parent=General Crawlers +Browser=Toata dragostea +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser=UbiCrawler + +[UCmore] +Parent=General Crawlers +Browser=UCmore + +[User*Agent:*] +Parent=General Crawlers +isBanned=true + +[USER_AGENT] +Parent=General Crawlers +Browser=USER_AGENT +isBanned=true + +[VadixBot] +Parent=General Crawlers +Browser=VadixBot + +[VengaBot/*] +Parent=General Crawlers +Browser=VengaBot +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser=Visicom Toolbar + +[W3C-WebCon/*] +Parent=General Crawlers +Browser=W3C-WebCon + +[Webclipping.com] +Parent=General Crawlers +Browser=Webclipping.com +isBanned=true + +[webcollage/*] +Parent=General Crawlers +Browser=WebCollage +isBanned=true + +[WebCrawler_1.*] +Parent=General Crawlers +Browser=WebCrawler + +[WebFilter Robot*] +Parent=General Crawlers +Browser=WebFilter Robot + +[WeBoX/*] +Parent=General Crawlers +Browser=WeBoX + +[WebTrends/*] +Parent=General Crawlers +Browser=WebTrends + +[West Wind Internet Protocols*] +Parent=General Crawlers +Browser=Versatel +isBanned=true + +[WhizBang] +Parent=General Crawlers +Browser=WhizBang + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser=Willow Internet Crawler + +[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] +Parent=General Crawlers +Browser=WIRE +isBanned=true + +[www.fi crawler, contact crawler@www.fi] +Parent=General Crawlers +Browser=www.fi crawler + +[Xerka WebBot v1.*] +Parent=General Crawlers +Browser=Xerka +isBanned=true + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser=XML Sitemaps Generator + +[XSpider*] +Parent=General Crawlers +Browser=XSpider +isBanned=true + +[YooW!/* (?http://www.yoow.eu)] +Parent=General Crawlers +Browser=YooW! +isBanned=true + +[HiddenMarket-*] +Parent=General RSS +Browser=HiddenMarket +isBanned=true + +[FOTOCHECKER] +Parent=Image Crawlers +Browser=FOTOCHECKER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser=Search Engines +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser=FDSE Robot + +[*Fluffy the spider*] +Parent=Search Engines +Browser=SearchHippo + +[Abacho*] +Parent=Search Engines +Browser=Abacho + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser=Ah-Ha + +[AIBOT/*] +Parent=Search Engines +Browser=21Seek.Com + +[ALeadSoftbot/*] +Parent=Search Engines +Browser=ALeadSoftbot + +[Amfibibot/*] +Parent=Search Engines +Browser=Amfibi + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser=antibot + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser=Walhello + +[ASPSeek/*] +Parent=Search Engines +Browser=ASPSeek + +[BigCliqueBOT/*] +Parent=Search Engines +Browser=BigClique.com/BigClic.com + +[Blaiz-Bee/*] +Parent=Search Engines +Browser=RawGrunt + +[btbot/*] +Parent=Search Engines +Browser=Bit Torrent Search Engine + +[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] +Parent=Search Engines +Browser=Busiversebot +isBanned=true + +[CatchBot/*; http://www.catchbot.com] +Parent=Search Engines +Browser=CatchBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser=CipinetBot + +[Cogentbot/1.?*] +Parent=Search Engines +Browser=Cogentbot + +[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] +Parent=Search Engines +Browser=SqwidgeBot + +[cosmos*] +Parent=Search Engines +Browser=Xyleme + +[Deepindex] +Parent=Search Engines +Browser=Deepindex + +[DiamondBot] +Parent=Search Engines +Browser=DiamondBot + +[Dumbot*] +Parent=Search Engines +Browser=Dumbot +Version=0.2 +MajorVer=0 +MinorVer=2 +Beta=true + +[Eule?Robot*] +Parent=Search Engines +Browser=Eule-Robot + +[Faxobot/*] +Parent=Search Engines +Browser=Faxo + +[Filangy/*] +Parent=Search Engines +Browser=Filangy + +[flatlandbot/*] +Parent=Search Engines +Browser=Flatland + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser=ScorpionBot +isBanned=true + +[FyberSpider*] +Parent=Search Engines +Browser=FyberSpider +isBanned=true + +[Gaisbot/*] +Parent=Search Engines +Browser=Gaisbot + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser=gazz + +[geniebot*] +Parent=Search Engines +Browser=GenieKnows + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser=GoForIt + +[GoGuidesBot/*] +Parent=Search Engines +Browser=GoGuidesBot + +[GroschoBot/*] +Parent=Search Engines +Browser=GroschoBot + +[GurujiBot/1.*] +Parent=Search Engines +Browser=GurujiBot +isBanned=true + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser=Mirago + +[HolmesBot (http://holmes.ge)] +Parent=Search Engines +Browser=HolmesBot + +[Hotzonu/*] +Parent=Search Engines +Browser=Hotzonu + +[HyperEstraier/*] +Parent=Search Engines +Browser=HyperEstraier +isBanned=true + +[i1searchbot/*] +Parent=Search Engines +Browser=i1searchbot + +[IIITBOT/1.*] +Parent=Search Engines +Browser=Indian Language Web Search Engine + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser=Iltrovatore-Setaccio + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser=InfociousBot +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser=Infoseek + +[iSEEKbot/*] +Parent=Search Engines +Browser=iSEEKbot + +[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] +Parent=Search Engines +Browser=Knight + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser=Kolinka Forum Search +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser=KRetrieve +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser=LapozzBot + +[Linknzbot*] +Parent=Search Engines +Browser=Linknzbot + +[LocalcomBot/*] +Parent=Search Engines +Browser=LocalcomBot + +[Mail.Ru/1.0] +Parent=Search Engines +Browser=Mail.Ru + +[MaSagool/*] +Parent=Search Engines +Browser=Sagoo +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser=miniRank + +[Mnogosearch*] +Parent=Search Engines +Browser=Mnogosearch + +[Mozilla/0.9* no dos :) (Linux)] +Parent=Search Engines +Browser=goliat +isBanned=true + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser=Arachmo + +[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] +Parent=Search Engines +Browser=ThunderStone +isBanned=true + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser=Girafabot +Win32=true + +[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] +Parent=Search Engines +Browser=Vagabondo + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser=Qihoo + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser=Inxight Software + +[Mozilla/5.0 (*) VoilaBot*] +Parent=Search Engines +Browser=VoilaBot +isBanned=true + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser=ActiveTouristBot + +[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] +Parent=Search Engines +Browser=Butterfly + +[Mozilla/5.0 (compatible; Charlotte/*; *)] +Parent=Search Engines +Browser=Charlotte +Beta=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT*)] +Parent=Search Engines +Browser=FatAssANT + +[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] +Parent=Search Engines +Browser=DBLBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; EARTHCOM.info/*)] +Parent=Search Engines +Browser=EARTHCOM + +[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] +Parent=Search Engines +Browser=Lipperhey Spider + +[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser=MojeekBot + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser=Northern Light Web Search + +[Mozilla/5.0 (compatible; OsO;*] +Parent=Search Engines +Browser=Octopodus +isBanned=true + +[Mozilla/5.0 (compatible; Pogodak.*)] +Parent=Search Engines +Browser=Pogodak + +[Mozilla/5.0 (compatible; Quantcastbot/1.*)] +Parent=Search Engines +Browser=Quantcastbot + +[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] +Parent=Search Engines +Browser=ScoutJet + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser=Scrubby +isBanned=true + +[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] +Parent=Search Engines +Browser=YoudaoBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Twiceler*)] +Parent=Search Engines +Browser=Twiceler +isBanned=true + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser=CostaCider Search + +[Mozilla/5.0 GurujiBot/1.0 (*)] +Parent=Search Engines +Browser=GurujiBot + +[NavissoBot] +Parent=Search Engines +Browser=NavissoBot + +[NextGenSearchBot*(for information visit *)] +Parent=Search Engines +Browser=ZoomInfo +isBanned=true + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser=Norbert the Spider + +[NuSearch Spider*] +Parent=Search Engines +Browser=nuSearch + +[ObjectsSearch/*] +Parent=Search Engines +Browser=ObjectsSearch + +[OpenISearch/1.*] +Parent=Search Engines +Browser=OpenISearch (Amazon) + +[Pagebull http://www.pagebull.com/] +Parent=Search Engines +Browser=Pagebull + +[PEERbot*] +Parent=Search Engines +Browser=PEERbot + +[Pompos/*] +Parent=Search Engines +Browser=Pompos + +[Popdexter/*] +Parent=Search Engines +Browser=Popdex + +[Qweery*] +Parent=Search Engines +Browser=QweeryBot + +[RedCell/* (*)] +Parent=Search Engines +Browser=RedCell + +[Scrubby/*] +Parent=Search Engines +Browser=Scrub The Web + +[Search-10/*] +Parent=Search Engines +Browser=Search-10 + +[search.ch*] +Parent=Search Engines +Browser=Swiss Search Engine + +[Searchmee! Spider*] +Parent=Search Engines +Browser=Searchmee! + +[Seekbot/*] +Parent=Search Engines +Browser=Seekbot + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser=SiteSpider + +[Spinne/*] +Parent=Search Engines +Browser=Spinne + +[sproose/*] +Parent=Search Engines +Browser=Sproose + +[Sqeobot/0.*] +Parent=Search Engines +Browser=Branzel +isBanned=true + +[SquigglebotBot/*] +Parent=Search Engines +Browser=SquigglebotBot +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser=StackRambler + +[SygolBot*] +Parent=Search Engines +Browser=SygolBot + +[SynoBot] +Parent=Search Engines +Browser=SynoBot + +[Szukacz/*] +Parent=Search Engines +Browser=Szukacz + +[Tarantula/*] +Parent=Search Engines +Browser=Tarantula +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser=TerrawizBot +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser=Tkensaku + +[TMCrawler] +Parent=Search Engines +Browser=TMCrawler +isBanned=true + +[Twingly Recon] +Parent=Search Engines +Browser=Twingly Recon +isBanned=true + +[updated/*] +Parent=Search Engines +Browser=Updated! + +[URL Spider Pro/*] +Parent=Search Engines +Browser=URL Spider Pro + +[URL Spider SQL*] +Parent=Search Engines +Browser=Innerprise Enterprise Search + +[VMBot/*] +Parent=Search Engines +Browser=VMBot + +[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] +Parent=Search Engines +Browser=Voyager + +[wadaino.jp-crawler*] +Parent=Search Engines +Browser=wadaino.jp +isBanned=true + +[WebAlta Crawler/*] +Parent=Search Engines +Browser=WebAlta Crawler +isBanned=true + +[WebCorp/*] +Parent=Search Engines +Browser=WebCorp +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser=webcrawl.net + +[WISEbot/*] +Parent=Search Engines +Browser=WISEbot +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser=Wotbox + +[www.zatka.com] +Parent=Search Engines +Browser=Zatka + +[WWWeasel Robot v*] +Parent=Search Engines +Browser=World Wide Weasel + +[YadowsCrawler*] +Parent=Search Engines +Browser=YadowsCrawler + +[YodaoBot/*] +Parent=Search Engines +Browser=YodaoBot +isBanned=true + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser=ZE.bz + +[zibber-v*] +Parent=Search Engines +Browser=Zibb + +[ZipppBot/*] +Parent=Search Engines +Browser=ZipppBot + +[ATA-Translation-Service] +Parent=Translators +Browser=ATA-Translation-Service + +[GJK_Browser_Check] +Parent=Version Checkers +Browser=GJK_Browser_Check + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser=Hatena +isBanned=true +Crawler=true + +[Feed::Find/*] +Parent=Hatena +Browser=Feed Find +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser=Hatena Antenna + +[Hatena Bookmark/*] +Parent=Hatena +Browser=Hatena Bookmark + +[Hatena RSS/*] +Parent=Hatena +Browser=Hatena RSS +isSyndicationReader=true + +[Hatena::Crawler/*] +Parent=Hatena +Browser=Hatena Crawler + +[HatenaScreenshot*] +Parent=Hatena +Browser=HatenaScreenshot + +[URI::Fetch/*] +Parent=Hatena +Browser=URI::Fetch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser=Internet Archive +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*heritrix*] +Parent=Internet Archive +Browser=Heritrix +isBanned=true + +[ia_archiver*] +Parent=Internet Archive +Browser=Internet Archive + +[InternetArchive/*] +Parent=Internet Archive +Browser=InternetArchive + +[Mozilla/5.0 (compatible; archive.org_bot/1.*)] +Parent=Internet Archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser=Nutch +isBanned=true +Crawler=true + +[*Nutch*] +Parent=Nutch +isBanned=true + +[CazoodleBot/*] +Parent=Nutch +Browser=CazoodleBot + +[LOOQ/0.1*] +Parent=Nutch +Browser=LOOQ + +[Nutch/0.? (OpenX Spider)] +Parent=Nutch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo + +[Webaroo] +Parent=DefaultProperties +Browser=Webaroo + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] +Parent=Webaroo +Browser=Webaroo + +[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] +Parent=Webaroo +Browser=Webaroo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press + +[Word Press] +Parent=DefaultProperties +Browser=Word Press +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[WordPress-B-/2.*] +Parent=Word Press +Browser=WordPress-B + +[WordPress-Do-P-/2.*] +Parent=Word Press +Browser=WordPress-Do-P + +[BlueCoat ProxySG] +Parent=Blue Coat Systems +Browser=BlueCoat ProxySG + +[CerberianDrtrs/*] +Parent=Blue Coat Systems +Browser=Cerberian + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Blue Coat Systems +Browser=Bluecoat + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser=Copyright/Plagiarism +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser=BDFetch + +[copyright sheriff (*)] +Parent=Copyright/Plagiarism +Browser=copyright sheriff + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser=CopyRightCheck + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser=FairAd Client + +[iCopyright Conductor*] +Parent=Copyright/Plagiarism +Browser=iCopyright Conductor + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser=IPiumBot + +[IWAgent/*] +Parent=Copyright/Plagiarism +Browser=Brand Protect + +[Mozilla/5.0 (compatible; DKIMRepBot/*)] +Parent=Copyright/Plagiarism +Browser=DKIMRepBot + +[oBot] +Parent=Copyright/Plagiarism +Browser=oBot + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser=SlySearch + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser=TurnitinBot + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser=TutorGig + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools + +[DNS Tools] +Parent=DefaultProperties +Browser=DNS Tools +Crawler=true + +[Domain Dossier utility*] +Parent=DNS Tools +Browser=Domain Dossier + +[Mozilla/5.0 (compatible; DNS-Digger/*)] +Parent=DNS Tools +Browser=DNS-Digger + +[OpenDNS Domain Crawler noc@opendns.com] +Parent=DNS Tools +Browser=OpenDNS Domain Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser=Download Managers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[AndroidDownloadManager] +Parent=Download Managers +Browser=Android Download Manager + +[AutoMate5] +Parent=Download Managers +Browser=AutoMate5 + +[Beamer*] +Parent=Download Managers +Browser=Beamer + +[BitBeamer/*] +Parent=Download Managers +Browser=BitBeamer + +[BitTorrent/*] +Parent=Download Managers +Browser=BitTorrent + +[DA *] +Parent=Download Managers +Browser=Download Accelerator + +[Download Demon*] +Parent=Download Managers +Browser=Download Demon + +[Download Express*] +Parent=Download Managers +Browser=Download Express + +[Download Master*] +Parent=Download Managers +Browser=Download Master + +[Download Ninja*] +Parent=Download Managers +Browser=Download Ninja + +[Download Wonder*] +Parent=Download Managers +Browser=Download Wonder + +[DownloadSession*] +Parent=Download Managers +Browser=DownloadSession + +[EasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[FDM 1.x] +Parent=Download Managers +Browser=Free Download Manager + +[FlashGet] +Parent=Download Managers +Browser=FlashGet + +[FreshDownload/*] +Parent=Download Managers +Browser=FreshDownload + +[GetRight/*] +Parent=Download Managers +Browser=GetRight + +[GetRightPro/*] +Parent=Download Managers +Browser=GetRightPro + +[GetSmart/*] +Parent=Download Managers +Browser=GetSmart + +[Go!Zilla*] +Parent=Download Managers +Browser=GoZilla + +[Gozilla/*] +Parent=Download Managers +Browser=Gozilla + +[Internet Ninja*] +Parent=Download Managers +Browser=Internet Ninja + +[Kontiki Client*] +Parent=Download Managers +Browser=Kontiki Client + +[lftp/3.2.1] +Parent=Download Managers +Browser=lftp + +[LightningDownload/*] +Parent=Download Managers +Browser=LightningDownload + +[LMQueueBot/*] +Parent=Download Managers +Browser=LMQueueBot + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser=Download Express + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser=Getleft + +[Myzilla] +Parent=Download Managers +Browser=Myzilla + +[Net Vampire/*] +Parent=Download Managers +Browser=Net Vampire + +[Net_Vampire*] +Parent=Download Managers +Browser=Net_Vampire + +[NetAnts*] +Parent=Download Managers +Browser=NetAnts + +[NetPumper*] +Parent=Download Managers +Browser=NetPumper + +[NetSucker*] +Parent=Download Managers +Browser=NetSucker + +[NetZip Downloader*] +Parent=Download Managers +Browser=NetZip Downloader + +[NexTools WebAgent*] +Parent=Download Managers +Browser=NexTools WebAgent + +[Offline Downloader*] +Parent=Download Managers +Browser=Offline Downloader + +[P3P Client] +Parent=Download Managers +Browser=P3P Client + +[PageDown*] +Parent=Download Managers +Browser=PageDown + +[PicaLoader*] +Parent=Download Managers +Browser=PicaLoader + +[Prozilla*] +Parent=Download Managers +Browser=Prozilla + +[RealDownload/*] +Parent=Download Managers +Browser=RealDownload + +[sEasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[shareaza*] +Parent=Download Managers +Browser=shareaza + +[SmartDownload/*] +Parent=Download Managers +Browser=SmartDownload + +[SpeedDownload/*] +Parent=Download Managers +Browser=Speed Download + +[Star*Downloader/*] +Parent=Download Managers +Browser=StarDownloader + +[STEROID Download] +Parent=Download Managers +Browser=STEROID Download + +[SuperBot/*] +Parent=Download Managers +Browser=SuperBot + +[Vegas95/*] +Parent=Download Managers +Browser=Vegas95 + +[WebZIP*] +Parent=Download Managers +Browser=WebZIP + +[Wget*] +Parent=Download Managers +Browser=Wget + +[WinTools] +Parent=Download Managers +Browser=WinTools + +[Xaldon WebSpider*] +Parent=Download Managers +Browser=Xaldon WebSpider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser=E-Mail Harvesters +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser=E-Mail Address Extractor + +[*Larbin*] +Parent=E-Mail Harvesters +Browser=Larbin + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser=www4mail + +[8484 Boston Project*] +Parent=E-Mail Harvesters +Browser=8484 Boston Project + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser=CherryPickerElite + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser=Chilkat + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser=ContactBot + +[eCatch*] +Parent=E-Mail Harvesters +Browser=eCatch + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser=E-Mail Collector + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser=EMAILsearcher + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser=E-Mail Siphon + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser=EMailWolf + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser=MailMunky + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser=ExtractorPro + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser=Franklin Locator + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser=Missigua Locator + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser=Advanced Email Extractor + +[Netprospector*] +Parent=E-Mail Harvesters +Browser=Netprospector + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser=ProWebWalker + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser=Mike Elliott's E-Mail Harvester + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser=WebEnhancer + +[WebMiner*] +Parent=E-Mail Harvesters +Browser=WebMiner + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser=ZIBB Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser=Feeds Blogs +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser=Bloglines Title Fetch + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser=BlogLines Web + +[BlogPulseLive (support@blogpulse.com)] +Parent=Feeds Blogs +Browser=BlogPulseLive + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser=blogsearchbot-pumpkin +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser=Irish Blogs Aggregator +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser=kinjabot + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser=Net::Trackback + +[Reblog*] +Parent=Feeds Blogs +Browser=Reblog + +[WordPress/*] +Parent=Feeds Blogs +Browser=WordPress + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser=Feeds Syndicators +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser=LinkLint + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser=NetVisualize + +[AideRSS 2.* (postrank.com)] +Parent=Feeds Syndicators +Browser=AideRSS + +[AideRSS/2.0 (aiderss.com)] +Parent=Feeds Syndicators +Browser=AideRSS +isBanned=true + +[Akregator/*] +Parent=Feeds Syndicators +Browser=Akregator + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser=Safari RSS +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser=Cocoal.icio.us +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser=Feed For Free + +[FeedBurner/*] +Parent=Feeds Syndicators +Browser=FeedBurner + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser=FeedDemon +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser=FeedDigest + +[FeedGhost/1.*] +Parent=Feeds Syndicators +Browser=FeedGhost +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] +Parent=Feeds Syndicators +Browser=FeedOnFeeds +Version=0.1 +MajorVer=0 +MinorVer=1 + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser=Newsbrain + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser=Feedshow + +[Feedster Crawler/?.0; Feedster, Inc.] +Parent=Feeds Syndicators +Browser=Feedster + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser=GreatNews +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Gregarius/*] +Parent=Feeds Syndicators +Browser=Gregarius + +[intraVnews/*] +Parent=Feeds Syndicators +Browser=intraVnews + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser=Omea Reader +isBanned=true + +[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] +Parent=Feeds Syndicators +Browser=Liferea +isBanned=true + +[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] +Parent=Feeds Syndicators +Browser=FeedFetcher +Version=0.0 +MajorVer=0 +MinorVer=0 + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser=MagpieRSS + +[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] +Parent=Feeds Syndicators +Browser=Mobitype +Platform=Win32 + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser=Rojo + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser=TailRank + +[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] +Parent=Feeds Syndicators +Browser=Podtech Network + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser=Newz Crawler + +[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser=RSSMicro + +[Mozilla/5.0 (compatible;*newstin.com;*)] +Parent=Feeds Syndicators +Browser=NewsTin + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser=RSS Reader Panel + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser=FeedParser + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser=NewsMonster + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser=Rojo + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser=Netvibes + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser=NewsAlloy + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser=Omnipelagos + +[Particls] +Parent=Feeds Syndicators +Browser=Particls + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser=Protopage + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser=PubSub-RSS-Reader + +[RSS Menu/*] +Parent=Feeds Syndicators +Browser=RSS Menu + +[RssBandit/*] +Parent=Feeds Syndicators +Browser=RssBandit + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser=RssBar +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser=SharpReader + +[SimplePie/*] +Parent=Feeds Syndicators +Browser=SimplePie + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser=Strategic Board Bot +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser=TargetYourNews + +[Technoratibot/*] +Parent=Feeds Syndicators +Browser=Technoratibot + +[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] +Parent=Feeds Syndicators +Browser=Tumblr RSS syndication + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser=Windows-RSS-Platform +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser=Wizz + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS + +[General RSS] +Parent=DefaultProperties +Browser=General RSS +isSyndicationReader=true + +[AideRSS/1.0 (aiderss.com); * subscribers] +Parent=General RSS +Browser=AideRSS +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] +Parent=General RSS +Browser=CC Metadata Scaper + +[Mozilla/5.0 (compatible) GM RSS Panel] +Parent=General RSS +Browser=RSS Panel + +[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] +Parent=General RSS +Browser=Inclue + +[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] +Parent=General RSS +Browser=Ruunk + +[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] +Parent=General RSS +Browser=Windows-RSS-Platform +Platform=WinVista + +[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] +Parent=Google Code +Browser=Arora +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux +CssVersion=2 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser=HTML Validators +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser=Search Engine World HTML Validator + +[FeedValidator/1.3] +Parent=HTML Validators +Browser=FeedValidator +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser=Jigsaw CSS Validator + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser=Search Engine World Robots.txt Validator + +[W3C_Validator/*] +Parent=HTML Validators +Browser=W3C Validator + +[W3CLineMode/*] +Parent=HTML Validators +Browser=W3C Line Mode + +[Weblide/2.? beta*] +Parent=HTML Validators +Browser=Weblide +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser=WebmasterWorld Server Header Checker + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser=Image Crawlers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*CFNetwork*] +Parent=Image Crawlers +Browser=CFNetwork + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser=PhotoStickies + +[Camcrawler*] +Parent=Image Crawlers +Browser=Camcrawler + +[CydralSpider/*] +Parent=Image Crawlers +Browser=Cydral Web Image Search +isBanned=true + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser=Gallery Grabber + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser=Extreme Picture Finder + +[FLATARTS_FAVICO] +Parent=Image Crawlers +Browser=FlatArts Favorites Icon Tool + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser=HTML2JPG + +[IconSurf/2.*] +Parent=Image Crawlers +Browser=IconSurf + +[kalooga/KaloogaBot*] +Parent=Image Crawlers +Browser=KaloogaBot + +[Mister PIX*] +Parent=Image Crawlers +Browser=Mister PIX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] +Parent=Image Crawlers +Browser=Pandora + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser=naoFavicon4IE + +[pixfinder/*] +Parent=Image Crawlers +Browser=pixfinder + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser=rssImagesBot + +[Web Image Collector*] +Parent=Image Crawlers +Browser=Web Image Collector + +[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] +Parent=Image Crawlers +Browser=WebImages + +[WebPix*] +Parent=Image Crawlers +Browser=Custo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser=Link Checkers +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser=!Susie + +[*AgentName/*] +Parent=Link Checkers +Browser=AgentName + +[*Linkman*] +Parent=Link Checkers +Browser=Linkman + +[*LinksManager.com*] +Parent=Link Checkers +Browser=LinksManager + +[*Powermarks/*] +Parent=Link Checkers +Browser=Powermarks + +[*W3C-checklink/*] +Parent=Link Checkers +Browser=W3C Link Checker + +[*Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator + +[*Zeus*] +Parent=Link Checkers +Browser=Zeus +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser=ActiveBookmark + +[Bookdog/*] +Parent=Link Checkers +Browser=Bookdog + +[Bookmark Buddy*] +Parent=Link Checkers +Browser=Bookmark Buddy + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser=Bookmark Renewal Check Agent + +[Bookmark search tool*] +Parent=Link Checkers +Browser=Bookmark search tool + +[Bookmark-Manager] +Parent=Link Checkers +Browser=Bookmark-Manager + +[Checkbot*] +Parent=Link Checkers +Browser=Checkbot + +[CheckLinks/*] +Parent=Link Checkers +Browser=CheckLinks + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser=CyberSpyder Link Test + +[DLC/*] +Parent=Link Checkers +Browser=DLC + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser=DocWeb Link Crawler + +[FavOrg] +Parent=Link Checkers +Browser=FavOrg + +[Favorites Sweeper v.3.*] +Parent=Link Checkers +Browser=Favorites Sweeper + +[FindLinks/*] +Parent=Link Checkers +Browser=FindLinks + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser=Funnel Web Profiler + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser=HTML Link Validator + +[IECheck] +Parent=Link Checkers +Browser=IECheck + +[JCheckLinks/*] +Parent=Link Checkers +Browser=JCheckLinks + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser=JRTwine + +[Link Valet Online*] +Parent=Link Checkers +Browser=Link Valet +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser=LinkAlarm + +[Linkbot*] +Parent=Link Checkers +Browser=Linkbot + +[LinkChecker/*] +Parent=Link Checkers +Browser=LinkChecker + +[LinkextractorPro*] +Parent=Link Checkers +Browser=LinkextractorPro +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser=LinkLint + +[LinkScan/*] +Parent=Link Checkers +Browser=LinkScan + +[LinkSweeper/*] +Parent=Link Checkers +Browser=LinkSweeper + +[LinkWalker*] +Parent=Link Checkers +Browser=LinkWalker + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser=MetaGer-LinkChecker + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser=LinkTiger +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser=URLBase + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser=NetPromoter Link Utility + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser=Link Commander +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] +Parent=Link Checkers +Browser=smartBot + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser=SuperCleaner + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser=gURLChecker +isBanned=true + +[Newsgroupreporter LinkCheck] +Parent=Link Checkers +Browser=Newsgroupreporter LinkCheck + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser=onCHECK Linkchecker + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser=Dead-Links.com +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser=REL Link Checker + +[RLinkCheker*] +Parent=Link Checkers +Browser=RLinkCheker + +[Robozilla/*] +Parent=Link Checkers +Browser=Robozilla + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser=RPT-HTTPClient +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser=SafariBookmarkChecker +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser=Simpy + +[SiteBar/*] +Parent=Link Checkers +Browser=SiteBar + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser=Susie + +[URLBase/6.*] +Parent=Link Checkers + +[VSE/*] +Parent=Link Checkers +Browser=VSE Link Tester + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser=WebTrends Link Analyzer + +[WorQmada/*] +Parent=Link Checkers +Browser=WorQmada + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser=Xenu's Link Sleuth +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser=Z-Add Link Checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser=Microsoft +isBanned=true + +[Live (http://www.live.com/)] +Parent=Microsoft +Browser=Microsoft Live +isBanned=false +isSyndicationReader=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser=MFC Foundation Class Library + +[MFHttpScan] +Parent=Microsoft +Browser=MFHttpScan + +[Microsoft BITS/*] +Parent=Microsoft +Browser=BITS + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser=MS IPP + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser=MS IPP DAV + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser=MS IPPPD + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser=Fake IE + +[Microsoft Office Existence Discovery] +Parent=Microsoft +Browser=Microsoft Office Existence Discovery + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser=MS OPD + +[Microsoft Office/* (*Picture Manager*)] +Parent=Microsoft +Browser=Microsoft Office Picture Manager + +[Microsoft URL Control*] +Parent=Microsoft +Browser=Microsoft URL Control + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser=Microsoft Visio + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser=Microsoft-WebDAV + +[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] +Parent=Microsoft +Browser=Microsoft Excel +Version=12.0 +MajorVer=12 +MinorVer=0 +Platform=MacOSX + +[MSN Feed Manager] +Parent=Microsoft +Browser=MSN Feed Manager +isBanned=false +isSyndicationReader=true + +[MSProxy/*] +Parent=Microsoft +Browser=MS Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser=Miscellaneous Browsers +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser=Amiga +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser=Avant Browser + +[12345] +Parent=Miscellaneous Browsers +Browser=12345 +isBanned=true + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser=Ace Explorer + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser=Enigma Browser + +[EVE-minibrowser/*] +Parent=Miscellaneous Browsers +Browser=EVE-minibrowser +IFrames=false +Tables=false +BackgroundSounds=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +Crawler=false + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser=Godzilla + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser=GreenBrowser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Kopiczek/* (WyderOS*; *)] +Parent=Miscellaneous Browsers +Browser=Kopiczek +Platform=WyderOS +IFrames=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (*) - BrowseX (*)] +Parent=Miscellaneous Browsers +Browser=BrowseX + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser=Escape +Platform=Win32 + +[Mozilla/4.0 (compatible; ibisBrowser)] +Parent=Miscellaneous Browsers +Browser=ibisBrowser + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser=HistoryHound + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser=NetRecorder + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser=NetSurfer + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser=ogeb browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser=Wipeout Pure + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser=SlimBrowser + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser=WWW Browser +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CssVersion=3 +supportsCSS=true + +[*Netcraft Webserver Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser=Offline Browsers +Frames=true +Tables=true +Cookies=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser=Check&Get + +[*HTTrack*] +Parent=Offline Browsers +Browser=HTTrack + +[*MSIECrawler*] +Parent=Offline Browsers +Browser=IE Offline Browser + +[*TweakMASTER*] +Parent=Offline Browsers +Browser=TweakMASTER + +[BackStreet Browser *] +Parent=Offline Browsers +Browser=BackStreet Browser + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser=Go Ahead Got-It + +[iGetter/*] +Parent=Offline Browsers +Browser=iGetter + +[Teleport*] +Parent=Offline Browsers +Browser=Teleport + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser=Online Scanners +isBanned=true + +[JoeDog/* (X11; I; Siege *)] +Parent=Online Scanners +Browser=JoeDog +isBanned=false + +[Morfeus Fucking Scanner] +Parent=Online Scanners +Browser=Morfeus Fucking Scanner + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser=Trend Micro + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser=Panda Antivirus Titanium + +[virus_detector*] +Parent=Online Scanners +Browser=Secure Computing Corporation + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser=Proxy Servers +isBanned=true + +[*squid*] +Parent=Proxy Servers +Browser=Squid + +[Anonymisiert*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymizer/*] +Parent=Proxy Servers +Browser=Anonymizer + +[Anonymizied*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymous*] +Parent=Proxy Servers +Browser=Anonymous + +[Anonymous/*] +Parent=Proxy Servers +Browser=Anonymous + +[CE-Preload] +Parent=Proxy Servers +Browser=CE-Preload + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser=Anonymouse + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser=Anonymizer + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser=SaferSurf + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser=Yahoo! +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser=Squid + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Privoxy/*] +Parent=Proxy Servers +Browser=Privoxy + +[ProxyTester*] +Parent=Proxy Servers +Browser=ProxyTester +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser=SilentSurf + +[SmallProxy*] +Parent=Proxy Servers +Browser=SmallProxy + +[Space*Bison/*] +Parent=Proxy Servers +Browser=Proxomitron + +[Sqworm/*] +Parent=Proxy Servers +Browser=Websense + +[SurfControl] +Parent=Proxy Servers +Browser=SurfControl + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser=Research Projects +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser=AcadiaUniversityWebCensusClient + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser=Amico Alpha + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser=Annotate Google + +[CMS crawler (?http://buytaert.net/crawler/)] +Parent=Research Projects + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser=e-SocietyRobot + +[Forschungsportal/*] +Parent=Research Projects +Browser=Forschungsportal + +[Gulper Web *] +Parent=Research Projects +Browser=Gulper Web Bot + +[HooWWWer/*] +Parent=Research Projects +Browser=HooWWWer + +[http://buytaert.net/crawler] +Parent=Research Projects + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser=inetbot + +[IRLbot/*] +Parent=Research Projects +Browser=IRLbot + +[Lachesis] +Parent=Research Projects +Browser=Lachesis + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser=nextthing.org +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser=Theophrastus + +[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] +Parent=Research Projects +Browser=Webscan + +[MQbot*] +Parent=Research Projects +Browser=MQbot + +[OutfoxBot/*] +Parent=Research Projects +Browser=OutfoxBot + +[polybot?*] +Parent=Research Projects +Browser=Polybot + +[Shim?Crawler*] +Parent=Research Projects +Browser=Shim Crawler + +[Steeler/*] +Parent=Research Projects +Browser=Steeler + +[Taiga web spider] +Parent=Research Projects +Browser=Taiga + +[Theme Spider*] +Parent=Research Projects +Browser=Theme Spider + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser=UofTDB Experiment + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser=USyd-NLP-Spider + +[woriobot*] +Parent=Research Projects +Browser=woriobot + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser=wwwster +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser=Zao-Crawler + +[Zao/*] +Parent=Research Projects +Browser=Zao + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser=Rippers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*grub*] +Parent=Rippers +Browser=grub + +[*ickHTTP*] +Parent=Rippers +Browser=IP*Works + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser=libwww-perl + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser=WinHttp + +[3D-FTP/*] +Parent=Rippers +Browser=3D-FTP + +[3wGet/*] +Parent=Rippers +Browser=3wGet + +[ActiveRefresh*] +Parent=Rippers +Browser=ActiveRefresh + +[Artera (Version *)] +Parent=Rippers +Browser=Artera + +[AutoHotkey] +Parent=Rippers +Browser=AutoHotkey + +[b2w/*] +Parent=Rippers +Browser=b2w + +[BasicHTTP/*] +Parent=Rippers +Browser=BasicHTTP + +[BlockNote.Net] +Parent=Rippers +Browser=BlockNote.Net + +[CAST] +Parent=Rippers +Browser=CAST + +[CFNetwork/*] +Parent=Rippers +Browser=CFNetwork + +[CFSCHEDULE*] +Parent=Rippers +Browser=ColdFusion Task Scheduler + +[CobWeb/*] +Parent=Rippers +Browser=CobWeb + +[ColdFusion*] +Parent=Rippers +Browser=ColdFusion + +[Crawl_Application] +Parent=Rippers +Browser=Crawl_Application + +[curl/*] +Parent=Rippers +Browser=cURL + +[Custo*] +Parent=Rippers +Browser=Custo + +[DataCha0s/*] +Parent=Rippers +Browser=DataCha0s + +[DeepIndexer*] +Parent=Rippers +Browser=DeepIndexer + +[DISCo Pump *] +Parent=Rippers +Browser=DISCo Pump + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser=eStyleSearch +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser=Ezic.com + +[fetch libfetch/*] +Parent=Rippers + +[FGet*] +Parent=Rippers +Browser=FGet + +[Flaming AttackBot*] +Parent=Rippers +Browser=Flaming AttackBot + +[Foobot*] +Parent=Rippers +Browser=Foobot + +[GameSpyHTTP/*] +Parent=Rippers +Browser=GameSpyHTTP + +[gnome-vfs/*] +Parent=Rippers +Browser=gnome-vfs + +[Harvest/*] +Parent=Rippers +Browser=Harvest + +[hcat/*] +Parent=Rippers +Browser=hcat + +[HLoader] +Parent=Rippers +Browser=HLoader + +[Holmes/*] +Parent=Rippers +Browser=Holmes + +[HTMLParser/*] +Parent=Rippers +Browser=HTMLParser + +[http generic] +Parent=Rippers +Browser=http generic + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser=httperf + +[HTTPFetch/*] +Parent=Rippers +Browser=HTTPFetch + +[HTTPGrab] +Parent=Rippers +Browser=HTTPGrab + +[HttpSession] +Parent=Rippers +Browser=HttpSession + +[httpunit/*] +Parent=Rippers +Browser=HttpUnit + +[ICE_GetFile] +Parent=Rippers +Browser=ICE_GetFile + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser=Inet - Eureka App + +[INetURL/*] +Parent=Rippers +Browser=INetURL + +[InetURL:/*] +Parent=Rippers +Browser=InetURL + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser=Fake IE + +[Internet Explorer *] +Parent=Rippers +Browser=Fake IE + +[IP*Works!*/*] +Parent=Rippers +Browser=IP*Works! + +[IrssiUrlLog/*] +Parent=Rippers +Browser=IrssiUrlLog + +[JPluck/*] +Parent=Rippers +Browser=JPluck + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser=Kapere + +[LeechFTP] +Parent=Rippers +Browser=LeechFTP + +[LeechGet*] +Parent=Rippers +Browser=LeechGet + +[libcurl-agent/*] +Parent=Rippers +Browser=libcurl + +[libWeb/clsHTTP*] +Parent=Rippers +Browser=libWeb/clsHTTP + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser=MFC_Tear_Sample + +[Moozilla] +Parent=Rippers +Browser=Moozilla + +[MovableType/*] +Parent=Rippers +Browser=MovableType Web Log + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser=NEWT ActiveX +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser=Novell BorderManager + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] +Parent=Rippers +Browser=IPCheck Server Monitor + +[OCN-SOC/*] +Parent=Rippers +Browser=OCN-SOC + +[Offline Explorer*] +Parent=Rippers +Browser=Offline Explorer + +[Open Web Analytics Bot*] +Parent=Rippers +Browser=Open Web Analytics Bot + +[OSSProxy*] +Parent=Rippers +Browser=OSSProxy + +[Pageload*] +Parent=Rippers +Browser=PageLoad + +[PageNest/*] +Parent=Rippers +Browser=PageNest + +[pavuk/*] +Parent=Rippers +Browser=Pavuk + +[PEAR HTTP_Request*] +Parent=Rippers +Browser=PEAR-PHP + +[PHP*] +Parent=Rippers +Browser=PHP + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser=PigBlock +Win32=true + +[Pockey*] +Parent=Rippers +Browser=Pockey-GetHTML + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser=POE-Component-Client-HTTP + +[PycURL/*] +Parent=Rippers +Browser=PycURL + +[Python*] +Parent=Rippers +Browser=Python + +[RepoMonkey*] +Parent=Rippers +Browser=RepoMonkey + +[SBL-BOT*] +Parent=Rippers +Browser=BlackWidow + +[ScoutAbout*] +Parent=Rippers +Browser=ScoutAbout + +[sherlock/*] +Parent=Rippers +Browser=Sherlock + +[SiteParser/*] +Parent=Rippers +Browser=SiteParser + +[SiteSnagger*] +Parent=Rippers +Browser=SiteSnagger + +[SiteSucker/*] +Parent=Rippers +Browser=SiteSucker + +[SiteWinder*] +Parent=Rippers +Browser=SiteWinder + +[Snoopy*] +Parent=Rippers +Browser=Snoopy + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser=AspTear + +[SuperHTTP/*] +Parent=Rippers +Browser=SuperHTTP + +[Tcl http client package*] +Parent=Rippers +Browser=Tcl http client package + +[Twisted PageGetter] +Parent=Rippers +Browser=Twisted PageGetter + +[URL2File/*] +Parent=Rippers +Browser=URL2File + +[UtilMind HTTPGet] +Parent=Rippers +Browser=UtilMind HTTPGet + +[VCI WebViewer*] +Parent=Rippers +Browser=VCI WebViewer + +[W3CRobot/*] +Parent=Rippers +Browser=W3CRobot + +[Web Downloader*] +Parent=Rippers +Browser=Web Downloader + +[Web Downloader/*] +Parent=Rippers +Browser=Web Downloader + +[Web Magnet*] +Parent=Rippers +Browser=Web Magnet + +[WebAuto/*] +Parent=Rippers + +[webbandit/*] +Parent=Rippers +Browser=webbandit + +[WebCopier*] +Parent=Rippers +Browser=WebCopier + +[WebDownloader*] +Parent=Rippers +Browser=WebDownloader + +[WebFetch] +Parent=Rippers +Browser=WebFetch + +[webfetch/*] +Parent=Rippers +Browser=WebFetch + +[WebGatherer*] +Parent=Rippers +Browser=WebGatherer + +[WebGet] +Parent=Rippers +Browser=WebGet + +[WebReaper*] +Parent=Rippers +Browser=WebReaper + +[WebRipper] +Parent=Rippers +Browser=WebRipper + +[WebSauger*] +Parent=Rippers +Browser=WebSauger + +[Website Downloader*] +Parent=Rippers +Browser=Website Downloader + +[Website eXtractor*] +Parent=Rippers +Browser=Website eXtractor + +[Website Quester] +Parent=Rippers +Browser=Website Quester + +[WebsiteExtractor*] +Parent=Rippers +Browser=Website eXtractor + +[WebSnatcher*] +Parent=Rippers +Browser=WebSnatcher + +[Webster Pro*] +Parent=Rippers +Browser=Webster Pro + +[WebStripper*] +Parent=Rippers +Browser=WebStripper + +[WebWhacker*] +Parent=Rippers +Browser=WebWhacker + +[WinScripter iNet Tools] +Parent=Rippers +Browser=WinScripter iNet Tools + +[WWW-Mechanize/*] +Parent=Rippers +Browser=WWW-Mechanize + +[Zend_Http_Client] +Parent=Rippers +Browser=Zend_Http_Client + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser=Site Monitors +Cookies=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser=EasyRider + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser=maxamine.com--robot +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser=WebMon + +[Kenjin Spider*] +Parent=Site Monitors +Browser=Kenjin Spider + +[Kevin http://*] +Parent=Site Monitors +Browser=Kevin +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser=ChangeDetection + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser=Myst Monitor Service + +[Net Probe] +Parent=Site Monitors +Browser=Net Probe + +[NetMechanic*] +Parent=Site Monitors +Browser=NetMechanic + +[NetReality*] +Parent=Site Monitors +Browser=NetReality + +[Pingdom GIGRIB*] +Parent=Site Monitors +Browser=Pingdom + +[Site Valet Online*] +Parent=Site Monitors +Browser=Site Valet +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser=SITECHECKER + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser=ZoneEdit Failover Monitor +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser=UpTime Checker + +[URL Control*] +Parent=Site Monitors +Browser=URL Control + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser=URLCHECK + +[URLy Warning*] +Parent=Site Monitors +Browser=URLy Warning + +[Webcheck *] +Parent=Site Monitors +Browser=Webcheck +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser=WebPatrol + +[websitepulse checker/*] +Parent=Site Monitors +Browser=websitepulse checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser=Social Bookmarkers +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[BookmarkBase(2/;http://bookmarkbase.com)] +Parent=Social Bookmarkers +Browser=BookmarkBase + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser=Cocoalicious + +[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] +Parent=Social Bookmarkers +Browser=FriendFeedBot + +[Twitturly*] +Parent=Social Bookmarkers +Browser=Twitturly + +[WinkBot/*] +Parent=Social Bookmarkers +Browser=WinkBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser=Translators +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser=Seram Server + +[TeragramWebcrawler/*] +Parent=Translators +Browser=TeragramWebcrawler +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser=WorldLingo + +[WebTrans] +Parent=Translators +Browser=WebTrans + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser=Version Checkers +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser=Automated Browscap.ini Updater + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser=BMC Link Validator +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[Browscap updater] +Parent=Version Checkers +Browser=Browscap updater + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser=Gary Keith's Version Checker + +[Browser Capabilities Project AutoDownloader] +Parent=Version Checkers +Browser=TKC AutoDownloader + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Code Sample Web Client] +Parent=Version Checkers +Browser=Code Sample Web Client + +[Desktop Sidebar*] +Parent=Version Checkers +Browser=Desktop Sidebar +isBanned=true + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser=Mono Browser Capabilities Updater +isBanned=true + +[Rewmi/*] +Parent=Version Checkers +isBanned=true + +[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] +Parent=Version Checkers +Browser=Subtext + +[TherapeuticResearch] +Parent=Version Checkers +Browser=TherapeuticResearch + +[UpdateBrowscap*] +Parent=Version Checkers +Browser=UpdateBrowscap + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser=clarkson.edu + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser=Substncia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser=Become +Frames=true +Tables=true +isSyndicationReader=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser=BecomeBot + +[*BecomeBot@exava.com*] +Parent=Become +Browser=BecomeBot + +[*Exabot@exava.com*] +Parent=Become +Browser=Exabot + +[MonkeyCrawl/*] +Parent=Become +Browser=MonkeyCrawl + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser=BecomeJPBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems + +[Blue Coat Systems] +Parent=DefaultProperties +Browser=Blue Coat Systems +isBanned=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers + +[Browscap Abusers] +Parent=DefaultProperties +Browser=Browscap Abusers +isBanned=true + +[Apple-PubSub/*] +Parent=Browscap Abusers +Browser=Apple-PubSub + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub + +[FeedHub] +Parent=DefaultProperties +Browser=FeedHub +isSyndicationReader=true + +[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedDiscovery +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub MetaDataFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Internet Content Rating Association] +Parent=DefaultProperties +Browser= +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[ICRA_label_generator/1.?] +Parent=Internet Content Rating Association +Browser=ICRA_label_generator + +[ICRA_Semantic_spider/0.?] +Parent=Internet Content Rating Association +Browser=ICRA_Semantic_spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser=NameProtect +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser=NameProtect + +[NP/*] +Parent=NameProtect +Browser=NameProtect + +[NPBot*] +Parent=NameProtect +Browser=NameProtect + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft + +[Netcraft] +Parent=DefaultProperties +Browser=Netcraft +isBanned=true +Crawler=true + +[*Netcraft Web Server Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] +Parent=Netcraft +Browser=NetcraftSurveyAgent + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator + +[NewsGator] +Parent=DefaultProperties +Browser=NewsGator +isSyndicationReader=true + +[MarsEdit*] +Parent=NewsGator +Browser=MarsEdit + +[NetNewsWire*/*] +Parent=NewsGator +Browser=NetNewsWire +Platform=MacOSX + +[NewsFire/*] +Parent=NewsGator +Browser=NewsFire + +[NewsGator FetchLinks extension/*] +Parent=NewsGator +Browser=NewsGator FetchLinks + +[NewsGator/*] +Parent=NewsGator +Browser=NewsGator +isBanned=true + +[NewsGatorOnline/*] +Parent=NewsGator +Browser=NewsGatorOnline + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 + +[Chrome 0.2] +Parent=DefaultProperties +Browser=Chrome +Version=0.2 +MinorVer=2 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 + +[Chrome 0.3] +Parent=DefaultProperties +Browser=Chrome +Version=0.3 +MinorVer=3 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 + +[Chrome 0.4] +Parent=DefaultProperties +Browser=Chrome +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 + +[Chrome 0.5] +Parent=DefaultProperties +Browser=Chrome +Version=0.5 +MinorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 + +[Chrome 1.0] +Parent=DefaultProperties +Browser=Chrome +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 + +[Chrome 2.0] +Parent=DefaultProperties +Browser=Chrome +Version=2.0 +MajorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 + +[Chrome 3.0] +Parent=DefaultProperties +Browser=Chrome +Version=3.0 +MajorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code + +[Google Code] +Parent=DefaultProperties +Browser=Google Code +Tables=true +Cookies=true +JavaApplets=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 + +[Iron 0.2] +Parent=DefaultProperties +Browser=Iron +Version=0.2 +MinorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 + +[Iron 0.3] +Parent=DefaultProperties +Browser=Iron +Version=0.3 +MinorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 + +[Iron 0.4] +Parent=DefaultProperties +Browser=Iron +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod + +[iPod] +Parent=DefaultProperties +Browser=iPod +Platform=iPhone OSX +isMobileDevice=true + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] +Parent=iPod +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] +Parent=iPod + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes + +[iTunes] +Parent=DefaultProperties +Browser=iTunes +Platform=iPhone OSX + +[iTunes/* (Windows; ?)] +Parent=iTunes +Browser=iTunes +Platform=Win32 +Win32=true + +[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] +Parent=iTunes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser=Media Players +Cookies=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser=Microsoft NetShow + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser=RealPlayer +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser=MPlayer +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser=MPlayer +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser=MPlayer + +[RealPlayer*] +Parent=Media Players +Browser=RealPlayer + +[RMA/*] +Parent=Media Players +Browser=RMA + +[VLC media player*] +Parent=Media Players +Browser=VLC + +[vobsub] +Parent=Media Players +Browser=vobsub +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser=WinAmp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo + +[Nintendo Wii] +Parent=DefaultProperties +Browser= +isMobileDevice=true + +[Opera/* (Nintendo DSi; Opera/*; *; *)] +Parent=Nintendo Wii +Browser=DSi + +[Opera/* (Nintendo Wii; U; *)] +Parent=Nintendo Wii +Browser=Wii + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser=Windows Media Player +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser=Windows-Media-Player +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune + +[Zune] +Parent=DefaultProperties +Browser=Zune +Cookies=true + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] +Parent=Zune +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] +Parent=Zune +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] +Parent=Zune +Version=3.0 +MajorVer=3 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 + +[QuickTime 7.0] +Parent=DefaultProperties +Browser=QuickTime +Version=7.0 +MajorVer=7 +Cookies=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime 7.0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime 7.0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime 7.0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime 7.0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime 7.0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime 7.0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime 7.0 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 + +[QuickTime 7.1] +Parent=DefaultProperties +Browser=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Cookies=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime 7.1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime 7.1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime 7.1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime 7.1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime 7.1 +Platform=Win2003 +Win32=true + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 + +[QuickTime 7.2] +Parent=DefaultProperties +Browser=QuickTime +Version=7.2 +MajorVer=7 +MinorVer=2 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.2 +Platform=MacOSX + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.2 +Platform=MacPPC + +[QuickTime (qtver=7.2*;os=Windows 98*)] +Parent=QuickTime 7.2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] +Parent=QuickTime 7.2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] +Parent=QuickTime 7.2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] +Parent=QuickTime 7.2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] +Parent=QuickTime 7.2 +Platform=Win2003 +Win32=true + +[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 + +[QuickTime 7.3] +Parent=DefaultProperties +Browser=QuickTime +Version=7.3 +MajorVer=7 +MinorVer=3 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.3 +Platform=MacOSX + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.3 +Platform=MacPPC + +[QuickTime (qtver=7.3*;os=Windows 98*)] +Parent=QuickTime 7.3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] +Parent=QuickTime 7.3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] +Parent=QuickTime 7.3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] +Parent=QuickTime 7.3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] +Parent=QuickTime 7.3 +Platform=Win2003 +Win32=true + +[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.3 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 + +[QuickTime 7.4] +Parent=DefaultProperties +Browser=QuickTime +Version=7.4 +MajorVer=7 +MinorVer=4 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.4 +Platform=MacOSX + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.4 +Platform=MacPPC + +[QuickTime (qtver=7.4*;os=Windows 98*)] +Parent=QuickTime 7.4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] +Parent=QuickTime 7.4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] +Parent=QuickTime 7.4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] +Parent=QuickTime 7.4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] +Parent=QuickTime 7.4 +Platform=Win2003 +Win32=true + +[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.4 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android + +[Android] +Parent=DefaultProperties +Browser=Android +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser=BlackBerry +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*BlackBerry*] +Parent=BlackBerry + +[*BlackBerrySimulator/*] +Parent=BlackBerry + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser=Handspring Blazer +Platform=Palm +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] +Parent=Blazer +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] +Parent=Blazer +Version=4.2 +MajorVer=4 +MinorVer=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] +Parent=Blazer +Version=4.4 +MajorVer=4 +MinorVer=4 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] +Parent=Blazer +Version=4.5 +MajorVer=4 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser=DoCoMo +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile + +[IEMobile] +Parent=DefaultProperties +Browser=IEMobile +Platform=WinCE +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] +Parent=IEMobile +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] +Parent=IEMobile +Version=7.0 +MajorVer=7 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone + +[iPhone] +Parent=DefaultProperties +Browser=iPhone +Platform=iPhone OSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=3 +supportsCSS=true + +[Mozilla/4.0 (iPhone; *)] +Parent=iPhone + +[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] +Parent=iPhone +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] +Parent=iPhone +Browser=iTouch + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] +Parent=iPhone +Browser=iTouch +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser=KDDI +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[KDDI-* UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile + +[Miscellaneous Mobile] +Parent=DefaultProperties +Browser= +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] +Parent=Miscellaneous Mobile +Browser=Bolt + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Internet Browser] +Parent=DefaultProperties +Browser=Motorola Internet Browser +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[MOT-*/*] +Parent=Motorola Internet Browser + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T*/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy + +[MSN Mobile Proxy] +Parent=DefaultProperties +Browser=MSN Mobile Proxy +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true + +[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] +Parent=MSN Mobile Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser=NetFront +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*NetFront/*] +Parent=NetFront + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser=Nokia +Tables=true +Cookies=true +isMobileDevice=true + +[*Nokia*/*] +Parent=Nokia + +[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Nokia +Platform=SymbianOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser=Openwave Mobile Browser +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini + +[Opera Mini] +Parent=DefaultProperties +Browser=Opera Mini +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] +Parent=Opera Mini +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] +Parent=Opera Mini +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] +Parent=Opera Mini +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] +Parent=Opera Mini +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] +Parent=Opera Mini +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] +Parent=Opera Mini +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] +Parent=Opera Mini +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] +Parent=Opera Mini +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] +Parent=Opera Mini +Version=4.2 +MajorVer=4 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile + +[Opera Mobile] +Parent=DefaultProperties +Browser=Opera Mobi +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] +Parent=Opera Mobile +Version=9.51 +MajorVer=9 +MinorVer=51 +Beta=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser=Playstation +Platform=WAP +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/* (PLAYSTATION *; *)] +Parent=Playstation +Browser=PlayStation 3 +Frames=false + +[Mozilla/* (PSP (PlayStation Portable); *)] +Parent=Playstation + +[Sony PS2 (Linux)] +Parent=Playstation +Browser=Sony PS2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser=Pocket PC +Platform=WinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*(compatible; MSIE *.*; Windows CE; PPC; *)] +Parent=Pocket PC + +[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] +Parent=Pocket PC +Win32=true + +[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] +Parent=Pocket PC +Win32=true + +[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] +Parent=Pocket PC + +[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] +Parent=Pocket PC + +[Windows CE (Pocket PC) - Version *.*] +Parent=Pocket PC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser=SEMC Browser +Platform=JAVA +Tables=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson + +[SonyEricsson] +Parent=DefaultProperties +Browser=SonyEricsson +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*Ericsson*] +Parent=SonyEricsson + +[*SonyEricsson*] +Parent=SonyEricsson + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser=Netbox +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser=Netbox +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser=PowerTV +Platform=PowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser=WebTV/MSNTV +Platform=WebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser=Amaya +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser=Links +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser=Links +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +[Links (2.2*; FreeBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=FreeBSD + +[Links (2.2*; Linux *)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=Linux + +[Links (2.2*; OpenBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser=Lynx +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser=Lynx + +[Lynx/2.3*] +Parent=Lynx +Browser=Lynx +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser=Lynx +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser=Lynx +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser=Lynx +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser=Lynx +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser=Lynx +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser=w3m +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser=w3m +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser=w3m +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser=w3m +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser=w3m +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser=w3m +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 + +[ELinks 0.10] +Parent=DefaultProperties +Browser=ELinks +Version=0.10 +MinorVer=10 +Frames=true +Tables=true + +[ELinks (0.10*; *AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks (0.10*; *BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks (0.10*; *CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks (0.10*; *Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks (0.10*; *Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks (0.10*; *FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks (0.10*; *HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks (0.10*; *IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks (0.10*; *Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks (0.10*; *NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks (0.10*; *OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks (0.10*; *OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks (0.10*; *RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks (0.10*; *Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks (0.10*; *Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +[ELinks/0.10* (*AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks/0.10* (*BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks/0.10* (*CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks/0.10* (*Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks/0.10* (*Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks/0.10* (*FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks/0.10* (*HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks/0.10* (*IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks/0.10* (*Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks/0.10* (*NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks/0.10* (*OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks/0.10* (*OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks/0.10* (*RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks/0.10* (*Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks/0.10* (*Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 + +[ELinks 0.11] +Parent=DefaultProperties +Browser=ELinks +Version=0.11 +MinorVer=11 +Frames=true +Tables=true + +[ELinks (0.11*; *AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks (0.11*; *BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks (0.11*; *CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks (0.11*; *Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks (0.11*; *Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks (0.11*; *HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks (0.11*; *IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks (0.11*; *Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks (0.11*; *NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks (0.11*; *OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks (0.11*; *OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks (0.11*; *RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks (0.11*; *Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks (0.11*; *Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +[ELinks/0.11* (*AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks/0.11* (*BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks/0.11* (*CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks/0.11* (*Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks/0.11* (*Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks/0.11* (*FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks/0.11* (*HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks/0.11* (*IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks/0.11* (*Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks/0.11* (*NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks/0.11* (*OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks/0.11* (*OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks/0.11* (*RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks/0.11* (*Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks/0.11* (*Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 + +[ELinks 0.12] +Parent=DefaultProperties +Browser=ELinks +Version=0.12 +MinorVer=12 +Frames=true +Tables=true + +[ELinks (0.12*; *AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks (0.12*; *BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks (0.12*; *CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks (0.12*; *Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks (0.12*; *Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks (0.12*; *FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks (0.12*; *HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks (0.12*; *IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks (0.12*; *Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks (0.12*; *NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks (0.12*; *OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks (0.12*; *OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks (0.12*; *RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks (0.12*; *Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks (0.12*; *Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +[ELinks/0.12* (*AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks/0.12* (*BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks/0.12* (*CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks/0.12* (*Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks/0.12* (*Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks/0.12* (*FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks/0.12* (*HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks/0.12* (*IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks/0.12* (*Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks/0.12* (*NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks/0.12* (*OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks/0.12* (*OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks/0.12* (*RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks/0.12* (*Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks/0.12* (*Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 + +[ELinks 0.9] +Parent=DefaultProperties +Browser=ELinks +Version=0.9 +MinorVer=9 +Frames=true +Tables=true + +[ELinks (0.9*; *AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks (0.9*; *BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks (0.9*; *CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks (0.9*; *Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks (0.9*; *Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks (0.9*; *FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks (0.9*; *HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks (0.9*; *IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks (0.9*; *Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks (0.9*; *NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks (0.9*; *OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks (0.9*; *OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks (0.9*; *RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks (0.9*; *Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks (0.9*; *Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +[ELinks/0.9* (*AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks/0.9* (*BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks/0.9* (*CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks/0.9* (*Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks/0.9* (*Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks/0.9* (*HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks/0.9* (*IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks/0.9* (*Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks/0.9* (*NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks/0.9* (*OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks/0.9* (*OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks/0.9* (*RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks/0.9* (*Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks/0.9* (*Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit + +[AppleWebKit] +Parent=DefaultProperties +Browser=AppleWebKit +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] +Parent=AppleWebKit + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser=Camino +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] +Parent=Camino +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] +Parent=Camino +Version=1.4 +MajorVer=1 +MinorVer=4 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] +Parent=Camino +Version=1.5 +MajorVer=1 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] +Parent=Camino +Version=1.6 +MajorVer=1 +MinorVer=6 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser=Chimera +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser=Dillo +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +[Dillo/2.0] +Parent=Dillo +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser=Emacs/W3 +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser=fantomas +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser=fantomas cloakBrowser + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser=fantomas shadowMaker Browser + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser=fantomas fantomBrowser + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser=fantomas fantomCrew Browser + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser=fantomas stealthBrowser + +[multiBlocker browser*] +Parent=fantomas +Browser=fantomas multiBlocker browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser=FrontPage +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser=Galeon +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser=HP Secure Web Browser +Platform=OpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser=IBrowse +Platform=Amiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser=iCab +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[iCab/4.0 (Macintosh; U; *Mac OS X)] +Parent=iCab +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser=iSiloX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser=Lycoris Desktop/LX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser=NetPositive +Platform=BeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser=OmniWeb +Platform=MacOSX +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] +Parent=OmniWeb +Version=5. +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser=Shiira +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] +Parent=Shiira +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] +Parent=Shiira +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Windows Maker] +Parent=DefaultProperties +Browser=WMaker +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[WMaker*] +Parent=Windows Maker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 + +[K-Meleon 1.0] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 + +[K-Meleon 1.1] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.1 +MajorVer=1 +MinorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 + +[K-Meleon 1.5] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.5 +MajorVer=1 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 + +[Konqueror 3.0] +Parent=DefaultProperties +Browser=Konqueror +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[*Konqueror/3.0*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 + +[Konqueror 4.0] +Parent=DefaultProperties +Browser=Konqueror +Version=4.0 +MajorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 + +[Konqueror 4.1] +Parent=DefaultProperties +Browser=Konqueror +Version=4.1 +MajorVer=4 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 + +[Konqueror 4.2] +Parent=DefaultProperties +Browser=Konqueror +Version=4.2 +MajorVer=4 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser=Safari +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 + +[Safari 3.0] +Parent=DefaultProperties +Browser=Safari +Version=3.0 +MajorVer=3 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 + +[Safari 3.1] +Parent=DefaultProperties +Browser=Safari +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 + +[Safari 3.2] +Parent=DefaultProperties +Browser=Safari +Version=3.2 +MajorVer=3 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 + +[Safari 4.0] +Parent=DefaultProperties +Browser=Safari +Version=4.0 +MajorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 + +[Opera 10.0] +Parent=DefaultProperties +Browser=Opera +Version=10.0 +MajorVer=10 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] +Parent=Opera 10.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 10.0 +Platform=MacOSX + +[Opera/10.0* (Windows 95*)*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Opera/10.0* (Windows 98*)*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Opera/10.0* (Windows CE*)*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Opera/10.0* (Windows ME*)*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Opera/10.0* (Windows NT 4.0*)*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Opera/10.0* (Windows NT 5.0*)*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Opera/10.0* (Windows NT 5.1*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (Windows NT 5.2*)*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Opera/10.0* (Windows NT 6.0*)*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Opera/10.0* (Windows NT 6.1*)*] +Parent=Opera 10.0 +Platform=Win7 + +[Opera/10.0* (Windows XP*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (X11; FreeBSD*)*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Opera/10.0* (X11; Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (X11; SunOS*)*] +Parent=Opera 10.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser=Opera +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser=Opera +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser=Opera +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser=Opera +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser=Opera +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser=Opera +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser=Opera +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser=Opera +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser=Opera +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser=Opera +Version=9.1 +MajorVer=9 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (X11; SunOS*)*] +Parent=Opera 9.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 + +[Opera 9.2] +Parent=DefaultProperties +Browser=Opera +Version=9.2 +MajorVer=9 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] +Parent=Opera 9.2 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.2 +Platform=MacOSX + +[Opera/9.2* (Windows 95*)*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Opera/9.2* (Windows 98*)*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Opera/9.2* (Windows CE*)*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Opera/9.2* (Windows ME*)*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Opera/9.2* (Windows NT 4.0*)*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Opera/9.2* (Windows NT 5.0*)*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Opera/9.2* (Windows NT 5.1*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (Windows NT 5.2*)*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Opera/9.2* (Windows NT 6.0*)*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Opera/9.2* (Windows NT 6.1*)*] +Parent=Opera 9.2 +Platform=Win7 + +[Opera/9.2* (Windows XP*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (X11; FreeBSD*)*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Opera/9.2* (X11; Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (X11; SunOS*)*] +Parent=Opera 9.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 + +[Opera 9.3] +Parent=DefaultProperties +Browser=Opera +Version=9.3 +MajorVer=9 +MinorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] +Parent=Opera 9.3 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.3 +Platform=MacOSX + +[Opera/9.3* (Windows 95*)*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Opera/9.3* (Windows 98*)*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Opera/9.3* (Windows CE*)*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Opera/9.3* (Windows ME*)*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Opera/9.3* (Windows NT 4.0*)*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Opera/9.3* (Windows NT 5.0*)*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Opera/9.3* (Windows NT 5.1*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (Windows NT 5.2*)*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Opera/9.3* (Windows NT 6.0*)*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Opera/9.3* (Windows NT 6.1*)*] +Parent=Opera 9.3 +Platform=Win7 + +[Opera/9.3* (Windows XP*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (X11; FreeBSD*)*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Opera/9.3* (X11; Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (X11; SunOS*)*] +Parent=Opera 9.3 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 + +[Opera 9.4] +Parent=DefaultProperties +Browser=Opera +Version=9.4 +MajorVer=9 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] +Parent=Opera 9.4 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.4 +Platform=MacOSX + +[Opera/9.4* (Windows 95*)*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Opera/9.4* (Windows 98*)*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Opera/9.4* (Windows CE*)*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Opera/9.4* (Windows ME*)*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Opera/9.4* (Windows NT 4.0*)*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Opera/9.4* (Windows NT 5.0*)*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Opera/9.4* (Windows NT 5.1*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (Windows NT 5.2*)*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Opera/9.4* (Windows NT 6.0*)*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Opera/9.4* (Windows NT 6.1*)*] +Parent=Opera 9.4 +Platform=Win7 + +[Opera/9.4* (Windows XP*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (X11; FreeBSD*)*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Opera/9.4* (X11; Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (X11; SunOS*)*] +Parent=Opera 9.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 + +[Opera 9.5] +Parent=DefaultProperties +Browser=Opera +Version=9.5 +MajorVer=9 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] +Parent=Opera 9.5 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.5 +Platform=MacOSX + +[Opera/9.5* (Windows 95*)*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Opera/9.5* (Windows 98*)*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Opera/9.5* (Windows CE*)*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Opera/9.5* (Windows ME*)*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Opera/9.5* (Windows NT 4.0*)*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Opera/9.5* (Windows NT 5.0*)*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Opera/9.5* (Windows NT 5.1*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (Windows NT 5.2*)*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Opera/9.5* (Windows NT 6.0*)*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Opera/9.5* (Windows NT 6.1*)*] +Parent=Opera 9.5 +Platform=Win7 + +[Opera/9.5* (Windows XP*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (X11; FreeBSD*)*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Opera/9.5* (X11; Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (X11; SunOS*)*] +Parent=Opera 9.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 + +[Opera 9.6] +Parent=DefaultProperties +Browser=Opera +Version=9.6 +MajorVer=9 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] +Parent=Opera 9.6 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.6 +Platform=MacOSX + +[Opera/9.6* (Windows 95*)*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Opera/9.6* (Windows 98*)*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Opera/9.6* (Windows CE*)*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Opera/9.6* (Windows ME*)*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Opera/9.6* (Windows NT 4.0*)*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Opera/9.6* (Windows NT 5.0*)*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Opera/9.6* (Windows NT 5.1*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (Windows NT 5.2*)*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Opera/9.6* (Windows NT 6.0*)*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Opera/9.6* (Windows NT 6.1*)*] +Parent=Opera 9.6 +Platform=Win7 + +[Opera/9.6* (Windows XP*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (X11; FreeBSD*)*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Opera/9.6* (X11; Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (X11; SunOS*)*] +Parent=Opera 9.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser=Netscape +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser=Netscape +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser=Netscape +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser=Netscape +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser=Netscape +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser=Netscape +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser=Netscape +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser=Netscape +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser=Netscape +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser=Netscape +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser=Netscape +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser=Netscape +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser=Netscape +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 + +[SeaMonkey 1.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 + +[SeaMonkey 1.1] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.1 +MajorVer=1 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 + +[SeaMonkey 2.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=2.0 +MajorVer=2 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 + +[Flock 1.0] +Parent=DefaultProperties +Browser=Flock +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 + +[Flock 2.0] +Parent=DefaultProperties +Browser=Flock +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 + +[Sleipnir] +Parent=DefaultProperties +Browser=Sleipnir +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win7 + +[Sleipnir*] +Parent=Sleipnir + +[Sleipnir/2.*] +Parent=Sleipnir + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 + +[Fennec 1.0] +Parent=DefaultProperties +Browser=Firefox Mobile +Version=1.0 +MajorVer=1 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser=Firebird +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser=Firefox +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser=Firefox +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser=Firefox +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser=Firefox +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser=Firefox +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser=Firefox +Version=3.0 +MajorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 + +[Firefox 3.1] +Parent=DefaultProperties +Browser=Firefox +Version=3.1 +MajorVer=3 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 + +[Firefox 3.5] +Parent=DefaultProperties +Browser=Firefox +Version=3.5 +MajorVer=3 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser=Phoenix +Version=0.5 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel + +[Iceweasel] +Parent=DefaultProperties +Browser=Iceweasel +Platform=Linux +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] +Parent=Iceweasel +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser=Mozilla +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser=Mozilla +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser=Mozilla +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser=Mozilla +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser=Mozilla +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser=Mozilla +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser=Mozilla +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser=Mozilla +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser=Mozilla +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 + +[Mozilla 1.9] +Parent=DefaultProperties +Browser=Mozilla +Version=1.9 +MajorVer=1 +MinorVer=9 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser=IE +Platform=MacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser=AOL +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser=AOL +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser=AOL +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser + +[Avant Browser] +Parent=DefaultProperties +Browser=Avant Browser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Advanced Browser (http://www.avantbrowser.com)] +Parent=Avant Browser + +[Avant Browser*] +Parent=Avant Browser + +[Avant Browser/*] +Parent=Avant Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser=IE +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] +Parent=IE 4.01 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser=IE +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser=IE +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser=IE +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser=IE +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 +msdomversion=6.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser=IE +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=7.0 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] +Parent=IE 7.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] +Parent=IE 7.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 + +[IE 8.0] +Parent=DefaultProperties +Browser=IE +Version=8.0 +MajorVer=8 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=8.0 +w3cdomversion=1.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] +Parent=IE 8.0 +Platform=Win32 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] +Parent=IE 8.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] +Parent=IE 8.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] +Parent=IE 8.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser=Default Browser +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +AuthenticodeUpdate=0 +CSS=0 +WAP=false +netCLR=false +ClrVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/config b/Source/Platforms/Linux/Binaries/Mono/etc/mono/config new file mode 100644 index 000000000..385128f74 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/etc/mono/mconfig/config.xml b/Source/Platforms/Linux/Binaries/Mono/etc/mono/mconfig/config.xml new file mode 100644 index 000000000..a3df3b5e9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/etc/mono/mconfig/config.xml @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + +
+
+
+ + + + + +
+ +
+
+
+
+ + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +]]> + + + + + + + +
+
+
+ + + + + +
+ +
+
+
+ + + + ]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + + + ]]> + + + + + + ]]> + + + + + + ]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +
+
+
+
+
+
+ + diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/libMonoPosixHelper.so b/Source/Platforms/Linux/Binaries/Mono/lib/libMonoPosixHelper.so new file mode 100644 index 000000000..c376d9f4a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/libMonoPosixHelper.so @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef75aeb361e25837973582f43cc31543e8e87ecf139558a166df62a72d7b2c77 +size 274328 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Accessibility.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Accessibility.dll new file mode 100644 index 000000000..01200aeea --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7908292f952dfb43c613d382804d471099dc214e967d5b9c576d20f1426b670d +size 12288 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll new file mode 100644 index 000000000..71fcc330d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58636d961acd7124632e47dbe76c31e266b941c74a1af6ef614812a40cfb0631 +size 212480 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Mono.Security.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Mono.Security.dll new file mode 100644 index 000000000..72d96b0f4 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9eeafad9481db1050c13e1fb323517a8fa38f8e7d92e736dfbbdb81d07efe14 +size 314368 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..160555926 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9892265e9020fe89907ab812c5a5bbac5d552f13e3131296be59f1101343602 +size 258560 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..fff03e9ff --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ca1a6ef39cc2784f35191b9ad56055dbe7d782bc91080f53006af4bda7551d0 +size 84992 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll new file mode 100644 index 000000000..d6227ac98 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6dede71ccef0bf01ae0bd9c81c9643dda1a1c82291841722184f3c9d999dc8c +size 24064 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Configuration.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Configuration.dll new file mode 100644 index 000000000..db365d4fc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00f5f5c6fd07dcf673d068420d8769593f44b9ec1dae911bea094cc4bdb682d3 +size 122880 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Core.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Core.dll new file mode 100644 index 000000000..ff7b07a2b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5ac6330d485d61567bde7e8c938c898abd8bf39886f91c2035e5f19dfb3b778 +size 1086464 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..6391b0240 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fa1f2bddce63019b30b2502ff5560bcf831327a3536d5529d033217194fb350 +size 29696 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll new file mode 100644 index 000000000..5974f6518 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1520112348648a0a739e6cb8c33b4830b805971c28a28f0f98a527b1588d6519 +size 3338240 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll new file mode 100644 index 000000000..a60532ab8 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b47c88f097deb13c222a41c2d8f28e5043469b2a929dd5f8f4643fd4139f503 +size 652800 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll new file mode 100644 index 000000000..f2accdd2a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5210222768ba1527ac1969b3ce3315f216a8642876ce82f640f83ce71a9ae4b +size 173056 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll new file mode 100644 index 000000000..e811ed567 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40607bf6200b75a815989aa2efbeb2565f4a1f13bc2d698b26563f0b6e2460ce +size 418816 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll new file mode 100644 index 000000000..a2da8a705 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db29aa8d934516bf72cdbc872b6d109cc01a205b7724e27dbe4ee1b2210734af +size 56320 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.dll new file mode 100644 index 000000000..ebd63046f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c7cc52d2fe5c020852ec0595635dd5a30341d98d2b7f66fac694a6d77044c6f +size 2102272 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Deployment.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Deployment.dll new file mode 100644 index 000000000..e0ef53bdf --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:008f2b1b8ebc389a4a59e2f11c4a21b84649c7f47e2a9bdc856c5662ddcf80c1 +size 11264 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..984942ada --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:303b6205b1d759b7f5c0503a7e401da3fd59c38aac7a93084aa9d379c85bc920 +size 61952 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll new file mode 100644 index 000000000..3f294ae19 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a42c80c4473800bd4faa7a86a20f5f5cac5aa4f9abb1f38375c2947c693f0ca +size 94208 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Drawing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Drawing.dll new file mode 100644 index 000000000..e5d792384 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c74e44a0455c266fc4a641f6cb7fe13731cac7ef984a8ca90ac54faff759b44b +size 491008 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll new file mode 100644 index 000000000..a10dcb17d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caaaf916eeee6eaf20c3f8d706444a928c94d4e2b71fd48eb421242f91255475 +size 87040 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll new file mode 100644 index 000000000..635a2f78b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53724ebb898911c6da4233704514c2604afdbec11a9c807e31bf82b7558313a1 +size 46592 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..d22bdd7af --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:180a3e041a0261030fa7ca05ba06823000cf455c1367f6a4004b59be3e406767 +size 18432 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll new file mode 100644 index 000000000..e1ea2b78d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b279eea9c15eb42a82f3ae4f0d73b1de46512912638e8f22c943d929692d773f +size 115200 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..56424367c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f72d56255bd489b759dd21ab39fce38a05a74e17c1b812eeda11296e992ab3d +size 17408 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll new file mode 100644 index 000000000..550b8add5 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ffe031a24bc0ea3329687fcfaac106f84ab9175abb5b1fc6e0fe610560e85b +size 139776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll new file mode 100644 index 000000000..330f89327 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:568235cb7ad12d348aaeceaa096b994bdf91a0f0fe82922e81756d00267b781a +size 54784 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Json.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Json.dll new file mode 100644 index 000000000..41b314d50 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5571a40b9f4491e910fe1e8920b22dd06ae1eecc8751339ad29c259282426383 +size 32768 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Management.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Management.dll new file mode 100644 index 000000000..d7c43d154 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:085868e4b698e55881c8fdcaf6579cccfa24894f3eeb4fc353539d485bcecb9f +size 49152 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Messaging.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Messaging.dll new file mode 100644 index 000000000..c39bf9fe9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f0fc119551feefe672a3a3bf2c6011e7789c026f1fd00f7d68f2b02982be88e +size 75776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..370af3a67 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:301f258b1ad7ec5c7fb77626d54584c9ee97f61f5e32e18e91df8157d25a35f6 +size 518656 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..f14fe244c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae92b4f84ed4ce8c1063be896c3ed5b47c264014b64fa03a12e1cb0db8f104ad +size 27136 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll new file mode 100644 index 000000000..530c0c8c0 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d77438cf927f8aef02dff89c233fa1507461660518417647d77547676a9ded04 +size 281088 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.dll new file mode 100644 index 000000000..7b675a90b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75c950bdc72d4cdd5e792ad79714264d0418b47de3c69b578b5c072898992427 +size 13312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll new file mode 100644 index 000000000..dc333045d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:996ffb6885ee0d5a2ccba34439df1a67bf8016fc05603adf08e42c691bc8eed0 +size 12288 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Numerics.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Numerics.dll new file mode 100644 index 000000000..f4b0cb9fa --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9679f30c684c16ec6c88a078cd10ad7d5814b72d2a7ce8a144507e2fedae746 +size 119808 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll new file mode 100644 index 000000000..6f017dd6a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fc263d0b2a584b19237c024ef6c7f0b7ebbf5c9b788faf1beae5b9d13100b06 +size 95744 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll new file mode 100644 index 000000000..0ec7ce0c4 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73848bb977fa46e1bc518c3ef397b8364094dfa84fe4adbbdaba3f324842e8ba +size 5120 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll new file mode 100644 index 000000000..03a75dd66 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e75f52a62e044c40e2cc73daa0d6bf635a3568e091a3288eab1a759506c46d3 +size 28672 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..ff9931d26 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f4b79f0ac6cb348dc3bc8d1e1c7ff947620719bc8a3700c8c24f8a869bbee7 +size 7680 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll new file mode 100644 index 000000000..6d3c458a9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b30f026869aa2be2c0a350c0458f39a81dce9aa1f5af172a7205b97f945c1bc4 +size 683008 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..b9b2f253a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:318371120960ce15500798fe61a71c9bd96fa490d9746e942fd6b82eb4fd08a1 +size 9728 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..cca6cdffc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:816347965b0825548cfddef3b7da75f4e6c6fe268965554cadc0ee1456cd87ae +size 22528 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll new file mode 100644 index 000000000..48188c63d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145ac53ae98c80ef2a71711877f440c87112b545fd3bbee10508056f6c251c92 +size 243200 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..58a658ee2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64eaa2ed52011844537552a3681337081bfd2779e32029ade82c389873289bc7 +size 9216 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..b30d7c6cd --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5199e3009306940807d88912ffda5c72359ade4aac5134a5bca29573b162101 +size 9728 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..d3c27798d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f55a6654f734c5c4a9099a62c12b6138e9f4aca4f7717ab3ed2e67e21a292e9 +size 12800 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll new file mode 100644 index 000000000..3d087600f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ed7f7b821c9c09b3c51d9ea9fa5962961c8d022d61d4f283d3373071d43305 +size 13312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll new file mode 100644 index 000000000..b8a99178b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d48e180e328d20ee492f5059f646d6d7d42bc64ff3e24d612fd0bd8295fbfaa +size 72192 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..b8ce6d6d2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5c58a203c458c7439e91b15289ebf9670f0da0ff17381f4199958cbed88e4b6 +size 107008 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll new file mode 100644 index 000000000..37c6f3a83 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:928ffdef7e659f2500f2b8c1da5d6923f0adf1edc46240572c7495a5954df5cf +size 119808 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..3e88e2c86 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b47eb8ef8bd4dc99ad4c6965bcdc07719315e3851801cf7c2e50a7e1a9e1d5b8 +size 38912 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll new file mode 100644 index 000000000..d8fe912e9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0fd7051973a7a53c21fd6f4222dcee9c5abd701aeba9cfadc1d57302d4afa98 +size 933888 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Security.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Security.dll new file mode 100644 index 000000000..1e703b621 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dddc7dc788c2d91583cd5a59cb33cbc9e3dcd15a44654ec97a4e5312057e1fab +size 308224 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..d033390a3 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d10a5850c9a676b691ac248b07235dbe33b49984fb2bc0b0142fb27584a684f +size 13312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..861414124 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a21a6986d03cbf7b13e58f8d7a078df7ee03fe8b253c28dee8eb04a41eaed1e7 +size 141312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..a431a82bb --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60dace8025fa37d1a8112ada8f3e860857530298db56c2bbf427a3a39b812890 +size 214528 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..58217d8ee --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:240a392b274b1001f236062c008db650976742d3b021bc9fc509131ba72bedbd +size 37376 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll new file mode 100644 index 000000000..205e012d9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:367141e8a7b0683218a43cb7007af0c53178b3b64728a378b76bbfb5c70d8668 +size 79360 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll new file mode 100644 index 000000000..6aed36c4e --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbbef0cb9e0d57e38d096027879f3d0c0e18877f207ead9fe8bc937661ce6fe4 +size 1427456 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll new file mode 100644 index 000000000..4162bffe8 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3684d576acd24b707080585b4f1e75f565dbadbb9a37147a6682f028ad10550b +size 47104 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..248a05d01 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b115157bc8139e47eb5b2e0d24c0c25c9971ab61b56b6ef0d839d36ff91f9984 +size 169472 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Transactions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Transactions.dll new file mode 100644 index 000000000..31a179d05 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4cf806987a94916a21e67cfbaf7f43801e3934f3e86302bbecdbba7bb4bda00 +size 34304 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll new file mode 100644 index 000000000..d9a1f59c5 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:255a1ac548667aad9095d1c62b95177ac3337cd9d6b2e45698c3440eeb09829d +size 12800 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..100e11662 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c343612d28c4789b729646b8c2423822cbf0fd62ed9ac17ceb1a31ffd811ccc8 +size 33792 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll new file mode 100644 index 000000000..7bffde2c4 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41950b097714196611281ba6f5022700ee48521507f87730dea245a5fad0e41d +size 69120 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll new file mode 100644 index 000000000..ce66e27bc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2595deafb28ebe010bcdf7afe98d3d0778764d69cf4e8216da61f3b50496cfb +size 745984 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..bdc096f36 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:792457aee4c76de5736342970ff888109d8ad93a0d6714d2e655cd6664069c61 +size 88064 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..ef7baf251 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e2b1e327990f16601370539cd9dfec106f60f4d253b538a7c667cd962f4b384 +size 56320 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll new file mode 100644 index 000000000..b52e15ac1 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed47fe2c89507588c581c541b15cc29898ccd2c91acd3ddd3ad4890a9fdbd78e +size 326144 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll new file mode 100644 index 000000000..1717e4028 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:137ce52a4a40d473fc5a6399cfe3f7a3246564883e9e6632e9fd3ea1864e8336 +size 11264 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll new file mode 100644 index 000000000..3dddb1d7c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab0d5fe0f3fdc32bc9e8845525c961f0760e11f355082d07e2fe71b63cf1eb30 +size 419840 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll new file mode 100644 index 000000000..45cf57928 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:826430dada228195ebf1f89ae62bb436559a467cd42ed439ac128a8f19f7eae9 +size 254976 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..ec9e91bed --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:110c17aaeec51e39c46404d407ddc2676cb177e613ac308f3a19376a2c401afc +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll new file mode 100644 index 000000000..fa12bcf31 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc348e583396e2233e0852e294fd447c586704645e33ad8f07a282dc83d13854 +size 12288 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll new file mode 100644 index 000000000..a0e407ccd --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:294c0bc5d8332e59f1868a2caf7b0efa89f73a9531622362effa29806622f272 +size 787456 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..b8b7f9156 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73241534c0c3cdd58518e8f44c6242560991da8f512ce6b8153fc998970e9079 +size 39424 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..c89c8bfc6 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dec6b96e26d2e9a4a1fb04d538b767ae52e7e6af4f97d2702158b861315e0a9 +size 38400 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll new file mode 100644 index 000000000..22a21998d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87f90aaf716a0ceef7c984b277338998be1fc5b900dbe832df535b3c154dc251 +size 196608 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.dll new file mode 100644 index 000000000..61922d08f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b79ce024e9efdd1cd7d37f76a9c6bb817a28f631b8d9ca81d4ddda15812fbe0 +size 3028992 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..2a070e257 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ba9ddba411040b752a84c2ce491797b2b19034299eaf95fd111f8414232e06d +size 145920 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll new file mode 100644 index 000000000..315200899 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:916cd054c0636fd0807ec0382a1560e01db44f066fd8ca2ad4c4d3ece255f93e +size 2899968 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.dll new file mode 100644 index 000000000..b50adfabf --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dd8b000c13af004af3a053874d5c6841c30191285cb12169666de5e2af83096 +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll new file mode 100644 index 000000000..fca6386e2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70380dbe9bb2f7f5579f53c46b18b1c8ac85b6a0b36113933e26bfaf1aeeb444 +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..990b915ba --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fb47a521d6edbd862a36f20e30c6ed7275a3179bb02a94f79c23c5244e8448f +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll new file mode 100644 index 000000000..08ea70034 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcbf098fc2d8b45fcea56a8201ff87eef64d89619d93eca75f7b861636ddec8b +size 11264 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xaml.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xaml.dll new file mode 100644 index 000000000..2783d9369 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:424fc16dc7a4fad5c73212806b6fe43d49e20c76773e0dca1e076fc7a292e516 +size 188928 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll new file mode 100644 index 000000000..527d2a1d9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f77fa2719801869c15b10054d69aa548138483e154bc9f09e3d97083729f1e5 +size 137216 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll new file mode 100644 index 000000000..45d70b5ae --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f56b44f5f88ed426881eed8694e9d9cca2fc9fe26fd976bcaf39eb78b66faa7 +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.dll new file mode 100644 index 000000000..f760b3b24 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93d2f7ea513070bb935c3bfe3ed4dbab4ba076d200b96d24da4d2ebc40132254 +size 3174400 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.dll new file mode 100644 index 000000000..eaea89586 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a26701ea88189483c5c55726ba3569c095fed4dfa4695d4e1eb83f0cf51c881 +size 2566144 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/WindowsBase.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/WindowsBase.dll new file mode 100644 index 000000000..3b16b367e --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6868231ce3d2f2ab831ced917274c1053d9da8002245b05c8e9353b1d72dd9db +size 161792 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/mscorlib.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/mscorlib.dll new file mode 100644 index 000000000..768c5ace0 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/4.5/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3df2c7f1a3ace2b8984614b66d2c41680c44a259d0b5b4636613be0ee4516158 +size 4494848 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll new file mode 100644 index 000000000..01200aeea --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7908292f952dfb43c613d382804d471099dc214e967d5b9c576d20f1426b670d +size 12288 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll new file mode 100644 index 000000000..71fcc330d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58636d961acd7124632e47dbe76c31e266b941c74a1af6ef614812a40cfb0631 +size 212480 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll new file mode 100644 index 000000000..72d96b0f4 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9eeafad9481db1050c13e1fb323517a8fa38f8e7d92e736dfbbdb81d07efe14 +size 314368 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..160555926 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9892265e9020fe89907ab812c5a5bbac5d552f13e3131296be59f1101343602 +size 258560 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..fff03e9ff --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ca1a6ef39cc2784f35191b9ad56055dbe7d782bc91080f53006af4bda7551d0 +size 84992 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll new file mode 100644 index 000000000..d6227ac98 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f6dede71ccef0bf01ae0bd9c81c9643dda1a1c82291841722184f3c9d999dc8c +size 24064 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll new file mode 100644 index 000000000..db365d4fc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00f5f5c6fd07dcf673d068420d8769593f44b9ec1dae911bea094cc4bdb682d3 +size 122880 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll new file mode 100644 index 000000000..ff7b07a2b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5ac6330d485d61567bde7e8c938c898abd8bf39886f91c2035e5f19dfb3b778 +size 1086464 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..6391b0240 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4fa1f2bddce63019b30b2502ff5560bcf831327a3536d5529d033217194fb350 +size 29696 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll new file mode 100644 index 000000000..5974f6518 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1520112348648a0a739e6cb8c33b4830b805971c28a28f0f98a527b1588d6519 +size 3338240 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll new file mode 100644 index 000000000..a60532ab8 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6b47c88f097deb13c222a41c2d8f28e5043469b2a929dd5f8f4643fd4139f503 +size 652800 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll new file mode 100644 index 000000000..f2accdd2a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e5210222768ba1527ac1969b3ce3315f216a8642876ce82f640f83ce71a9ae4b +size 173056 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll new file mode 100644 index 000000000..e811ed567 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:40607bf6200b75a815989aa2efbeb2565f4a1f13bc2d698b26563f0b6e2460ce +size 418816 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll new file mode 100644 index 000000000..a2da8a705 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db29aa8d934516bf72cdbc872b6d109cc01a205b7724e27dbe4ee1b2210734af +size 56320 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll new file mode 100644 index 000000000..ebd63046f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c7cc52d2fe5c020852ec0595635dd5a30341d98d2b7f66fac694a6d77044c6f +size 2102272 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll.config b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll.config new file mode 100644 index 000000000..c33c1db25 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll.config @@ -0,0 +1,4 @@ + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll new file mode 100644 index 000000000..e0ef53bdf --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:008f2b1b8ebc389a4a59e2f11c4a21b84649c7f47e2a9bdc856c5662ddcf80c1 +size 11264 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..984942ada --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:303b6205b1d759b7f5c0503a7e401da3fd59c38aac7a93084aa9d379c85bc920 +size 61952 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll new file mode 100644 index 000000000..3f294ae19 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5a42c80c4473800bd4faa7a86a20f5f5cac5aa4f9abb1f38375c2947c693f0ca +size 94208 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll new file mode 100644 index 000000000..e5d792384 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c74e44a0455c266fc4a641f6cb7fe13731cac7ef984a8ca90ac54faff759b44b +size 491008 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.config b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.config new file mode 100644 index 000000000..fbd1d8941 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll.config @@ -0,0 +1,5 @@ + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll new file mode 100644 index 000000000..a10dcb17d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:caaaf916eeee6eaf20c3f8d706444a928c94d4e2b71fd48eb421242f91255475 +size 87040 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll new file mode 100644 index 000000000..635a2f78b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53724ebb898911c6da4233704514c2604afdbec11a9c807e31bf82b7558313a1 +size 46592 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..d22bdd7af --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:180a3e041a0261030fa7ca05ba06823000cf455c1367f6a4004b59be3e406767 +size 18432 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll new file mode 100644 index 000000000..e1ea2b78d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b279eea9c15eb42a82f3ae4f0d73b1de46512912638e8f22c943d929692d773f +size 115200 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..56424367c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f72d56255bd489b759dd21ab39fce38a05a74e17c1b812eeda11296e992ab3d +size 17408 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll new file mode 100644 index 000000000..550b8add5 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:91ffe031a24bc0ea3329687fcfaac106f84ab9175abb5b1fc6e0fe610560e85b +size 139776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll new file mode 100644 index 000000000..330f89327 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:568235cb7ad12d348aaeceaa096b994bdf91a0f0fe82922e81756d00267b781a +size 54784 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll new file mode 100644 index 000000000..41b314d50 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5571a40b9f4491e910fe1e8920b22dd06ae1eecc8751339ad29c259282426383 +size 32768 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll new file mode 100644 index 000000000..d7c43d154 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:085868e4b698e55881c8fdcaf6579cccfa24894f3eeb4fc353539d485bcecb9f +size 49152 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll new file mode 100644 index 000000000..c39bf9fe9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2f0fc119551feefe672a3a3bf2c6011e7789c026f1fd00f7d68f2b02982be88e +size 75776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..370af3a67 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:301f258b1ad7ec5c7fb77626d54584c9ee97f61f5e32e18e91df8157d25a35f6 +size 518656 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..f14fe244c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae92b4f84ed4ce8c1063be896c3ed5b47c264014b64fa03a12e1cb0db8f104ad +size 27136 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll new file mode 100644 index 000000000..530c0c8c0 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d77438cf927f8aef02dff89c233fa1507461660518417647d77547676a9ded04 +size 281088 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll new file mode 100644 index 000000000..7b675a90b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:75c950bdc72d4cdd5e792ad79714264d0418b47de3c69b578b5c072898992427 +size 13312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll new file mode 100644 index 000000000..dc333045d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:996ffb6885ee0d5a2ccba34439df1a67bf8016fc05603adf08e42c691bc8eed0 +size 12288 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll new file mode 100644 index 000000000..f4b0cb9fa --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c9679f30c684c16ec6c88a078cd10ad7d5814b72d2a7ce8a144507e2fedae746 +size 119808 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll new file mode 100644 index 000000000..6f017dd6a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9fc263d0b2a584b19237c024ef6c7f0b7ebbf5c9b788faf1beae5b9d13100b06 +size 95744 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll new file mode 100644 index 000000000..0ec7ce0c4 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73848bb977fa46e1bc518c3ef397b8364094dfa84fe4adbbdaba3f324842e8ba +size 5120 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll new file mode 100644 index 000000000..03a75dd66 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e75f52a62e044c40e2cc73daa0d6bf635a3568e091a3288eab1a759506c46d3 +size 28672 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..ff9931d26 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:80f4b79f0ac6cb348dc3bc8d1e1c7ff947620719bc8a3700c8c24f8a869bbee7 +size 7680 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll new file mode 100644 index 000000000..6d3c458a9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b30f026869aa2be2c0a350c0458f39a81dce9aa1f5af172a7205b97f945c1bc4 +size 683008 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..b9b2f253a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:318371120960ce15500798fe61a71c9bd96fa490d9746e942fd6b82eb4fd08a1 +size 9728 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..cca6cdffc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:816347965b0825548cfddef3b7da75f4e6c6fe268965554cadc0ee1456cd87ae +size 22528 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll new file mode 100644 index 000000000..48188c63d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:145ac53ae98c80ef2a71711877f440c87112b545fd3bbee10508056f6c251c92 +size 243200 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..58a658ee2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:64eaa2ed52011844537552a3681337081bfd2779e32029ade82c389873289bc7 +size 9216 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..b30d7c6cd --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5199e3009306940807d88912ffda5c72359ade4aac5134a5bca29573b162101 +size 9728 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..d3c27798d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0f55a6654f734c5c4a9099a62c12b6138e9f4aca4f7717ab3ed2e67e21a292e9 +size 12800 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll new file mode 100644 index 000000000..3d087600f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ed7f7b821c9c09b3c51d9ea9fa5962961c8d022d61d4f283d3373071d43305 +size 13312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll new file mode 100644 index 000000000..b8a99178b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d48e180e328d20ee492f5059f646d6d7d42bc64ff3e24d612fd0bd8295fbfaa +size 72192 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..b8ce6d6d2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b5c58a203c458c7439e91b15289ebf9670f0da0ff17381f4199958cbed88e4b6 +size 107008 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll new file mode 100644 index 000000000..37c6f3a83 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:928ffdef7e659f2500f2b8c1da5d6923f0adf1edc46240572c7495a5954df5cf +size 119808 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..3e88e2c86 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b47eb8ef8bd4dc99ad4c6965bcdc07719315e3851801cf7c2e50a7e1a9e1d5b8 +size 38912 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll new file mode 100644 index 000000000..d8fe912e9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0fd7051973a7a53c21fd6f4222dcee9c5abd701aeba9cfadc1d57302d4afa98 +size 933888 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll new file mode 100644 index 000000000..1e703b621 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dddc7dc788c2d91583cd5a59cb33cbc9e3dcd15a44654ec97a4e5312057e1fab +size 308224 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..d033390a3 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d10a5850c9a676b691ac248b07235dbe33b49984fb2bc0b0142fb27584a684f +size 13312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..861414124 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a21a6986d03cbf7b13e58f8d7a078df7ee03fe8b253c28dee8eb04a41eaed1e7 +size 141312 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..a431a82bb --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60dace8025fa37d1a8112ada8f3e860857530298db56c2bbf427a3a39b812890 +size 214528 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..58217d8ee --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:240a392b274b1001f236062c008db650976742d3b021bc9fc509131ba72bedbd +size 37376 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll new file mode 100644 index 000000000..205e012d9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:367141e8a7b0683218a43cb7007af0c53178b3b64728a378b76bbfb5c70d8668 +size 79360 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll new file mode 100644 index 000000000..6aed36c4e --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dbbef0cb9e0d57e38d096027879f3d0c0e18877f207ead9fe8bc937661ce6fe4 +size 1427456 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll new file mode 100644 index 000000000..4162bffe8 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3684d576acd24b707080585b4f1e75f565dbadbb9a37147a6682f028ad10550b +size 47104 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..248a05d01 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b115157bc8139e47eb5b2e0d24c0c25c9971ab61b56b6ef0d839d36ff91f9984 +size 169472 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll new file mode 100644 index 000000000..31a179d05 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c4cf806987a94916a21e67cfbaf7f43801e3934f3e86302bbecdbba7bb4bda00 +size 34304 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll new file mode 100644 index 000000000..d9a1f59c5 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:255a1ac548667aad9095d1c62b95177ac3337cd9d6b2e45698c3440eeb09829d +size 12800 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..100e11662 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c343612d28c4789b729646b8c2423822cbf0fd62ed9ac17ceb1a31ffd811ccc8 +size 33792 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll new file mode 100644 index 000000000..7bffde2c4 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:41950b097714196611281ba6f5022700ee48521507f87730dea245a5fad0e41d +size 69120 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll new file mode 100644 index 000000000..ce66e27bc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2595deafb28ebe010bcdf7afe98d3d0778764d69cf4e8216da61f3b50496cfb +size 745984 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..bdc096f36 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:792457aee4c76de5736342970ff888109d8ad93a0d6714d2e655cd6664069c61 +size 88064 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..ef7baf251 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e2b1e327990f16601370539cd9dfec106f60f4d253b538a7c667cd962f4b384 +size 56320 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll new file mode 100644 index 000000000..b52e15ac1 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ed47fe2c89507588c581c541b15cc29898ccd2c91acd3ddd3ad4890a9fdbd78e +size 326144 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll new file mode 100644 index 000000000..1717e4028 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:137ce52a4a40d473fc5a6399cfe3f7a3246564883e9e6632e9fd3ea1864e8336 +size 11264 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll new file mode 100644 index 000000000..3dddb1d7c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab0d5fe0f3fdc32bc9e8845525c961f0760e11f355082d07e2fe71b63cf1eb30 +size 419840 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll new file mode 100644 index 000000000..45cf57928 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:826430dada228195ebf1f89ae62bb436559a467cd42ed439ac128a8f19f7eae9 +size 254976 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..ec9e91bed --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:110c17aaeec51e39c46404d407ddc2676cb177e613ac308f3a19376a2c401afc +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll new file mode 100644 index 000000000..fa12bcf31 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dc348e583396e2233e0852e294fd447c586704645e33ad8f07a282dc83d13854 +size 12288 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll new file mode 100644 index 000000000..a0e407ccd --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:294c0bc5d8332e59f1868a2caf7b0efa89f73a9531622362effa29806622f272 +size 787456 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..b8b7f9156 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:73241534c0c3cdd58518e8f44c6242560991da8f512ce6b8153fc998970e9079 +size 39424 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..c89c8bfc6 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7dec6b96e26d2e9a4a1fb04d538b767ae52e7e6af4f97d2702158b861315e0a9 +size 38400 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll new file mode 100644 index 000000000..22a21998d --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87f90aaf716a0ceef7c984b277338998be1fc5b900dbe832df535b3c154dc251 +size 196608 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll new file mode 100644 index 000000000..61922d08f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5b79ce024e9efdd1cd7d37f76a9c6bb817a28f631b8d9ca81d4ddda15812fbe0 +size 3028992 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..2a070e257 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ba9ddba411040b752a84c2ce491797b2b19034299eaf95fd111f8414232e06d +size 145920 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll new file mode 100644 index 000000000..315200899 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:916cd054c0636fd0807ec0382a1560e01db44f066fd8ca2ad4c4d3ece255f93e +size 2899968 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.config b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.config new file mode 100644 index 000000000..54c6fd39c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll.config @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll new file mode 100644 index 000000000..b50adfabf --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9dd8b000c13af004af3a053874d5c6841c30191285cb12169666de5e2af83096 +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll new file mode 100644 index 000000000..fca6386e2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:70380dbe9bb2f7f5579f53c46b18b1c8ac85b6a0b36113933e26bfaf1aeeb444 +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..990b915ba --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5fb47a521d6edbd862a36f20e30c6ed7275a3179bb02a94f79c23c5244e8448f +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll new file mode 100644 index 000000000..08ea70034 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcbf098fc2d8b45fcea56a8201ff87eef64d89619d93eca75f7b861636ddec8b +size 11264 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll new file mode 100644 index 000000000..2783d9369 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:424fc16dc7a4fad5c73212806b6fe43d49e20c76773e0dca1e076fc7a292e516 +size 188928 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll new file mode 100644 index 000000000..527d2a1d9 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f77fa2719801869c15b10054d69aa548138483e154bc9f09e3d97083729f1e5 +size 137216 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll new file mode 100644 index 000000000..45d70b5ae --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7f56b44f5f88ed426881eed8694e9d9cca2fc9fe26fd976bcaf39eb78b66faa7 +size 11776 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll new file mode 100644 index 000000000..f760b3b24 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:93d2f7ea513070bb935c3bfe3ed4dbab4ba076d200b96d24da4d2ebc40132254 +size 3174400 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll new file mode 100644 index 000000000..eaea89586 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a26701ea88189483c5c55726ba3569c095fed4dfa4695d4e1eb83f0cf51c881 +size 2566144 diff --git a/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll new file mode 100644 index 000000000..3b16b367e --- /dev/null +++ b/Source/Platforms/Linux/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6868231ce3d2f2ab831ced917274c1053d9da8002245b05c8e9353b1d72dd9db +size 161792 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCharacterKinematic_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCharacterKinematic_static_64.a new file mode 100644 index 000000000..c0dad1db7 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCharacterKinematic_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00b720d5334a37b789279ef6b722ae7caab196e81c7aa87c631d42f10a1b00ad +size 275100 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCommon_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCommon_static_64.a new file mode 100644 index 000000000..f375e25b2 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCommon_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:06746bc2ab705240b02acb57343c04d300ab631764284e6d739ad18f68e9c5e8 +size 3427120 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCooking_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCooking_static_64.a new file mode 100644 index 000000000..1d53a5a11 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXCooking_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:763898108b13a0b9a893116fabf9b19fd965cff562b53cfb2efa5065e260e042 +size 472564 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXExtensions_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXExtensions_static_64.a new file mode 100644 index 000000000..ca3082211 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXExtensions_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a59c674702234d870023cff9116d8efb28a46909fda667131b86c673ef4d77f9 +size 2695786 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXFoundation_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXFoundation_static_64.a new file mode 100644 index 000000000..32454526c --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXFoundation_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8d67b436ca3aae026cab321a7903d9129edfaee0e505445daf177c291bebd93c +size 124634 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXPvdSDK_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXPvdSDK_static_64.a new file mode 100644 index 000000000..6bdc9ed2a --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXPvdSDK_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:57ed89feefb710a61a1cf7febdfa841702b49a786e3fb9dc4cb56e6f8b14565d +size 522950 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXVehicle_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXVehicle_static_64.a new file mode 100644 index 000000000..76f988461 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysXVehicle_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3fa5897e9bdd806ba15c372caed3d4c2e095305584af19a8a4ad159010159c63 +size 1180008 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysX_static_64.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysX_static_64.a new file mode 100644 index 000000000..33641cf8b --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libPhysX_static_64.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:87c0afbb01ce9d8fba8073e16c757c7d23b422d3298c481ee1ebe1fd5398c5c7 +size 6304412 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libfreetype.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libfreetype.a new file mode 100644 index 000000000..52e631090 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libfreetype.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:46e0beb3b05ffc7754f70f22153ee0315132391445479ae5999846e7d61f5b30 +size 1125014 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libmono-2.0.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libmono-2.0.a new file mode 100644 index 000000000..ed9d8877f --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libmono-2.0.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:509dd87a59fd583e55e32451e84e8495be207f322b69447c0f06ead8380e50d7 +size 37135316 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libogg.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libogg.a new file mode 100644 index 000000000..35099c593 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libogg.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ece5eda52b5ad2a5cea77ccfb61dee74be12b854a854b6cc6573acf0e3338f8 +size 26242 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libopenal.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libopenal.a new file mode 100644 index 000000000..6ed74a6c1 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libopenal.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:27529511e9802337562b22725f8d0c67348151f1a94badb80890f03b2ced2930 +size 1516746 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbis.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbis.a new file mode 100644 index 000000000..0ed4d5041 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbis.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5f695cabc25c92a031df9ec22adca98ffbbf40bf41b471ca423bd3b9682b329f +size 294014 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbisenc.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbisenc.a new file mode 100644 index 000000000..5deeb53dc --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbisenc.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a52819ed4eec39e1e22fbb749e1c4ca2795132bf8d6818bb05bfc1bea27640a +size 778358 diff --git a/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbisfile.a b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbisfile.a new file mode 100644 index 000000000..fd434bb06 --- /dev/null +++ b/Source/Platforms/Linux/Binaries/ThirdParty/x64/libvorbisfile.a @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ae8e96a6b9b9d8d2e317870124f74a31a88ad96fb51dc7f1f0ea8745473e0a5f +size 37628 diff --git a/Source/Platforms/UWP/.gitignore b/Source/Platforms/UWP/.gitignore new file mode 100644 index 000000000..c07cf8bfe --- /dev/null +++ b/Source/Platforms/UWP/.gitignore @@ -0,0 +1,2 @@ +!Binaries/ +!*.* diff --git a/Source/Platforms/UWP/Binaries/.gitignore b/Source/Platforms/UWP/Binaries/.gitignore new file mode 100644 index 000000000..977f8d0c2 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/.gitignore @@ -0,0 +1,2 @@ +# Ignore build binaries +/Game/ \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/App.cs b/Source/Platforms/UWP/Binaries/App.cs new file mode 100644 index 000000000..c4dda53e5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/App.cs @@ -0,0 +1,54 @@ +using System; +using Windows.ApplicationModel.Core; +using Windows.UI.Core; +using FlaxEngine; + +namespace {0} +{{ + public class App : IFrameworkView, IFrameworkViewSource + {{ + private Game _game; + + [MTAThread] + static void Main(string[] args) + {{ + var app = new App(); + CoreApplication.Run(app); + }} + + public App() + {{ + InitUWP.SetupDisplay(); + + _game = new Game(); + }} + + public virtual void Initialize(CoreApplicationView applicationView) + {{ + _game.Initialize(applicationView); + }} + + public void SetWindow(CoreWindow window) + {{ + _game.SetWindow(window); + }} + + public void Load(string entryPoint) + {{ + }} + + public void Run() + {{ + _game.Run(); + }} + + public void Uninitialize() + {{ + }} + + public IFrameworkView CreateView() + {{ + return this; + }} + }} +}} diff --git a/Source/Platforms/UWP/Binaries/AssemblyInfo.cs b/Source/Platforms/UWP/Binaries/AssemblyInfo.cs new file mode 100644 index 000000000..0d476743b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("{0}")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("{1}")] +[assembly: AssemblyProduct("{0}")] +[assembly: AssemblyCopyright("Copyright © {1} {2}")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] diff --git a/Source/Platforms/UWP/Binaries/Assets/LargeTile.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/LargeTile.scale-100.png new file mode 100644 index 000000000..e0b19cf2b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/LargeTile.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a130daac93f16acb167e8ee5c30b91e2bbe4e55888016bb7b80284a8c100be4 +size 9493 diff --git a/Source/Platforms/UWP/Binaries/Assets/SmallTile.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/SmallTile.scale-100.png new file mode 100644 index 000000000..75b9656fe --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/SmallTile.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4b7a651d8ad02403846808913b795c9bbda138151a3cffabb1433caecca01dd +size 1189 diff --git a/Source/Platforms/UWP/Binaries/Assets/SplashScreen.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/SplashScreen.scale-100.png new file mode 100644 index 000000000..b123a74d7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/SplashScreen.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c79021ad84286058f1966e22ed29fc83f56de18749fb98b97d5c9900ff6034af +size 12039 diff --git a/Source/Platforms/UWP/Binaries/Assets/Square150x150Logo.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/Square150x150Logo.scale-100.png new file mode 100644 index 000000000..866996aeb --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/Square150x150Logo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:020804fa72a23df62780ea91a1c537b65e57b0ab8061ff70862548e2fa24976d +size 3140 diff --git a/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.altform-unplated_targetsize-16.png b/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.altform-unplated_targetsize-16.png new file mode 100644 index 000000000..15bd8334e --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.altform-unplated_targetsize-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ef2ed81e83768bc3f1329344f43793d7b8f9ad924f4fa2d1b3b7ac462ec072 +size 224 diff --git a/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.scale-100.png new file mode 100644 index 000000000..b31ad4e24 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b47f81fc190683b47cd6bc6a075d34fc2ffa2b78654b53fc60cffc1599e579bb +size 637 diff --git a/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.targetsize-16.png b/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.targetsize-16.png new file mode 100644 index 000000000..15bd8334e --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/Square44x44Logo.targetsize-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ef2ed81e83768bc3f1329344f43793d7b8f9ad924f4fa2d1b3b7ac462ec072 +size 224 diff --git a/Source/Platforms/UWP/Binaries/Assets/StoreLogo.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/StoreLogo.scale-100.png new file mode 100644 index 000000000..5efa8d894 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/StoreLogo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcd2546a38e588aa533a3668777e0272a7046ce88b6003ea48f81c1fa8d15823 +size 846 diff --git a/Source/Platforms/UWP/Binaries/Assets/Wide310x150Logo.scale-100.png b/Source/Platforms/UWP/Binaries/Assets/Wide310x150Logo.scale-100.png new file mode 100644 index 000000000..6211f30ae --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Assets/Wide310x150Logo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e5db5b5b3c7174d00e153f30a9cfae4ec4c623e9b7e3847d3cc3932193083f1 +size 4014 diff --git a/Source/Platforms/UWP/Binaries/Default.rd.xml b/Source/Platforms/UWP/Binaries/Default.rd.xml new file mode 100644 index 000000000..af00722cd --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/FlaxGenerated.cs b/Source/Platforms/UWP/Binaries/FlaxGenerated.cs new file mode 100644 index 000000000..665633e1e --- /dev/null +++ b/Source/Platforms/UWP/Binaries/FlaxGenerated.cs @@ -0,0 +1,16 @@ +using Windows.Graphics.Display; +using Windows.UI.ViewManagement; + +// DO NOT EDIT THIS FILE! IT HAS BEEN AUTO GENERATED! + +namespace FlaxEngine +{{ + internal static class InitUWP + {{ + public static void SetupDisplay() + {{ + DisplayInformation.AutoRotationPreferences = {0}; + ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.{1}; + }} + }} +}} diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/machine.config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/machine.config new file mode 100644 index 000000000..2577c81dd --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/machine.config @@ -0,0 +1,280 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/settings.map b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/settings.map new file mode 100644 index 000000000..9a52ccc02 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/web.config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/web.config new file mode 100644 index 000000000..e1428f8c3 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/2.0/web.config @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/machine.config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/machine.config new file mode 100644 index 000000000..f3b71c43c --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/machine.config @@ -0,0 +1,307 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/settings.map b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/web.config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/web.config new file mode 100644 index 000000000..2a7dfd2ed --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.0/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/machine.config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/machine.config new file mode 100644 index 000000000..455709536 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/machine.config @@ -0,0 +1,310 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/settings.map b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/web.config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/web.config new file mode 100644 index 000000000..324c529f0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/4.5/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/browscap.ini b/Source/Platforms/UWP/Binaries/Mono/etc/mono/browscap.ini new file mode 100644 index 000000000..1267e1deb --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/browscap.ini @@ -0,0 +1,16979 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT + +[GJK_Browscap_Version] +Version=4476 +Released=Wed, 17 Jun 2009 06:30:21 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser=DefaultProperties +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser=Ask +Frames=true +Tables=true +Crawler=true + +[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser=Teoma + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser=AskJeeves + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser=Baidu +Frames=true +Tables=true +Crawler=true + +[BaiduImageSpider*] +Parent=Baidu +Browser=BaiduImageSpider + +[Baiduspider*] +Parent=Baidu +Browser=BaiDu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser=Google +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot-Mobile +Frames=false +IFrames=false +Tables=false + +[*Google Wireless Transcoder*] +Parent=Google +Browser=Google Wireless Transcoder + +[AdsBot-Google (?http://www.google.com/adsbot.html)] +Parent=Google +Browser=AdsBot-Google + +[Feedfetcher-Google-iGoogleGadgets;*] +Parent=Google +Browser=iGoogleGadgets +isBanned=true +isSyndicationReader=true + +[Feedfetcher-Google;*] +Parent=Google +Browser=Feedfetcher-Google +isBanned=true +isSyndicationReader=true + +[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] +Parent=Google +Browser=Google OpenSocial + +[Google-Site-Verification/1.0] +Parent=Google +Browser=Google-Site-Verification + +[Google-Sitemaps/*] +Parent=Google +Browser=Google-Sitemaps + +[Googlebot-Image/*] +Parent=Google +Browser=Googlebot-Image +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser=googlebot-urlconsole + +[Googlebot-Video/1.0] +Parent=Google +Browser=Google-Video + +[Googlebot/2.1 (?http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/Test*] +Parent=Google +Browser=Googlebot/Test + +[gsa-crawler*] +Parent=Google +Browser=Google Search Appliance +isBanned=true + +[Mediapartners-Google*] +Parent=Google +Browser=Mediapartners-Google + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser=Google Desktop + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser=Google Toolbar +isBanned=true + +[Mozilla/5.0 (compatible; Google Keyword Tool;*)] +Parent=Google +Browser=Google Keyword Tool + +[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] +Parent=Google +Browser=Google Webmaster Tools + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser=Inktomi +Frames=true +Tables=true +Crawler=true + +[* (compatible;YahooSeeker/M1A1-R2D2; *)] +Parent=Inktomi +Browser=YahooSeeker-Mobile +Frames=false +Tables=false + +[Mozilla/4.0] +Parent=Inktomi + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser=Yahoo! RobotStudy +isBanned=true + +[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMC + +[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMF + +[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] +Parent=Inktomi +Browser=Y!J-AGENT/BMI + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Directory Engine + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser=Yahoo! Slurp China + +[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp + +[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] +Parent=Inktomi +Browser=Yahoo! Verifier +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser=Slurp/cat + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] +Parent=Inktomi +Browser=Yahoo-MMCrawler +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Scooter/*] +Parent=Inktomi +Browser=Scooter + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser=Scooter/3.3Y!CrawlX +Version=3.3 +MajorVer=3 +MinorVer=3 + +[slurp] +Parent=Inktomi +Browser=slurp + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser=Y!J-BSC +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser=Y!J-SRD +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser=Yahoo Mindset + +[Yahoo Pipes*] +Parent=Inktomi +Browser=Yahoo Pipes + +[Yahoo! Mindset] +Parent=Inktomi +Browser=Yahoo! Mindset + +[Yahoo! Slurp/Site Explorer] +Parent=Inktomi +Browser=Yahoo! Site Explorer + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser=Yahoo-Blogs + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser=Yahoo-MMAudVid + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser=Yahoo-MMCrawler +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser=YahooFeedSeeker +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser=YahooSeeker +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser=YahooSeeker/CafeKelsa + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser=YahooVideoSearch + +[YahooYSMcm*] +Parent=Inktomi +Browser=YahooYSMcm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser=MSN +Frames=true +Tables=true +Crawler=true + +[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=adidxbot + +[librabot/1.0 (*)] +Parent=MSN +Browser=librabot + +[llssbot/1.0] +Parent=MSN +Browser=llssbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSMOBOT/1.1*] +Parent=MSN +Browser=msnbot-mobile +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-Academic/1.0*] +Parent=MSN +Browser=MSNBot-Academic +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.0*] +Parent=MSN +Browser=msnbot-media +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.1*] +Parent=MSN +Browser=msnbot-media +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-News/1.0*] +Parent=MSN +Browser=MSNBot-News +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSNBot-NewsBlogs/1.0*] +Parent=MSN +Browser=MSNBot-NewsBlogs +Version=1 +MajorVer=1 +MinorVer=0 + +[msnbot-products] +Parent=MSN +Browser=msnbot-products + +[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=msnbot-webmaster tools + +[msnbot/1.0*] +Parent=MSN +Browser=msnbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.1*] +Parent=MSN +Browser=msnbot +Version=1.1 +MajorVer=1 +MinorVer=1 + +[msnbot/2.0b*] +Parent=MSN +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[MSR-ISRCCrawler] +Parent=MSN +Browser=MSR-ISRCCrawler + +[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=renlifangbot + +[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] +Parent=MSN +Browser=msnbot-mobile + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser=Yahoo +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser=Y!J + +[Mozilla/5.0 (Yahoo-Test/4.0*)] +Parent=Yahoo +Browser=Yahoo-Test +Version=4.0 +MajorVer=4 +MinorVer=0 + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser=Yahoo! Media +isBanned=true + +[My Browser] +Parent=Yahoo +Browser=Yahoo! My Browser + +[Y!OASIS/*] +Parent=Yahoo +Browser=Y!OASIS +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser=YahooYSMcm +Version=2.0 +MajorVer=2 +MinorVer=0 +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser=YRL_ODP_CRAWLER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser=Yandex +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] +Parent=Yandex +Browser=VisualParser +isBanned=true + +[YaDirectBot/*] +Parent=Yandex +Browser=YaDirectBot + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser=YandexBlog +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser=YandexSomething +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web + +[Best of the Web] +Parent=DefaultProperties +Browser=Best of the Web +Frames=true +Tables=true + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Feed Grabber +isSyndicationReader=true +Crawler=false + +[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Spider +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser=Boitho +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser=boitho.com-dc + +[boitho.com-robot/*] +Parent=Boitho +Browser=boitho.com-robot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser=Convera +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser=ConveraCrawler + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser=ConveraMultiMediaCrawler +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser=CrawlConvera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot + +[DotBot] +Parent=DefaultProperties +Browser=DotBot +Frames=true +Tables=true +isBanned=true +Crawler=true + +[DotBot/* (http://www.dotnetdotcom.org/*)] +Parent=DotBot + +[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] +Parent=DotBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb + +[Entireweb] +Parent=DefaultProperties +Browser=Entireweb +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] +Parent=Entireweb + +[Speedy Spider (*Beta/*)] +Parent=Entireweb + +[Speedy?Spider?(http://www.entireweb.com*)] +Parent=Entireweb + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser=Envolk +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser=Exalead +Frames=true +Tables=true +isBanned=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser=Exabot-Images +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot-Test/*] +Parent=Exalead +Browser=Exabot-Test + +[Exabot/2.0] +Parent=Exalead +Browser=Exabot + +[Exabot/3.0] +Parent=Exalead +Browser=Exabot +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser=Exalead NG +isBanned=true + +[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] +Parent=Exalead +Browser=Exabot-Images + +[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] +Parent=Exalead +Browser=Exabot/BiggerBetter/tests + +[Mozilla/5.0 (compatible; Exabot/3.0;*)] +Parent=Exalead +Browser=Exabot +isBanned=false + +[Mozilla/5.0 (compatible; NGBot/*)] +Parent=Exalead + +[ng/*] +Parent=Exalead +Browser=Exalead Previewer +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser=Fast/AllTheWeb +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST Enterprise Crawler + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser=FAST Data Search Document Retriever + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser=FAST MetaWeb Crawler + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/FirstPage + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Fresh + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Multimedia + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser=FastSearch Web Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot + +[Gigabot] +Parent=DefaultProperties +Browser=Gigabot +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Gigabot*] +Parent=Gigabot + +[GigabotSiteSearch/*] +Parent=Gigabot +Browser=GigabotSiteSearch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser=Ilse +Frames=true +Tables=true +Crawler=true + +[IlseBot/*] +Parent=Ilse + +[INGRID/?.0*] +Parent=Ilse +Browser=Ilse + +[Mozilla/3.0 (INGRID/*] +Parent=Ilse +Browser=Ilse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project + +[iVia Project] +Parent=DefaultProperties +Browser=iVia Project +Frames=true +IFrames=true +Tables=true +Crawler=true + +[DataFountains/DMOZ Downloader*] +Parent=iVia Project +Browser=DataFountains/DMOZ Downloader +isBanned=true + +[DataFountains/DMOZ Feature Vector Corpus Creator*] +Parent=iVia Project +Browser=DataFountains/DMOZ Feature Vector Corpus + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser=Jayde Online +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser=ExactSeek Crawler + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser=exactseek-pagereaper +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser=exactseek.com + +[Jayde Crawler*] +Parent=Jayde Online +Browser=Jayde Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser=Lycos +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser=Lycos + +[Lycos-Proxy] +Parent=Lycos +Browser=Lycos-Proxy + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser=Lycos-Spider_(modspider) + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser=Lycos-Spider_(T-Rex) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser=Naver +isBanned=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver Cowbot + +[Mozilla/4.0 (compatible; NaverBot/*; *)] +Parent=Naver + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser=Naver NaverBot + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver NHN Corp + +[Yeti/*] +Parent=Naver +Browser=Yeti + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap + +[Snap] +Parent=DefaultProperties +Browser=Snap +isBanned=true +Crawler=true + +[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] +Parent=Snap + +[Snapbot/*] +Parent=Snap + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou + +[Sogou] +Parent=DefaultProperties +Browser=Sogou +Frames=true +Tables=true +isBanned=true +Crawler=true + +[shaboyi spider] +Parent=Sogou +Browser=Sogou/Shaboyi Spider + +[Sogou develop spider/*] +Parent=Sogou +Browser=Sogou Develop Spider + +[Sogou head spider*] +Parent=Sogou +Browser=Sogou/HEAD Spider + +[sogou js robot(*)] +Parent=Sogou + +[Sogou Orion spider/*] +Parent=Sogou +Browser=Sogou Orion spider + +[Sogou Pic Agent] +Parent=Sogou +Browser=Sogou/Image Crawler + +[Sogou Pic Spider] +Parent=Sogou +Browser=Sogou Pic Spider + +[Sogou Push Spider/*] +Parent=Sogou +Browser=Sogou Push Spider + +[sogou spider] +Parent=Sogou +Browser=Sogou/Spider + +[sogou web spider*] +Parent=Sogou +Browser=sogou web spider + +[Sogou-Test-Spider/*] +Parent=Sogou +Browser=Sogou-Test-Spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot + +[YodaoBot] +Parent=DefaultProperties +Browser=YodaoBot +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] +Parent=YodaoBot +Browser=YodaoBot-Image + +[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[YodaoBot/1.* (*)] +Parent=YodaoBot + +[Best Whois (http://www.bestwhois.net/)] +Parent=DNS Tools +Browser=Best Whois + +[DNSGroup/*] +Parent=DNS Tools +Browser=DNS Group Crawler + +[NG-Search/*] +Parent=Exalead +Browser=NG-SearchBot + +[TouchStone] +Parent=Feeds Syndicators +Browser=TouchStone +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser=General Crawlers +Crawler=true + +[A .NET Web Crawler] +Parent=General Crawlers +isBanned=true + +[BabalooSpider/1.*] +Parent=General Crawlers +Browser=BabalooSpider + +[BilgiBot/*] +Parent=General Crawlers +Browser=BilgiBot +isBanned=true + +[bot/* (bot; *bot@bot.bot)] +Parent=General Crawlers +Browser=bot +isBanned=true + +[CyberPatrol*] +Parent=General Crawlers +Browser=CyberPatrol +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser=Cynthia +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ddetailsbot (http://www.displaydetails.com)] +Parent=General Crawlers +Browser=ddetailsbot + +[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] +Parent=General Crawlers +Browser=DomainCrawler + +[DomainsBotBot/1.*] +Parent=General Crawlers +Browser=DomainsBotBot +isBanned=true + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser=DomainsDB + +[Drupal (*)] +Parent=General Crawlers +Browser=Drupal + +[Dumbot (version *)*] +Parent=General Crawlers +Browser=Dumbfind + +[EuripBot/*] +Parent=General Crawlers +Browser=Europe Internet Portal + +[eventax/*] +Parent=General Crawlers +Browser=eventax + +[FANGCrawl/*] +Parent=General Crawlers +Browser=Safe-t.net Web Filtering Service +isBanned=true + +[favorstarbot/*] +Parent=General Crawlers +Browser=favorstarbot +isBanned=true + +[FollowSite.com (*)] +Parent=General Crawlers +Browser=FollowSite +isBanned=true + +[Gaisbot*] +Parent=General Crawlers +Browser=Gaisbot + +[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] +Parent=General Crawlers +Browser=Healthbot +isBanned=true + +[hitcrawler_0.*] +Parent=General Crawlers +Browser=hitcrawler +isBanned=true + +[htdig/*] +Parent=General Crawlers +Browser=ht://Dig + +[http://hilfe.acont.de/bot.html ACONTBOT] +Parent=General Crawlers +Browser=ACONTBOT +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser=Omea Pro + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser=KakleBot + +[KBeeBot/0.*] +Parent=General Crawlers +Browser=KBeeBot +isBanned=true + +[Keyword Density/*] +Parent=General Crawlers +Browser=Keyword Density + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser=LetsCrawl.com +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser=Lincoln State Web Browser +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser=Links4US-Crawler +isBanned=true + +[Lorkyll *.* -- lorkyll@444.net] +Parent=General Crawlers +Browser=Lorkyll +isBanned=true + +[Lsearch/sondeur] +Parent=General Crawlers +Browser=Lsearch/sondeur +isBanned=true + +[LucidMedia ClickSense/4.?] +Parent=General Crawlers +Browser=LucidMedia-ClickSense +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser=MapoftheInternet +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser=MedHunt +Version=0.3 +MajorVer=0 +MinorVer=3 + +[masidani_bot_v0.6*] +Parent=General Crawlers +Browser=masidani_bot + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser=Metaspinner/0.01 +Version=0.01 +MajorVer=0 +MinorVer=01 + +[metatagsdir/*] +Parent=General Crawlers +Browser=metatagsdir +isBanned=true + +[Microsoft Windows Network Diagnostics] +Parent=General Crawlers +Browser=Microsoft Windows Network Diagnostics +isBanned=true + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser=Miva + +[moget/*] +Parent=General Crawlers +Browser=Goo + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser=Mozdex + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser=WebCapture + +[Mozilla/4.0 (compatible; DepSpid/*)] +Parent=General Crawlers +Browser=DepSpid + +[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] +Parent=General Crawlers +Browser=AVG + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser=Vonna.com +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser=MyFamilyBot + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser=N-Stealth + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Spider; Linux)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Win32)] +Parent=General Crawlers +Browser=Unknown Crawler +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +isBanned=true + +[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] +Parent=General Crawlers +Browser=Gnomit +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser=AboutUsBot +isBanned=true + +[Mozilla/5.0 (compatible; BuzzRankingBot/*)] +Parent=General Crawlers +Browser=BuzzRankingBot +isBanned=true + +[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] +Parent=General Crawlers +Browser=Diffbot + +[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] +Parent=General Crawlers +Browser=FirstSearchBot + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser=Healthdash + +[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] +Parent=General Crawlers +Browser=JadynAveBot +isBanned=true + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser=Kyluka + +[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] +Parent=General Crawlers +Browser=MJ12bot +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] +Parent=General Crawlers +Browser=Europe Web Archive + +[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] +Parent=General Crawlers +Browser=Seznam screenshot-generator +isBanned=true + +[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] +Parent=General Crawlers +Browser=Twingly Recon + +[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] +Parent=General Crawlers +Browser=UnWrap + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser=Vermut + +[Mozilla/5.0 (compatible; Webbot/*)] +Parent=General Crawlers +Browser=Webbot.ru +isBanned=true + +[n4p_bot*] +Parent=General Crawlers +Browser=n4p_bot + +[nabot*] +Parent=General Crawlers +Browser=Nabot + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser=NetCarta_WebMapper +isBanned=true + +[NetID.com Bot*] +Parent=General Crawlers +Browser=NetID.com Bot +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser=neTVision + +[NextopiaBOT*] +Parent=General Crawlers +Browser=NextopiaBOT + +[nicebot] +Parent=General Crawlers +Browser=nicebot +isBanned=true + +[niXXieBot?Foster*] +Parent=General Crawlers +Browser=niXXiebot-Foster + +[Nozilla/P.N (Just for IDS woring)] +Parent=General Crawlers +Browser=Nozilla/P.N +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser=Nudelsalat +isBanned=true + +[NV32ts] +Parent=General Crawlers +Browser=NV32ts +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser=Ocelli + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser=OpenTaggerBot + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser=Oracle Enterprise Search +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser=Oracle Ultra Search + +[Pajaczek/*] +Parent=General Crawlers +Browser=Pajaczek +isBanned=true + +[panscient.com] +Parent=General Crawlers +Browser=panscient.com +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser=Patwebbot + +[PDFBot (crawler@pdfind.com)] +Parent=General Crawlers +Browser=PDFBot + +[Pete-Spider/1.*] +Parent=General Crawlers +Browser=Pete-Spider +isBanned=true + +[PhpDig/*] +Parent=General Crawlers +Browser=PhpDig + +[PlantyNet_WebRobot*] +Parent=General Crawlers +Browser=PlantyNet +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt + +[PluckItCrawler/1.0 (*)] +Parent=General Crawlers +isMobileDevice=true + +[PMAFind] +Parent=General Crawlers +Browser=PMAFind +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser=Poodle Predictor + +[QuickFinder Crawler] +Parent=General Crawlers +Browser=QuickFinder +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser=Radiation Retriever +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser=RedCarpet +isBanned=true + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser=RixBot + +[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] +Parent=General Crawlers +Browser=TinyURL + +[SBIder/*] +Parent=General Crawlers +Browser=SiteSell + +[ScollSpider/2.*] +Parent=General Crawlers +Browser=ScollSpider +isBanned=true + +[Search Fst] +Parent=General Crawlers +Browser=Search Fst + +[searchbot admin@google.com] +Parent=General Crawlers +Browser=searchbot +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser=LookSeek +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser=Semantic Discovery + +[SeznamBot/*] +Parent=General Crawlers +Browser=SeznamBot +isBanned=true + +[Shelob (shelob@gmx.net)] +Parent=General Crawlers +Browser=Shelob +isBanned=true + +[shelob v1.*] +Parent=General Crawlers +Browser=shelob +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser=ShopWiki +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser=ShowXML +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser=Internetseer + +[SMBot/*] +Parent=General Crawlers +Browser=SMBot + +[sohu*] +Parent=General Crawlers +Browser=sohu-search +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser=SpankBot +isBanned=true + +[spider (tspyyp@tom.com)] +Parent=General Crawlers +Browser=spider (tspyyp@tom.com) +isBanned=true + +[Sunrise/0.*] +Parent=General Crawlers +Browser=Sunrise +isBanned=true + +[Superpages URL Verification Engine] +Parent=General Crawlers +Browser=Superpages + +[Surf Knight] +Parent=General Crawlers +Browser=Surf Knight +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser=SurveyBot +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser=SynapticSearch +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser=SyncMgr + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser=Tagyu + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser=Talkro Web-Shot +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser=Tecomi + +[TheInformant*] +Parent=General Crawlers +Browser=TheInformant +isBanned=true + +[Toata dragostea*] +Parent=General Crawlers +Browser=Toata dragostea +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser=UbiCrawler + +[UCmore] +Parent=General Crawlers +Browser=UCmore + +[User*Agent:*] +Parent=General Crawlers +isBanned=true + +[USER_AGENT] +Parent=General Crawlers +Browser=USER_AGENT +isBanned=true + +[VadixBot] +Parent=General Crawlers +Browser=VadixBot + +[VengaBot/*] +Parent=General Crawlers +Browser=VengaBot +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser=Visicom Toolbar + +[W3C-WebCon/*] +Parent=General Crawlers +Browser=W3C-WebCon + +[Webclipping.com] +Parent=General Crawlers +Browser=Webclipping.com +isBanned=true + +[webcollage/*] +Parent=General Crawlers +Browser=WebCollage +isBanned=true + +[WebCrawler_1.*] +Parent=General Crawlers +Browser=WebCrawler + +[WebFilter Robot*] +Parent=General Crawlers +Browser=WebFilter Robot + +[WeBoX/*] +Parent=General Crawlers +Browser=WeBoX + +[WebTrends/*] +Parent=General Crawlers +Browser=WebTrends + +[West Wind Internet Protocols*] +Parent=General Crawlers +Browser=Versatel +isBanned=true + +[WhizBang] +Parent=General Crawlers +Browser=WhizBang + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser=Willow Internet Crawler + +[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] +Parent=General Crawlers +Browser=WIRE +isBanned=true + +[www.fi crawler, contact crawler@www.fi] +Parent=General Crawlers +Browser=www.fi crawler + +[Xerka WebBot v1.*] +Parent=General Crawlers +Browser=Xerka +isBanned=true + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser=XML Sitemaps Generator + +[XSpider*] +Parent=General Crawlers +Browser=XSpider +isBanned=true + +[YooW!/* (?http://www.yoow.eu)] +Parent=General Crawlers +Browser=YooW! +isBanned=true + +[HiddenMarket-*] +Parent=General RSS +Browser=HiddenMarket +isBanned=true + +[FOTOCHECKER] +Parent=Image Crawlers +Browser=FOTOCHECKER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser=Search Engines +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser=FDSE Robot + +[*Fluffy the spider*] +Parent=Search Engines +Browser=SearchHippo + +[Abacho*] +Parent=Search Engines +Browser=Abacho + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser=Ah-Ha + +[AIBOT/*] +Parent=Search Engines +Browser=21Seek.Com + +[ALeadSoftbot/*] +Parent=Search Engines +Browser=ALeadSoftbot + +[Amfibibot/*] +Parent=Search Engines +Browser=Amfibi + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser=antibot + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser=Walhello + +[ASPSeek/*] +Parent=Search Engines +Browser=ASPSeek + +[BigCliqueBOT/*] +Parent=Search Engines +Browser=BigClique.com/BigClic.com + +[Blaiz-Bee/*] +Parent=Search Engines +Browser=RawGrunt + +[btbot/*] +Parent=Search Engines +Browser=Bit Torrent Search Engine + +[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] +Parent=Search Engines +Browser=Busiversebot +isBanned=true + +[CatchBot/*; http://www.catchbot.com] +Parent=Search Engines +Browser=CatchBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser=CipinetBot + +[Cogentbot/1.?*] +Parent=Search Engines +Browser=Cogentbot + +[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] +Parent=Search Engines +Browser=SqwidgeBot + +[cosmos*] +Parent=Search Engines +Browser=Xyleme + +[Deepindex] +Parent=Search Engines +Browser=Deepindex + +[DiamondBot] +Parent=Search Engines +Browser=DiamondBot + +[Dumbot*] +Parent=Search Engines +Browser=Dumbot +Version=0.2 +MajorVer=0 +MinorVer=2 +Beta=true + +[Eule?Robot*] +Parent=Search Engines +Browser=Eule-Robot + +[Faxobot/*] +Parent=Search Engines +Browser=Faxo + +[Filangy/*] +Parent=Search Engines +Browser=Filangy + +[flatlandbot/*] +Parent=Search Engines +Browser=Flatland + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser=ScorpionBot +isBanned=true + +[FyberSpider*] +Parent=Search Engines +Browser=FyberSpider +isBanned=true + +[Gaisbot/*] +Parent=Search Engines +Browser=Gaisbot + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser=gazz + +[geniebot*] +Parent=Search Engines +Browser=GenieKnows + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser=GoForIt + +[GoGuidesBot/*] +Parent=Search Engines +Browser=GoGuidesBot + +[GroschoBot/*] +Parent=Search Engines +Browser=GroschoBot + +[GurujiBot/1.*] +Parent=Search Engines +Browser=GurujiBot +isBanned=true + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser=Mirago + +[HolmesBot (http://holmes.ge)] +Parent=Search Engines +Browser=HolmesBot + +[Hotzonu/*] +Parent=Search Engines +Browser=Hotzonu + +[HyperEstraier/*] +Parent=Search Engines +Browser=HyperEstraier +isBanned=true + +[i1searchbot/*] +Parent=Search Engines +Browser=i1searchbot + +[IIITBOT/1.*] +Parent=Search Engines +Browser=Indian Language Web Search Engine + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser=Iltrovatore-Setaccio + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser=InfociousBot +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser=Infoseek + +[iSEEKbot/*] +Parent=Search Engines +Browser=iSEEKbot + +[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] +Parent=Search Engines +Browser=Knight + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser=Kolinka Forum Search +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser=KRetrieve +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser=LapozzBot + +[Linknzbot*] +Parent=Search Engines +Browser=Linknzbot + +[LocalcomBot/*] +Parent=Search Engines +Browser=LocalcomBot + +[Mail.Ru/1.0] +Parent=Search Engines +Browser=Mail.Ru + +[MaSagool/*] +Parent=Search Engines +Browser=Sagoo +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser=miniRank + +[Mnogosearch*] +Parent=Search Engines +Browser=Mnogosearch + +[Mozilla/0.9* no dos :) (Linux)] +Parent=Search Engines +Browser=goliat +isBanned=true + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser=Arachmo + +[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] +Parent=Search Engines +Browser=ThunderStone +isBanned=true + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser=Girafabot +Win32=true + +[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] +Parent=Search Engines +Browser=Vagabondo + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser=Qihoo + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser=Inxight Software + +[Mozilla/5.0 (*) VoilaBot*] +Parent=Search Engines +Browser=VoilaBot +isBanned=true + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser=ActiveTouristBot + +[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] +Parent=Search Engines +Browser=Butterfly + +[Mozilla/5.0 (compatible; Charlotte/*; *)] +Parent=Search Engines +Browser=Charlotte +Beta=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT*)] +Parent=Search Engines +Browser=FatAssANT + +[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] +Parent=Search Engines +Browser=DBLBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; EARTHCOM.info/*)] +Parent=Search Engines +Browser=EARTHCOM + +[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] +Parent=Search Engines +Browser=Lipperhey Spider + +[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser=MojeekBot + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser=Northern Light Web Search + +[Mozilla/5.0 (compatible; OsO;*] +Parent=Search Engines +Browser=Octopodus +isBanned=true + +[Mozilla/5.0 (compatible; Pogodak.*)] +Parent=Search Engines +Browser=Pogodak + +[Mozilla/5.0 (compatible; Quantcastbot/1.*)] +Parent=Search Engines +Browser=Quantcastbot + +[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] +Parent=Search Engines +Browser=ScoutJet + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser=Scrubby +isBanned=true + +[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] +Parent=Search Engines +Browser=YoudaoBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Twiceler*)] +Parent=Search Engines +Browser=Twiceler +isBanned=true + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser=CostaCider Search + +[Mozilla/5.0 GurujiBot/1.0 (*)] +Parent=Search Engines +Browser=GurujiBot + +[NavissoBot] +Parent=Search Engines +Browser=NavissoBot + +[NextGenSearchBot*(for information visit *)] +Parent=Search Engines +Browser=ZoomInfo +isBanned=true + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser=Norbert the Spider + +[NuSearch Spider*] +Parent=Search Engines +Browser=nuSearch + +[ObjectsSearch/*] +Parent=Search Engines +Browser=ObjectsSearch + +[OpenISearch/1.*] +Parent=Search Engines +Browser=OpenISearch (Amazon) + +[Pagebull http://www.pagebull.com/] +Parent=Search Engines +Browser=Pagebull + +[PEERbot*] +Parent=Search Engines +Browser=PEERbot + +[Pompos/*] +Parent=Search Engines +Browser=Pompos + +[Popdexter/*] +Parent=Search Engines +Browser=Popdex + +[Qweery*] +Parent=Search Engines +Browser=QweeryBot + +[RedCell/* (*)] +Parent=Search Engines +Browser=RedCell + +[Scrubby/*] +Parent=Search Engines +Browser=Scrub The Web + +[Search-10/*] +Parent=Search Engines +Browser=Search-10 + +[search.ch*] +Parent=Search Engines +Browser=Swiss Search Engine + +[Searchmee! Spider*] +Parent=Search Engines +Browser=Searchmee! + +[Seekbot/*] +Parent=Search Engines +Browser=Seekbot + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser=SiteSpider + +[Spinne/*] +Parent=Search Engines +Browser=Spinne + +[sproose/*] +Parent=Search Engines +Browser=Sproose + +[Sqeobot/0.*] +Parent=Search Engines +Browser=Branzel +isBanned=true + +[SquigglebotBot/*] +Parent=Search Engines +Browser=SquigglebotBot +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser=StackRambler + +[SygolBot*] +Parent=Search Engines +Browser=SygolBot + +[SynoBot] +Parent=Search Engines +Browser=SynoBot + +[Szukacz/*] +Parent=Search Engines +Browser=Szukacz + +[Tarantula/*] +Parent=Search Engines +Browser=Tarantula +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser=TerrawizBot +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser=Tkensaku + +[TMCrawler] +Parent=Search Engines +Browser=TMCrawler +isBanned=true + +[Twingly Recon] +Parent=Search Engines +Browser=Twingly Recon +isBanned=true + +[updated/*] +Parent=Search Engines +Browser=Updated! + +[URL Spider Pro/*] +Parent=Search Engines +Browser=URL Spider Pro + +[URL Spider SQL*] +Parent=Search Engines +Browser=Innerprise Enterprise Search + +[VMBot/*] +Parent=Search Engines +Browser=VMBot + +[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] +Parent=Search Engines +Browser=Voyager + +[wadaino.jp-crawler*] +Parent=Search Engines +Browser=wadaino.jp +isBanned=true + +[WebAlta Crawler/*] +Parent=Search Engines +Browser=WebAlta Crawler +isBanned=true + +[WebCorp/*] +Parent=Search Engines +Browser=WebCorp +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser=webcrawl.net + +[WISEbot/*] +Parent=Search Engines +Browser=WISEbot +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser=Wotbox + +[www.zatka.com] +Parent=Search Engines +Browser=Zatka + +[WWWeasel Robot v*] +Parent=Search Engines +Browser=World Wide Weasel + +[YadowsCrawler*] +Parent=Search Engines +Browser=YadowsCrawler + +[YodaoBot/*] +Parent=Search Engines +Browser=YodaoBot +isBanned=true + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser=ZE.bz + +[zibber-v*] +Parent=Search Engines +Browser=Zibb + +[ZipppBot/*] +Parent=Search Engines +Browser=ZipppBot + +[ATA-Translation-Service] +Parent=Translators +Browser=ATA-Translation-Service + +[GJK_Browser_Check] +Parent=Version Checkers +Browser=GJK_Browser_Check + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser=Hatena +isBanned=true +Crawler=true + +[Feed::Find/*] +Parent=Hatena +Browser=Feed Find +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser=Hatena Antenna + +[Hatena Bookmark/*] +Parent=Hatena +Browser=Hatena Bookmark + +[Hatena RSS/*] +Parent=Hatena +Browser=Hatena RSS +isSyndicationReader=true + +[Hatena::Crawler/*] +Parent=Hatena +Browser=Hatena Crawler + +[HatenaScreenshot*] +Parent=Hatena +Browser=HatenaScreenshot + +[URI::Fetch/*] +Parent=Hatena +Browser=URI::Fetch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser=Internet Archive +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*heritrix*] +Parent=Internet Archive +Browser=Heritrix +isBanned=true + +[ia_archiver*] +Parent=Internet Archive +Browser=Internet Archive + +[InternetArchive/*] +Parent=Internet Archive +Browser=InternetArchive + +[Mozilla/5.0 (compatible; archive.org_bot/1.*)] +Parent=Internet Archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser=Nutch +isBanned=true +Crawler=true + +[*Nutch*] +Parent=Nutch +isBanned=true + +[CazoodleBot/*] +Parent=Nutch +Browser=CazoodleBot + +[LOOQ/0.1*] +Parent=Nutch +Browser=LOOQ + +[Nutch/0.? (OpenX Spider)] +Parent=Nutch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo + +[Webaroo] +Parent=DefaultProperties +Browser=Webaroo + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] +Parent=Webaroo +Browser=Webaroo + +[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] +Parent=Webaroo +Browser=Webaroo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press + +[Word Press] +Parent=DefaultProperties +Browser=Word Press +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[WordPress-B-/2.*] +Parent=Word Press +Browser=WordPress-B + +[WordPress-Do-P-/2.*] +Parent=Word Press +Browser=WordPress-Do-P + +[BlueCoat ProxySG] +Parent=Blue Coat Systems +Browser=BlueCoat ProxySG + +[CerberianDrtrs/*] +Parent=Blue Coat Systems +Browser=Cerberian + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Blue Coat Systems +Browser=Bluecoat + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser=Copyright/Plagiarism +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser=BDFetch + +[copyright sheriff (*)] +Parent=Copyright/Plagiarism +Browser=copyright sheriff + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser=CopyRightCheck + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser=FairAd Client + +[iCopyright Conductor*] +Parent=Copyright/Plagiarism +Browser=iCopyright Conductor + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser=IPiumBot + +[IWAgent/*] +Parent=Copyright/Plagiarism +Browser=Brand Protect + +[Mozilla/5.0 (compatible; DKIMRepBot/*)] +Parent=Copyright/Plagiarism +Browser=DKIMRepBot + +[oBot] +Parent=Copyright/Plagiarism +Browser=oBot + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser=SlySearch + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser=TurnitinBot + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser=TutorGig + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools + +[DNS Tools] +Parent=DefaultProperties +Browser=DNS Tools +Crawler=true + +[Domain Dossier utility*] +Parent=DNS Tools +Browser=Domain Dossier + +[Mozilla/5.0 (compatible; DNS-Digger/*)] +Parent=DNS Tools +Browser=DNS-Digger + +[OpenDNS Domain Crawler noc@opendns.com] +Parent=DNS Tools +Browser=OpenDNS Domain Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser=Download Managers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[AndroidDownloadManager] +Parent=Download Managers +Browser=Android Download Manager + +[AutoMate5] +Parent=Download Managers +Browser=AutoMate5 + +[Beamer*] +Parent=Download Managers +Browser=Beamer + +[BitBeamer/*] +Parent=Download Managers +Browser=BitBeamer + +[BitTorrent/*] +Parent=Download Managers +Browser=BitTorrent + +[DA *] +Parent=Download Managers +Browser=Download Accelerator + +[Download Demon*] +Parent=Download Managers +Browser=Download Demon + +[Download Express*] +Parent=Download Managers +Browser=Download Express + +[Download Master*] +Parent=Download Managers +Browser=Download Master + +[Download Ninja*] +Parent=Download Managers +Browser=Download Ninja + +[Download Wonder*] +Parent=Download Managers +Browser=Download Wonder + +[DownloadSession*] +Parent=Download Managers +Browser=DownloadSession + +[EasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[FDM 1.x] +Parent=Download Managers +Browser=Free Download Manager + +[FlashGet] +Parent=Download Managers +Browser=FlashGet + +[FreshDownload/*] +Parent=Download Managers +Browser=FreshDownload + +[GetRight/*] +Parent=Download Managers +Browser=GetRight + +[GetRightPro/*] +Parent=Download Managers +Browser=GetRightPro + +[GetSmart/*] +Parent=Download Managers +Browser=GetSmart + +[Go!Zilla*] +Parent=Download Managers +Browser=GoZilla + +[Gozilla/*] +Parent=Download Managers +Browser=Gozilla + +[Internet Ninja*] +Parent=Download Managers +Browser=Internet Ninja + +[Kontiki Client*] +Parent=Download Managers +Browser=Kontiki Client + +[lftp/3.2.1] +Parent=Download Managers +Browser=lftp + +[LightningDownload/*] +Parent=Download Managers +Browser=LightningDownload + +[LMQueueBot/*] +Parent=Download Managers +Browser=LMQueueBot + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser=Download Express + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser=Getleft + +[Myzilla] +Parent=Download Managers +Browser=Myzilla + +[Net Vampire/*] +Parent=Download Managers +Browser=Net Vampire + +[Net_Vampire*] +Parent=Download Managers +Browser=Net_Vampire + +[NetAnts*] +Parent=Download Managers +Browser=NetAnts + +[NetPumper*] +Parent=Download Managers +Browser=NetPumper + +[NetSucker*] +Parent=Download Managers +Browser=NetSucker + +[NetZip Downloader*] +Parent=Download Managers +Browser=NetZip Downloader + +[NexTools WebAgent*] +Parent=Download Managers +Browser=NexTools WebAgent + +[Offline Downloader*] +Parent=Download Managers +Browser=Offline Downloader + +[P3P Client] +Parent=Download Managers +Browser=P3P Client + +[PageDown*] +Parent=Download Managers +Browser=PageDown + +[PicaLoader*] +Parent=Download Managers +Browser=PicaLoader + +[Prozilla*] +Parent=Download Managers +Browser=Prozilla + +[RealDownload/*] +Parent=Download Managers +Browser=RealDownload + +[sEasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[shareaza*] +Parent=Download Managers +Browser=shareaza + +[SmartDownload/*] +Parent=Download Managers +Browser=SmartDownload + +[SpeedDownload/*] +Parent=Download Managers +Browser=Speed Download + +[Star*Downloader/*] +Parent=Download Managers +Browser=StarDownloader + +[STEROID Download] +Parent=Download Managers +Browser=STEROID Download + +[SuperBot/*] +Parent=Download Managers +Browser=SuperBot + +[Vegas95/*] +Parent=Download Managers +Browser=Vegas95 + +[WebZIP*] +Parent=Download Managers +Browser=WebZIP + +[Wget*] +Parent=Download Managers +Browser=Wget + +[WinTools] +Parent=Download Managers +Browser=WinTools + +[Xaldon WebSpider*] +Parent=Download Managers +Browser=Xaldon WebSpider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser=E-Mail Harvesters +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser=E-Mail Address Extractor + +[*Larbin*] +Parent=E-Mail Harvesters +Browser=Larbin + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser=www4mail + +[8484 Boston Project*] +Parent=E-Mail Harvesters +Browser=8484 Boston Project + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser=CherryPickerElite + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser=Chilkat + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser=ContactBot + +[eCatch*] +Parent=E-Mail Harvesters +Browser=eCatch + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser=E-Mail Collector + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser=EMAILsearcher + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser=E-Mail Siphon + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser=EMailWolf + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser=MailMunky + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser=ExtractorPro + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser=Franklin Locator + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser=Missigua Locator + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser=Advanced Email Extractor + +[Netprospector*] +Parent=E-Mail Harvesters +Browser=Netprospector + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser=ProWebWalker + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser=Mike Elliott's E-Mail Harvester + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser=WebEnhancer + +[WebMiner*] +Parent=E-Mail Harvesters +Browser=WebMiner + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser=ZIBB Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser=Feeds Blogs +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser=Bloglines Title Fetch + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser=BlogLines Web + +[BlogPulseLive (support@blogpulse.com)] +Parent=Feeds Blogs +Browser=BlogPulseLive + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser=blogsearchbot-pumpkin +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser=Irish Blogs Aggregator +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser=kinjabot + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser=Net::Trackback + +[Reblog*] +Parent=Feeds Blogs +Browser=Reblog + +[WordPress/*] +Parent=Feeds Blogs +Browser=WordPress + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser=Feeds Syndicators +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser=LinkLint + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser=NetVisualize + +[AideRSS 2.* (postrank.com)] +Parent=Feeds Syndicators +Browser=AideRSS + +[AideRSS/2.0 (aiderss.com)] +Parent=Feeds Syndicators +Browser=AideRSS +isBanned=true + +[Akregator/*] +Parent=Feeds Syndicators +Browser=Akregator + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser=Safari RSS +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser=Cocoal.icio.us +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser=Feed For Free + +[FeedBurner/*] +Parent=Feeds Syndicators +Browser=FeedBurner + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser=FeedDemon +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser=FeedDigest + +[FeedGhost/1.*] +Parent=Feeds Syndicators +Browser=FeedGhost +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] +Parent=Feeds Syndicators +Browser=FeedOnFeeds +Version=0.1 +MajorVer=0 +MinorVer=1 + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser=Newsbrain + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser=Feedshow + +[Feedster Crawler/?.0; Feedster, Inc.] +Parent=Feeds Syndicators +Browser=Feedster + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser=GreatNews +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Gregarius/*] +Parent=Feeds Syndicators +Browser=Gregarius + +[intraVnews/*] +Parent=Feeds Syndicators +Browser=intraVnews + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser=Omea Reader +isBanned=true + +[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] +Parent=Feeds Syndicators +Browser=Liferea +isBanned=true + +[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] +Parent=Feeds Syndicators +Browser=FeedFetcher +Version=0.0 +MajorVer=0 +MinorVer=0 + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser=MagpieRSS + +[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] +Parent=Feeds Syndicators +Browser=Mobitype +Platform=Win32 + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser=Rojo + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser=TailRank + +[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] +Parent=Feeds Syndicators +Browser=Podtech Network + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser=Newz Crawler + +[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser=RSSMicro + +[Mozilla/5.0 (compatible;*newstin.com;*)] +Parent=Feeds Syndicators +Browser=NewsTin + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser=RSS Reader Panel + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser=FeedParser + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser=NewsMonster + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser=Rojo + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser=Netvibes + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser=NewsAlloy + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser=Omnipelagos + +[Particls] +Parent=Feeds Syndicators +Browser=Particls + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser=Protopage + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser=PubSub-RSS-Reader + +[RSS Menu/*] +Parent=Feeds Syndicators +Browser=RSS Menu + +[RssBandit/*] +Parent=Feeds Syndicators +Browser=RssBandit + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser=RssBar +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser=SharpReader + +[SimplePie/*] +Parent=Feeds Syndicators +Browser=SimplePie + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser=Strategic Board Bot +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser=TargetYourNews + +[Technoratibot/*] +Parent=Feeds Syndicators +Browser=Technoratibot + +[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] +Parent=Feeds Syndicators +Browser=Tumblr RSS syndication + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser=Windows-RSS-Platform +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser=Wizz + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS + +[General RSS] +Parent=DefaultProperties +Browser=General RSS +isSyndicationReader=true + +[AideRSS/1.0 (aiderss.com); * subscribers] +Parent=General RSS +Browser=AideRSS +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] +Parent=General RSS +Browser=CC Metadata Scaper + +[Mozilla/5.0 (compatible) GM RSS Panel] +Parent=General RSS +Browser=RSS Panel + +[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] +Parent=General RSS +Browser=Inclue + +[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] +Parent=General RSS +Browser=Ruunk + +[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] +Parent=General RSS +Browser=Windows-RSS-Platform +Platform=WinVista + +[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] +Parent=Google Code +Browser=Arora +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux +CssVersion=2 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser=HTML Validators +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser=Search Engine World HTML Validator + +[FeedValidator/1.3] +Parent=HTML Validators +Browser=FeedValidator +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser=Jigsaw CSS Validator + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser=Search Engine World Robots.txt Validator + +[W3C_Validator/*] +Parent=HTML Validators +Browser=W3C Validator + +[W3CLineMode/*] +Parent=HTML Validators +Browser=W3C Line Mode + +[Weblide/2.? beta*] +Parent=HTML Validators +Browser=Weblide +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser=WebmasterWorld Server Header Checker + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser=Image Crawlers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*CFNetwork*] +Parent=Image Crawlers +Browser=CFNetwork + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser=PhotoStickies + +[Camcrawler*] +Parent=Image Crawlers +Browser=Camcrawler + +[CydralSpider/*] +Parent=Image Crawlers +Browser=Cydral Web Image Search +isBanned=true + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser=Gallery Grabber + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser=Extreme Picture Finder + +[FLATARTS_FAVICO] +Parent=Image Crawlers +Browser=FlatArts Favorites Icon Tool + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser=HTML2JPG + +[IconSurf/2.*] +Parent=Image Crawlers +Browser=IconSurf + +[kalooga/KaloogaBot*] +Parent=Image Crawlers +Browser=KaloogaBot + +[Mister PIX*] +Parent=Image Crawlers +Browser=Mister PIX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] +Parent=Image Crawlers +Browser=Pandora + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser=naoFavicon4IE + +[pixfinder/*] +Parent=Image Crawlers +Browser=pixfinder + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser=rssImagesBot + +[Web Image Collector*] +Parent=Image Crawlers +Browser=Web Image Collector + +[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] +Parent=Image Crawlers +Browser=WebImages + +[WebPix*] +Parent=Image Crawlers +Browser=Custo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser=Link Checkers +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser=!Susie + +[*AgentName/*] +Parent=Link Checkers +Browser=AgentName + +[*Linkman*] +Parent=Link Checkers +Browser=Linkman + +[*LinksManager.com*] +Parent=Link Checkers +Browser=LinksManager + +[*Powermarks/*] +Parent=Link Checkers +Browser=Powermarks + +[*W3C-checklink/*] +Parent=Link Checkers +Browser=W3C Link Checker + +[*Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator + +[*Zeus*] +Parent=Link Checkers +Browser=Zeus +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser=ActiveBookmark + +[Bookdog/*] +Parent=Link Checkers +Browser=Bookdog + +[Bookmark Buddy*] +Parent=Link Checkers +Browser=Bookmark Buddy + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser=Bookmark Renewal Check Agent + +[Bookmark search tool*] +Parent=Link Checkers +Browser=Bookmark search tool + +[Bookmark-Manager] +Parent=Link Checkers +Browser=Bookmark-Manager + +[Checkbot*] +Parent=Link Checkers +Browser=Checkbot + +[CheckLinks/*] +Parent=Link Checkers +Browser=CheckLinks + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser=CyberSpyder Link Test + +[DLC/*] +Parent=Link Checkers +Browser=DLC + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser=DocWeb Link Crawler + +[FavOrg] +Parent=Link Checkers +Browser=FavOrg + +[Favorites Sweeper v.3.*] +Parent=Link Checkers +Browser=Favorites Sweeper + +[FindLinks/*] +Parent=Link Checkers +Browser=FindLinks + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser=Funnel Web Profiler + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser=HTML Link Validator + +[IECheck] +Parent=Link Checkers +Browser=IECheck + +[JCheckLinks/*] +Parent=Link Checkers +Browser=JCheckLinks + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser=JRTwine + +[Link Valet Online*] +Parent=Link Checkers +Browser=Link Valet +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser=LinkAlarm + +[Linkbot*] +Parent=Link Checkers +Browser=Linkbot + +[LinkChecker/*] +Parent=Link Checkers +Browser=LinkChecker + +[LinkextractorPro*] +Parent=Link Checkers +Browser=LinkextractorPro +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser=LinkLint + +[LinkScan/*] +Parent=Link Checkers +Browser=LinkScan + +[LinkSweeper/*] +Parent=Link Checkers +Browser=LinkSweeper + +[LinkWalker*] +Parent=Link Checkers +Browser=LinkWalker + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser=MetaGer-LinkChecker + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser=LinkTiger +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser=URLBase + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser=NetPromoter Link Utility + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser=Link Commander +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] +Parent=Link Checkers +Browser=smartBot + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser=SuperCleaner + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser=gURLChecker +isBanned=true + +[Newsgroupreporter LinkCheck] +Parent=Link Checkers +Browser=Newsgroupreporter LinkCheck + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser=onCHECK Linkchecker + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser=Dead-Links.com +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser=REL Link Checker + +[RLinkCheker*] +Parent=Link Checkers +Browser=RLinkCheker + +[Robozilla/*] +Parent=Link Checkers +Browser=Robozilla + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser=RPT-HTTPClient +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser=SafariBookmarkChecker +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser=Simpy + +[SiteBar/*] +Parent=Link Checkers +Browser=SiteBar + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser=Susie + +[URLBase/6.*] +Parent=Link Checkers + +[VSE/*] +Parent=Link Checkers +Browser=VSE Link Tester + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser=WebTrends Link Analyzer + +[WorQmada/*] +Parent=Link Checkers +Browser=WorQmada + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser=Xenu's Link Sleuth +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser=Z-Add Link Checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser=Microsoft +isBanned=true + +[Live (http://www.live.com/)] +Parent=Microsoft +Browser=Microsoft Live +isBanned=false +isSyndicationReader=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser=MFC Foundation Class Library + +[MFHttpScan] +Parent=Microsoft +Browser=MFHttpScan + +[Microsoft BITS/*] +Parent=Microsoft +Browser=BITS + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser=MS IPP + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser=MS IPP DAV + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser=MS IPPPD + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser=Fake IE + +[Microsoft Office Existence Discovery] +Parent=Microsoft +Browser=Microsoft Office Existence Discovery + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser=MS OPD + +[Microsoft Office/* (*Picture Manager*)] +Parent=Microsoft +Browser=Microsoft Office Picture Manager + +[Microsoft URL Control*] +Parent=Microsoft +Browser=Microsoft URL Control + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser=Microsoft Visio + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser=Microsoft-WebDAV + +[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] +Parent=Microsoft +Browser=Microsoft Excel +Version=12.0 +MajorVer=12 +MinorVer=0 +Platform=MacOSX + +[MSN Feed Manager] +Parent=Microsoft +Browser=MSN Feed Manager +isBanned=false +isSyndicationReader=true + +[MSProxy/*] +Parent=Microsoft +Browser=MS Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser=Miscellaneous Browsers +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser=Amiga +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser=Avant Browser + +[12345] +Parent=Miscellaneous Browsers +Browser=12345 +isBanned=true + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser=Ace Explorer + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser=Enigma Browser + +[EVE-minibrowser/*] +Parent=Miscellaneous Browsers +Browser=EVE-minibrowser +IFrames=false +Tables=false +BackgroundSounds=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +Crawler=false + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser=Godzilla + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser=GreenBrowser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Kopiczek/* (WyderOS*; *)] +Parent=Miscellaneous Browsers +Browser=Kopiczek +Platform=WyderOS +IFrames=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (*) - BrowseX (*)] +Parent=Miscellaneous Browsers +Browser=BrowseX + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser=Escape +Platform=Win32 + +[Mozilla/4.0 (compatible; ibisBrowser)] +Parent=Miscellaneous Browsers +Browser=ibisBrowser + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser=HistoryHound + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser=NetRecorder + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser=NetSurfer + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser=ogeb browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser=Wipeout Pure + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser=SlimBrowser + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser=WWW Browser +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CssVersion=3 +supportsCSS=true + +[*Netcraft Webserver Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser=Offline Browsers +Frames=true +Tables=true +Cookies=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser=Check&Get + +[*HTTrack*] +Parent=Offline Browsers +Browser=HTTrack + +[*MSIECrawler*] +Parent=Offline Browsers +Browser=IE Offline Browser + +[*TweakMASTER*] +Parent=Offline Browsers +Browser=TweakMASTER + +[BackStreet Browser *] +Parent=Offline Browsers +Browser=BackStreet Browser + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser=Go Ahead Got-It + +[iGetter/*] +Parent=Offline Browsers +Browser=iGetter + +[Teleport*] +Parent=Offline Browsers +Browser=Teleport + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser=Online Scanners +isBanned=true + +[JoeDog/* (X11; I; Siege *)] +Parent=Online Scanners +Browser=JoeDog +isBanned=false + +[Morfeus Fucking Scanner] +Parent=Online Scanners +Browser=Morfeus Fucking Scanner + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser=Trend Micro + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser=Panda Antivirus Titanium + +[virus_detector*] +Parent=Online Scanners +Browser=Secure Computing Corporation + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser=Proxy Servers +isBanned=true + +[*squid*] +Parent=Proxy Servers +Browser=Squid + +[Anonymisiert*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymizer/*] +Parent=Proxy Servers +Browser=Anonymizer + +[Anonymizied*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymous*] +Parent=Proxy Servers +Browser=Anonymous + +[Anonymous/*] +Parent=Proxy Servers +Browser=Anonymous + +[CE-Preload] +Parent=Proxy Servers +Browser=CE-Preload + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser=Anonymouse + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser=Anonymizer + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser=SaferSurf + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser=Yahoo! +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser=Squid + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Privoxy/*] +Parent=Proxy Servers +Browser=Privoxy + +[ProxyTester*] +Parent=Proxy Servers +Browser=ProxyTester +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser=SilentSurf + +[SmallProxy*] +Parent=Proxy Servers +Browser=SmallProxy + +[Space*Bison/*] +Parent=Proxy Servers +Browser=Proxomitron + +[Sqworm/*] +Parent=Proxy Servers +Browser=Websense + +[SurfControl] +Parent=Proxy Servers +Browser=SurfControl + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser=Research Projects +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser=AcadiaUniversityWebCensusClient + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser=Amico Alpha + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser=Annotate Google + +[CMS crawler (?http://buytaert.net/crawler/)] +Parent=Research Projects + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser=e-SocietyRobot + +[Forschungsportal/*] +Parent=Research Projects +Browser=Forschungsportal + +[Gulper Web *] +Parent=Research Projects +Browser=Gulper Web Bot + +[HooWWWer/*] +Parent=Research Projects +Browser=HooWWWer + +[http://buytaert.net/crawler] +Parent=Research Projects + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser=inetbot + +[IRLbot/*] +Parent=Research Projects +Browser=IRLbot + +[Lachesis] +Parent=Research Projects +Browser=Lachesis + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser=nextthing.org +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser=Theophrastus + +[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] +Parent=Research Projects +Browser=Webscan + +[MQbot*] +Parent=Research Projects +Browser=MQbot + +[OutfoxBot/*] +Parent=Research Projects +Browser=OutfoxBot + +[polybot?*] +Parent=Research Projects +Browser=Polybot + +[Shim?Crawler*] +Parent=Research Projects +Browser=Shim Crawler + +[Steeler/*] +Parent=Research Projects +Browser=Steeler + +[Taiga web spider] +Parent=Research Projects +Browser=Taiga + +[Theme Spider*] +Parent=Research Projects +Browser=Theme Spider + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser=UofTDB Experiment + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser=USyd-NLP-Spider + +[woriobot*] +Parent=Research Projects +Browser=woriobot + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser=wwwster +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser=Zao-Crawler + +[Zao/*] +Parent=Research Projects +Browser=Zao + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser=Rippers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*grub*] +Parent=Rippers +Browser=grub + +[*ickHTTP*] +Parent=Rippers +Browser=IP*Works + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser=libwww-perl + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser=WinHttp + +[3D-FTP/*] +Parent=Rippers +Browser=3D-FTP + +[3wGet/*] +Parent=Rippers +Browser=3wGet + +[ActiveRefresh*] +Parent=Rippers +Browser=ActiveRefresh + +[Artera (Version *)] +Parent=Rippers +Browser=Artera + +[AutoHotkey] +Parent=Rippers +Browser=AutoHotkey + +[b2w/*] +Parent=Rippers +Browser=b2w + +[BasicHTTP/*] +Parent=Rippers +Browser=BasicHTTP + +[BlockNote.Net] +Parent=Rippers +Browser=BlockNote.Net + +[CAST] +Parent=Rippers +Browser=CAST + +[CFNetwork/*] +Parent=Rippers +Browser=CFNetwork + +[CFSCHEDULE*] +Parent=Rippers +Browser=ColdFusion Task Scheduler + +[CobWeb/*] +Parent=Rippers +Browser=CobWeb + +[ColdFusion*] +Parent=Rippers +Browser=ColdFusion + +[Crawl_Application] +Parent=Rippers +Browser=Crawl_Application + +[curl/*] +Parent=Rippers +Browser=cURL + +[Custo*] +Parent=Rippers +Browser=Custo + +[DataCha0s/*] +Parent=Rippers +Browser=DataCha0s + +[DeepIndexer*] +Parent=Rippers +Browser=DeepIndexer + +[DISCo Pump *] +Parent=Rippers +Browser=DISCo Pump + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser=eStyleSearch +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser=Ezic.com + +[fetch libfetch/*] +Parent=Rippers + +[FGet*] +Parent=Rippers +Browser=FGet + +[Flaming AttackBot*] +Parent=Rippers +Browser=Flaming AttackBot + +[Foobot*] +Parent=Rippers +Browser=Foobot + +[GameSpyHTTP/*] +Parent=Rippers +Browser=GameSpyHTTP + +[gnome-vfs/*] +Parent=Rippers +Browser=gnome-vfs + +[Harvest/*] +Parent=Rippers +Browser=Harvest + +[hcat/*] +Parent=Rippers +Browser=hcat + +[HLoader] +Parent=Rippers +Browser=HLoader + +[Holmes/*] +Parent=Rippers +Browser=Holmes + +[HTMLParser/*] +Parent=Rippers +Browser=HTMLParser + +[http generic] +Parent=Rippers +Browser=http generic + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser=httperf + +[HTTPFetch/*] +Parent=Rippers +Browser=HTTPFetch + +[HTTPGrab] +Parent=Rippers +Browser=HTTPGrab + +[HttpSession] +Parent=Rippers +Browser=HttpSession + +[httpunit/*] +Parent=Rippers +Browser=HttpUnit + +[ICE_GetFile] +Parent=Rippers +Browser=ICE_GetFile + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser=Inet - Eureka App + +[INetURL/*] +Parent=Rippers +Browser=INetURL + +[InetURL:/*] +Parent=Rippers +Browser=InetURL + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser=Fake IE + +[Internet Explorer *] +Parent=Rippers +Browser=Fake IE + +[IP*Works!*/*] +Parent=Rippers +Browser=IP*Works! + +[IrssiUrlLog/*] +Parent=Rippers +Browser=IrssiUrlLog + +[JPluck/*] +Parent=Rippers +Browser=JPluck + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser=Kapere + +[LeechFTP] +Parent=Rippers +Browser=LeechFTP + +[LeechGet*] +Parent=Rippers +Browser=LeechGet + +[libcurl-agent/*] +Parent=Rippers +Browser=libcurl + +[libWeb/clsHTTP*] +Parent=Rippers +Browser=libWeb/clsHTTP + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser=MFC_Tear_Sample + +[Moozilla] +Parent=Rippers +Browser=Moozilla + +[MovableType/*] +Parent=Rippers +Browser=MovableType Web Log + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser=NEWT ActiveX +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser=Novell BorderManager + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] +Parent=Rippers +Browser=IPCheck Server Monitor + +[OCN-SOC/*] +Parent=Rippers +Browser=OCN-SOC + +[Offline Explorer*] +Parent=Rippers +Browser=Offline Explorer + +[Open Web Analytics Bot*] +Parent=Rippers +Browser=Open Web Analytics Bot + +[OSSProxy*] +Parent=Rippers +Browser=OSSProxy + +[Pageload*] +Parent=Rippers +Browser=PageLoad + +[PageNest/*] +Parent=Rippers +Browser=PageNest + +[pavuk/*] +Parent=Rippers +Browser=Pavuk + +[PEAR HTTP_Request*] +Parent=Rippers +Browser=PEAR-PHP + +[PHP*] +Parent=Rippers +Browser=PHP + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser=PigBlock +Win32=true + +[Pockey*] +Parent=Rippers +Browser=Pockey-GetHTML + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser=POE-Component-Client-HTTP + +[PycURL/*] +Parent=Rippers +Browser=PycURL + +[Python*] +Parent=Rippers +Browser=Python + +[RepoMonkey*] +Parent=Rippers +Browser=RepoMonkey + +[SBL-BOT*] +Parent=Rippers +Browser=BlackWidow + +[ScoutAbout*] +Parent=Rippers +Browser=ScoutAbout + +[sherlock/*] +Parent=Rippers +Browser=Sherlock + +[SiteParser/*] +Parent=Rippers +Browser=SiteParser + +[SiteSnagger*] +Parent=Rippers +Browser=SiteSnagger + +[SiteSucker/*] +Parent=Rippers +Browser=SiteSucker + +[SiteWinder*] +Parent=Rippers +Browser=SiteWinder + +[Snoopy*] +Parent=Rippers +Browser=Snoopy + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser=AspTear + +[SuperHTTP/*] +Parent=Rippers +Browser=SuperHTTP + +[Tcl http client package*] +Parent=Rippers +Browser=Tcl http client package + +[Twisted PageGetter] +Parent=Rippers +Browser=Twisted PageGetter + +[URL2File/*] +Parent=Rippers +Browser=URL2File + +[UtilMind HTTPGet] +Parent=Rippers +Browser=UtilMind HTTPGet + +[VCI WebViewer*] +Parent=Rippers +Browser=VCI WebViewer + +[W3CRobot/*] +Parent=Rippers +Browser=W3CRobot + +[Web Downloader*] +Parent=Rippers +Browser=Web Downloader + +[Web Downloader/*] +Parent=Rippers +Browser=Web Downloader + +[Web Magnet*] +Parent=Rippers +Browser=Web Magnet + +[WebAuto/*] +Parent=Rippers + +[webbandit/*] +Parent=Rippers +Browser=webbandit + +[WebCopier*] +Parent=Rippers +Browser=WebCopier + +[WebDownloader*] +Parent=Rippers +Browser=WebDownloader + +[WebFetch] +Parent=Rippers +Browser=WebFetch + +[webfetch/*] +Parent=Rippers +Browser=WebFetch + +[WebGatherer*] +Parent=Rippers +Browser=WebGatherer + +[WebGet] +Parent=Rippers +Browser=WebGet + +[WebReaper*] +Parent=Rippers +Browser=WebReaper + +[WebRipper] +Parent=Rippers +Browser=WebRipper + +[WebSauger*] +Parent=Rippers +Browser=WebSauger + +[Website Downloader*] +Parent=Rippers +Browser=Website Downloader + +[Website eXtractor*] +Parent=Rippers +Browser=Website eXtractor + +[Website Quester] +Parent=Rippers +Browser=Website Quester + +[WebsiteExtractor*] +Parent=Rippers +Browser=Website eXtractor + +[WebSnatcher*] +Parent=Rippers +Browser=WebSnatcher + +[Webster Pro*] +Parent=Rippers +Browser=Webster Pro + +[WebStripper*] +Parent=Rippers +Browser=WebStripper + +[WebWhacker*] +Parent=Rippers +Browser=WebWhacker + +[WinScripter iNet Tools] +Parent=Rippers +Browser=WinScripter iNet Tools + +[WWW-Mechanize/*] +Parent=Rippers +Browser=WWW-Mechanize + +[Zend_Http_Client] +Parent=Rippers +Browser=Zend_Http_Client + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser=Site Monitors +Cookies=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser=EasyRider + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser=maxamine.com--robot +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser=WebMon + +[Kenjin Spider*] +Parent=Site Monitors +Browser=Kenjin Spider + +[Kevin http://*] +Parent=Site Monitors +Browser=Kevin +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser=ChangeDetection + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser=Myst Monitor Service + +[Net Probe] +Parent=Site Monitors +Browser=Net Probe + +[NetMechanic*] +Parent=Site Monitors +Browser=NetMechanic + +[NetReality*] +Parent=Site Monitors +Browser=NetReality + +[Pingdom GIGRIB*] +Parent=Site Monitors +Browser=Pingdom + +[Site Valet Online*] +Parent=Site Monitors +Browser=Site Valet +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser=SITECHECKER + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser=ZoneEdit Failover Monitor +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser=UpTime Checker + +[URL Control*] +Parent=Site Monitors +Browser=URL Control + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser=URLCHECK + +[URLy Warning*] +Parent=Site Monitors +Browser=URLy Warning + +[Webcheck *] +Parent=Site Monitors +Browser=Webcheck +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser=WebPatrol + +[websitepulse checker/*] +Parent=Site Monitors +Browser=websitepulse checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser=Social Bookmarkers +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[BookmarkBase(2/;http://bookmarkbase.com)] +Parent=Social Bookmarkers +Browser=BookmarkBase + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser=Cocoalicious + +[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] +Parent=Social Bookmarkers +Browser=FriendFeedBot + +[Twitturly*] +Parent=Social Bookmarkers +Browser=Twitturly + +[WinkBot/*] +Parent=Social Bookmarkers +Browser=WinkBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser=Translators +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser=Seram Server + +[TeragramWebcrawler/*] +Parent=Translators +Browser=TeragramWebcrawler +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser=WorldLingo + +[WebTrans] +Parent=Translators +Browser=WebTrans + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser=Version Checkers +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser=Automated Browscap.ini Updater + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser=BMC Link Validator +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[Browscap updater] +Parent=Version Checkers +Browser=Browscap updater + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser=Gary Keith's Version Checker + +[Browser Capabilities Project AutoDownloader] +Parent=Version Checkers +Browser=TKC AutoDownloader + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Code Sample Web Client] +Parent=Version Checkers +Browser=Code Sample Web Client + +[Desktop Sidebar*] +Parent=Version Checkers +Browser=Desktop Sidebar +isBanned=true + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser=Mono Browser Capabilities Updater +isBanned=true + +[Rewmi/*] +Parent=Version Checkers +isBanned=true + +[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] +Parent=Version Checkers +Browser=Subtext + +[TherapeuticResearch] +Parent=Version Checkers +Browser=TherapeuticResearch + +[UpdateBrowscap*] +Parent=Version Checkers +Browser=UpdateBrowscap + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser=clarkson.edu + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser=Substncia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser=Become +Frames=true +Tables=true +isSyndicationReader=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser=BecomeBot + +[*BecomeBot@exava.com*] +Parent=Become +Browser=BecomeBot + +[*Exabot@exava.com*] +Parent=Become +Browser=Exabot + +[MonkeyCrawl/*] +Parent=Become +Browser=MonkeyCrawl + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser=BecomeJPBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems + +[Blue Coat Systems] +Parent=DefaultProperties +Browser=Blue Coat Systems +isBanned=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers + +[Browscap Abusers] +Parent=DefaultProperties +Browser=Browscap Abusers +isBanned=true + +[Apple-PubSub/*] +Parent=Browscap Abusers +Browser=Apple-PubSub + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub + +[FeedHub] +Parent=DefaultProperties +Browser=FeedHub +isSyndicationReader=true + +[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedDiscovery +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub MetaDataFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Internet Content Rating Association] +Parent=DefaultProperties +Browser= +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[ICRA_label_generator/1.?] +Parent=Internet Content Rating Association +Browser=ICRA_label_generator + +[ICRA_Semantic_spider/0.?] +Parent=Internet Content Rating Association +Browser=ICRA_Semantic_spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser=NameProtect +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser=NameProtect + +[NP/*] +Parent=NameProtect +Browser=NameProtect + +[NPBot*] +Parent=NameProtect +Browser=NameProtect + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft + +[Netcraft] +Parent=DefaultProperties +Browser=Netcraft +isBanned=true +Crawler=true + +[*Netcraft Web Server Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] +Parent=Netcraft +Browser=NetcraftSurveyAgent + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator + +[NewsGator] +Parent=DefaultProperties +Browser=NewsGator +isSyndicationReader=true + +[MarsEdit*] +Parent=NewsGator +Browser=MarsEdit + +[NetNewsWire*/*] +Parent=NewsGator +Browser=NetNewsWire +Platform=MacOSX + +[NewsFire/*] +Parent=NewsGator +Browser=NewsFire + +[NewsGator FetchLinks extension/*] +Parent=NewsGator +Browser=NewsGator FetchLinks + +[NewsGator/*] +Parent=NewsGator +Browser=NewsGator +isBanned=true + +[NewsGatorOnline/*] +Parent=NewsGator +Browser=NewsGatorOnline + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 + +[Chrome 0.2] +Parent=DefaultProperties +Browser=Chrome +Version=0.2 +MinorVer=2 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 + +[Chrome 0.3] +Parent=DefaultProperties +Browser=Chrome +Version=0.3 +MinorVer=3 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 + +[Chrome 0.4] +Parent=DefaultProperties +Browser=Chrome +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 + +[Chrome 0.5] +Parent=DefaultProperties +Browser=Chrome +Version=0.5 +MinorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 + +[Chrome 1.0] +Parent=DefaultProperties +Browser=Chrome +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 + +[Chrome 2.0] +Parent=DefaultProperties +Browser=Chrome +Version=2.0 +MajorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 + +[Chrome 3.0] +Parent=DefaultProperties +Browser=Chrome +Version=3.0 +MajorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code + +[Google Code] +Parent=DefaultProperties +Browser=Google Code +Tables=true +Cookies=true +JavaApplets=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 + +[Iron 0.2] +Parent=DefaultProperties +Browser=Iron +Version=0.2 +MinorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 + +[Iron 0.3] +Parent=DefaultProperties +Browser=Iron +Version=0.3 +MinorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 + +[Iron 0.4] +Parent=DefaultProperties +Browser=Iron +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod + +[iPod] +Parent=DefaultProperties +Browser=iPod +Platform=iPhone OSX +isMobileDevice=true + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] +Parent=iPod +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] +Parent=iPod + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes + +[iTunes] +Parent=DefaultProperties +Browser=iTunes +Platform=iPhone OSX + +[iTunes/* (Windows; ?)] +Parent=iTunes +Browser=iTunes +Platform=Win32 +Win32=true + +[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] +Parent=iTunes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser=Media Players +Cookies=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser=Microsoft NetShow + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser=RealPlayer +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser=MPlayer +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser=MPlayer +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser=MPlayer + +[RealPlayer*] +Parent=Media Players +Browser=RealPlayer + +[RMA/*] +Parent=Media Players +Browser=RMA + +[VLC media player*] +Parent=Media Players +Browser=VLC + +[vobsub] +Parent=Media Players +Browser=vobsub +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser=WinAmp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo + +[Nintendo Wii] +Parent=DefaultProperties +Browser= +isMobileDevice=true + +[Opera/* (Nintendo DSi; Opera/*; *; *)] +Parent=Nintendo Wii +Browser=DSi + +[Opera/* (Nintendo Wii; U; *)] +Parent=Nintendo Wii +Browser=Wii + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser=Windows Media Player +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser=Windows-Media-Player +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune + +[Zune] +Parent=DefaultProperties +Browser=Zune +Cookies=true + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] +Parent=Zune +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] +Parent=Zune +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] +Parent=Zune +Version=3.0 +MajorVer=3 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 + +[QuickTime 7.0] +Parent=DefaultProperties +Browser=QuickTime +Version=7.0 +MajorVer=7 +Cookies=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime 7.0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime 7.0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime 7.0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime 7.0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime 7.0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime 7.0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime 7.0 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 + +[QuickTime 7.1] +Parent=DefaultProperties +Browser=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Cookies=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime 7.1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime 7.1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime 7.1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime 7.1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime 7.1 +Platform=Win2003 +Win32=true + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 + +[QuickTime 7.2] +Parent=DefaultProperties +Browser=QuickTime +Version=7.2 +MajorVer=7 +MinorVer=2 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.2 +Platform=MacOSX + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.2 +Platform=MacPPC + +[QuickTime (qtver=7.2*;os=Windows 98*)] +Parent=QuickTime 7.2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] +Parent=QuickTime 7.2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] +Parent=QuickTime 7.2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] +Parent=QuickTime 7.2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] +Parent=QuickTime 7.2 +Platform=Win2003 +Win32=true + +[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 + +[QuickTime 7.3] +Parent=DefaultProperties +Browser=QuickTime +Version=7.3 +MajorVer=7 +MinorVer=3 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.3 +Platform=MacOSX + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.3 +Platform=MacPPC + +[QuickTime (qtver=7.3*;os=Windows 98*)] +Parent=QuickTime 7.3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] +Parent=QuickTime 7.3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] +Parent=QuickTime 7.3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] +Parent=QuickTime 7.3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] +Parent=QuickTime 7.3 +Platform=Win2003 +Win32=true + +[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.3 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 + +[QuickTime 7.4] +Parent=DefaultProperties +Browser=QuickTime +Version=7.4 +MajorVer=7 +MinorVer=4 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.4 +Platform=MacOSX + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.4 +Platform=MacPPC + +[QuickTime (qtver=7.4*;os=Windows 98*)] +Parent=QuickTime 7.4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] +Parent=QuickTime 7.4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] +Parent=QuickTime 7.4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] +Parent=QuickTime 7.4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] +Parent=QuickTime 7.4 +Platform=Win2003 +Win32=true + +[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.4 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android + +[Android] +Parent=DefaultProperties +Browser=Android +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser=BlackBerry +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*BlackBerry*] +Parent=BlackBerry + +[*BlackBerrySimulator/*] +Parent=BlackBerry + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser=Handspring Blazer +Platform=Palm +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] +Parent=Blazer +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] +Parent=Blazer +Version=4.2 +MajorVer=4 +MinorVer=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] +Parent=Blazer +Version=4.4 +MajorVer=4 +MinorVer=4 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] +Parent=Blazer +Version=4.5 +MajorVer=4 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser=DoCoMo +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile + +[IEMobile] +Parent=DefaultProperties +Browser=IEMobile +Platform=WinCE +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] +Parent=IEMobile +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] +Parent=IEMobile +Version=7.0 +MajorVer=7 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone + +[iPhone] +Parent=DefaultProperties +Browser=iPhone +Platform=iPhone OSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=3 +supportsCSS=true + +[Mozilla/4.0 (iPhone; *)] +Parent=iPhone + +[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] +Parent=iPhone +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] +Parent=iPhone +Browser=iTouch + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] +Parent=iPhone +Browser=iTouch +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser=KDDI +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[KDDI-* UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile + +[Miscellaneous Mobile] +Parent=DefaultProperties +Browser= +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] +Parent=Miscellaneous Mobile +Browser=Bolt + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Internet Browser] +Parent=DefaultProperties +Browser=Motorola Internet Browser +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[MOT-*/*] +Parent=Motorola Internet Browser + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T*/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy + +[MSN Mobile Proxy] +Parent=DefaultProperties +Browser=MSN Mobile Proxy +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true + +[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] +Parent=MSN Mobile Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser=NetFront +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*NetFront/*] +Parent=NetFront + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser=Nokia +Tables=true +Cookies=true +isMobileDevice=true + +[*Nokia*/*] +Parent=Nokia + +[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Nokia +Platform=SymbianOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser=Openwave Mobile Browser +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini + +[Opera Mini] +Parent=DefaultProperties +Browser=Opera Mini +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] +Parent=Opera Mini +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] +Parent=Opera Mini +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] +Parent=Opera Mini +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] +Parent=Opera Mini +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] +Parent=Opera Mini +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] +Parent=Opera Mini +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] +Parent=Opera Mini +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] +Parent=Opera Mini +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] +Parent=Opera Mini +Version=4.2 +MajorVer=4 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile + +[Opera Mobile] +Parent=DefaultProperties +Browser=Opera Mobi +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] +Parent=Opera Mobile +Version=9.51 +MajorVer=9 +MinorVer=51 +Beta=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser=Playstation +Platform=WAP +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/* (PLAYSTATION *; *)] +Parent=Playstation +Browser=PlayStation 3 +Frames=false + +[Mozilla/* (PSP (PlayStation Portable); *)] +Parent=Playstation + +[Sony PS2 (Linux)] +Parent=Playstation +Browser=Sony PS2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser=Pocket PC +Platform=WinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*(compatible; MSIE *.*; Windows CE; PPC; *)] +Parent=Pocket PC + +[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] +Parent=Pocket PC +Win32=true + +[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] +Parent=Pocket PC +Win32=true + +[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] +Parent=Pocket PC + +[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] +Parent=Pocket PC + +[Windows CE (Pocket PC) - Version *.*] +Parent=Pocket PC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser=SEMC Browser +Platform=JAVA +Tables=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson + +[SonyEricsson] +Parent=DefaultProperties +Browser=SonyEricsson +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*Ericsson*] +Parent=SonyEricsson + +[*SonyEricsson*] +Parent=SonyEricsson + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser=Netbox +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser=Netbox +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser=PowerTV +Platform=PowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser=WebTV/MSNTV +Platform=WebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser=Amaya +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser=Links +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser=Links +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +[Links (2.2*; FreeBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=FreeBSD + +[Links (2.2*; Linux *)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=Linux + +[Links (2.2*; OpenBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser=Lynx +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser=Lynx + +[Lynx/2.3*] +Parent=Lynx +Browser=Lynx +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser=Lynx +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser=Lynx +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser=Lynx +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser=Lynx +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser=Lynx +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser=w3m +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser=w3m +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser=w3m +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser=w3m +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser=w3m +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser=w3m +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 + +[ELinks 0.10] +Parent=DefaultProperties +Browser=ELinks +Version=0.10 +MinorVer=10 +Frames=true +Tables=true + +[ELinks (0.10*; *AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks (0.10*; *BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks (0.10*; *CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks (0.10*; *Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks (0.10*; *Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks (0.10*; *FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks (0.10*; *HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks (0.10*; *IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks (0.10*; *Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks (0.10*; *NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks (0.10*; *OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks (0.10*; *OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks (0.10*; *RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks (0.10*; *Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks (0.10*; *Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +[ELinks/0.10* (*AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks/0.10* (*BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks/0.10* (*CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks/0.10* (*Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks/0.10* (*Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks/0.10* (*FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks/0.10* (*HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks/0.10* (*IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks/0.10* (*Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks/0.10* (*NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks/0.10* (*OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks/0.10* (*OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks/0.10* (*RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks/0.10* (*Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks/0.10* (*Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 + +[ELinks 0.11] +Parent=DefaultProperties +Browser=ELinks +Version=0.11 +MinorVer=11 +Frames=true +Tables=true + +[ELinks (0.11*; *AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks (0.11*; *BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks (0.11*; *CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks (0.11*; *Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks (0.11*; *Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks (0.11*; *HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks (0.11*; *IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks (0.11*; *Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks (0.11*; *NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks (0.11*; *OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks (0.11*; *OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks (0.11*; *RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks (0.11*; *Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks (0.11*; *Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +[ELinks/0.11* (*AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks/0.11* (*BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks/0.11* (*CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks/0.11* (*Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks/0.11* (*Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks/0.11* (*FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks/0.11* (*HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks/0.11* (*IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks/0.11* (*Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks/0.11* (*NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks/0.11* (*OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks/0.11* (*OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks/0.11* (*RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks/0.11* (*Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks/0.11* (*Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 + +[ELinks 0.12] +Parent=DefaultProperties +Browser=ELinks +Version=0.12 +MinorVer=12 +Frames=true +Tables=true + +[ELinks (0.12*; *AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks (0.12*; *BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks (0.12*; *CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks (0.12*; *Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks (0.12*; *Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks (0.12*; *FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks (0.12*; *HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks (0.12*; *IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks (0.12*; *Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks (0.12*; *NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks (0.12*; *OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks (0.12*; *OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks (0.12*; *RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks (0.12*; *Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks (0.12*; *Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +[ELinks/0.12* (*AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks/0.12* (*BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks/0.12* (*CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks/0.12* (*Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks/0.12* (*Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks/0.12* (*FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks/0.12* (*HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks/0.12* (*IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks/0.12* (*Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks/0.12* (*NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks/0.12* (*OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks/0.12* (*OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks/0.12* (*RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks/0.12* (*Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks/0.12* (*Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 + +[ELinks 0.9] +Parent=DefaultProperties +Browser=ELinks +Version=0.9 +MinorVer=9 +Frames=true +Tables=true + +[ELinks (0.9*; *AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks (0.9*; *BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks (0.9*; *CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks (0.9*; *Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks (0.9*; *Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks (0.9*; *FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks (0.9*; *HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks (0.9*; *IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks (0.9*; *Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks (0.9*; *NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks (0.9*; *OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks (0.9*; *OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks (0.9*; *RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks (0.9*; *Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks (0.9*; *Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +[ELinks/0.9* (*AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks/0.9* (*BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks/0.9* (*CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks/0.9* (*Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks/0.9* (*Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks/0.9* (*HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks/0.9* (*IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks/0.9* (*Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks/0.9* (*NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks/0.9* (*OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks/0.9* (*OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks/0.9* (*RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks/0.9* (*Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks/0.9* (*Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit + +[AppleWebKit] +Parent=DefaultProperties +Browser=AppleWebKit +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] +Parent=AppleWebKit + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser=Camino +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] +Parent=Camino +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] +Parent=Camino +Version=1.4 +MajorVer=1 +MinorVer=4 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] +Parent=Camino +Version=1.5 +MajorVer=1 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] +Parent=Camino +Version=1.6 +MajorVer=1 +MinorVer=6 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser=Chimera +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser=Dillo +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +[Dillo/2.0] +Parent=Dillo +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser=Emacs/W3 +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser=fantomas +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser=fantomas cloakBrowser + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser=fantomas shadowMaker Browser + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser=fantomas fantomBrowser + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser=fantomas fantomCrew Browser + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser=fantomas stealthBrowser + +[multiBlocker browser*] +Parent=fantomas +Browser=fantomas multiBlocker browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser=FrontPage +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser=Galeon +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser=HP Secure Web Browser +Platform=OpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser=IBrowse +Platform=Amiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser=iCab +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[iCab/4.0 (Macintosh; U; *Mac OS X)] +Parent=iCab +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser=iSiloX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser=Lycoris Desktop/LX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser=NetPositive +Platform=BeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser=OmniWeb +Platform=MacOSX +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] +Parent=OmniWeb +Version=5. +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser=Shiira +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] +Parent=Shiira +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] +Parent=Shiira +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Windows Maker] +Parent=DefaultProperties +Browser=WMaker +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[WMaker*] +Parent=Windows Maker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 + +[K-Meleon 1.0] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 + +[K-Meleon 1.1] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.1 +MajorVer=1 +MinorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 + +[K-Meleon 1.5] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.5 +MajorVer=1 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 + +[Konqueror 3.0] +Parent=DefaultProperties +Browser=Konqueror +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[*Konqueror/3.0*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 + +[Konqueror 4.0] +Parent=DefaultProperties +Browser=Konqueror +Version=4.0 +MajorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 + +[Konqueror 4.1] +Parent=DefaultProperties +Browser=Konqueror +Version=4.1 +MajorVer=4 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 + +[Konqueror 4.2] +Parent=DefaultProperties +Browser=Konqueror +Version=4.2 +MajorVer=4 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser=Safari +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 + +[Safari 3.0] +Parent=DefaultProperties +Browser=Safari +Version=3.0 +MajorVer=3 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 + +[Safari 3.1] +Parent=DefaultProperties +Browser=Safari +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 + +[Safari 3.2] +Parent=DefaultProperties +Browser=Safari +Version=3.2 +MajorVer=3 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 + +[Safari 4.0] +Parent=DefaultProperties +Browser=Safari +Version=4.0 +MajorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 + +[Opera 10.0] +Parent=DefaultProperties +Browser=Opera +Version=10.0 +MajorVer=10 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] +Parent=Opera 10.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 10.0 +Platform=MacOSX + +[Opera/10.0* (Windows 95*)*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Opera/10.0* (Windows 98*)*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Opera/10.0* (Windows CE*)*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Opera/10.0* (Windows ME*)*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Opera/10.0* (Windows NT 4.0*)*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Opera/10.0* (Windows NT 5.0*)*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Opera/10.0* (Windows NT 5.1*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (Windows NT 5.2*)*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Opera/10.0* (Windows NT 6.0*)*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Opera/10.0* (Windows NT 6.1*)*] +Parent=Opera 10.0 +Platform=Win7 + +[Opera/10.0* (Windows XP*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (X11; FreeBSD*)*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Opera/10.0* (X11; Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (X11; SunOS*)*] +Parent=Opera 10.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser=Opera +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser=Opera +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser=Opera +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser=Opera +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser=Opera +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser=Opera +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser=Opera +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser=Opera +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser=Opera +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser=Opera +Version=9.1 +MajorVer=9 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (X11; SunOS*)*] +Parent=Opera 9.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 + +[Opera 9.2] +Parent=DefaultProperties +Browser=Opera +Version=9.2 +MajorVer=9 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] +Parent=Opera 9.2 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.2 +Platform=MacOSX + +[Opera/9.2* (Windows 95*)*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Opera/9.2* (Windows 98*)*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Opera/9.2* (Windows CE*)*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Opera/9.2* (Windows ME*)*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Opera/9.2* (Windows NT 4.0*)*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Opera/9.2* (Windows NT 5.0*)*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Opera/9.2* (Windows NT 5.1*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (Windows NT 5.2*)*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Opera/9.2* (Windows NT 6.0*)*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Opera/9.2* (Windows NT 6.1*)*] +Parent=Opera 9.2 +Platform=Win7 + +[Opera/9.2* (Windows XP*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (X11; FreeBSD*)*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Opera/9.2* (X11; Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (X11; SunOS*)*] +Parent=Opera 9.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 + +[Opera 9.3] +Parent=DefaultProperties +Browser=Opera +Version=9.3 +MajorVer=9 +MinorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] +Parent=Opera 9.3 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.3 +Platform=MacOSX + +[Opera/9.3* (Windows 95*)*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Opera/9.3* (Windows 98*)*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Opera/9.3* (Windows CE*)*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Opera/9.3* (Windows ME*)*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Opera/9.3* (Windows NT 4.0*)*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Opera/9.3* (Windows NT 5.0*)*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Opera/9.3* (Windows NT 5.1*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (Windows NT 5.2*)*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Opera/9.3* (Windows NT 6.0*)*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Opera/9.3* (Windows NT 6.1*)*] +Parent=Opera 9.3 +Platform=Win7 + +[Opera/9.3* (Windows XP*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (X11; FreeBSD*)*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Opera/9.3* (X11; Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (X11; SunOS*)*] +Parent=Opera 9.3 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 + +[Opera 9.4] +Parent=DefaultProperties +Browser=Opera +Version=9.4 +MajorVer=9 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] +Parent=Opera 9.4 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.4 +Platform=MacOSX + +[Opera/9.4* (Windows 95*)*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Opera/9.4* (Windows 98*)*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Opera/9.4* (Windows CE*)*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Opera/9.4* (Windows ME*)*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Opera/9.4* (Windows NT 4.0*)*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Opera/9.4* (Windows NT 5.0*)*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Opera/9.4* (Windows NT 5.1*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (Windows NT 5.2*)*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Opera/9.4* (Windows NT 6.0*)*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Opera/9.4* (Windows NT 6.1*)*] +Parent=Opera 9.4 +Platform=Win7 + +[Opera/9.4* (Windows XP*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (X11; FreeBSD*)*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Opera/9.4* (X11; Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (X11; SunOS*)*] +Parent=Opera 9.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 + +[Opera 9.5] +Parent=DefaultProperties +Browser=Opera +Version=9.5 +MajorVer=9 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] +Parent=Opera 9.5 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.5 +Platform=MacOSX + +[Opera/9.5* (Windows 95*)*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Opera/9.5* (Windows 98*)*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Opera/9.5* (Windows CE*)*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Opera/9.5* (Windows ME*)*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Opera/9.5* (Windows NT 4.0*)*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Opera/9.5* (Windows NT 5.0*)*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Opera/9.5* (Windows NT 5.1*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (Windows NT 5.2*)*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Opera/9.5* (Windows NT 6.0*)*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Opera/9.5* (Windows NT 6.1*)*] +Parent=Opera 9.5 +Platform=Win7 + +[Opera/9.5* (Windows XP*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (X11; FreeBSD*)*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Opera/9.5* (X11; Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (X11; SunOS*)*] +Parent=Opera 9.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 + +[Opera 9.6] +Parent=DefaultProperties +Browser=Opera +Version=9.6 +MajorVer=9 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] +Parent=Opera 9.6 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.6 +Platform=MacOSX + +[Opera/9.6* (Windows 95*)*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Opera/9.6* (Windows 98*)*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Opera/9.6* (Windows CE*)*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Opera/9.6* (Windows ME*)*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Opera/9.6* (Windows NT 4.0*)*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Opera/9.6* (Windows NT 5.0*)*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Opera/9.6* (Windows NT 5.1*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (Windows NT 5.2*)*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Opera/9.6* (Windows NT 6.0*)*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Opera/9.6* (Windows NT 6.1*)*] +Parent=Opera 9.6 +Platform=Win7 + +[Opera/9.6* (Windows XP*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (X11; FreeBSD*)*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Opera/9.6* (X11; Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (X11; SunOS*)*] +Parent=Opera 9.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser=Netscape +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser=Netscape +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser=Netscape +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser=Netscape +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser=Netscape +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser=Netscape +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser=Netscape +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser=Netscape +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser=Netscape +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser=Netscape +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser=Netscape +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser=Netscape +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser=Netscape +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 + +[SeaMonkey 1.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 + +[SeaMonkey 1.1] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.1 +MajorVer=1 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 + +[SeaMonkey 2.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=2.0 +MajorVer=2 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 + +[Flock 1.0] +Parent=DefaultProperties +Browser=Flock +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 + +[Flock 2.0] +Parent=DefaultProperties +Browser=Flock +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 + +[Sleipnir] +Parent=DefaultProperties +Browser=Sleipnir +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win7 + +[Sleipnir*] +Parent=Sleipnir + +[Sleipnir/2.*] +Parent=Sleipnir + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 + +[Fennec 1.0] +Parent=DefaultProperties +Browser=Firefox Mobile +Version=1.0 +MajorVer=1 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser=Firebird +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser=Firefox +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser=Firefox +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser=Firefox +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser=Firefox +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser=Firefox +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser=Firefox +Version=3.0 +MajorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 + +[Firefox 3.1] +Parent=DefaultProperties +Browser=Firefox +Version=3.1 +MajorVer=3 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 + +[Firefox 3.5] +Parent=DefaultProperties +Browser=Firefox +Version=3.5 +MajorVer=3 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser=Phoenix +Version=0.5 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel + +[Iceweasel] +Parent=DefaultProperties +Browser=Iceweasel +Platform=Linux +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] +Parent=Iceweasel +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser=Mozilla +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser=Mozilla +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser=Mozilla +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser=Mozilla +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser=Mozilla +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser=Mozilla +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser=Mozilla +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser=Mozilla +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser=Mozilla +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 + +[Mozilla 1.9] +Parent=DefaultProperties +Browser=Mozilla +Version=1.9 +MajorVer=1 +MinorVer=9 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser=IE +Platform=MacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser=AOL +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser=AOL +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser=AOL +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser + +[Avant Browser] +Parent=DefaultProperties +Browser=Avant Browser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Advanced Browser (http://www.avantbrowser.com)] +Parent=Avant Browser + +[Avant Browser*] +Parent=Avant Browser + +[Avant Browser/*] +Parent=Avant Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser=IE +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] +Parent=IE 4.01 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser=IE +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser=IE +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser=IE +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser=IE +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 +msdomversion=6.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser=IE +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=7.0 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] +Parent=IE 7.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] +Parent=IE 7.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 + +[IE 8.0] +Parent=DefaultProperties +Browser=IE +Version=8.0 +MajorVer=8 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=8.0 +w3cdomversion=1.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] +Parent=IE 8.0 +Platform=Win32 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] +Parent=IE 8.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] +Parent=IE 8.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] +Parent=IE 8.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser=Default Browser +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +AuthenticodeUpdate=0 +CSS=0 +WAP=false +netCLR=false +ClrVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/config b/Source/Platforms/UWP/Binaries/Mono/etc/mono/config new file mode 100644 index 000000000..385128f74 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/UWP/Binaries/Mono/etc/mono/mconfig/config.xml b/Source/Platforms/UWP/Binaries/Mono/etc/mono/mconfig/config.xml new file mode 100644 index 000000000..a3df3b5e9 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/etc/mono/mconfig/config.xml @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + +
+
+
+ + + + + +
+ +
+
+
+
+ + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +]]> + + + + + + + +
+
+
+ + + + + +
+ +
+
+
+ + + + ]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + + + ]]> + + + + + + ]]> + + + + + + ]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +
+
+
+
+
+
+ + diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Accessibility.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Mono.Security.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Configuration.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Core.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Deployment.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Drawing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Json.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Management.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Messaging.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Numerics.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Security.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Transactions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xaml.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/WindowsBase.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/mscorlib.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/mscorlib.dll new file mode 100644 index 000000000..7b6afe057 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/4.5/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1945a39b4cc3ff3d16d1ed359fca1399248b54dc41da14c51db37ace45eddf9 +size 4498432 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/UWP/Binaries/Newtonsoft.Json.dll b/Source/Platforms/UWP/Binaries/Newtonsoft.Json.dll new file mode 100644 index 000000000..4c908a1ce --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Newtonsoft.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a753e82f0d128171be8df8693872615974526e41200105c2853d54283014e1d3 +size 624640 diff --git a/Source/Platforms/UWP/Binaries/Newtonsoft.Json.pdb b/Source/Platforms/UWP/Binaries/Newtonsoft.Json.pdb new file mode 100644 index 000000000..ae45100f6 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Newtonsoft.Json.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b999346525f40ccb72ecbc560462d94c8c2cce6fa515722b8f2a53f0fa334b4f +size 236420 diff --git a/Source/Platforms/UWP/Binaries/Newtonsoft.Json.xml b/Source/Platforms/UWP/Binaries/Newtonsoft.Json.xml new file mode 100644 index 000000000..5e472c8a0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Newtonsoft.Json.xml @@ -0,0 +1,10588 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets a value indicating whether integer values are allowed when deserializing. + The default value is true. + + true if integers are allowed when deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the used when serializing the property's collection items. + + The collection's items . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Clears all the cached types, attributes and methods to release references to any types of the other assemblies. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified difference to the other object of the same type. and writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + The reference object. + + + + Serializes the specified difference to the other object of the same type. Writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + The reference object. + + + + Serializes the specified difference to the other object of the same type. Writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + The reference object. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + The reference object. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + + The JSON line info handling. + + + + Specifies the settings used when merging JSON. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A , or null. + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + The JSON writer. + + + + + + Gets the size of the serialize stack (amount of the objects serialized in the hierachy before the current). + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Helper utilities. + + + + + Compares two objects data. + + The object a. + The object b. + True if both objects are equal, otherwise false. + + + + The custom value comparision callback. + + + + + The default implementation of the values comparision function. + + The object a. + The object b. + True if both objects are equal, otherwise false. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + diff --git a/Source/Platforms/UWP/Binaries/Package.appxmanifest b/Source/Platforms/UWP/Binaries/Package.appxmanifest new file mode 100644 index 000000000..fefe3b93d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Package.appxmanifest @@ -0,0 +1,34 @@ + + + + + + {0} + {1} + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/Project.csproj b/Source/Platforms/UWP/Binaries/Project.csproj new file mode 100644 index 000000000..c6c48c200 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Project.csproj @@ -0,0 +1,127 @@ + + + + + Release + {1} + {2} + AppContainerExe + Properties + {4} + {0} + en-US + UAP + 10.0.17763.0 + 10.0.15063.0 + 14 + 512 + {{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A}};{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}} + true + WSACertificate.pfx + + + true + bin\{1}\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;FLAX_UWP + ;2008 + full + {1} + false + prompt + true + + + bin\{1}\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP;FLAX_UWP + true + ;2008 + pdbonly + {1} + false + prompt + true + true + + + PackageReference + + + + + + + + + Designer + + + + {3} + + + + + + + + + + + + + + + + + + + 6.0.1 + + + + + FlaxEngine.winmd + + + + + Visual C++ 2015 Runtime for Universal Windows Platform Apps + + + Visual C++ 2015 UWP Desktop Runtime for native apps + + + + + 14.0 + + + + + + + + + + + + + + <_GenerateAppxManifestDependsOn> + ModifyAppXPackage; + $(_GenerateAppxManifestDependsOn) + + + + + + + FlaxEngine.dll + + + Mono\%(RecursiveDir)%(Filename)%(Extension) + + + + + \ No newline at end of file diff --git a/Source/Platforms/UWP/Binaries/Solution.sln b/Source/Platforms/UWP/Binaries/Solution.sln new file mode 100644 index 000000000..b40534bb0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Solution.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2006 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}") = "{0}", "{0}.csproj", "{2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|{1} = Debug|{1} + Release|{1} = Release|{1} + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2}.Debug|{1}.ActiveCfg = Debug|{1} + {2}.Debug|{1}.Build.0 = Debug|{1} + {2}.Debug|{1}.Deploy.0 = Debug|{1} + {2}.Release|{1}.ActiveCfg = Release|{1} + {2}.Release|{1}.Build.0 = Release|{1} + {2}.Release|{1}.Deploy.0 = Release|{1} + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {{67F59049-E9C3-4BD3-979B-696F64AED75C}} + EndGlobalSection +EndGlobal diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/DirectXTex.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/DirectXTex.lib new file mode 100644 index 000000000..142c20c74 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/DirectXTex.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b15ce907e25fc731cf84cc85b4d8dbafec4b8ef5ecb1c88d3fca1da3e363a08 +size 9981608 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/DirectXTex.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/DirectXTex.pdb new file mode 100644 index 000000000..70429bc4b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/DirectXTex.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dac7713181ffee6b188a655f5cf258b55c8ff0632d18e85cfd49bbecd6ebd28a +size 17551360 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/MonoPosixHelper.dll b/Source/Platforms/UWP/Binaries/ThirdParty/x64/MonoPosixHelper.dll new file mode 100644 index 000000000..6c2777d69 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/MonoPosixHelper.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9229b614fc385ef8301d2aef81ed5858a9d57231dc05d754ca516bdcc8a84cec +size 160256 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib new file mode 100644 index 000000000..c888ffd30 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0571528452727fee3a549ed5af34e8e490f2fc110242c31c9e2d7ddc83233994 +size 1160130 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb new file mode 100644 index 000000000..435dfa81b --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b161b975752a45a3f2962253e60acd1d6dfc537fc1eb79901dc816ea46b52a98 +size 602112 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib new file mode 100644 index 000000000..5f72568a4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d87ec531014f81cb37b856c1dee7d6aaceefb0fc0df845bad11a684c760ebb9e +size 17406032 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb new file mode 100644 index 000000000..623b3dee2 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d0a565064744bca4e999549a7c4ff9c4b409c95323499386b2dbf9f471119ccf +size 1052672 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib new file mode 100644 index 000000000..b5ecda9d7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4829f63d35c4a13fb74b76434034ce5c31088a1d20962f6a3ace8da48195c908 +size 1895882 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb new file mode 100644 index 000000000..5cb4419ab --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c6c8f83a948442b243dfe964f441e235c0c7b9a82d5eb66c51e0c3e0b39d8bf +size 634880 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib new file mode 100644 index 000000000..8498518d4 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7827629e569c2fecb9a8297540e2fd96a0096cfe7e11021f39b094220416e82e +size 9502710 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb new file mode 100644 index 000000000..5e4f7f7bd --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23b4209baa69da95ed349b29a09cb40cc58bd1dcc107ec7eba2c4c5a59c0e285 +size 3461120 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib new file mode 100644 index 000000000..7793462ae --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:29ceab6e7982a7eee1fcb08bcbd14da2c5eb5db2cf2baf3e7b3f3877ea2af6f8 +size 953572 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb new file mode 100644 index 000000000..d0e993c4e --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b5776536edb32d48cb260715bc300cf62bbb3cd633422c28f89f8bbdc9b0bef +size 397312 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib new file mode 100644 index 000000000..04a12cc7d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1abc62ab207c381493d527ade096ca18bd5fdfb95de261cb3a786c93d475abd +size 1940572 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb new file mode 100644 index 000000000..e791352df --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b216451e6c8709b8cfbe9c4500fc8c99cafea96e79c5977fa464f7f92eeb4543 +size 921600 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib new file mode 100644 index 000000000..f03c17fb7 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ac6081bd15cc37822b7cf9bf3cb7e58ece2855d28ced1fff400d11943e951ce +size 5114896 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb new file mode 100644 index 000000000..f638c05a1 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:09fd3bab5ff2ee97a29e0ba3f926874afe2498ba2093c4b872b1c4adf5f904cd +size 3125248 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysX_static_64.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysX_static_64.lib new file mode 100644 index 000000000..ce8e79f48 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysX_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f9743ffe79198c2f477de893d2c858d328f401e6f59ed1e93fce136bf84e48 +size 28750814 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysX_static_64.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysX_static_64.pdb new file mode 100644 index 000000000..831c56eb0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/PhysX_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:92c07fb1ddd180374be99bd9e119600afd5e38639f43a78c9e40d818f18e39d4 +size 3518464 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/eglib.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/eglib.pdb new file mode 100644 index 000000000..8c0341eb8 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/eglib.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4412227ccccf4a2c4e42f6211aeeecfe3f12b205e2819bc200b0e23a695f40db +size 159744 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/freetype.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/freetype.lib new file mode 100644 index 000000000..7a90fd32a --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/freetype.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:807983e2dbb0ec031ec38f8d7c4735ab841de95c66459122abcc25318dfc0b4c +size 3893188 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/freetype.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/freetype.pdb new file mode 100644 index 000000000..fb762114f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/freetype.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a789455e9555b93416f8c78cc415bd3d633e25fe7e5f6f7e8cbbc26778aabe8 +size 487424 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libgcmonosgen.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libgcmonosgen.pdb new file mode 100644 index 000000000..7aa31f99a --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libgcmonosgen.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8de524af2b8a1c29e5187b78cf7536a06c91c905558e7a3fc8f444e58b2d4f57 +size 331776 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmini.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmini.pdb new file mode 100644 index 000000000..578d1edb0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmini.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:234139c59328296d06669c4e88f36220da33490f4da355be8bf6d5bf8c5ff376 +size 864256 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmono-static.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmono-static.lib new file mode 100644 index 000000000..0d5d85095 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmono-static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c84bbda568d52415ca408e9cf9f31ffae68c48654a103d194f7d285d8bed03fe +size 22747622 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmonoruntime.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmonoruntime.pdb new file mode 100644 index 000000000..0d923338d --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmonoruntime.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e97918bf5bf9583b7567c0edc89c3ff8db5946429083bfba26990c64ac83ae04 +size 1249280 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmonoutils.pdb b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmonoutils.pdb new file mode 100644 index 000000000..f29e0d256 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libmonoutils.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bad5a80520d7cc717830d08a53e7b9f36f68bfb567cbd9a2a66f079674c9ba31 +size 348160 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libogg_static.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libogg_static.lib new file mode 100644 index 000000000..61f5a15e6 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libogg_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e7af4da0866d415488a21442dec7bdafa304bce8a5aae28b158bba94006c789 +size 38752 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libvorbis_static.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libvorbis_static.lib new file mode 100644 index 000000000..419e56fef --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libvorbis_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cac40df57ea48fa5649d5fdb7fb073692eeb1208e9436c507f67dac2b8d3f89 +size 1003650 diff --git a/Source/Platforms/UWP/Binaries/ThirdParty/x64/libvorbisfile_static.lib b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libvorbisfile_static.lib new file mode 100644 index 000000000..743b204c2 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/ThirdParty/x64/libvorbisfile_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab7e31480b7dc5682413e90bb417f8f5e825da179d510097755511e1bf2fec2a +size 65890 diff --git a/Source/Platforms/UWP/Binaries/Tools/clang.exe b/Source/Platforms/UWP/Binaries/Tools/clang.exe new file mode 100644 index 000000000..beb09b0e0 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Tools/clang.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:832d7963da0760a0bcce55c778c735289eba50983f1faa29176b4510a3cc6841 +size 37653272 diff --git a/Source/Platforms/UWP/Binaries/Tools/link.exe b/Source/Platforms/UWP/Binaries/Tools/link.exe new file mode 100644 index 000000000..a78eec640 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Tools/link.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4def50fac505213ea0e722450437f740804856108cc1849ef86f4f5222b04c76 +size 1747552 diff --git a/Source/Platforms/UWP/Binaries/Tools/mono-2.0-sgen.dll b/Source/Platforms/UWP/Binaries/Tools/mono-2.0-sgen.dll new file mode 100644 index 000000000..241309269 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Tools/mono-2.0-sgen.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:589c52b67e95becffe8ee2283907e612cd212c991eb19e76ecb625c745a77e31 +size 5994496 diff --git a/Source/Platforms/UWP/Binaries/Tools/mono.exe b/Source/Platforms/UWP/Binaries/Tools/mono.exe new file mode 100644 index 000000000..8288bd168 --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Tools/mono.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feff5cbd757e6fb535ce3c13307a5a2172a6aee8aa49dbb6425a4796988c92c4 +size 156160 diff --git a/Source/Platforms/UWP/Binaries/Tools/msobj140.dll b/Source/Platforms/UWP/Binaries/Tools/msobj140.dll new file mode 100644 index 000000000..4d8d547dc --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Tools/msobj140.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28fea8ab5a2b8fd082ad1479ce9b0a9c415bb3dc8039a18907693baf377fb69a +size 141968 diff --git a/Source/Platforms/UWP/Binaries/Tools/mspdbcore.dll b/Source/Platforms/UWP/Binaries/Tools/mspdbcore.dll new file mode 100644 index 000000000..901463d9f --- /dev/null +++ b/Source/Platforms/UWP/Binaries/Tools/mspdbcore.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0339235ca81ed7322fca3186fdddcad6d76f7ffeb72b0d07dcda2adaa809ed5b +size 631440 diff --git a/Source/Platforms/Windows/.gitignore b/Source/Platforms/Windows/.gitignore new file mode 100644 index 000000000..c07cf8bfe --- /dev/null +++ b/Source/Platforms/Windows/.gitignore @@ -0,0 +1,2 @@ +!Binaries/ +!*.* diff --git a/Source/Platforms/Windows/Binaries/.gitignore b/Source/Platforms/Windows/Binaries/.gitignore new file mode 100644 index 000000000..977f8d0c2 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/.gitignore @@ -0,0 +1,2 @@ +# Ignore build binaries +/Game/ \ No newline at end of file diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/machine.config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/machine.config new file mode 100644 index 000000000..2577c81dd --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/machine.config @@ -0,0 +1,280 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/settings.map b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/settings.map new file mode 100644 index 000000000..9a52ccc02 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/web.config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/web.config new file mode 100644 index 000000000..e1428f8c3 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/2.0/web.config @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/machine.config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/machine.config new file mode 100644 index 000000000..f3b71c43c --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/machine.config @@ -0,0 +1,307 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/settings.map b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/web.config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/web.config new file mode 100644 index 000000000..2a7dfd2ed --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.0/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/machine.config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/machine.config new file mode 100644 index 000000000..455709536 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/machine.config @@ -0,0 +1,310 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/settings.map b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/web.config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/web.config new file mode 100644 index 000000000..324c529f0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/4.5/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/browscap.ini b/Source/Platforms/Windows/Binaries/Mono/etc/mono/browscap.ini new file mode 100644 index 000000000..1267e1deb --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/browscap.ini @@ -0,0 +1,16979 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT + +[GJK_Browscap_Version] +Version=4476 +Released=Wed, 17 Jun 2009 06:30:21 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser=DefaultProperties +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser=Ask +Frames=true +Tables=true +Crawler=true + +[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser=Teoma + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser=AskJeeves + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser=Baidu +Frames=true +Tables=true +Crawler=true + +[BaiduImageSpider*] +Parent=Baidu +Browser=BaiduImageSpider + +[Baiduspider*] +Parent=Baidu +Browser=BaiDu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser=Google +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot-Mobile +Frames=false +IFrames=false +Tables=false + +[*Google Wireless Transcoder*] +Parent=Google +Browser=Google Wireless Transcoder + +[AdsBot-Google (?http://www.google.com/adsbot.html)] +Parent=Google +Browser=AdsBot-Google + +[Feedfetcher-Google-iGoogleGadgets;*] +Parent=Google +Browser=iGoogleGadgets +isBanned=true +isSyndicationReader=true + +[Feedfetcher-Google;*] +Parent=Google +Browser=Feedfetcher-Google +isBanned=true +isSyndicationReader=true + +[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] +Parent=Google +Browser=Google OpenSocial + +[Google-Site-Verification/1.0] +Parent=Google +Browser=Google-Site-Verification + +[Google-Sitemaps/*] +Parent=Google +Browser=Google-Sitemaps + +[Googlebot-Image/*] +Parent=Google +Browser=Googlebot-Image +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser=googlebot-urlconsole + +[Googlebot-Video/1.0] +Parent=Google +Browser=Google-Video + +[Googlebot/2.1 (?http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/Test*] +Parent=Google +Browser=Googlebot/Test + +[gsa-crawler*] +Parent=Google +Browser=Google Search Appliance +isBanned=true + +[Mediapartners-Google*] +Parent=Google +Browser=Mediapartners-Google + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser=Google Desktop + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser=Google Toolbar +isBanned=true + +[Mozilla/5.0 (compatible; Google Keyword Tool;*)] +Parent=Google +Browser=Google Keyword Tool + +[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] +Parent=Google +Browser=Google Webmaster Tools + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser=Inktomi +Frames=true +Tables=true +Crawler=true + +[* (compatible;YahooSeeker/M1A1-R2D2; *)] +Parent=Inktomi +Browser=YahooSeeker-Mobile +Frames=false +Tables=false + +[Mozilla/4.0] +Parent=Inktomi + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser=Yahoo! RobotStudy +isBanned=true + +[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMC + +[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMF + +[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] +Parent=Inktomi +Browser=Y!J-AGENT/BMI + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Directory Engine + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser=Yahoo! Slurp China + +[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp + +[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] +Parent=Inktomi +Browser=Yahoo! Verifier +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser=Slurp/cat + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] +Parent=Inktomi +Browser=Yahoo-MMCrawler +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Scooter/*] +Parent=Inktomi +Browser=Scooter + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser=Scooter/3.3Y!CrawlX +Version=3.3 +MajorVer=3 +MinorVer=3 + +[slurp] +Parent=Inktomi +Browser=slurp + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser=Y!J-BSC +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser=Y!J-SRD +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser=Yahoo Mindset + +[Yahoo Pipes*] +Parent=Inktomi +Browser=Yahoo Pipes + +[Yahoo! Mindset] +Parent=Inktomi +Browser=Yahoo! Mindset + +[Yahoo! Slurp/Site Explorer] +Parent=Inktomi +Browser=Yahoo! Site Explorer + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser=Yahoo-Blogs + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser=Yahoo-MMAudVid + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser=Yahoo-MMCrawler +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser=YahooFeedSeeker +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser=YahooSeeker +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser=YahooSeeker/CafeKelsa + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser=YahooVideoSearch + +[YahooYSMcm*] +Parent=Inktomi +Browser=YahooYSMcm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser=MSN +Frames=true +Tables=true +Crawler=true + +[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=adidxbot + +[librabot/1.0 (*)] +Parent=MSN +Browser=librabot + +[llssbot/1.0] +Parent=MSN +Browser=llssbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSMOBOT/1.1*] +Parent=MSN +Browser=msnbot-mobile +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-Academic/1.0*] +Parent=MSN +Browser=MSNBot-Academic +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.0*] +Parent=MSN +Browser=msnbot-media +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.1*] +Parent=MSN +Browser=msnbot-media +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-News/1.0*] +Parent=MSN +Browser=MSNBot-News +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSNBot-NewsBlogs/1.0*] +Parent=MSN +Browser=MSNBot-NewsBlogs +Version=1 +MajorVer=1 +MinorVer=0 + +[msnbot-products] +Parent=MSN +Browser=msnbot-products + +[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=msnbot-webmaster tools + +[msnbot/1.0*] +Parent=MSN +Browser=msnbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.1*] +Parent=MSN +Browser=msnbot +Version=1.1 +MajorVer=1 +MinorVer=1 + +[msnbot/2.0b*] +Parent=MSN +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[MSR-ISRCCrawler] +Parent=MSN +Browser=MSR-ISRCCrawler + +[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=renlifangbot + +[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] +Parent=MSN +Browser=msnbot-mobile + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser=Yahoo +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser=Y!J + +[Mozilla/5.0 (Yahoo-Test/4.0*)] +Parent=Yahoo +Browser=Yahoo-Test +Version=4.0 +MajorVer=4 +MinorVer=0 + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser=Yahoo! Media +isBanned=true + +[My Browser] +Parent=Yahoo +Browser=Yahoo! My Browser + +[Y!OASIS/*] +Parent=Yahoo +Browser=Y!OASIS +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser=YahooYSMcm +Version=2.0 +MajorVer=2 +MinorVer=0 +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser=YRL_ODP_CRAWLER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser=Yandex +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] +Parent=Yandex +Browser=VisualParser +isBanned=true + +[YaDirectBot/*] +Parent=Yandex +Browser=YaDirectBot + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser=YandexBlog +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser=YandexSomething +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web + +[Best of the Web] +Parent=DefaultProperties +Browser=Best of the Web +Frames=true +Tables=true + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Feed Grabber +isSyndicationReader=true +Crawler=false + +[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Spider +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser=Boitho +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser=boitho.com-dc + +[boitho.com-robot/*] +Parent=Boitho +Browser=boitho.com-robot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser=Convera +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser=ConveraCrawler + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser=ConveraMultiMediaCrawler +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser=CrawlConvera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot + +[DotBot] +Parent=DefaultProperties +Browser=DotBot +Frames=true +Tables=true +isBanned=true +Crawler=true + +[DotBot/* (http://www.dotnetdotcom.org/*)] +Parent=DotBot + +[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] +Parent=DotBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb + +[Entireweb] +Parent=DefaultProperties +Browser=Entireweb +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] +Parent=Entireweb + +[Speedy Spider (*Beta/*)] +Parent=Entireweb + +[Speedy?Spider?(http://www.entireweb.com*)] +Parent=Entireweb + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser=Envolk +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser=Exalead +Frames=true +Tables=true +isBanned=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser=Exabot-Images +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot-Test/*] +Parent=Exalead +Browser=Exabot-Test + +[Exabot/2.0] +Parent=Exalead +Browser=Exabot + +[Exabot/3.0] +Parent=Exalead +Browser=Exabot +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser=Exalead NG +isBanned=true + +[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] +Parent=Exalead +Browser=Exabot-Images + +[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] +Parent=Exalead +Browser=Exabot/BiggerBetter/tests + +[Mozilla/5.0 (compatible; Exabot/3.0;*)] +Parent=Exalead +Browser=Exabot +isBanned=false + +[Mozilla/5.0 (compatible; NGBot/*)] +Parent=Exalead + +[ng/*] +Parent=Exalead +Browser=Exalead Previewer +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser=Fast/AllTheWeb +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST Enterprise Crawler + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser=FAST Data Search Document Retriever + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser=FAST MetaWeb Crawler + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/FirstPage + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Fresh + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Multimedia + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser=FastSearch Web Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot + +[Gigabot] +Parent=DefaultProperties +Browser=Gigabot +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Gigabot*] +Parent=Gigabot + +[GigabotSiteSearch/*] +Parent=Gigabot +Browser=GigabotSiteSearch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser=Ilse +Frames=true +Tables=true +Crawler=true + +[IlseBot/*] +Parent=Ilse + +[INGRID/?.0*] +Parent=Ilse +Browser=Ilse + +[Mozilla/3.0 (INGRID/*] +Parent=Ilse +Browser=Ilse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project + +[iVia Project] +Parent=DefaultProperties +Browser=iVia Project +Frames=true +IFrames=true +Tables=true +Crawler=true + +[DataFountains/DMOZ Downloader*] +Parent=iVia Project +Browser=DataFountains/DMOZ Downloader +isBanned=true + +[DataFountains/DMOZ Feature Vector Corpus Creator*] +Parent=iVia Project +Browser=DataFountains/DMOZ Feature Vector Corpus + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser=Jayde Online +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser=ExactSeek Crawler + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser=exactseek-pagereaper +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser=exactseek.com + +[Jayde Crawler*] +Parent=Jayde Online +Browser=Jayde Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser=Lycos +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser=Lycos + +[Lycos-Proxy] +Parent=Lycos +Browser=Lycos-Proxy + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser=Lycos-Spider_(modspider) + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser=Lycos-Spider_(T-Rex) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser=Naver +isBanned=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver Cowbot + +[Mozilla/4.0 (compatible; NaverBot/*; *)] +Parent=Naver + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser=Naver NaverBot + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver NHN Corp + +[Yeti/*] +Parent=Naver +Browser=Yeti + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap + +[Snap] +Parent=DefaultProperties +Browser=Snap +isBanned=true +Crawler=true + +[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] +Parent=Snap + +[Snapbot/*] +Parent=Snap + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou + +[Sogou] +Parent=DefaultProperties +Browser=Sogou +Frames=true +Tables=true +isBanned=true +Crawler=true + +[shaboyi spider] +Parent=Sogou +Browser=Sogou/Shaboyi Spider + +[Sogou develop spider/*] +Parent=Sogou +Browser=Sogou Develop Spider + +[Sogou head spider*] +Parent=Sogou +Browser=Sogou/HEAD Spider + +[sogou js robot(*)] +Parent=Sogou + +[Sogou Orion spider/*] +Parent=Sogou +Browser=Sogou Orion spider + +[Sogou Pic Agent] +Parent=Sogou +Browser=Sogou/Image Crawler + +[Sogou Pic Spider] +Parent=Sogou +Browser=Sogou Pic Spider + +[Sogou Push Spider/*] +Parent=Sogou +Browser=Sogou Push Spider + +[sogou spider] +Parent=Sogou +Browser=Sogou/Spider + +[sogou web spider*] +Parent=Sogou +Browser=sogou web spider + +[Sogou-Test-Spider/*] +Parent=Sogou +Browser=Sogou-Test-Spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot + +[YodaoBot] +Parent=DefaultProperties +Browser=YodaoBot +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] +Parent=YodaoBot +Browser=YodaoBot-Image + +[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[YodaoBot/1.* (*)] +Parent=YodaoBot + +[Best Whois (http://www.bestwhois.net/)] +Parent=DNS Tools +Browser=Best Whois + +[DNSGroup/*] +Parent=DNS Tools +Browser=DNS Group Crawler + +[NG-Search/*] +Parent=Exalead +Browser=NG-SearchBot + +[TouchStone] +Parent=Feeds Syndicators +Browser=TouchStone +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser=General Crawlers +Crawler=true + +[A .NET Web Crawler] +Parent=General Crawlers +isBanned=true + +[BabalooSpider/1.*] +Parent=General Crawlers +Browser=BabalooSpider + +[BilgiBot/*] +Parent=General Crawlers +Browser=BilgiBot +isBanned=true + +[bot/* (bot; *bot@bot.bot)] +Parent=General Crawlers +Browser=bot +isBanned=true + +[CyberPatrol*] +Parent=General Crawlers +Browser=CyberPatrol +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser=Cynthia +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ddetailsbot (http://www.displaydetails.com)] +Parent=General Crawlers +Browser=ddetailsbot + +[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] +Parent=General Crawlers +Browser=DomainCrawler + +[DomainsBotBot/1.*] +Parent=General Crawlers +Browser=DomainsBotBot +isBanned=true + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser=DomainsDB + +[Drupal (*)] +Parent=General Crawlers +Browser=Drupal + +[Dumbot (version *)*] +Parent=General Crawlers +Browser=Dumbfind + +[EuripBot/*] +Parent=General Crawlers +Browser=Europe Internet Portal + +[eventax/*] +Parent=General Crawlers +Browser=eventax + +[FANGCrawl/*] +Parent=General Crawlers +Browser=Safe-t.net Web Filtering Service +isBanned=true + +[favorstarbot/*] +Parent=General Crawlers +Browser=favorstarbot +isBanned=true + +[FollowSite.com (*)] +Parent=General Crawlers +Browser=FollowSite +isBanned=true + +[Gaisbot*] +Parent=General Crawlers +Browser=Gaisbot + +[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] +Parent=General Crawlers +Browser=Healthbot +isBanned=true + +[hitcrawler_0.*] +Parent=General Crawlers +Browser=hitcrawler +isBanned=true + +[htdig/*] +Parent=General Crawlers +Browser=ht://Dig + +[http://hilfe.acont.de/bot.html ACONTBOT] +Parent=General Crawlers +Browser=ACONTBOT +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser=Omea Pro + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser=KakleBot + +[KBeeBot/0.*] +Parent=General Crawlers +Browser=KBeeBot +isBanned=true + +[Keyword Density/*] +Parent=General Crawlers +Browser=Keyword Density + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser=LetsCrawl.com +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser=Lincoln State Web Browser +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser=Links4US-Crawler +isBanned=true + +[Lorkyll *.* -- lorkyll@444.net] +Parent=General Crawlers +Browser=Lorkyll +isBanned=true + +[Lsearch/sondeur] +Parent=General Crawlers +Browser=Lsearch/sondeur +isBanned=true + +[LucidMedia ClickSense/4.?] +Parent=General Crawlers +Browser=LucidMedia-ClickSense +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser=MapoftheInternet +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser=MedHunt +Version=0.3 +MajorVer=0 +MinorVer=3 + +[masidani_bot_v0.6*] +Parent=General Crawlers +Browser=masidani_bot + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser=Metaspinner/0.01 +Version=0.01 +MajorVer=0 +MinorVer=01 + +[metatagsdir/*] +Parent=General Crawlers +Browser=metatagsdir +isBanned=true + +[Microsoft Windows Network Diagnostics] +Parent=General Crawlers +Browser=Microsoft Windows Network Diagnostics +isBanned=true + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser=Miva + +[moget/*] +Parent=General Crawlers +Browser=Goo + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser=Mozdex + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser=WebCapture + +[Mozilla/4.0 (compatible; DepSpid/*)] +Parent=General Crawlers +Browser=DepSpid + +[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] +Parent=General Crawlers +Browser=AVG + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser=Vonna.com +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser=MyFamilyBot + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser=N-Stealth + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Spider; Linux)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Win32)] +Parent=General Crawlers +Browser=Unknown Crawler +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +isBanned=true + +[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] +Parent=General Crawlers +Browser=Gnomit +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser=AboutUsBot +isBanned=true + +[Mozilla/5.0 (compatible; BuzzRankingBot/*)] +Parent=General Crawlers +Browser=BuzzRankingBot +isBanned=true + +[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] +Parent=General Crawlers +Browser=Diffbot + +[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] +Parent=General Crawlers +Browser=FirstSearchBot + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser=Healthdash + +[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] +Parent=General Crawlers +Browser=JadynAveBot +isBanned=true + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser=Kyluka + +[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] +Parent=General Crawlers +Browser=MJ12bot +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] +Parent=General Crawlers +Browser=Europe Web Archive + +[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] +Parent=General Crawlers +Browser=Seznam screenshot-generator +isBanned=true + +[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] +Parent=General Crawlers +Browser=Twingly Recon + +[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] +Parent=General Crawlers +Browser=UnWrap + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser=Vermut + +[Mozilla/5.0 (compatible; Webbot/*)] +Parent=General Crawlers +Browser=Webbot.ru +isBanned=true + +[n4p_bot*] +Parent=General Crawlers +Browser=n4p_bot + +[nabot*] +Parent=General Crawlers +Browser=Nabot + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser=NetCarta_WebMapper +isBanned=true + +[NetID.com Bot*] +Parent=General Crawlers +Browser=NetID.com Bot +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser=neTVision + +[NextopiaBOT*] +Parent=General Crawlers +Browser=NextopiaBOT + +[nicebot] +Parent=General Crawlers +Browser=nicebot +isBanned=true + +[niXXieBot?Foster*] +Parent=General Crawlers +Browser=niXXiebot-Foster + +[Nozilla/P.N (Just for IDS woring)] +Parent=General Crawlers +Browser=Nozilla/P.N +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser=Nudelsalat +isBanned=true + +[NV32ts] +Parent=General Crawlers +Browser=NV32ts +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser=Ocelli + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser=OpenTaggerBot + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser=Oracle Enterprise Search +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser=Oracle Ultra Search + +[Pajaczek/*] +Parent=General Crawlers +Browser=Pajaczek +isBanned=true + +[panscient.com] +Parent=General Crawlers +Browser=panscient.com +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser=Patwebbot + +[PDFBot (crawler@pdfind.com)] +Parent=General Crawlers +Browser=PDFBot + +[Pete-Spider/1.*] +Parent=General Crawlers +Browser=Pete-Spider +isBanned=true + +[PhpDig/*] +Parent=General Crawlers +Browser=PhpDig + +[PlantyNet_WebRobot*] +Parent=General Crawlers +Browser=PlantyNet +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt + +[PluckItCrawler/1.0 (*)] +Parent=General Crawlers +isMobileDevice=true + +[PMAFind] +Parent=General Crawlers +Browser=PMAFind +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser=Poodle Predictor + +[QuickFinder Crawler] +Parent=General Crawlers +Browser=QuickFinder +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser=Radiation Retriever +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser=RedCarpet +isBanned=true + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser=RixBot + +[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] +Parent=General Crawlers +Browser=TinyURL + +[SBIder/*] +Parent=General Crawlers +Browser=SiteSell + +[ScollSpider/2.*] +Parent=General Crawlers +Browser=ScollSpider +isBanned=true + +[Search Fst] +Parent=General Crawlers +Browser=Search Fst + +[searchbot admin@google.com] +Parent=General Crawlers +Browser=searchbot +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser=LookSeek +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser=Semantic Discovery + +[SeznamBot/*] +Parent=General Crawlers +Browser=SeznamBot +isBanned=true + +[Shelob (shelob@gmx.net)] +Parent=General Crawlers +Browser=Shelob +isBanned=true + +[shelob v1.*] +Parent=General Crawlers +Browser=shelob +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser=ShopWiki +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser=ShowXML +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser=Internetseer + +[SMBot/*] +Parent=General Crawlers +Browser=SMBot + +[sohu*] +Parent=General Crawlers +Browser=sohu-search +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser=SpankBot +isBanned=true + +[spider (tspyyp@tom.com)] +Parent=General Crawlers +Browser=spider (tspyyp@tom.com) +isBanned=true + +[Sunrise/0.*] +Parent=General Crawlers +Browser=Sunrise +isBanned=true + +[Superpages URL Verification Engine] +Parent=General Crawlers +Browser=Superpages + +[Surf Knight] +Parent=General Crawlers +Browser=Surf Knight +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser=SurveyBot +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser=SynapticSearch +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser=SyncMgr + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser=Tagyu + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser=Talkro Web-Shot +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser=Tecomi + +[TheInformant*] +Parent=General Crawlers +Browser=TheInformant +isBanned=true + +[Toata dragostea*] +Parent=General Crawlers +Browser=Toata dragostea +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser=UbiCrawler + +[UCmore] +Parent=General Crawlers +Browser=UCmore + +[User*Agent:*] +Parent=General Crawlers +isBanned=true + +[USER_AGENT] +Parent=General Crawlers +Browser=USER_AGENT +isBanned=true + +[VadixBot] +Parent=General Crawlers +Browser=VadixBot + +[VengaBot/*] +Parent=General Crawlers +Browser=VengaBot +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser=Visicom Toolbar + +[W3C-WebCon/*] +Parent=General Crawlers +Browser=W3C-WebCon + +[Webclipping.com] +Parent=General Crawlers +Browser=Webclipping.com +isBanned=true + +[webcollage/*] +Parent=General Crawlers +Browser=WebCollage +isBanned=true + +[WebCrawler_1.*] +Parent=General Crawlers +Browser=WebCrawler + +[WebFilter Robot*] +Parent=General Crawlers +Browser=WebFilter Robot + +[WeBoX/*] +Parent=General Crawlers +Browser=WeBoX + +[WebTrends/*] +Parent=General Crawlers +Browser=WebTrends + +[West Wind Internet Protocols*] +Parent=General Crawlers +Browser=Versatel +isBanned=true + +[WhizBang] +Parent=General Crawlers +Browser=WhizBang + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser=Willow Internet Crawler + +[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] +Parent=General Crawlers +Browser=WIRE +isBanned=true + +[www.fi crawler, contact crawler@www.fi] +Parent=General Crawlers +Browser=www.fi crawler + +[Xerka WebBot v1.*] +Parent=General Crawlers +Browser=Xerka +isBanned=true + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser=XML Sitemaps Generator + +[XSpider*] +Parent=General Crawlers +Browser=XSpider +isBanned=true + +[YooW!/* (?http://www.yoow.eu)] +Parent=General Crawlers +Browser=YooW! +isBanned=true + +[HiddenMarket-*] +Parent=General RSS +Browser=HiddenMarket +isBanned=true + +[FOTOCHECKER] +Parent=Image Crawlers +Browser=FOTOCHECKER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser=Search Engines +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser=FDSE Robot + +[*Fluffy the spider*] +Parent=Search Engines +Browser=SearchHippo + +[Abacho*] +Parent=Search Engines +Browser=Abacho + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser=Ah-Ha + +[AIBOT/*] +Parent=Search Engines +Browser=21Seek.Com + +[ALeadSoftbot/*] +Parent=Search Engines +Browser=ALeadSoftbot + +[Amfibibot/*] +Parent=Search Engines +Browser=Amfibi + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser=antibot + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser=Walhello + +[ASPSeek/*] +Parent=Search Engines +Browser=ASPSeek + +[BigCliqueBOT/*] +Parent=Search Engines +Browser=BigClique.com/BigClic.com + +[Blaiz-Bee/*] +Parent=Search Engines +Browser=RawGrunt + +[btbot/*] +Parent=Search Engines +Browser=Bit Torrent Search Engine + +[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] +Parent=Search Engines +Browser=Busiversebot +isBanned=true + +[CatchBot/*; http://www.catchbot.com] +Parent=Search Engines +Browser=CatchBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser=CipinetBot + +[Cogentbot/1.?*] +Parent=Search Engines +Browser=Cogentbot + +[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] +Parent=Search Engines +Browser=SqwidgeBot + +[cosmos*] +Parent=Search Engines +Browser=Xyleme + +[Deepindex] +Parent=Search Engines +Browser=Deepindex + +[DiamondBot] +Parent=Search Engines +Browser=DiamondBot + +[Dumbot*] +Parent=Search Engines +Browser=Dumbot +Version=0.2 +MajorVer=0 +MinorVer=2 +Beta=true + +[Eule?Robot*] +Parent=Search Engines +Browser=Eule-Robot + +[Faxobot/*] +Parent=Search Engines +Browser=Faxo + +[Filangy/*] +Parent=Search Engines +Browser=Filangy + +[flatlandbot/*] +Parent=Search Engines +Browser=Flatland + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser=ScorpionBot +isBanned=true + +[FyberSpider*] +Parent=Search Engines +Browser=FyberSpider +isBanned=true + +[Gaisbot/*] +Parent=Search Engines +Browser=Gaisbot + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser=gazz + +[geniebot*] +Parent=Search Engines +Browser=GenieKnows + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser=GoForIt + +[GoGuidesBot/*] +Parent=Search Engines +Browser=GoGuidesBot + +[GroschoBot/*] +Parent=Search Engines +Browser=GroschoBot + +[GurujiBot/1.*] +Parent=Search Engines +Browser=GurujiBot +isBanned=true + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser=Mirago + +[HolmesBot (http://holmes.ge)] +Parent=Search Engines +Browser=HolmesBot + +[Hotzonu/*] +Parent=Search Engines +Browser=Hotzonu + +[HyperEstraier/*] +Parent=Search Engines +Browser=HyperEstraier +isBanned=true + +[i1searchbot/*] +Parent=Search Engines +Browser=i1searchbot + +[IIITBOT/1.*] +Parent=Search Engines +Browser=Indian Language Web Search Engine + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser=Iltrovatore-Setaccio + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser=InfociousBot +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser=Infoseek + +[iSEEKbot/*] +Parent=Search Engines +Browser=iSEEKbot + +[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] +Parent=Search Engines +Browser=Knight + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser=Kolinka Forum Search +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser=KRetrieve +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser=LapozzBot + +[Linknzbot*] +Parent=Search Engines +Browser=Linknzbot + +[LocalcomBot/*] +Parent=Search Engines +Browser=LocalcomBot + +[Mail.Ru/1.0] +Parent=Search Engines +Browser=Mail.Ru + +[MaSagool/*] +Parent=Search Engines +Browser=Sagoo +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser=miniRank + +[Mnogosearch*] +Parent=Search Engines +Browser=Mnogosearch + +[Mozilla/0.9* no dos :) (Linux)] +Parent=Search Engines +Browser=goliat +isBanned=true + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser=Arachmo + +[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] +Parent=Search Engines +Browser=ThunderStone +isBanned=true + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser=Girafabot +Win32=true + +[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] +Parent=Search Engines +Browser=Vagabondo + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser=Qihoo + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser=Inxight Software + +[Mozilla/5.0 (*) VoilaBot*] +Parent=Search Engines +Browser=VoilaBot +isBanned=true + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser=ActiveTouristBot + +[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] +Parent=Search Engines +Browser=Butterfly + +[Mozilla/5.0 (compatible; Charlotte/*; *)] +Parent=Search Engines +Browser=Charlotte +Beta=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT*)] +Parent=Search Engines +Browser=FatAssANT + +[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] +Parent=Search Engines +Browser=DBLBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; EARTHCOM.info/*)] +Parent=Search Engines +Browser=EARTHCOM + +[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] +Parent=Search Engines +Browser=Lipperhey Spider + +[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser=MojeekBot + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser=Northern Light Web Search + +[Mozilla/5.0 (compatible; OsO;*] +Parent=Search Engines +Browser=Octopodus +isBanned=true + +[Mozilla/5.0 (compatible; Pogodak.*)] +Parent=Search Engines +Browser=Pogodak + +[Mozilla/5.0 (compatible; Quantcastbot/1.*)] +Parent=Search Engines +Browser=Quantcastbot + +[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] +Parent=Search Engines +Browser=ScoutJet + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser=Scrubby +isBanned=true + +[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] +Parent=Search Engines +Browser=YoudaoBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Twiceler*)] +Parent=Search Engines +Browser=Twiceler +isBanned=true + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser=CostaCider Search + +[Mozilla/5.0 GurujiBot/1.0 (*)] +Parent=Search Engines +Browser=GurujiBot + +[NavissoBot] +Parent=Search Engines +Browser=NavissoBot + +[NextGenSearchBot*(for information visit *)] +Parent=Search Engines +Browser=ZoomInfo +isBanned=true + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser=Norbert the Spider + +[NuSearch Spider*] +Parent=Search Engines +Browser=nuSearch + +[ObjectsSearch/*] +Parent=Search Engines +Browser=ObjectsSearch + +[OpenISearch/1.*] +Parent=Search Engines +Browser=OpenISearch (Amazon) + +[Pagebull http://www.pagebull.com/] +Parent=Search Engines +Browser=Pagebull + +[PEERbot*] +Parent=Search Engines +Browser=PEERbot + +[Pompos/*] +Parent=Search Engines +Browser=Pompos + +[Popdexter/*] +Parent=Search Engines +Browser=Popdex + +[Qweery*] +Parent=Search Engines +Browser=QweeryBot + +[RedCell/* (*)] +Parent=Search Engines +Browser=RedCell + +[Scrubby/*] +Parent=Search Engines +Browser=Scrub The Web + +[Search-10/*] +Parent=Search Engines +Browser=Search-10 + +[search.ch*] +Parent=Search Engines +Browser=Swiss Search Engine + +[Searchmee! Spider*] +Parent=Search Engines +Browser=Searchmee! + +[Seekbot/*] +Parent=Search Engines +Browser=Seekbot + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser=SiteSpider + +[Spinne/*] +Parent=Search Engines +Browser=Spinne + +[sproose/*] +Parent=Search Engines +Browser=Sproose + +[Sqeobot/0.*] +Parent=Search Engines +Browser=Branzel +isBanned=true + +[SquigglebotBot/*] +Parent=Search Engines +Browser=SquigglebotBot +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser=StackRambler + +[SygolBot*] +Parent=Search Engines +Browser=SygolBot + +[SynoBot] +Parent=Search Engines +Browser=SynoBot + +[Szukacz/*] +Parent=Search Engines +Browser=Szukacz + +[Tarantula/*] +Parent=Search Engines +Browser=Tarantula +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser=TerrawizBot +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser=Tkensaku + +[TMCrawler] +Parent=Search Engines +Browser=TMCrawler +isBanned=true + +[Twingly Recon] +Parent=Search Engines +Browser=Twingly Recon +isBanned=true + +[updated/*] +Parent=Search Engines +Browser=Updated! + +[URL Spider Pro/*] +Parent=Search Engines +Browser=URL Spider Pro + +[URL Spider SQL*] +Parent=Search Engines +Browser=Innerprise Enterprise Search + +[VMBot/*] +Parent=Search Engines +Browser=VMBot + +[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] +Parent=Search Engines +Browser=Voyager + +[wadaino.jp-crawler*] +Parent=Search Engines +Browser=wadaino.jp +isBanned=true + +[WebAlta Crawler/*] +Parent=Search Engines +Browser=WebAlta Crawler +isBanned=true + +[WebCorp/*] +Parent=Search Engines +Browser=WebCorp +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser=webcrawl.net + +[WISEbot/*] +Parent=Search Engines +Browser=WISEbot +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser=Wotbox + +[www.zatka.com] +Parent=Search Engines +Browser=Zatka + +[WWWeasel Robot v*] +Parent=Search Engines +Browser=World Wide Weasel + +[YadowsCrawler*] +Parent=Search Engines +Browser=YadowsCrawler + +[YodaoBot/*] +Parent=Search Engines +Browser=YodaoBot +isBanned=true + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser=ZE.bz + +[zibber-v*] +Parent=Search Engines +Browser=Zibb + +[ZipppBot/*] +Parent=Search Engines +Browser=ZipppBot + +[ATA-Translation-Service] +Parent=Translators +Browser=ATA-Translation-Service + +[GJK_Browser_Check] +Parent=Version Checkers +Browser=GJK_Browser_Check + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser=Hatena +isBanned=true +Crawler=true + +[Feed::Find/*] +Parent=Hatena +Browser=Feed Find +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser=Hatena Antenna + +[Hatena Bookmark/*] +Parent=Hatena +Browser=Hatena Bookmark + +[Hatena RSS/*] +Parent=Hatena +Browser=Hatena RSS +isSyndicationReader=true + +[Hatena::Crawler/*] +Parent=Hatena +Browser=Hatena Crawler + +[HatenaScreenshot*] +Parent=Hatena +Browser=HatenaScreenshot + +[URI::Fetch/*] +Parent=Hatena +Browser=URI::Fetch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser=Internet Archive +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*heritrix*] +Parent=Internet Archive +Browser=Heritrix +isBanned=true + +[ia_archiver*] +Parent=Internet Archive +Browser=Internet Archive + +[InternetArchive/*] +Parent=Internet Archive +Browser=InternetArchive + +[Mozilla/5.0 (compatible; archive.org_bot/1.*)] +Parent=Internet Archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser=Nutch +isBanned=true +Crawler=true + +[*Nutch*] +Parent=Nutch +isBanned=true + +[CazoodleBot/*] +Parent=Nutch +Browser=CazoodleBot + +[LOOQ/0.1*] +Parent=Nutch +Browser=LOOQ + +[Nutch/0.? (OpenX Spider)] +Parent=Nutch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo + +[Webaroo] +Parent=DefaultProperties +Browser=Webaroo + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] +Parent=Webaroo +Browser=Webaroo + +[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] +Parent=Webaroo +Browser=Webaroo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press + +[Word Press] +Parent=DefaultProperties +Browser=Word Press +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[WordPress-B-/2.*] +Parent=Word Press +Browser=WordPress-B + +[WordPress-Do-P-/2.*] +Parent=Word Press +Browser=WordPress-Do-P + +[BlueCoat ProxySG] +Parent=Blue Coat Systems +Browser=BlueCoat ProxySG + +[CerberianDrtrs/*] +Parent=Blue Coat Systems +Browser=Cerberian + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Blue Coat Systems +Browser=Bluecoat + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser=Copyright/Plagiarism +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser=BDFetch + +[copyright sheriff (*)] +Parent=Copyright/Plagiarism +Browser=copyright sheriff + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser=CopyRightCheck + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser=FairAd Client + +[iCopyright Conductor*] +Parent=Copyright/Plagiarism +Browser=iCopyright Conductor + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser=IPiumBot + +[IWAgent/*] +Parent=Copyright/Plagiarism +Browser=Brand Protect + +[Mozilla/5.0 (compatible; DKIMRepBot/*)] +Parent=Copyright/Plagiarism +Browser=DKIMRepBot + +[oBot] +Parent=Copyright/Plagiarism +Browser=oBot + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser=SlySearch + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser=TurnitinBot + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser=TutorGig + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools + +[DNS Tools] +Parent=DefaultProperties +Browser=DNS Tools +Crawler=true + +[Domain Dossier utility*] +Parent=DNS Tools +Browser=Domain Dossier + +[Mozilla/5.0 (compatible; DNS-Digger/*)] +Parent=DNS Tools +Browser=DNS-Digger + +[OpenDNS Domain Crawler noc@opendns.com] +Parent=DNS Tools +Browser=OpenDNS Domain Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser=Download Managers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[AndroidDownloadManager] +Parent=Download Managers +Browser=Android Download Manager + +[AutoMate5] +Parent=Download Managers +Browser=AutoMate5 + +[Beamer*] +Parent=Download Managers +Browser=Beamer + +[BitBeamer/*] +Parent=Download Managers +Browser=BitBeamer + +[BitTorrent/*] +Parent=Download Managers +Browser=BitTorrent + +[DA *] +Parent=Download Managers +Browser=Download Accelerator + +[Download Demon*] +Parent=Download Managers +Browser=Download Demon + +[Download Express*] +Parent=Download Managers +Browser=Download Express + +[Download Master*] +Parent=Download Managers +Browser=Download Master + +[Download Ninja*] +Parent=Download Managers +Browser=Download Ninja + +[Download Wonder*] +Parent=Download Managers +Browser=Download Wonder + +[DownloadSession*] +Parent=Download Managers +Browser=DownloadSession + +[EasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[FDM 1.x] +Parent=Download Managers +Browser=Free Download Manager + +[FlashGet] +Parent=Download Managers +Browser=FlashGet + +[FreshDownload/*] +Parent=Download Managers +Browser=FreshDownload + +[GetRight/*] +Parent=Download Managers +Browser=GetRight + +[GetRightPro/*] +Parent=Download Managers +Browser=GetRightPro + +[GetSmart/*] +Parent=Download Managers +Browser=GetSmart + +[Go!Zilla*] +Parent=Download Managers +Browser=GoZilla + +[Gozilla/*] +Parent=Download Managers +Browser=Gozilla + +[Internet Ninja*] +Parent=Download Managers +Browser=Internet Ninja + +[Kontiki Client*] +Parent=Download Managers +Browser=Kontiki Client + +[lftp/3.2.1] +Parent=Download Managers +Browser=lftp + +[LightningDownload/*] +Parent=Download Managers +Browser=LightningDownload + +[LMQueueBot/*] +Parent=Download Managers +Browser=LMQueueBot + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser=Download Express + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser=Getleft + +[Myzilla] +Parent=Download Managers +Browser=Myzilla + +[Net Vampire/*] +Parent=Download Managers +Browser=Net Vampire + +[Net_Vampire*] +Parent=Download Managers +Browser=Net_Vampire + +[NetAnts*] +Parent=Download Managers +Browser=NetAnts + +[NetPumper*] +Parent=Download Managers +Browser=NetPumper + +[NetSucker*] +Parent=Download Managers +Browser=NetSucker + +[NetZip Downloader*] +Parent=Download Managers +Browser=NetZip Downloader + +[NexTools WebAgent*] +Parent=Download Managers +Browser=NexTools WebAgent + +[Offline Downloader*] +Parent=Download Managers +Browser=Offline Downloader + +[P3P Client] +Parent=Download Managers +Browser=P3P Client + +[PageDown*] +Parent=Download Managers +Browser=PageDown + +[PicaLoader*] +Parent=Download Managers +Browser=PicaLoader + +[Prozilla*] +Parent=Download Managers +Browser=Prozilla + +[RealDownload/*] +Parent=Download Managers +Browser=RealDownload + +[sEasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[shareaza*] +Parent=Download Managers +Browser=shareaza + +[SmartDownload/*] +Parent=Download Managers +Browser=SmartDownload + +[SpeedDownload/*] +Parent=Download Managers +Browser=Speed Download + +[Star*Downloader/*] +Parent=Download Managers +Browser=StarDownloader + +[STEROID Download] +Parent=Download Managers +Browser=STEROID Download + +[SuperBot/*] +Parent=Download Managers +Browser=SuperBot + +[Vegas95/*] +Parent=Download Managers +Browser=Vegas95 + +[WebZIP*] +Parent=Download Managers +Browser=WebZIP + +[Wget*] +Parent=Download Managers +Browser=Wget + +[WinTools] +Parent=Download Managers +Browser=WinTools + +[Xaldon WebSpider*] +Parent=Download Managers +Browser=Xaldon WebSpider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser=E-Mail Harvesters +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser=E-Mail Address Extractor + +[*Larbin*] +Parent=E-Mail Harvesters +Browser=Larbin + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser=www4mail + +[8484 Boston Project*] +Parent=E-Mail Harvesters +Browser=8484 Boston Project + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser=CherryPickerElite + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser=Chilkat + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser=ContactBot + +[eCatch*] +Parent=E-Mail Harvesters +Browser=eCatch + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser=E-Mail Collector + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser=EMAILsearcher + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser=E-Mail Siphon + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser=EMailWolf + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser=MailMunky + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser=ExtractorPro + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser=Franklin Locator + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser=Missigua Locator + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser=Advanced Email Extractor + +[Netprospector*] +Parent=E-Mail Harvesters +Browser=Netprospector + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser=ProWebWalker + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser=Mike Elliott's E-Mail Harvester + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser=WebEnhancer + +[WebMiner*] +Parent=E-Mail Harvesters +Browser=WebMiner + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser=ZIBB Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser=Feeds Blogs +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser=Bloglines Title Fetch + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser=BlogLines Web + +[BlogPulseLive (support@blogpulse.com)] +Parent=Feeds Blogs +Browser=BlogPulseLive + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser=blogsearchbot-pumpkin +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser=Irish Blogs Aggregator +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser=kinjabot + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser=Net::Trackback + +[Reblog*] +Parent=Feeds Blogs +Browser=Reblog + +[WordPress/*] +Parent=Feeds Blogs +Browser=WordPress + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser=Feeds Syndicators +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser=LinkLint + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser=NetVisualize + +[AideRSS 2.* (postrank.com)] +Parent=Feeds Syndicators +Browser=AideRSS + +[AideRSS/2.0 (aiderss.com)] +Parent=Feeds Syndicators +Browser=AideRSS +isBanned=true + +[Akregator/*] +Parent=Feeds Syndicators +Browser=Akregator + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser=Safari RSS +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser=Cocoal.icio.us +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser=Feed For Free + +[FeedBurner/*] +Parent=Feeds Syndicators +Browser=FeedBurner + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser=FeedDemon +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser=FeedDigest + +[FeedGhost/1.*] +Parent=Feeds Syndicators +Browser=FeedGhost +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] +Parent=Feeds Syndicators +Browser=FeedOnFeeds +Version=0.1 +MajorVer=0 +MinorVer=1 + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser=Newsbrain + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser=Feedshow + +[Feedster Crawler/?.0; Feedster, Inc.] +Parent=Feeds Syndicators +Browser=Feedster + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser=GreatNews +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Gregarius/*] +Parent=Feeds Syndicators +Browser=Gregarius + +[intraVnews/*] +Parent=Feeds Syndicators +Browser=intraVnews + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser=Omea Reader +isBanned=true + +[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] +Parent=Feeds Syndicators +Browser=Liferea +isBanned=true + +[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] +Parent=Feeds Syndicators +Browser=FeedFetcher +Version=0.0 +MajorVer=0 +MinorVer=0 + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser=MagpieRSS + +[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] +Parent=Feeds Syndicators +Browser=Mobitype +Platform=Win32 + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser=Rojo + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser=TailRank + +[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] +Parent=Feeds Syndicators +Browser=Podtech Network + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser=Newz Crawler + +[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser=RSSMicro + +[Mozilla/5.0 (compatible;*newstin.com;*)] +Parent=Feeds Syndicators +Browser=NewsTin + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser=RSS Reader Panel + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser=FeedParser + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser=NewsMonster + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser=Rojo + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser=Netvibes + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser=NewsAlloy + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser=Omnipelagos + +[Particls] +Parent=Feeds Syndicators +Browser=Particls + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser=Protopage + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser=PubSub-RSS-Reader + +[RSS Menu/*] +Parent=Feeds Syndicators +Browser=RSS Menu + +[RssBandit/*] +Parent=Feeds Syndicators +Browser=RssBandit + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser=RssBar +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser=SharpReader + +[SimplePie/*] +Parent=Feeds Syndicators +Browser=SimplePie + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser=Strategic Board Bot +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser=TargetYourNews + +[Technoratibot/*] +Parent=Feeds Syndicators +Browser=Technoratibot + +[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] +Parent=Feeds Syndicators +Browser=Tumblr RSS syndication + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser=Windows-RSS-Platform +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser=Wizz + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS + +[General RSS] +Parent=DefaultProperties +Browser=General RSS +isSyndicationReader=true + +[AideRSS/1.0 (aiderss.com); * subscribers] +Parent=General RSS +Browser=AideRSS +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] +Parent=General RSS +Browser=CC Metadata Scaper + +[Mozilla/5.0 (compatible) GM RSS Panel] +Parent=General RSS +Browser=RSS Panel + +[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] +Parent=General RSS +Browser=Inclue + +[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] +Parent=General RSS +Browser=Ruunk + +[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] +Parent=General RSS +Browser=Windows-RSS-Platform +Platform=WinVista + +[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] +Parent=Google Code +Browser=Arora +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux +CssVersion=2 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser=HTML Validators +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser=Search Engine World HTML Validator + +[FeedValidator/1.3] +Parent=HTML Validators +Browser=FeedValidator +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser=Jigsaw CSS Validator + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser=Search Engine World Robots.txt Validator + +[W3C_Validator/*] +Parent=HTML Validators +Browser=W3C Validator + +[W3CLineMode/*] +Parent=HTML Validators +Browser=W3C Line Mode + +[Weblide/2.? beta*] +Parent=HTML Validators +Browser=Weblide +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser=WebmasterWorld Server Header Checker + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser=Image Crawlers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*CFNetwork*] +Parent=Image Crawlers +Browser=CFNetwork + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser=PhotoStickies + +[Camcrawler*] +Parent=Image Crawlers +Browser=Camcrawler + +[CydralSpider/*] +Parent=Image Crawlers +Browser=Cydral Web Image Search +isBanned=true + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser=Gallery Grabber + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser=Extreme Picture Finder + +[FLATARTS_FAVICO] +Parent=Image Crawlers +Browser=FlatArts Favorites Icon Tool + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser=HTML2JPG + +[IconSurf/2.*] +Parent=Image Crawlers +Browser=IconSurf + +[kalooga/KaloogaBot*] +Parent=Image Crawlers +Browser=KaloogaBot + +[Mister PIX*] +Parent=Image Crawlers +Browser=Mister PIX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] +Parent=Image Crawlers +Browser=Pandora + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser=naoFavicon4IE + +[pixfinder/*] +Parent=Image Crawlers +Browser=pixfinder + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser=rssImagesBot + +[Web Image Collector*] +Parent=Image Crawlers +Browser=Web Image Collector + +[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] +Parent=Image Crawlers +Browser=WebImages + +[WebPix*] +Parent=Image Crawlers +Browser=Custo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser=Link Checkers +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser=!Susie + +[*AgentName/*] +Parent=Link Checkers +Browser=AgentName + +[*Linkman*] +Parent=Link Checkers +Browser=Linkman + +[*LinksManager.com*] +Parent=Link Checkers +Browser=LinksManager + +[*Powermarks/*] +Parent=Link Checkers +Browser=Powermarks + +[*W3C-checklink/*] +Parent=Link Checkers +Browser=W3C Link Checker + +[*Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator + +[*Zeus*] +Parent=Link Checkers +Browser=Zeus +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser=ActiveBookmark + +[Bookdog/*] +Parent=Link Checkers +Browser=Bookdog + +[Bookmark Buddy*] +Parent=Link Checkers +Browser=Bookmark Buddy + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser=Bookmark Renewal Check Agent + +[Bookmark search tool*] +Parent=Link Checkers +Browser=Bookmark search tool + +[Bookmark-Manager] +Parent=Link Checkers +Browser=Bookmark-Manager + +[Checkbot*] +Parent=Link Checkers +Browser=Checkbot + +[CheckLinks/*] +Parent=Link Checkers +Browser=CheckLinks + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser=CyberSpyder Link Test + +[DLC/*] +Parent=Link Checkers +Browser=DLC + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser=DocWeb Link Crawler + +[FavOrg] +Parent=Link Checkers +Browser=FavOrg + +[Favorites Sweeper v.3.*] +Parent=Link Checkers +Browser=Favorites Sweeper + +[FindLinks/*] +Parent=Link Checkers +Browser=FindLinks + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser=Funnel Web Profiler + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser=HTML Link Validator + +[IECheck] +Parent=Link Checkers +Browser=IECheck + +[JCheckLinks/*] +Parent=Link Checkers +Browser=JCheckLinks + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser=JRTwine + +[Link Valet Online*] +Parent=Link Checkers +Browser=Link Valet +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser=LinkAlarm + +[Linkbot*] +Parent=Link Checkers +Browser=Linkbot + +[LinkChecker/*] +Parent=Link Checkers +Browser=LinkChecker + +[LinkextractorPro*] +Parent=Link Checkers +Browser=LinkextractorPro +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser=LinkLint + +[LinkScan/*] +Parent=Link Checkers +Browser=LinkScan + +[LinkSweeper/*] +Parent=Link Checkers +Browser=LinkSweeper + +[LinkWalker*] +Parent=Link Checkers +Browser=LinkWalker + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser=MetaGer-LinkChecker + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser=LinkTiger +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser=URLBase + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser=NetPromoter Link Utility + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser=Link Commander +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] +Parent=Link Checkers +Browser=smartBot + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser=SuperCleaner + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser=gURLChecker +isBanned=true + +[Newsgroupreporter LinkCheck] +Parent=Link Checkers +Browser=Newsgroupreporter LinkCheck + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser=onCHECK Linkchecker + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser=Dead-Links.com +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser=REL Link Checker + +[RLinkCheker*] +Parent=Link Checkers +Browser=RLinkCheker + +[Robozilla/*] +Parent=Link Checkers +Browser=Robozilla + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser=RPT-HTTPClient +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser=SafariBookmarkChecker +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser=Simpy + +[SiteBar/*] +Parent=Link Checkers +Browser=SiteBar + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser=Susie + +[URLBase/6.*] +Parent=Link Checkers + +[VSE/*] +Parent=Link Checkers +Browser=VSE Link Tester + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser=WebTrends Link Analyzer + +[WorQmada/*] +Parent=Link Checkers +Browser=WorQmada + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser=Xenu's Link Sleuth +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser=Z-Add Link Checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser=Microsoft +isBanned=true + +[Live (http://www.live.com/)] +Parent=Microsoft +Browser=Microsoft Live +isBanned=false +isSyndicationReader=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser=MFC Foundation Class Library + +[MFHttpScan] +Parent=Microsoft +Browser=MFHttpScan + +[Microsoft BITS/*] +Parent=Microsoft +Browser=BITS + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser=MS IPP + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser=MS IPP DAV + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser=MS IPPPD + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser=Fake IE + +[Microsoft Office Existence Discovery] +Parent=Microsoft +Browser=Microsoft Office Existence Discovery + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser=MS OPD + +[Microsoft Office/* (*Picture Manager*)] +Parent=Microsoft +Browser=Microsoft Office Picture Manager + +[Microsoft URL Control*] +Parent=Microsoft +Browser=Microsoft URL Control + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser=Microsoft Visio + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser=Microsoft-WebDAV + +[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] +Parent=Microsoft +Browser=Microsoft Excel +Version=12.0 +MajorVer=12 +MinorVer=0 +Platform=MacOSX + +[MSN Feed Manager] +Parent=Microsoft +Browser=MSN Feed Manager +isBanned=false +isSyndicationReader=true + +[MSProxy/*] +Parent=Microsoft +Browser=MS Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser=Miscellaneous Browsers +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser=Amiga +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser=Avant Browser + +[12345] +Parent=Miscellaneous Browsers +Browser=12345 +isBanned=true + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser=Ace Explorer + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser=Enigma Browser + +[EVE-minibrowser/*] +Parent=Miscellaneous Browsers +Browser=EVE-minibrowser +IFrames=false +Tables=false +BackgroundSounds=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +Crawler=false + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser=Godzilla + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser=GreenBrowser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Kopiczek/* (WyderOS*; *)] +Parent=Miscellaneous Browsers +Browser=Kopiczek +Platform=WyderOS +IFrames=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (*) - BrowseX (*)] +Parent=Miscellaneous Browsers +Browser=BrowseX + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser=Escape +Platform=Win32 + +[Mozilla/4.0 (compatible; ibisBrowser)] +Parent=Miscellaneous Browsers +Browser=ibisBrowser + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser=HistoryHound + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser=NetRecorder + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser=NetSurfer + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser=ogeb browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser=Wipeout Pure + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser=SlimBrowser + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser=WWW Browser +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CssVersion=3 +supportsCSS=true + +[*Netcraft Webserver Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser=Offline Browsers +Frames=true +Tables=true +Cookies=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser=Check&Get + +[*HTTrack*] +Parent=Offline Browsers +Browser=HTTrack + +[*MSIECrawler*] +Parent=Offline Browsers +Browser=IE Offline Browser + +[*TweakMASTER*] +Parent=Offline Browsers +Browser=TweakMASTER + +[BackStreet Browser *] +Parent=Offline Browsers +Browser=BackStreet Browser + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser=Go Ahead Got-It + +[iGetter/*] +Parent=Offline Browsers +Browser=iGetter + +[Teleport*] +Parent=Offline Browsers +Browser=Teleport + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser=Online Scanners +isBanned=true + +[JoeDog/* (X11; I; Siege *)] +Parent=Online Scanners +Browser=JoeDog +isBanned=false + +[Morfeus Fucking Scanner] +Parent=Online Scanners +Browser=Morfeus Fucking Scanner + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser=Trend Micro + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser=Panda Antivirus Titanium + +[virus_detector*] +Parent=Online Scanners +Browser=Secure Computing Corporation + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser=Proxy Servers +isBanned=true + +[*squid*] +Parent=Proxy Servers +Browser=Squid + +[Anonymisiert*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymizer/*] +Parent=Proxy Servers +Browser=Anonymizer + +[Anonymizied*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymous*] +Parent=Proxy Servers +Browser=Anonymous + +[Anonymous/*] +Parent=Proxy Servers +Browser=Anonymous + +[CE-Preload] +Parent=Proxy Servers +Browser=CE-Preload + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser=Anonymouse + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser=Anonymizer + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser=SaferSurf + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser=Yahoo! +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser=Squid + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Privoxy/*] +Parent=Proxy Servers +Browser=Privoxy + +[ProxyTester*] +Parent=Proxy Servers +Browser=ProxyTester +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser=SilentSurf + +[SmallProxy*] +Parent=Proxy Servers +Browser=SmallProxy + +[Space*Bison/*] +Parent=Proxy Servers +Browser=Proxomitron + +[Sqworm/*] +Parent=Proxy Servers +Browser=Websense + +[SurfControl] +Parent=Proxy Servers +Browser=SurfControl + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser=Research Projects +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser=AcadiaUniversityWebCensusClient + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser=Amico Alpha + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser=Annotate Google + +[CMS crawler (?http://buytaert.net/crawler/)] +Parent=Research Projects + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser=e-SocietyRobot + +[Forschungsportal/*] +Parent=Research Projects +Browser=Forschungsportal + +[Gulper Web *] +Parent=Research Projects +Browser=Gulper Web Bot + +[HooWWWer/*] +Parent=Research Projects +Browser=HooWWWer + +[http://buytaert.net/crawler] +Parent=Research Projects + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser=inetbot + +[IRLbot/*] +Parent=Research Projects +Browser=IRLbot + +[Lachesis] +Parent=Research Projects +Browser=Lachesis + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser=nextthing.org +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser=Theophrastus + +[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] +Parent=Research Projects +Browser=Webscan + +[MQbot*] +Parent=Research Projects +Browser=MQbot + +[OutfoxBot/*] +Parent=Research Projects +Browser=OutfoxBot + +[polybot?*] +Parent=Research Projects +Browser=Polybot + +[Shim?Crawler*] +Parent=Research Projects +Browser=Shim Crawler + +[Steeler/*] +Parent=Research Projects +Browser=Steeler + +[Taiga web spider] +Parent=Research Projects +Browser=Taiga + +[Theme Spider*] +Parent=Research Projects +Browser=Theme Spider + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser=UofTDB Experiment + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser=USyd-NLP-Spider + +[woriobot*] +Parent=Research Projects +Browser=woriobot + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser=wwwster +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser=Zao-Crawler + +[Zao/*] +Parent=Research Projects +Browser=Zao + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser=Rippers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*grub*] +Parent=Rippers +Browser=grub + +[*ickHTTP*] +Parent=Rippers +Browser=IP*Works + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser=libwww-perl + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser=WinHttp + +[3D-FTP/*] +Parent=Rippers +Browser=3D-FTP + +[3wGet/*] +Parent=Rippers +Browser=3wGet + +[ActiveRefresh*] +Parent=Rippers +Browser=ActiveRefresh + +[Artera (Version *)] +Parent=Rippers +Browser=Artera + +[AutoHotkey] +Parent=Rippers +Browser=AutoHotkey + +[b2w/*] +Parent=Rippers +Browser=b2w + +[BasicHTTP/*] +Parent=Rippers +Browser=BasicHTTP + +[BlockNote.Net] +Parent=Rippers +Browser=BlockNote.Net + +[CAST] +Parent=Rippers +Browser=CAST + +[CFNetwork/*] +Parent=Rippers +Browser=CFNetwork + +[CFSCHEDULE*] +Parent=Rippers +Browser=ColdFusion Task Scheduler + +[CobWeb/*] +Parent=Rippers +Browser=CobWeb + +[ColdFusion*] +Parent=Rippers +Browser=ColdFusion + +[Crawl_Application] +Parent=Rippers +Browser=Crawl_Application + +[curl/*] +Parent=Rippers +Browser=cURL + +[Custo*] +Parent=Rippers +Browser=Custo + +[DataCha0s/*] +Parent=Rippers +Browser=DataCha0s + +[DeepIndexer*] +Parent=Rippers +Browser=DeepIndexer + +[DISCo Pump *] +Parent=Rippers +Browser=DISCo Pump + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser=eStyleSearch +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser=Ezic.com + +[fetch libfetch/*] +Parent=Rippers + +[FGet*] +Parent=Rippers +Browser=FGet + +[Flaming AttackBot*] +Parent=Rippers +Browser=Flaming AttackBot + +[Foobot*] +Parent=Rippers +Browser=Foobot + +[GameSpyHTTP/*] +Parent=Rippers +Browser=GameSpyHTTP + +[gnome-vfs/*] +Parent=Rippers +Browser=gnome-vfs + +[Harvest/*] +Parent=Rippers +Browser=Harvest + +[hcat/*] +Parent=Rippers +Browser=hcat + +[HLoader] +Parent=Rippers +Browser=HLoader + +[Holmes/*] +Parent=Rippers +Browser=Holmes + +[HTMLParser/*] +Parent=Rippers +Browser=HTMLParser + +[http generic] +Parent=Rippers +Browser=http generic + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser=httperf + +[HTTPFetch/*] +Parent=Rippers +Browser=HTTPFetch + +[HTTPGrab] +Parent=Rippers +Browser=HTTPGrab + +[HttpSession] +Parent=Rippers +Browser=HttpSession + +[httpunit/*] +Parent=Rippers +Browser=HttpUnit + +[ICE_GetFile] +Parent=Rippers +Browser=ICE_GetFile + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser=Inet - Eureka App + +[INetURL/*] +Parent=Rippers +Browser=INetURL + +[InetURL:/*] +Parent=Rippers +Browser=InetURL + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser=Fake IE + +[Internet Explorer *] +Parent=Rippers +Browser=Fake IE + +[IP*Works!*/*] +Parent=Rippers +Browser=IP*Works! + +[IrssiUrlLog/*] +Parent=Rippers +Browser=IrssiUrlLog + +[JPluck/*] +Parent=Rippers +Browser=JPluck + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser=Kapere + +[LeechFTP] +Parent=Rippers +Browser=LeechFTP + +[LeechGet*] +Parent=Rippers +Browser=LeechGet + +[libcurl-agent/*] +Parent=Rippers +Browser=libcurl + +[libWeb/clsHTTP*] +Parent=Rippers +Browser=libWeb/clsHTTP + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser=MFC_Tear_Sample + +[Moozilla] +Parent=Rippers +Browser=Moozilla + +[MovableType/*] +Parent=Rippers +Browser=MovableType Web Log + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser=NEWT ActiveX +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser=Novell BorderManager + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] +Parent=Rippers +Browser=IPCheck Server Monitor + +[OCN-SOC/*] +Parent=Rippers +Browser=OCN-SOC + +[Offline Explorer*] +Parent=Rippers +Browser=Offline Explorer + +[Open Web Analytics Bot*] +Parent=Rippers +Browser=Open Web Analytics Bot + +[OSSProxy*] +Parent=Rippers +Browser=OSSProxy + +[Pageload*] +Parent=Rippers +Browser=PageLoad + +[PageNest/*] +Parent=Rippers +Browser=PageNest + +[pavuk/*] +Parent=Rippers +Browser=Pavuk + +[PEAR HTTP_Request*] +Parent=Rippers +Browser=PEAR-PHP + +[PHP*] +Parent=Rippers +Browser=PHP + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser=PigBlock +Win32=true + +[Pockey*] +Parent=Rippers +Browser=Pockey-GetHTML + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser=POE-Component-Client-HTTP + +[PycURL/*] +Parent=Rippers +Browser=PycURL + +[Python*] +Parent=Rippers +Browser=Python + +[RepoMonkey*] +Parent=Rippers +Browser=RepoMonkey + +[SBL-BOT*] +Parent=Rippers +Browser=BlackWidow + +[ScoutAbout*] +Parent=Rippers +Browser=ScoutAbout + +[sherlock/*] +Parent=Rippers +Browser=Sherlock + +[SiteParser/*] +Parent=Rippers +Browser=SiteParser + +[SiteSnagger*] +Parent=Rippers +Browser=SiteSnagger + +[SiteSucker/*] +Parent=Rippers +Browser=SiteSucker + +[SiteWinder*] +Parent=Rippers +Browser=SiteWinder + +[Snoopy*] +Parent=Rippers +Browser=Snoopy + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser=AspTear + +[SuperHTTP/*] +Parent=Rippers +Browser=SuperHTTP + +[Tcl http client package*] +Parent=Rippers +Browser=Tcl http client package + +[Twisted PageGetter] +Parent=Rippers +Browser=Twisted PageGetter + +[URL2File/*] +Parent=Rippers +Browser=URL2File + +[UtilMind HTTPGet] +Parent=Rippers +Browser=UtilMind HTTPGet + +[VCI WebViewer*] +Parent=Rippers +Browser=VCI WebViewer + +[W3CRobot/*] +Parent=Rippers +Browser=W3CRobot + +[Web Downloader*] +Parent=Rippers +Browser=Web Downloader + +[Web Downloader/*] +Parent=Rippers +Browser=Web Downloader + +[Web Magnet*] +Parent=Rippers +Browser=Web Magnet + +[WebAuto/*] +Parent=Rippers + +[webbandit/*] +Parent=Rippers +Browser=webbandit + +[WebCopier*] +Parent=Rippers +Browser=WebCopier + +[WebDownloader*] +Parent=Rippers +Browser=WebDownloader + +[WebFetch] +Parent=Rippers +Browser=WebFetch + +[webfetch/*] +Parent=Rippers +Browser=WebFetch + +[WebGatherer*] +Parent=Rippers +Browser=WebGatherer + +[WebGet] +Parent=Rippers +Browser=WebGet + +[WebReaper*] +Parent=Rippers +Browser=WebReaper + +[WebRipper] +Parent=Rippers +Browser=WebRipper + +[WebSauger*] +Parent=Rippers +Browser=WebSauger + +[Website Downloader*] +Parent=Rippers +Browser=Website Downloader + +[Website eXtractor*] +Parent=Rippers +Browser=Website eXtractor + +[Website Quester] +Parent=Rippers +Browser=Website Quester + +[WebsiteExtractor*] +Parent=Rippers +Browser=Website eXtractor + +[WebSnatcher*] +Parent=Rippers +Browser=WebSnatcher + +[Webster Pro*] +Parent=Rippers +Browser=Webster Pro + +[WebStripper*] +Parent=Rippers +Browser=WebStripper + +[WebWhacker*] +Parent=Rippers +Browser=WebWhacker + +[WinScripter iNet Tools] +Parent=Rippers +Browser=WinScripter iNet Tools + +[WWW-Mechanize/*] +Parent=Rippers +Browser=WWW-Mechanize + +[Zend_Http_Client] +Parent=Rippers +Browser=Zend_Http_Client + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser=Site Monitors +Cookies=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser=EasyRider + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser=maxamine.com--robot +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser=WebMon + +[Kenjin Spider*] +Parent=Site Monitors +Browser=Kenjin Spider + +[Kevin http://*] +Parent=Site Monitors +Browser=Kevin +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser=ChangeDetection + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser=Myst Monitor Service + +[Net Probe] +Parent=Site Monitors +Browser=Net Probe + +[NetMechanic*] +Parent=Site Monitors +Browser=NetMechanic + +[NetReality*] +Parent=Site Monitors +Browser=NetReality + +[Pingdom GIGRIB*] +Parent=Site Monitors +Browser=Pingdom + +[Site Valet Online*] +Parent=Site Monitors +Browser=Site Valet +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser=SITECHECKER + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser=ZoneEdit Failover Monitor +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser=UpTime Checker + +[URL Control*] +Parent=Site Monitors +Browser=URL Control + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser=URLCHECK + +[URLy Warning*] +Parent=Site Monitors +Browser=URLy Warning + +[Webcheck *] +Parent=Site Monitors +Browser=Webcheck +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser=WebPatrol + +[websitepulse checker/*] +Parent=Site Monitors +Browser=websitepulse checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser=Social Bookmarkers +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[BookmarkBase(2/;http://bookmarkbase.com)] +Parent=Social Bookmarkers +Browser=BookmarkBase + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser=Cocoalicious + +[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] +Parent=Social Bookmarkers +Browser=FriendFeedBot + +[Twitturly*] +Parent=Social Bookmarkers +Browser=Twitturly + +[WinkBot/*] +Parent=Social Bookmarkers +Browser=WinkBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser=Translators +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser=Seram Server + +[TeragramWebcrawler/*] +Parent=Translators +Browser=TeragramWebcrawler +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser=WorldLingo + +[WebTrans] +Parent=Translators +Browser=WebTrans + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser=Version Checkers +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser=Automated Browscap.ini Updater + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser=BMC Link Validator +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[Browscap updater] +Parent=Version Checkers +Browser=Browscap updater + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser=Gary Keith's Version Checker + +[Browser Capabilities Project AutoDownloader] +Parent=Version Checkers +Browser=TKC AutoDownloader + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Code Sample Web Client] +Parent=Version Checkers +Browser=Code Sample Web Client + +[Desktop Sidebar*] +Parent=Version Checkers +Browser=Desktop Sidebar +isBanned=true + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser=Mono Browser Capabilities Updater +isBanned=true + +[Rewmi/*] +Parent=Version Checkers +isBanned=true + +[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] +Parent=Version Checkers +Browser=Subtext + +[TherapeuticResearch] +Parent=Version Checkers +Browser=TherapeuticResearch + +[UpdateBrowscap*] +Parent=Version Checkers +Browser=UpdateBrowscap + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser=clarkson.edu + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser=Substncia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser=Become +Frames=true +Tables=true +isSyndicationReader=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser=BecomeBot + +[*BecomeBot@exava.com*] +Parent=Become +Browser=BecomeBot + +[*Exabot@exava.com*] +Parent=Become +Browser=Exabot + +[MonkeyCrawl/*] +Parent=Become +Browser=MonkeyCrawl + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser=BecomeJPBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems + +[Blue Coat Systems] +Parent=DefaultProperties +Browser=Blue Coat Systems +isBanned=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers + +[Browscap Abusers] +Parent=DefaultProperties +Browser=Browscap Abusers +isBanned=true + +[Apple-PubSub/*] +Parent=Browscap Abusers +Browser=Apple-PubSub + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub + +[FeedHub] +Parent=DefaultProperties +Browser=FeedHub +isSyndicationReader=true + +[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedDiscovery +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub MetaDataFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Internet Content Rating Association] +Parent=DefaultProperties +Browser= +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[ICRA_label_generator/1.?] +Parent=Internet Content Rating Association +Browser=ICRA_label_generator + +[ICRA_Semantic_spider/0.?] +Parent=Internet Content Rating Association +Browser=ICRA_Semantic_spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser=NameProtect +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser=NameProtect + +[NP/*] +Parent=NameProtect +Browser=NameProtect + +[NPBot*] +Parent=NameProtect +Browser=NameProtect + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft + +[Netcraft] +Parent=DefaultProperties +Browser=Netcraft +isBanned=true +Crawler=true + +[*Netcraft Web Server Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] +Parent=Netcraft +Browser=NetcraftSurveyAgent + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator + +[NewsGator] +Parent=DefaultProperties +Browser=NewsGator +isSyndicationReader=true + +[MarsEdit*] +Parent=NewsGator +Browser=MarsEdit + +[NetNewsWire*/*] +Parent=NewsGator +Browser=NetNewsWire +Platform=MacOSX + +[NewsFire/*] +Parent=NewsGator +Browser=NewsFire + +[NewsGator FetchLinks extension/*] +Parent=NewsGator +Browser=NewsGator FetchLinks + +[NewsGator/*] +Parent=NewsGator +Browser=NewsGator +isBanned=true + +[NewsGatorOnline/*] +Parent=NewsGator +Browser=NewsGatorOnline + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 + +[Chrome 0.2] +Parent=DefaultProperties +Browser=Chrome +Version=0.2 +MinorVer=2 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 + +[Chrome 0.3] +Parent=DefaultProperties +Browser=Chrome +Version=0.3 +MinorVer=3 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 + +[Chrome 0.4] +Parent=DefaultProperties +Browser=Chrome +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 + +[Chrome 0.5] +Parent=DefaultProperties +Browser=Chrome +Version=0.5 +MinorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 + +[Chrome 1.0] +Parent=DefaultProperties +Browser=Chrome +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 + +[Chrome 2.0] +Parent=DefaultProperties +Browser=Chrome +Version=2.0 +MajorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 + +[Chrome 3.0] +Parent=DefaultProperties +Browser=Chrome +Version=3.0 +MajorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code + +[Google Code] +Parent=DefaultProperties +Browser=Google Code +Tables=true +Cookies=true +JavaApplets=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 + +[Iron 0.2] +Parent=DefaultProperties +Browser=Iron +Version=0.2 +MinorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 + +[Iron 0.3] +Parent=DefaultProperties +Browser=Iron +Version=0.3 +MinorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 + +[Iron 0.4] +Parent=DefaultProperties +Browser=Iron +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod + +[iPod] +Parent=DefaultProperties +Browser=iPod +Platform=iPhone OSX +isMobileDevice=true + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] +Parent=iPod +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] +Parent=iPod + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes + +[iTunes] +Parent=DefaultProperties +Browser=iTunes +Platform=iPhone OSX + +[iTunes/* (Windows; ?)] +Parent=iTunes +Browser=iTunes +Platform=Win32 +Win32=true + +[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] +Parent=iTunes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser=Media Players +Cookies=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser=Microsoft NetShow + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser=RealPlayer +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser=MPlayer +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser=MPlayer +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser=MPlayer + +[RealPlayer*] +Parent=Media Players +Browser=RealPlayer + +[RMA/*] +Parent=Media Players +Browser=RMA + +[VLC media player*] +Parent=Media Players +Browser=VLC + +[vobsub] +Parent=Media Players +Browser=vobsub +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser=WinAmp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo + +[Nintendo Wii] +Parent=DefaultProperties +Browser= +isMobileDevice=true + +[Opera/* (Nintendo DSi; Opera/*; *; *)] +Parent=Nintendo Wii +Browser=DSi + +[Opera/* (Nintendo Wii; U; *)] +Parent=Nintendo Wii +Browser=Wii + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser=Windows Media Player +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser=Windows-Media-Player +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune + +[Zune] +Parent=DefaultProperties +Browser=Zune +Cookies=true + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] +Parent=Zune +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] +Parent=Zune +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] +Parent=Zune +Version=3.0 +MajorVer=3 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 + +[QuickTime 7.0] +Parent=DefaultProperties +Browser=QuickTime +Version=7.0 +MajorVer=7 +Cookies=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime 7.0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime 7.0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime 7.0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime 7.0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime 7.0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime 7.0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime 7.0 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 + +[QuickTime 7.1] +Parent=DefaultProperties +Browser=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Cookies=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime 7.1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime 7.1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime 7.1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime 7.1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime 7.1 +Platform=Win2003 +Win32=true + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 + +[QuickTime 7.2] +Parent=DefaultProperties +Browser=QuickTime +Version=7.2 +MajorVer=7 +MinorVer=2 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.2 +Platform=MacOSX + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.2 +Platform=MacPPC + +[QuickTime (qtver=7.2*;os=Windows 98*)] +Parent=QuickTime 7.2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] +Parent=QuickTime 7.2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] +Parent=QuickTime 7.2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] +Parent=QuickTime 7.2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] +Parent=QuickTime 7.2 +Platform=Win2003 +Win32=true + +[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 + +[QuickTime 7.3] +Parent=DefaultProperties +Browser=QuickTime +Version=7.3 +MajorVer=7 +MinorVer=3 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.3 +Platform=MacOSX + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.3 +Platform=MacPPC + +[QuickTime (qtver=7.3*;os=Windows 98*)] +Parent=QuickTime 7.3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] +Parent=QuickTime 7.3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] +Parent=QuickTime 7.3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] +Parent=QuickTime 7.3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] +Parent=QuickTime 7.3 +Platform=Win2003 +Win32=true + +[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.3 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 + +[QuickTime 7.4] +Parent=DefaultProperties +Browser=QuickTime +Version=7.4 +MajorVer=7 +MinorVer=4 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.4 +Platform=MacOSX + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.4 +Platform=MacPPC + +[QuickTime (qtver=7.4*;os=Windows 98*)] +Parent=QuickTime 7.4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] +Parent=QuickTime 7.4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] +Parent=QuickTime 7.4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] +Parent=QuickTime 7.4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] +Parent=QuickTime 7.4 +Platform=Win2003 +Win32=true + +[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.4 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android + +[Android] +Parent=DefaultProperties +Browser=Android +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser=BlackBerry +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*BlackBerry*] +Parent=BlackBerry + +[*BlackBerrySimulator/*] +Parent=BlackBerry + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser=Handspring Blazer +Platform=Palm +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] +Parent=Blazer +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] +Parent=Blazer +Version=4.2 +MajorVer=4 +MinorVer=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] +Parent=Blazer +Version=4.4 +MajorVer=4 +MinorVer=4 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] +Parent=Blazer +Version=4.5 +MajorVer=4 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser=DoCoMo +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile + +[IEMobile] +Parent=DefaultProperties +Browser=IEMobile +Platform=WinCE +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] +Parent=IEMobile +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] +Parent=IEMobile +Version=7.0 +MajorVer=7 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone + +[iPhone] +Parent=DefaultProperties +Browser=iPhone +Platform=iPhone OSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=3 +supportsCSS=true + +[Mozilla/4.0 (iPhone; *)] +Parent=iPhone + +[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] +Parent=iPhone +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] +Parent=iPhone +Browser=iTouch + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] +Parent=iPhone +Browser=iTouch +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser=KDDI +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[KDDI-* UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile + +[Miscellaneous Mobile] +Parent=DefaultProperties +Browser= +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] +Parent=Miscellaneous Mobile +Browser=Bolt + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Internet Browser] +Parent=DefaultProperties +Browser=Motorola Internet Browser +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[MOT-*/*] +Parent=Motorola Internet Browser + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T*/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy + +[MSN Mobile Proxy] +Parent=DefaultProperties +Browser=MSN Mobile Proxy +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true + +[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] +Parent=MSN Mobile Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser=NetFront +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*NetFront/*] +Parent=NetFront + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser=Nokia +Tables=true +Cookies=true +isMobileDevice=true + +[*Nokia*/*] +Parent=Nokia + +[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Nokia +Platform=SymbianOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser=Openwave Mobile Browser +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini + +[Opera Mini] +Parent=DefaultProperties +Browser=Opera Mini +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] +Parent=Opera Mini +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] +Parent=Opera Mini +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] +Parent=Opera Mini +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] +Parent=Opera Mini +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] +Parent=Opera Mini +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] +Parent=Opera Mini +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] +Parent=Opera Mini +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] +Parent=Opera Mini +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] +Parent=Opera Mini +Version=4.2 +MajorVer=4 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile + +[Opera Mobile] +Parent=DefaultProperties +Browser=Opera Mobi +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] +Parent=Opera Mobile +Version=9.51 +MajorVer=9 +MinorVer=51 +Beta=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser=Playstation +Platform=WAP +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/* (PLAYSTATION *; *)] +Parent=Playstation +Browser=PlayStation 3 +Frames=false + +[Mozilla/* (PSP (PlayStation Portable); *)] +Parent=Playstation + +[Sony PS2 (Linux)] +Parent=Playstation +Browser=Sony PS2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser=Pocket PC +Platform=WinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*(compatible; MSIE *.*; Windows CE; PPC; *)] +Parent=Pocket PC + +[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] +Parent=Pocket PC +Win32=true + +[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] +Parent=Pocket PC +Win32=true + +[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] +Parent=Pocket PC + +[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] +Parent=Pocket PC + +[Windows CE (Pocket PC) - Version *.*] +Parent=Pocket PC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser=SEMC Browser +Platform=JAVA +Tables=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson + +[SonyEricsson] +Parent=DefaultProperties +Browser=SonyEricsson +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*Ericsson*] +Parent=SonyEricsson + +[*SonyEricsson*] +Parent=SonyEricsson + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser=Netbox +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser=Netbox +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser=PowerTV +Platform=PowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser=WebTV/MSNTV +Platform=WebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser=Amaya +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser=Links +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser=Links +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +[Links (2.2*; FreeBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=FreeBSD + +[Links (2.2*; Linux *)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=Linux + +[Links (2.2*; OpenBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser=Lynx +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser=Lynx + +[Lynx/2.3*] +Parent=Lynx +Browser=Lynx +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser=Lynx +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser=Lynx +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser=Lynx +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser=Lynx +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser=Lynx +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser=w3m +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser=w3m +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser=w3m +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser=w3m +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser=w3m +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser=w3m +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 + +[ELinks 0.10] +Parent=DefaultProperties +Browser=ELinks +Version=0.10 +MinorVer=10 +Frames=true +Tables=true + +[ELinks (0.10*; *AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks (0.10*; *BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks (0.10*; *CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks (0.10*; *Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks (0.10*; *Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks (0.10*; *FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks (0.10*; *HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks (0.10*; *IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks (0.10*; *Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks (0.10*; *NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks (0.10*; *OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks (0.10*; *OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks (0.10*; *RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks (0.10*; *Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks (0.10*; *Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +[ELinks/0.10* (*AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks/0.10* (*BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks/0.10* (*CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks/0.10* (*Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks/0.10* (*Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks/0.10* (*FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks/0.10* (*HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks/0.10* (*IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks/0.10* (*Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks/0.10* (*NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks/0.10* (*OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks/0.10* (*OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks/0.10* (*RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks/0.10* (*Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks/0.10* (*Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 + +[ELinks 0.11] +Parent=DefaultProperties +Browser=ELinks +Version=0.11 +MinorVer=11 +Frames=true +Tables=true + +[ELinks (0.11*; *AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks (0.11*; *BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks (0.11*; *CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks (0.11*; *Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks (0.11*; *Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks (0.11*; *HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks (0.11*; *IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks (0.11*; *Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks (0.11*; *NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks (0.11*; *OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks (0.11*; *OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks (0.11*; *RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks (0.11*; *Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks (0.11*; *Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +[ELinks/0.11* (*AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks/0.11* (*BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks/0.11* (*CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks/0.11* (*Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks/0.11* (*Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks/0.11* (*FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks/0.11* (*HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks/0.11* (*IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks/0.11* (*Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks/0.11* (*NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks/0.11* (*OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks/0.11* (*OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks/0.11* (*RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks/0.11* (*Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks/0.11* (*Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 + +[ELinks 0.12] +Parent=DefaultProperties +Browser=ELinks +Version=0.12 +MinorVer=12 +Frames=true +Tables=true + +[ELinks (0.12*; *AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks (0.12*; *BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks (0.12*; *CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks (0.12*; *Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks (0.12*; *Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks (0.12*; *FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks (0.12*; *HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks (0.12*; *IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks (0.12*; *Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks (0.12*; *NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks (0.12*; *OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks (0.12*; *OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks (0.12*; *RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks (0.12*; *Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks (0.12*; *Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +[ELinks/0.12* (*AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks/0.12* (*BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks/0.12* (*CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks/0.12* (*Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks/0.12* (*Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks/0.12* (*FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks/0.12* (*HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks/0.12* (*IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks/0.12* (*Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks/0.12* (*NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks/0.12* (*OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks/0.12* (*OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks/0.12* (*RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks/0.12* (*Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks/0.12* (*Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 + +[ELinks 0.9] +Parent=DefaultProperties +Browser=ELinks +Version=0.9 +MinorVer=9 +Frames=true +Tables=true + +[ELinks (0.9*; *AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks (0.9*; *BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks (0.9*; *CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks (0.9*; *Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks (0.9*; *Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks (0.9*; *FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks (0.9*; *HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks (0.9*; *IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks (0.9*; *Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks (0.9*; *NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks (0.9*; *OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks (0.9*; *OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks (0.9*; *RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks (0.9*; *Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks (0.9*; *Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +[ELinks/0.9* (*AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks/0.9* (*BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks/0.9* (*CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks/0.9* (*Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks/0.9* (*Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks/0.9* (*HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks/0.9* (*IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks/0.9* (*Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks/0.9* (*NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks/0.9* (*OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks/0.9* (*OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks/0.9* (*RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks/0.9* (*Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks/0.9* (*Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit + +[AppleWebKit] +Parent=DefaultProperties +Browser=AppleWebKit +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] +Parent=AppleWebKit + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser=Camino +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] +Parent=Camino +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] +Parent=Camino +Version=1.4 +MajorVer=1 +MinorVer=4 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] +Parent=Camino +Version=1.5 +MajorVer=1 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] +Parent=Camino +Version=1.6 +MajorVer=1 +MinorVer=6 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser=Chimera +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser=Dillo +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +[Dillo/2.0] +Parent=Dillo +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser=Emacs/W3 +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser=fantomas +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser=fantomas cloakBrowser + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser=fantomas shadowMaker Browser + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser=fantomas fantomBrowser + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser=fantomas fantomCrew Browser + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser=fantomas stealthBrowser + +[multiBlocker browser*] +Parent=fantomas +Browser=fantomas multiBlocker browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser=FrontPage +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser=Galeon +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser=HP Secure Web Browser +Platform=OpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser=IBrowse +Platform=Amiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser=iCab +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[iCab/4.0 (Macintosh; U; *Mac OS X)] +Parent=iCab +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser=iSiloX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser=Lycoris Desktop/LX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser=NetPositive +Platform=BeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser=OmniWeb +Platform=MacOSX +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] +Parent=OmniWeb +Version=5. +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser=Shiira +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] +Parent=Shiira +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] +Parent=Shiira +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Windows Maker] +Parent=DefaultProperties +Browser=WMaker +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[WMaker*] +Parent=Windows Maker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 + +[K-Meleon 1.0] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 + +[K-Meleon 1.1] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.1 +MajorVer=1 +MinorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 + +[K-Meleon 1.5] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.5 +MajorVer=1 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 + +[Konqueror 3.0] +Parent=DefaultProperties +Browser=Konqueror +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[*Konqueror/3.0*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 + +[Konqueror 4.0] +Parent=DefaultProperties +Browser=Konqueror +Version=4.0 +MajorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 + +[Konqueror 4.1] +Parent=DefaultProperties +Browser=Konqueror +Version=4.1 +MajorVer=4 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 + +[Konqueror 4.2] +Parent=DefaultProperties +Browser=Konqueror +Version=4.2 +MajorVer=4 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser=Safari +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 + +[Safari 3.0] +Parent=DefaultProperties +Browser=Safari +Version=3.0 +MajorVer=3 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 + +[Safari 3.1] +Parent=DefaultProperties +Browser=Safari +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 + +[Safari 3.2] +Parent=DefaultProperties +Browser=Safari +Version=3.2 +MajorVer=3 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 + +[Safari 4.0] +Parent=DefaultProperties +Browser=Safari +Version=4.0 +MajorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 + +[Opera 10.0] +Parent=DefaultProperties +Browser=Opera +Version=10.0 +MajorVer=10 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] +Parent=Opera 10.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 10.0 +Platform=MacOSX + +[Opera/10.0* (Windows 95*)*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Opera/10.0* (Windows 98*)*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Opera/10.0* (Windows CE*)*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Opera/10.0* (Windows ME*)*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Opera/10.0* (Windows NT 4.0*)*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Opera/10.0* (Windows NT 5.0*)*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Opera/10.0* (Windows NT 5.1*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (Windows NT 5.2*)*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Opera/10.0* (Windows NT 6.0*)*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Opera/10.0* (Windows NT 6.1*)*] +Parent=Opera 10.0 +Platform=Win7 + +[Opera/10.0* (Windows XP*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (X11; FreeBSD*)*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Opera/10.0* (X11; Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (X11; SunOS*)*] +Parent=Opera 10.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser=Opera +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser=Opera +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser=Opera +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser=Opera +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser=Opera +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser=Opera +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser=Opera +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser=Opera +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser=Opera +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser=Opera +Version=9.1 +MajorVer=9 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (X11; SunOS*)*] +Parent=Opera 9.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 + +[Opera 9.2] +Parent=DefaultProperties +Browser=Opera +Version=9.2 +MajorVer=9 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] +Parent=Opera 9.2 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.2 +Platform=MacOSX + +[Opera/9.2* (Windows 95*)*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Opera/9.2* (Windows 98*)*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Opera/9.2* (Windows CE*)*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Opera/9.2* (Windows ME*)*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Opera/9.2* (Windows NT 4.0*)*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Opera/9.2* (Windows NT 5.0*)*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Opera/9.2* (Windows NT 5.1*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (Windows NT 5.2*)*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Opera/9.2* (Windows NT 6.0*)*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Opera/9.2* (Windows NT 6.1*)*] +Parent=Opera 9.2 +Platform=Win7 + +[Opera/9.2* (Windows XP*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (X11; FreeBSD*)*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Opera/9.2* (X11; Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (X11; SunOS*)*] +Parent=Opera 9.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 + +[Opera 9.3] +Parent=DefaultProperties +Browser=Opera +Version=9.3 +MajorVer=9 +MinorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] +Parent=Opera 9.3 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.3 +Platform=MacOSX + +[Opera/9.3* (Windows 95*)*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Opera/9.3* (Windows 98*)*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Opera/9.3* (Windows CE*)*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Opera/9.3* (Windows ME*)*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Opera/9.3* (Windows NT 4.0*)*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Opera/9.3* (Windows NT 5.0*)*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Opera/9.3* (Windows NT 5.1*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (Windows NT 5.2*)*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Opera/9.3* (Windows NT 6.0*)*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Opera/9.3* (Windows NT 6.1*)*] +Parent=Opera 9.3 +Platform=Win7 + +[Opera/9.3* (Windows XP*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (X11; FreeBSD*)*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Opera/9.3* (X11; Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (X11; SunOS*)*] +Parent=Opera 9.3 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 + +[Opera 9.4] +Parent=DefaultProperties +Browser=Opera +Version=9.4 +MajorVer=9 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] +Parent=Opera 9.4 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.4 +Platform=MacOSX + +[Opera/9.4* (Windows 95*)*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Opera/9.4* (Windows 98*)*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Opera/9.4* (Windows CE*)*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Opera/9.4* (Windows ME*)*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Opera/9.4* (Windows NT 4.0*)*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Opera/9.4* (Windows NT 5.0*)*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Opera/9.4* (Windows NT 5.1*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (Windows NT 5.2*)*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Opera/9.4* (Windows NT 6.0*)*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Opera/9.4* (Windows NT 6.1*)*] +Parent=Opera 9.4 +Platform=Win7 + +[Opera/9.4* (Windows XP*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (X11; FreeBSD*)*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Opera/9.4* (X11; Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (X11; SunOS*)*] +Parent=Opera 9.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 + +[Opera 9.5] +Parent=DefaultProperties +Browser=Opera +Version=9.5 +MajorVer=9 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] +Parent=Opera 9.5 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.5 +Platform=MacOSX + +[Opera/9.5* (Windows 95*)*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Opera/9.5* (Windows 98*)*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Opera/9.5* (Windows CE*)*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Opera/9.5* (Windows ME*)*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Opera/9.5* (Windows NT 4.0*)*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Opera/9.5* (Windows NT 5.0*)*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Opera/9.5* (Windows NT 5.1*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (Windows NT 5.2*)*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Opera/9.5* (Windows NT 6.0*)*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Opera/9.5* (Windows NT 6.1*)*] +Parent=Opera 9.5 +Platform=Win7 + +[Opera/9.5* (Windows XP*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (X11; FreeBSD*)*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Opera/9.5* (X11; Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (X11; SunOS*)*] +Parent=Opera 9.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 + +[Opera 9.6] +Parent=DefaultProperties +Browser=Opera +Version=9.6 +MajorVer=9 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] +Parent=Opera 9.6 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.6 +Platform=MacOSX + +[Opera/9.6* (Windows 95*)*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Opera/9.6* (Windows 98*)*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Opera/9.6* (Windows CE*)*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Opera/9.6* (Windows ME*)*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Opera/9.6* (Windows NT 4.0*)*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Opera/9.6* (Windows NT 5.0*)*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Opera/9.6* (Windows NT 5.1*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (Windows NT 5.2*)*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Opera/9.6* (Windows NT 6.0*)*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Opera/9.6* (Windows NT 6.1*)*] +Parent=Opera 9.6 +Platform=Win7 + +[Opera/9.6* (Windows XP*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (X11; FreeBSD*)*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Opera/9.6* (X11; Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (X11; SunOS*)*] +Parent=Opera 9.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser=Netscape +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser=Netscape +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser=Netscape +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser=Netscape +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser=Netscape +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser=Netscape +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser=Netscape +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser=Netscape +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser=Netscape +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser=Netscape +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser=Netscape +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser=Netscape +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser=Netscape +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 + +[SeaMonkey 1.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 + +[SeaMonkey 1.1] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.1 +MajorVer=1 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 + +[SeaMonkey 2.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=2.0 +MajorVer=2 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 + +[Flock 1.0] +Parent=DefaultProperties +Browser=Flock +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 + +[Flock 2.0] +Parent=DefaultProperties +Browser=Flock +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 + +[Sleipnir] +Parent=DefaultProperties +Browser=Sleipnir +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win7 + +[Sleipnir*] +Parent=Sleipnir + +[Sleipnir/2.*] +Parent=Sleipnir + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 + +[Fennec 1.0] +Parent=DefaultProperties +Browser=Firefox Mobile +Version=1.0 +MajorVer=1 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser=Firebird +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser=Firefox +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser=Firefox +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser=Firefox +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser=Firefox +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser=Firefox +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser=Firefox +Version=3.0 +MajorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 + +[Firefox 3.1] +Parent=DefaultProperties +Browser=Firefox +Version=3.1 +MajorVer=3 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 + +[Firefox 3.5] +Parent=DefaultProperties +Browser=Firefox +Version=3.5 +MajorVer=3 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser=Phoenix +Version=0.5 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel + +[Iceweasel] +Parent=DefaultProperties +Browser=Iceweasel +Platform=Linux +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] +Parent=Iceweasel +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser=Mozilla +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser=Mozilla +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser=Mozilla +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser=Mozilla +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser=Mozilla +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser=Mozilla +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser=Mozilla +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser=Mozilla +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser=Mozilla +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 + +[Mozilla 1.9] +Parent=DefaultProperties +Browser=Mozilla +Version=1.9 +MajorVer=1 +MinorVer=9 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser=IE +Platform=MacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser=AOL +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser=AOL +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser=AOL +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser + +[Avant Browser] +Parent=DefaultProperties +Browser=Avant Browser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Advanced Browser (http://www.avantbrowser.com)] +Parent=Avant Browser + +[Avant Browser*] +Parent=Avant Browser + +[Avant Browser/*] +Parent=Avant Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser=IE +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] +Parent=IE 4.01 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser=IE +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser=IE +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser=IE +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser=IE +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 +msdomversion=6.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser=IE +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=7.0 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] +Parent=IE 7.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] +Parent=IE 7.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 + +[IE 8.0] +Parent=DefaultProperties +Browser=IE +Version=8.0 +MajorVer=8 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=8.0 +w3cdomversion=1.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] +Parent=IE 8.0 +Platform=Win32 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] +Parent=IE 8.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] +Parent=IE 8.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] +Parent=IE 8.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser=Default Browser +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +AuthenticodeUpdate=0 +CSS=0 +WAP=false +netCLR=false +ClrVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/config b/Source/Platforms/Windows/Binaries/Mono/etc/mono/config new file mode 100644 index 000000000..385128f74 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/Windows/Binaries/Mono/etc/mono/mconfig/config.xml b/Source/Platforms/Windows/Binaries/Mono/etc/mono/mconfig/config.xml new file mode 100644 index 000000000..a3df3b5e9 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/etc/mono/mconfig/config.xml @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + +
+
+
+ + + + + +
+ +
+
+
+
+ + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +]]> + + + + + + + +
+
+
+ + + + + +
+ +
+
+
+ + + + ]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + + + ]]> + + + + + + ]]> + + + + + + ]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +
+
+
+
+
+
+ + diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Accessibility.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Mono.Security.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Configuration.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Core.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Deployment.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Drawing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Json.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Management.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Messaging.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Numerics.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Security.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Transactions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xaml.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/WindowsBase.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/mscorlib.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/mscorlib.dll new file mode 100644 index 000000000..7b6afe057 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/4.5/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1945a39b4cc3ff3d16d1ed359fca1399248b54dc41da14c51db37ace45eddf9 +size 4498432 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXMesh.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXMesh.lib new file mode 100644 index 000000000..fc3085c6d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXMesh.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e56897bc6206db416ee867f8ee530ac0945bb023b2553d3ff53c6e29b2e59971 +size 2125520 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXMesh.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXMesh.pdb new file mode 100644 index 000000000..17acb8c41 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXMesh.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2061568c9fd443cc83e8125a2a2134bc3a5c75a4c306de8a447e599154fa6ffc +size 2453504 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXTex.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXTex.lib new file mode 100644 index 000000000..c3b0c4b5d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXTex.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ffcf31cb5a5582a75ef1cd9466fd2f71310c123c5aebc709b59480b7230f34f +size 2878094 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXTex.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXTex.pdb new file mode 100644 index 000000000..a7677fc2e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/DirectXTex.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:855794cc2c5db0f6060ee0da2d1bc9f1d27b4939f8b7647616e0ed537c2342e1 +size 2117632 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/FastXml_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/FastXml_64.pdb new file mode 100644 index 000000000..fb7641343 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/FastXml_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6f750ddb111526b83b5613a3831a662ad4c1e3ea59af3ed77958953d9b8daf4d +size 102400 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/GenericCodeGen.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/GenericCodeGen.lib new file mode 100644 index 000000000..9efb68a21 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/GenericCodeGen.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e71d3e62e5e212ca116559f6a16b290e056f2efe2aa4839061d37f2c5b2073f3 +size 53068 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/HLSL.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/HLSL.lib new file mode 100644 index 000000000..5b530e98c --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/HLSL.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:deb861040077875fa04d346debe3846b076c12c9b7269bdff684bdff5e465ab5 +size 710 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevelAABB_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevelAABB_64.pdb new file mode 100644 index 000000000..1d95f1e7e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevelAABB_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6fd6a4071042e5d89d5309383b78b55c15e4eac473da3fd38f3b9a4fc68778ce +size 618496 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevelDynamics_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevelDynamics_64.pdb new file mode 100644 index 000000000..214dd67f9 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevelDynamics_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec9dfc61ef830e7c60f17207c8dc6e16bbae5edebd2857fa765e70f97ad4c308 +size 1183744 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevel_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevel_64.pdb new file mode 100644 index 000000000..6984ff3cc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/LowLevel_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14a04e5a22a3160788575e9a90d1c342f1ca659b2a68d62971d20fd19c4fd3d7 +size 1003520 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/MachineIndependent.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/MachineIndependent.lib new file mode 100644 index 000000000..aa2780779 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/MachineIndependent.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e95332894a2625a2426375632f53ad97981d66d3e780bd4d48c53c1a2b6e728f +size 15422382 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/Microsoft.VisualStudio.Setup.Configuration.Native.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/Microsoft.VisualStudio.Setup.Configuration.Native.lib new file mode 100644 index 000000000..2ca6f96ab --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/Microsoft.VisualStudio.Setup.Configuration.Native.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a05a62fa61a49bbc84b8b952572207f1b9ff96814c95b9994a8bb9156be945df +size 2384 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/MonoPosixHelper.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/MonoPosixHelper.dll new file mode 100644 index 000000000..65c280e99 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/MonoPosixHelper.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9ad92c41f484482e217f791b5ae7963f5d55c2799bc5578125a88f2d40f33262 +size 157696 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/OGLCompiler.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OGLCompiler.lib new file mode 100644 index 000000000..b47d7a75d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OGLCompiler.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4dcd1ddbdae26bef5dd7c5427276848ad8491ca490acc824c0d3ca3281b93a8f +size 14066 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/OSDependent.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OSDependent.lib new file mode 100644 index 000000000..763792a5e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OSDependent.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:da8541f83f563835308f1b6f68d0ae514d55bb9c5ddad9af573387e6829274fa +size 6644 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/OpenAL32.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OpenAL32.dll new file mode 100644 index 000000000..48b8fc1fc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OpenAL32.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:14256d3228dfa3af57011c723da1768575e013d126c5ef5c428ecaee1079e836 +size 998912 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/OpenAL32.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OpenAL32.lib new file mode 100644 index 000000000..ea3c715bc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/OpenAL32.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23b8ca06e7204021acf646c94cb14149724235541be0759a6652e1fec2c157b6 +size 70616 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib new file mode 100644 index 000000000..6e8a292cd --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af188ecf8db6cdf7c674acf10a974df921cf8031db2f72e821bec6284a6df030 +size 1123270 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb new file mode 100644 index 000000000..358f282fa --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c30d8a01ab33c44b8fed8827bd4844f93ee2a8f5bbdb0457ea6f040c36b53c76 +size 602112 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib new file mode 100644 index 000000000..a9e082525 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:69534d12a3bd51641dbeb88557a0cbc5e904d8aac691e31b75c0d61b7459c8a6 +size 16676186 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb new file mode 100644 index 000000000..c8ebe8701 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0bed63cba17ff5fc909eb6e398f49d6d8e74650d5e99ed93a970848e64b51aad +size 1052672 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib new file mode 100644 index 000000000..1ee0be725 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb3edb333102f96be621b41a7436d7009ebf1bd85eec10a481bb226ff2951933 +size 1785248 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb new file mode 100644 index 000000000..dfd47dad6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cb03d9c045c60d9ecf336555d36e73b8f5a0013196843c579df3f3320f4293ed +size 643072 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib new file mode 100644 index 000000000..65a0491e8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e0c40331f0f3699de270b13e4e3902351cee4453d303267ef26efbb74ffce68d +size 11528512 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb new file mode 100644 index 000000000..be03ed1d4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f124ce8a0c90c95530b59fb2853d719da1d1593f2b8fe028d3b124f73225254f +size 3452928 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib new file mode 100644 index 000000000..551d0c1b6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3d835510d536e817c3af9eecd8aabf4d080280714daa3220b944ff791de8d2ba +size 401660 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb new file mode 100644 index 000000000..ebc0b6a3d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:acf68cf96b5d43d4349e6fddb0e2a32ad8216c7a3bd30fe14303befc818dca27 +size 282624 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib new file mode 100644 index 000000000..a3606e504 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:05dee85c255e798f0bfcdff521370fcc8cb744a7e962da3c2e63e4318109b92f +size 1969384 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb new file mode 100644 index 000000000..94675ac83 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:495b53259f8b6fd8fab6d955a634d485c49c3dfd8107ea115f219e64696a3e06 +size 913408 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXTask_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXTask_64.pdb new file mode 100644 index 000000000..1b314f838 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXTask_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:198a0524f71154057a2de8f15d01e520ef2fc3395448bc269b2ff8cfff7bc9cf +size 135168 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib new file mode 100644 index 000000000..1c32f639e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d9834c255066c95f779e16821b503e5bd8ba13d6c245d1945f0b96c79f09518f +size 6573276 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb new file mode 100644 index 000000000..7e7c940e0 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99007463b16736a56f03caed5112cdb9996c64d43fd5b725d3328a2f1f83da1c +size 3125248 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysX_static_64.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysX_static_64.lib new file mode 100644 index 000000000..25369b45b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysX_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a7db86e26551e2571591ad561e3b2625a4ca810537dfa80e689aaceab96b7930 +size 28035948 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysX_static_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysX_static_64.pdb new file mode 100644 index 000000000..a518ff696 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/PhysX_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:325986c22c99cb302edb03c328bea61e4b6650352d00ee2e0058d2034b3450d0 +size 3575808 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV-Tools-opt.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV-Tools-opt.lib new file mode 100644 index 000000000..b8a697dfe --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV-Tools-opt.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c3f6cc77f160e73a2d6052b021d632e0d7ba90e3f2d3fb0b6d7d199bbab45baa +size 68688710 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV-Tools.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV-Tools.lib new file mode 100644 index 000000000..ede2192e2 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV-Tools.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:de981934f631e878883f7370e83ba6fd62bce897fe2954b975a5752355d75af7 +size 16890152 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV.lib new file mode 100644 index 000000000..8ad3c9f0b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SPIRV.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3f8b42075ad11e2a1cb66669651f1bdf3ba5ad8ef2ba20e286c286ef6352d09b +size 4767820 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/SceneQuery_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SceneQuery_64.pdb new file mode 100644 index 000000000..b46ad5252 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SceneQuery_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cf69c8a1ae3a867e05873fbacab78fa9d6892494282cc5bab80b0a49bc5d95f0 +size 1937408 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/SimulationController_64.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SimulationController_64.pdb new file mode 100644 index 000000000..62ed91d2c --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/SimulationController_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4174639bf5353187de2dca86901bd15a617ac4d16b5a8e9de42c71a92ee8cef2 +size 2191360 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/UVAtlas.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/UVAtlas.lib new file mode 100644 index 000000000..f778d533b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/UVAtlas.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e41b5c122652ffb6d27323fb8415c18140d010056f2993a8b5f854bbb45940d +size 6030408 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/UVAtlas.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/UVAtlas.pdb new file mode 100644 index 000000000..6be334bbc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/UVAtlas.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0a9287a7dcd3a43e50f03672d9748dbad4eac4e3c06ff6bde37e29b3fec00776 +size 2183168 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/WinPixEventRuntime.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/WinPixEventRuntime.dll new file mode 100644 index 000000000..ba697e653 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/WinPixEventRuntime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b71e83dbe737c51ab7345541a4914790962e9a9466b74c4c076fc4920a66a65 +size 34896 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/WinPixEventRuntime.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/WinPixEventRuntime.lib new file mode 100644 index 000000000..58f250e90 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/WinPixEventRuntime.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4f05223ef8d74360b6ccf3ddfc757953e4e856e4a95bda7345ef53941b198c1a +size 4762 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/assimp-vc140-md.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/assimp-vc140-md.dll new file mode 100644 index 000000000..0475f45d8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/assimp-vc140-md.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0b8f1c603fbbbc0aaa3878f1ee6b77568d201ce2f0c802395a30547b62895c31 +size 7277056 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/assimp-vc140-md.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/assimp-vc140-md.lib new file mode 100644 index 000000000..bb6a06936 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/assimp-vc140-md.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ffd5c5641696c5f85fa31e9e98c4163c80fc524456e11f231bab186abd76bca0 +size 347824 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/d3dcompiler_47.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/d3dcompiler_47.dll new file mode 100644 index 000000000..56e413237 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/d3dcompiler_47.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d1b50f7075e2ee47c8d184e38862a83b880a90fd2ff00da7bb1eb61e24e00f5d +size 4467904 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/dbghelp.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dbghelp.dll new file mode 100644 index 000000000..8193a32a8 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dbghelp.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:159b30d9f1bbe69ae03e0d19669d4fcb565246d81672b7034a69cef9f466dcbe +size 1369936 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxcompiler.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxcompiler.dll new file mode 100644 index 000000000..bf7ec271d --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxcompiler.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d5c8d027a25bc36830b6241b0d2031a74973a00d96b3db67745e45fcfbf1d910 +size 15377800 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxcompiler.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxcompiler.lib new file mode 100644 index 000000000..21852672f --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxcompiler.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c7bf3b219942ae175796d79ca63f83efabeca54fc6eab4f67703bc4946df0b2b +size 2344 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxil.dll b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxil.dll new file mode 100644 index 000000000..9afd5f8bc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/dxil.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17df4ea0a53a18dcb80c924217a54d617c1b6166e7677501a8decf86d08b9de7 +size 1119176 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/eglib.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/eglib.pdb new file mode 100644 index 000000000..a79f59aac --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/eglib.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1ff34e923a27392a70eb465df1ecc03372aadac6f2753832cce3d82cd5ae1b75 +size 159744 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/freetype.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/freetype.lib new file mode 100644 index 000000000..08535f7a6 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/freetype.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a24a1323cef66bdb59239e9d1c73b8e502440be5faf29688b817921c1f265600 +size 3944178 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/freetype.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/freetype.pdb new file mode 100644 index 000000000..3ed62607c --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/freetype.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8f9cf7608a0ec97fa19018c7e0874c292a68b82bde4a22745b8c9139a6699b22 +size 471040 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/glslang.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/glslang.lib new file mode 100644 index 000000000..f25c07bbc --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/glslang.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8e99cb9070bfebd7485e318e272ff250d38dbcb654340e28885c8dafc55c464d +size 164520 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libcurl.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libcurl.lib new file mode 100644 index 000000000..76455890e --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libcurl.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:237b485c9ff8bf6b2958d8d8e228d07af6949f6675675be61f45aae28a39e1d5 +size 3766516 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libcurl.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libcurl.pdb new file mode 100644 index 000000000..15ff1e130 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libcurl.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b3b0a6837099ed883d32ff79acdef3dacf2a1f9ce16a9a56dca32b1e1d2c83e +size 339968 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libgcmonosgen.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libgcmonosgen.pdb new file mode 100644 index 000000000..1a80321ba --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libgcmonosgen.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8bd411ac3aa425db683905a5fa2445d7d770e5d04821757fcdcaa42e0d0ac986 +size 348160 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmini.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmini.pdb new file mode 100644 index 000000000..7c24a2502 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmini.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:184d1b18bb84c35fa43d878cedb60f53f203207208882ce6518a2d7a35308332 +size 864256 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmono-static.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmono-static.lib new file mode 100644 index 000000000..366a28594 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmono-static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f633de4fbae8e4d65aec49eaaa06f37745bfc28328f4193020434dab398235cc +size 28245086 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmonoruntime.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmonoruntime.pdb new file mode 100644 index 000000000..c60e7dbe4 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmonoruntime.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:188ebd527b432f33f8bfccb4fbada27b029f362918ab5c4b6f82584f9d30b6f3 +size 1249280 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmonoutils.pdb b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmonoutils.pdb new file mode 100644 index 000000000..30be1562b --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libmonoutils.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:289966b7d9ff6255e38a6e45d2b9a5179c42e0f1add6abb70f7fa5501dfc59bc +size 356352 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libogg_static.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libogg_static.lib new file mode 100644 index 000000000..139c0d9ce --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libogg_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d20bd882a7f2ea32089bebaac06f7969caa6d050fcd4079807811bf18e6a07e +size 42214 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libvorbis_static.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libvorbis_static.lib new file mode 100644 index 000000000..448ad4be7 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libvorbis_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2ccc266baecbcf38dca35df4c8e71eacb0cfb1fd2fefdfc5e73ae172981c1b80 +size 996624 diff --git a/Source/Platforms/Windows/Binaries/ThirdParty/x64/libvorbisfile_static.lib b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libvorbisfile_static.lib new file mode 100644 index 000000000..28c18a099 --- /dev/null +++ b/Source/Platforms/Windows/Binaries/ThirdParty/x64/libvorbisfile_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:945bf05bc9c01747763505c740b3cce3d52e31319d9f27c1d89d527764b59b38 +size 68374 diff --git a/Source/Platforms/XboxOne/.gitignore b/Source/Platforms/XboxOne/.gitignore new file mode 100644 index 000000000..c07cf8bfe --- /dev/null +++ b/Source/Platforms/XboxOne/.gitignore @@ -0,0 +1,2 @@ +!Binaries/ +!*.* diff --git a/Source/Platforms/XboxOne/Binaries/.gitignore b/Source/Platforms/XboxOne/Binaries/.gitignore new file mode 100644 index 000000000..977f8d0c2 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/.gitignore @@ -0,0 +1,2 @@ +# Ignore build binaries +/Game/ \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/App.cs b/Source/Platforms/XboxOne/Binaries/App.cs new file mode 100644 index 000000000..c4dda53e5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/App.cs @@ -0,0 +1,54 @@ +using System; +using Windows.ApplicationModel.Core; +using Windows.UI.Core; +using FlaxEngine; + +namespace {0} +{{ + public class App : IFrameworkView, IFrameworkViewSource + {{ + private Game _game; + + [MTAThread] + static void Main(string[] args) + {{ + var app = new App(); + CoreApplication.Run(app); + }} + + public App() + {{ + InitUWP.SetupDisplay(); + + _game = new Game(); + }} + + public virtual void Initialize(CoreApplicationView applicationView) + {{ + _game.Initialize(applicationView); + }} + + public void SetWindow(CoreWindow window) + {{ + _game.SetWindow(window); + }} + + public void Load(string entryPoint) + {{ + }} + + public void Run() + {{ + _game.Run(); + }} + + public void Uninitialize() + {{ + }} + + public IFrameworkView CreateView() + {{ + return this; + }} + }} +}} diff --git a/Source/Platforms/XboxOne/Binaries/AssemblyInfo.cs b/Source/Platforms/XboxOne/Binaries/AssemblyInfo.cs new file mode 100644 index 000000000..0d476743b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/AssemblyInfo.cs @@ -0,0 +1,29 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("{0}")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("{1}")] +[assembly: AssemblyProduct("{0}")] +[assembly: AssemblyCopyright("Copyright © {1} {2}")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: ComVisible(false)] diff --git a/Source/Platforms/XboxOne/Binaries/Assets/LargeTile.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/LargeTile.scale-100.png new file mode 100644 index 000000000..e0b19cf2b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/LargeTile.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a130daac93f16acb167e8ee5c30b91e2bbe4e55888016bb7b80284a8c100be4 +size 9493 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/SmallTile.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/SmallTile.scale-100.png new file mode 100644 index 000000000..75b9656fe --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/SmallTile.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4b7a651d8ad02403846808913b795c9bbda138151a3cffabb1433caecca01dd +size 1189 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/SplashScreen.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/SplashScreen.scale-100.png new file mode 100644 index 000000000..b123a74d7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/SplashScreen.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c79021ad84286058f1966e22ed29fc83f56de18749fb98b97d5c9900ff6034af +size 12039 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/Square150x150Logo.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/Square150x150Logo.scale-100.png new file mode 100644 index 000000000..866996aeb --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/Square150x150Logo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:020804fa72a23df62780ea91a1c537b65e57b0ab8061ff70862548e2fa24976d +size 3140 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.altform-unplated_targetsize-16.png b/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.altform-unplated_targetsize-16.png new file mode 100644 index 000000000..15bd8334e --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.altform-unplated_targetsize-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ef2ed81e83768bc3f1329344f43793d7b8f9ad924f4fa2d1b3b7ac462ec072 +size 224 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.scale-100.png new file mode 100644 index 000000000..b31ad4e24 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b47f81fc190683b47cd6bc6a075d34fc2ffa2b78654b53fc60cffc1599e579bb +size 637 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.targetsize-16.png b/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.targetsize-16.png new file mode 100644 index 000000000..15bd8334e --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/Square44x44Logo.targetsize-16.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f2ef2ed81e83768bc3f1329344f43793d7b8f9ad924f4fa2d1b3b7ac462ec072 +size 224 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/StoreLogo.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/StoreLogo.scale-100.png new file mode 100644 index 000000000..5efa8d894 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/StoreLogo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dcd2546a38e588aa533a3668777e0272a7046ce88b6003ea48f81c1fa8d15823 +size 846 diff --git a/Source/Platforms/XboxOne/Binaries/Assets/Wide310x150Logo.scale-100.png b/Source/Platforms/XboxOne/Binaries/Assets/Wide310x150Logo.scale-100.png new file mode 100644 index 000000000..6211f30ae --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Assets/Wide310x150Logo.scale-100.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e5db5b5b3c7174d00e153f30a9cfae4ec4c623e9b7e3847d3cc3932193083f1 +size 4014 diff --git a/Source/Platforms/XboxOne/Binaries/Default.rd.xml b/Source/Platforms/XboxOne/Binaries/Default.rd.xml new file mode 100644 index 000000000..af00722cd --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Default.rd.xml @@ -0,0 +1,31 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/FlaxGenerated.cs b/Source/Platforms/XboxOne/Binaries/FlaxGenerated.cs new file mode 100644 index 000000000..665633e1e --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/FlaxGenerated.cs @@ -0,0 +1,16 @@ +using Windows.Graphics.Display; +using Windows.UI.ViewManagement; + +// DO NOT EDIT THIS FILE! IT HAS BEEN AUTO GENERATED! + +namespace FlaxEngine +{{ + internal static class InitUWP + {{ + public static void SetupDisplay() + {{ + DisplayInformation.AutoRotationPreferences = {0}; + ApplicationView.PreferredLaunchWindowingMode = ApplicationViewWindowingMode.{1}; + }} + }} +}} diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/machine.config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/machine.config new file mode 100644 index 000000000..2577c81dd --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/machine.config @@ -0,0 +1,280 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/settings.map b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/settings.map new file mode 100644 index 000000000..9a52ccc02 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/web.config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/web.config new file mode 100644 index 000000000..e1428f8c3 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/2.0/web.config @@ -0,0 +1,154 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/machine.config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/machine.config new file mode 100644 index 000000000..f3b71c43c --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/machine.config @@ -0,0 +1,307 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/settings.map b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/web.config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/web.config new file mode 100644 index 000000000..2a7dfd2ed --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.0/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser new file mode 100644 index 000000000..dcedf7f73 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/Browsers/Compat.browser @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx new file mode 100644 index 000000000..f4d74bff7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/DefaultWsdlHelpGenerator.aspx @@ -0,0 +1,1901 @@ +<%-- +// +// DefaultWsdlHelpGenerator.aspx: +// +// Author: +// Lluis Sanchez Gual (lluis@ximian.com) +// +// (C) 2003 Ximian, Inc. http://www.ximian.com +// +--%> + +<%@ Import Namespace="System.Collections" %> +<%@ Import Namespace="System.Collections.Generic" %> +<%@ Import Namespace="System.IO" %> +<%@ Import Namespace="System.Xml.Serialization" %> +<%@ Import Namespace="System.Xml" %> +<%@ Import Namespace="System.Xml.Schema" %> +<%@ Import Namespace="System.Web.Services" %> +<%@ Import Namespace="System.Web.Services.Description" %> +<%@ Import Namespace="System.Web.Services.Configuration" %> +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System" %> +<%@ Import Namespace="System.Net" %> +<%@ Import Namespace="System.Globalization" %> +<%@ Import Namespace="System.Resources" %> +<%@ Import Namespace="System.Diagnostics" %> +<%@ Import Namespace="System.CodeDom" %> +<%@ Import Namespace="System.CodeDom.Compiler" %> +<%@ Import Namespace="Microsoft.CSharp" %> +<%@ Import Namespace="Microsoft.VisualBasic" %> +<%@ Import Namespace="System.Text" %> +<%@ Import Namespace="System.Text.RegularExpressions" %> +<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %> +<%@ Assembly name="System.Web.Services" %> +<%@ Page debug="true" %> + + + + + + <% + Response.Write (""); + %> + <%=WebServiceName%> Web Service + + + + + + + +
+Web Service
+<%=WebServiceName%> +
+ + + + + + + + +
+
+Overview
+
+Service Description +
+Client proxy +

+ + + <%#FormatBindingName(DataBinder.Eval(Container.DataItem, "Name").ToString())%> + + + op=<%#GetOpName(Container.DataItem)%>&bnd=<%#DataBinder.Eval(Container.DataItem, "Binding.Name")%>"><%#GetOpName(Container.DataItem)%> +
+
+
+
+
+
+ +
+ +<% if (CurrentPage == "main") {%> + + + +

Web Service Overview

+ <%=WebServiceDescription%> +

+ <% if (ProfileViolations != null && ProfileViolations.Count > 0) { %> +

Basic Profile Conformance

+ This web service does not conform to WS-I Basic Profile v1.1 + <% + Response.Write ("
    "); + foreach (BasicProfileViolation vio in ProfileViolations) { + Response.Write ("
  • " + vio.NormativeStatement + ": " + vio.Details); + Response.Write ("
      "); + foreach (string ele in vio.Elements) + Response.Write ("
    • " + ele + "
    • "); + Response.Write ("
    "); + Response.Write ("
  • "); + } + Response.Write ("
"); + }%> + +<%} if (DefaultBinding == null) {%> +This service does not contain any public web method. +<%} else if (CurrentPage == "op") {%> + + + + <%=CurrentOperationName%> +

+ <% WriteTabs (); %> +


+ + <% if (CurrentTab == "main") { %> + Input Parameters +
+ <% if (InParams.Count == 0) { %> + No input parameters
+ <% } else { %> + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+ <% } %> +
+ + <% if (OutParams.Count > 0) { %> + Output Parameters +
+ + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%><%#DataBinder.Eval(Container.DataItem, "Type")%>
+
+ <% } %> + + Remarks +
+ <%=OperationDocumentation%> +

+ Technical information +
+ Format: <%=CurrentOperationFormat%> +
Supported protocols: <%=CurrentOperationProtocols%> + <% } %> + + + + <% if (CurrentTab == "test") { + if (CurrentOperationSupportsTest) {%> + Enter values for the parameters and click the 'Invoke' button to test this method:

+
+ + + + + + + + + + + + + + + +
<%#DataBinder.Eval(Container.DataItem, "Name")%>: ">
 
+
+
"> + The web service returned the following result:

+
+
+ +
+ <% } else {%> + The test form is not available for this operation because it has parameters with a complex structure. + <% } %> + <% } %> + + + + <% if (CurrentTab == "msg") { %> + + The following are sample SOAP requests and responses for each protocol supported by this method: +

+ + <% if (IsOperationSupported ("Soap")) { %> + Soap +

+
<%=GenerateOperationMessages ("Soap", true)%>
+
+
<%=GenerateOperationMessages ("Soap", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpGet")) { %> + HTTP Get +

+
<%=GenerateOperationMessages ("HttpGet", true)%>
+
+
<%=GenerateOperationMessages ("HttpGet", false)%>
+
+ <% } %> + <% if (IsOperationSupported ("HttpPost")) { %> + HTTP Post +

+
<%=GenerateOperationMessages ("HttpPost", true)%>
+
+
<%=GenerateOperationMessages ("HttpPost", false)%>
+
+ <% } %> + + <% } %> +<%} else if (CurrentPage == "proxy") {%> + +
+ Select the language for which you want to generate a proxy +   + +    +
+
+ <%=CurrentProxytName%>    + Download +

+
+
<%=GetProxyCode ()%>
+
+<%} else if (CurrentPage == "wsdl") {%> + + <% if (descriptions.Count > 1 || schemas.Count > 1) {%> + The description of this web service is composed by several documents. Click on the document you want to see: + + + + <%} else {%> + <%}%> +
+ <%=CurrentDocumentName%>    + Download +

+
+
<%=GenerateDocument ()%>
+
+ +<%}%> + +














+
+ + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/machine.config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/machine.config new file mode 100644 index 000000000..455709536 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/machine.config @@ -0,0 +1,310 @@ + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+
+
+
+ +
+ + + +
+ +
+
+
+
+ + + + +
+
+
+ +
+ +
+
+
+ +
+ +
+
+
+
+
+
+
+
+
+
+
+ + +
+
+ +
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/settings.map b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/settings.map new file mode 100644 index 000000000..4c53aca67 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/settings.map @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/web.config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/web.config new file mode 100644 index 000000000..324c529f0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/4.5/web.config @@ -0,0 +1,253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/browscap.ini b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/browscap.ini new file mode 100644 index 000000000..1267e1deb --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/browscap.ini @@ -0,0 +1,16979 @@ +;;; Provided courtesy of http://browsers.garykeith.com +;;; Created on Wednesday, June 17, 2009 at 6:30 AM GMT + +[GJK_Browscap_Version] +Version=4476 +Released=Wed, 17 Jun 2009 06:30:21 -0000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DefaultProperties + +[DefaultProperties] +Browser=DefaultProperties +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=false +IFrames=false +Tables=false +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ask + +[Ask] +Parent=DefaultProperties +Browser=Ask +Frames=true +Tables=true +Crawler=true + +[Mozilla/?.0 (compatible; Ask Jeeves/Teoma*)] +Parent=Ask +Browser=Teoma + +[Mozilla/2.0 (compatible; Ask Jeeves)] +Parent=Ask +Browser=AskJeeves + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Baidu + +[Baidu] +Parent=DefaultProperties +Browser=Baidu +Frames=true +Tables=true +Crawler=true + +[BaiduImageSpider*] +Parent=Baidu +Browser=BaiduImageSpider + +[Baiduspider*] +Parent=Baidu +Browser=BaiDu + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google + +[Google] +Parent=DefaultProperties +Browser=Google +Frames=true +IFrames=true +Tables=true +JavaScript=true +Crawler=true + +[* (compatible; Googlebot-Mobile/2.1; *http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot-Mobile +Frames=false +IFrames=false +Tables=false + +[*Google Wireless Transcoder*] +Parent=Google +Browser=Google Wireless Transcoder + +[AdsBot-Google (?http://www.google.com/adsbot.html)] +Parent=Google +Browser=AdsBot-Google + +[Feedfetcher-Google-iGoogleGadgets;*] +Parent=Google +Browser=iGoogleGadgets +isBanned=true +isSyndicationReader=true + +[Feedfetcher-Google;*] +Parent=Google +Browser=Feedfetcher-Google +isBanned=true +isSyndicationReader=true + +[Google OpenSocial agent (http://www.google.com/feedfetcher.html)] +Parent=Google +Browser=Google OpenSocial + +[Google-Site-Verification/1.0] +Parent=Google +Browser=Google-Site-Verification + +[Google-Sitemaps/*] +Parent=Google +Browser=Google-Sitemaps + +[Googlebot-Image/*] +Parent=Google +Browser=Googlebot-Image +CDF=true + +[googlebot-urlconsole] +Parent=Google +Browser=googlebot-urlconsole + +[Googlebot-Video/1.0] +Parent=Google +Browser=Google-Video + +[Googlebot/2.1 (?http://www.google.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/2.1 (?http://www.googlebot.com/bot.html)] +Parent=Google +Browser=Googlebot + +[Googlebot/Test*] +Parent=Google +Browser=Googlebot/Test + +[gsa-crawler*] +Parent=Google +Browser=Google Search Appliance +isBanned=true + +[Mediapartners-Google*] +Parent=Google +Browser=Mediapartners-Google + +[Mozilla/4.0 (compatible; Google Desktop)] +Parent=Google +Browser=Google Desktop + +[Mozilla/4.0 (compatible; GoogleToolbar*)] +Parent=Google +Browser=Google Toolbar +isBanned=true + +[Mozilla/5.0 (compatible; Google Keyword Tool;*)] +Parent=Google +Browser=Google Keyword Tool + +[Mozilla/5.0 (compatible; Googlebot/2.1; ?http://www.google.com/bot.html)] +Parent=Google +Browser=Google Webmaster Tools + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Inktomi + +[Inktomi] +Parent=DefaultProperties +Browser=Inktomi +Frames=true +Tables=true +Crawler=true + +[* (compatible;YahooSeeker/M1A1-R2D2; *)] +Parent=Inktomi +Browser=YahooSeeker-Mobile +Frames=false +Tables=false + +[Mozilla/4.0] +Parent=Inktomi + +[Mozilla/4.0 (compatible; MSIE 5.0; Windows NT)] +Parent=Inktomi +Win32=true + +[Mozilla/4.0 (compatible; Yahoo Japan; for robot study; kasugiya)] +Parent=Inktomi +Browser=Yahoo! RobotStudy +isBanned=true + +[Mozilla/5.0 (compatible; BMC/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMC + +[Mozilla/5.0 (compatible; BMF/1.0 (Y!J-AGENT))] +Parent=Inktomi +Browser=Y!J-AGENT/BMF + +[Mozilla/5.0 (compatible; BMI/1.0 (Y!J-AGENT; 1.0))] +Parent=Inktomi +Browser=Y!J-AGENT/BMI + +[Mozilla/5.0 (compatible; Yahoo! DE Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Directory Engine + +[Mozilla/5.0 (compatible; Yahoo! Slurp China; http://misc.yahoo.com.cn/help.html)] +Parent=Inktomi +Browser=Yahoo! Slurp China + +[Mozilla/5.0 (compatible; Yahoo! Slurp/3.0; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (compatible; Yahoo! Slurp; http://help.yahoo.com/help/us/ysearch/slurp)] +Parent=Inktomi +Browser=Yahoo! Slurp + +[Mozilla/5.0 (compatible; Yahoo! Verifier/1.1)] +Parent=Inktomi +Browser=Yahoo! Verifier +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Slurp/cat; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi +Browser=Slurp/cat + +[Mozilla/5.0 (Slurp/si; slurp@inktomi.com; http://www.inktomi.com/slurp.html)] +Parent=Inktomi + +[Mozilla/5.0 (Yahoo-MMCrawler/4.0; mailto:vertical-crawl-support@yahoo-inc.com)] +Parent=Inktomi +Browser=Yahoo-MMCrawler +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Scooter/*] +Parent=Inktomi +Browser=Scooter + +[Scooter/3.3Y!CrawlX] +Parent=Inktomi +Browser=Scooter/3.3Y!CrawlX +Version=3.3 +MajorVer=3 +MinorVer=3 + +[slurp] +Parent=Inktomi +Browser=slurp + +[Y!J-BSC/1.0*] +Parent=Inktomi +Browser=Y!J-BSC +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +[Y!J-SRD/1.0] +Parent=Inktomi +Browser=Y!J-SRD +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Yahoo Mindset] +Parent=Inktomi +Browser=Yahoo Mindset + +[Yahoo Pipes*] +Parent=Inktomi +Browser=Yahoo Pipes + +[Yahoo! Mindset] +Parent=Inktomi +Browser=Yahoo! Mindset + +[Yahoo! Slurp/Site Explorer] +Parent=Inktomi +Browser=Yahoo! Site Explorer + +[Yahoo-Blogs/*] +Parent=Inktomi +Browser=Yahoo-Blogs + +[Yahoo-MMAudVid*] +Parent=Inktomi +Browser=Yahoo-MMAudVid + +[Yahoo-MMCrawler*] +Parent=Inktomi +Browser=Yahoo-MMCrawler +isBanned=true + +[YahooFeedSeeker*] +Parent=Inktomi +Browser=YahooFeedSeeker +isSyndicationReader=true +Crawler=false + +[YahooSeeker/*] +Parent=Inktomi +Browser=YahooSeeker +isMobileDevice=true + +[YahooSeeker/CafeKelsa (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi +Browser=YahooSeeker/CafeKelsa + +[YahooSeeker/CafeKelsa-dev (compatible; Konqueror/3.2; FreeBSD*) (KHTML, like Gecko)] +Parent=Inktomi + +[YahooVideoSearch*] +Parent=Inktomi +Browser=YahooVideoSearch + +[YahooYSMcm*] +Parent=Inktomi +Browser=YahooYSMcm + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN + +[MSN] +Parent=DefaultProperties +Browser=MSN +Frames=true +Tables=true +Crawler=true + +[adidxbot/1.1 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=adidxbot + +[librabot/1.0 (*)] +Parent=MSN +Browser=librabot + +[llssbot/1.0] +Parent=MSN +Browser=llssbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSMOBOT/1.1*] +Parent=MSN +Browser=msnbot-mobile +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-Academic/1.0*] +Parent=MSN +Browser=MSNBot-Academic +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.0*] +Parent=MSN +Browser=msnbot-media +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot-media/1.1*] +Parent=MSN +Browser=msnbot-media +Version=1.1 +MajorVer=1 +MinorVer=1 + +[MSNBot-News/1.0*] +Parent=MSN +Browser=MSNBot-News +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MSNBot-NewsBlogs/1.0*] +Parent=MSN +Browser=MSNBot-NewsBlogs +Version=1 +MajorVer=1 +MinorVer=0 + +[msnbot-products] +Parent=MSN +Browser=msnbot-products + +[msnbot-webmaster/1.0 (*http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=msnbot-webmaster tools + +[msnbot/1.0*] +Parent=MSN +Browser=msnbot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[msnbot/1.1*] +Parent=MSN +Browser=msnbot +Version=1.1 +MajorVer=1 +MinorVer=1 + +[msnbot/2.0b*] +Parent=MSN +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[MSR-ISRCCrawler] +Parent=MSN +Browser=MSR-ISRCCrawler + +[renlifangbot/1.0 (?http://search.msn.com/msnbot.htm)] +Parent=MSN +Browser=renlifangbot + +[T-Mobile Dash Mozilla/4.0 (*) MSNBOT-MOBILE/1.1 (*)] +Parent=MSN +Browser=msnbot-mobile + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yahoo + +[Yahoo] +Parent=DefaultProperties +Browser=Yahoo +Frames=true +Tables=true +Crawler=true + +[Mozilla/4.0 (compatible; Y!J; for robot study*)] +Parent=Yahoo +Browser=Y!J + +[Mozilla/5.0 (Yahoo-Test/4.0*)] +Parent=Yahoo +Browser=Yahoo-Test +Version=4.0 +MajorVer=4 +MinorVer=0 + +[mp3Spider cn-search-devel at yahoo-inc dot com] +Parent=Yahoo +Browser=Yahoo! Media +isBanned=true + +[My Browser] +Parent=Yahoo +Browser=Yahoo! My Browser + +[Y!OASIS/*] +Parent=Yahoo +Browser=Y!OASIS +isBanned=true + +[YahooYSMcm/2.0.0] +Parent=Yahoo +Browser=YahooYSMcm +Version=2.0 +MajorVer=2 +MinorVer=0 +isBanned=true + +[YRL_ODP_CRAWLER] +Parent=Yahoo +Browser=YRL_ODP_CRAWLER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Yandex + +[Yandex] +Parent=DefaultProperties +Browser=Yandex +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[Mozilla/4.0 (compatible; MSIE 5.0; YANDEX)] +Parent=Yandex + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.9) Gecko VisualParser/3.0] +Parent=Yandex +Browser=VisualParser +isBanned=true + +[YaDirectBot/*] +Parent=Yandex +Browser=YaDirectBot + +[Yandex/*] +Parent=Yandex + +[YandexBlog/*] +Parent=Yandex +Browser=YandexBlog +isSyndicationReader=true + +[YandexSomething/*] +Parent=Yandex +Browser=YandexSomething +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Best of the Web + +[Best of the Web] +Parent=DefaultProperties +Browser=Best of the Web +Frames=true +Tables=true + +[Mozilla/4.0 (compatible; BOTW Feed Grabber; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Feed Grabber +isSyndicationReader=true +Crawler=false + +[Mozilla/4.0 (compatible; BOTW Spider; *http://botw.org)] +Parent=Best of the Web +Browser=BOTW Spider +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Boitho + +[Boitho] +Parent=DefaultProperties +Browser=Boitho +Frames=true +Tables=true +Crawler=true + +[boitho.com-dc/*] +Parent=Boitho +Browser=boitho.com-dc + +[boitho.com-robot/*] +Parent=Boitho +Browser=boitho.com-robot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Convera + +[Convera] +Parent=DefaultProperties +Browser=Convera +Frames=true +Tables=true +Crawler=true + +[ConveraCrawler/*] +Parent=Convera +Browser=ConveraCrawler + +[ConveraMultiMediaCrawler/0.1*] +Parent=Convera +Browser=ConveraMultiMediaCrawler +Version=0.1 +MajorVer=0 +MinorVer=1 + +[CrawlConvera*] +Parent=Convera +Browser=CrawlConvera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DotBot + +[DotBot] +Parent=DefaultProperties +Browser=DotBot +Frames=true +Tables=true +isBanned=true +Crawler=true + +[DotBot/* (http://www.dotnetdotcom.org/*)] +Parent=DotBot + +[Mozilla/5.0 (compatible; DotBot/*; http://www.dotnetdotcom.org/*)] +Parent=DotBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Entireweb + +[Entireweb] +Parent=DefaultProperties +Browser=Entireweb +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/4.0 (compatible; SpeedySpider; www.entireweb.com)] +Parent=Entireweb + +[Speedy Spider (*Beta/*)] +Parent=Entireweb + +[Speedy?Spider?(http://www.entireweb.com*)] +Parent=Entireweb + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Envolk + +[Envolk] +Parent=DefaultProperties +Browser=Envolk +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[envolk/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +[envolk?ITS?spider/* (?http://www.envolk.com/envolk*)] +Parent=Envolk + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Exalead + +[Exalead] +Parent=DefaultProperties +Browser=Exalead +Frames=true +Tables=true +isBanned=true +Crawler=true + +[Exabot-Images/1.0] +Parent=Exalead +Browser=Exabot-Images +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Exabot-Test/*] +Parent=Exalead +Browser=Exabot-Test + +[Exabot/2.0] +Parent=Exalead +Browser=Exabot + +[Exabot/3.0] +Parent=Exalead +Browser=Exabot +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Liberate + +[Exalead NG/*] +Parent=Exalead +Browser=Exalead NG +isBanned=true + +[Mozilla/5.0 (compatible; Exabot-Images/3.0;*)] +Parent=Exalead +Browser=Exabot-Images + +[Mozilla/5.0 (compatible; Exabot/3.0 (BiggerBetter/tests);*)] +Parent=Exalead +Browser=Exabot/BiggerBetter/tests + +[Mozilla/5.0 (compatible; Exabot/3.0;*)] +Parent=Exalead +Browser=Exabot +isBanned=false + +[Mozilla/5.0 (compatible; NGBot/*)] +Parent=Exalead + +[ng/*] +Parent=Exalead +Browser=Exalead Previewer +Version=1.0 +MajorVer=1 +MinorVer=0 +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fast/AllTheWeb + +[Fast/AllTheWeb] +Parent=DefaultProperties +Browser=Fast/AllTheWeb +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[*FAST Enterprise Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST Enterprise Crawler + +[FAST Data Search Document Retriever/4.0*] +Parent=Fast/AllTheWeb +Browser=FAST Data Search Document Retriever + +[FAST MetaWeb Crawler (helpdesk at fastsearch dot com)] +Parent=Fast/AllTheWeb +Browser=FAST MetaWeb Crawler + +[Fast PartnerSite Crawler*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler + +[FAST-WebCrawler/*/FirstPage*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/FirstPage + +[FAST-WebCrawler/*/Fresh*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Fresh + +[FAST-WebCrawler/*/PartnerSite*] +Parent=Fast/AllTheWeb +Browser=FAST PartnerSite + +[FAST-WebCrawler/*?Multimedia*] +Parent=Fast/AllTheWeb +Browser=FAST-WebCrawler/Multimedia + +[FastSearch Web Crawler for*] +Parent=Fast/AllTheWeb +Browser=FastSearch Web Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Gigabot + +[Gigabot] +Parent=DefaultProperties +Browser=Gigabot +Frames=true +IFrames=true +Tables=true +Crawler=true + +[Gigabot*] +Parent=Gigabot + +[GigabotSiteSearch/*] +Parent=Gigabot +Browser=GigabotSiteSearch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Ilse + +[Ilse] +Parent=DefaultProperties +Browser=Ilse +Frames=true +Tables=true +Crawler=true + +[IlseBot/*] +Parent=Ilse + +[INGRID/?.0*] +Parent=Ilse +Browser=Ilse + +[Mozilla/3.0 (INGRID/*] +Parent=Ilse +Browser=Ilse + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iVia Project + +[iVia Project] +Parent=DefaultProperties +Browser=iVia Project +Frames=true +IFrames=true +Tables=true +Crawler=true + +[DataFountains/DMOZ Downloader*] +Parent=iVia Project +Browser=DataFountains/DMOZ Downloader +isBanned=true + +[DataFountains/DMOZ Feature Vector Corpus Creator*] +Parent=iVia Project +Browser=DataFountains/DMOZ Feature Vector Corpus + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Jayde Online + +[Jayde Online] +Parent=DefaultProperties +Browser=Jayde Online +Frames=true +Tables=true +Crawler=true + +[ExactSeek Crawler/*] +Parent=Jayde Online +Browser=ExactSeek Crawler + +[exactseek-pagereaper-* (crawler@exactseek.com)] +Parent=Jayde Online +Browser=exactseek-pagereaper +isBanned=true + +[exactseek.com] +Parent=Jayde Online +Browser=exactseek.com + +[Jayde Crawler*] +Parent=Jayde Online +Browser=Jayde Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycos + +[Lycos] +Parent=DefaultProperties +Browser=Lycos +Frames=true +Tables=true +Crawler=true + +[Lycos*] +Parent=Lycos +Browser=Lycos + +[Lycos-Proxy] +Parent=Lycos +Browser=Lycos-Proxy + +[Lycos-Spider_(modspider)] +Parent=Lycos +Browser=Lycos-Spider_(modspider) + +[Lycos-Spider_(T-Rex)] +Parent=Lycos +Browser=Lycos-Spider_(T-Rex) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Naver + +[Naver] +Parent=DefaultProperties +Browser=Naver +isBanned=true +Crawler=true + +[Cowbot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver Cowbot + +[Mozilla/4.0 (compatible; NaverBot/*; *)] +Parent=Naver + +[Mozilla/4.0 (compatible; NaverBot/*; nhnbot@naver.com)] +Parent=Naver +Browser=Naver NaverBot + +[NaverBot-* (NHN Corp*naver.com)] +Parent=Naver +Browser=Naver NHN Corp + +[Yeti/*] +Parent=Naver +Browser=Yeti + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Snap + +[Snap] +Parent=DefaultProperties +Browser=Snap +isBanned=true +Crawler=true + +[Mozilla/5.0 (SnapPreviewBot) Gecko/* Firefox/*] +Parent=Snap + +[Snapbot/*] +Parent=Snap + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sogou + +[Sogou] +Parent=DefaultProperties +Browser=Sogou +Frames=true +Tables=true +isBanned=true +Crawler=true + +[shaboyi spider] +Parent=Sogou +Browser=Sogou/Shaboyi Spider + +[Sogou develop spider/*] +Parent=Sogou +Browser=Sogou Develop Spider + +[Sogou head spider*] +Parent=Sogou +Browser=Sogou/HEAD Spider + +[sogou js robot(*)] +Parent=Sogou + +[Sogou Orion spider/*] +Parent=Sogou +Browser=Sogou Orion spider + +[Sogou Pic Agent] +Parent=Sogou +Browser=Sogou/Image Crawler + +[Sogou Pic Spider] +Parent=Sogou +Browser=Sogou Pic Spider + +[Sogou Push Spider/*] +Parent=Sogou +Browser=Sogou Push Spider + +[sogou spider] +Parent=Sogou +Browser=Sogou/Spider + +[sogou web spider*] +Parent=Sogou +Browser=sogou web spider + +[Sogou-Test-Spider/*] +Parent=Sogou +Browser=Sogou-Test-Spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; YodaoBot + +[YodaoBot] +Parent=DefaultProperties +Browser=YodaoBot +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[Mozilla/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[Mozilla/5.0 (compatible;YodaoBot-Image/1.*)] +Parent=YodaoBot +Browser=YodaoBot-Image + +[WAP_Browser/5.0 (compatible; YodaoBot/1.*)] +Parent=YodaoBot + +[YodaoBot/1.* (*)] +Parent=YodaoBot + +[Best Whois (http://www.bestwhois.net/)] +Parent=DNS Tools +Browser=Best Whois + +[DNSGroup/*] +Parent=DNS Tools +Browser=DNS Group Crawler + +[NG-Search/*] +Parent=Exalead +Browser=NG-SearchBot + +[TouchStone] +Parent=Feeds Syndicators +Browser=TouchStone +isSyndicationReader=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General Crawlers + +[General Crawlers] +Parent=DefaultProperties +Browser=General Crawlers +Crawler=true + +[A .NET Web Crawler] +Parent=General Crawlers +isBanned=true + +[BabalooSpider/1.*] +Parent=General Crawlers +Browser=BabalooSpider + +[BilgiBot/*] +Parent=General Crawlers +Browser=BilgiBot +isBanned=true + +[bot/* (bot; *bot@bot.bot)] +Parent=General Crawlers +Browser=bot +isBanned=true + +[CyberPatrol*] +Parent=General Crawlers +Browser=CyberPatrol +isBanned=true + +[Cynthia 1.0] +Parent=General Crawlers +Browser=Cynthia +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ddetailsbot (http://www.displaydetails.com)] +Parent=General Crawlers +Browser=ddetailsbot + +[DomainCrawler/1.0 (info@domaincrawler.com; http://www.domaincrawler.com/domains/view/*)] +Parent=General Crawlers +Browser=DomainCrawler + +[DomainsBotBot/1.*] +Parent=General Crawlers +Browser=DomainsBotBot +isBanned=true + +[DomainsDB.net MetaCrawler*] +Parent=General Crawlers +Browser=DomainsDB + +[Drupal (*)] +Parent=General Crawlers +Browser=Drupal + +[Dumbot (version *)*] +Parent=General Crawlers +Browser=Dumbfind + +[EuripBot/*] +Parent=General Crawlers +Browser=Europe Internet Portal + +[eventax/*] +Parent=General Crawlers +Browser=eventax + +[FANGCrawl/*] +Parent=General Crawlers +Browser=Safe-t.net Web Filtering Service +isBanned=true + +[favorstarbot/*] +Parent=General Crawlers +Browser=favorstarbot +isBanned=true + +[FollowSite.com (*)] +Parent=General Crawlers +Browser=FollowSite +isBanned=true + +[Gaisbot*] +Parent=General Crawlers +Browser=Gaisbot + +[Healthbot/Health_and_Longevity_Project_(HealthHaven.com) ] +Parent=General Crawlers +Browser=Healthbot +isBanned=true + +[hitcrawler_0.*] +Parent=General Crawlers +Browser=hitcrawler +isBanned=true + +[htdig/*] +Parent=General Crawlers +Browser=ht://Dig + +[http://hilfe.acont.de/bot.html ACONTBOT] +Parent=General Crawlers +Browser=ACONTBOT +isBanned=true + +[JetBrains*] +Parent=General Crawlers +Browser=Omea Pro + +[KakleBot - www.kakle.com/0.1] +Parent=General Crawlers +Browser=KakleBot + +[KBeeBot/0.*] +Parent=General Crawlers +Browser=KBeeBot +isBanned=true + +[Keyword Density/*] +Parent=General Crawlers +Browser=Keyword Density + +[LetsCrawl.com/1.0*] +Parent=General Crawlers +Browser=LetsCrawl.com +isBanned=true + +[Lincoln State Web Browser] +Parent=General Crawlers +Browser=Lincoln State Web Browser +isBanned=true + +[Links4US-Crawler,*] +Parent=General Crawlers +Browser=Links4US-Crawler +isBanned=true + +[Lorkyll *.* -- lorkyll@444.net] +Parent=General Crawlers +Browser=Lorkyll +isBanned=true + +[Lsearch/sondeur] +Parent=General Crawlers +Browser=Lsearch/sondeur +isBanned=true + +[LucidMedia ClickSense/4.?] +Parent=General Crawlers +Browser=LucidMedia-ClickSense +isBanned=true + +[MapoftheInternet.com?(?http://MapoftheInternet.com)] +Parent=General Crawlers +Browser=MapoftheInternet +isBanned=true + +[Marvin v0.3] +Parent=General Crawlers +Browser=MedHunt +Version=0.3 +MajorVer=0 +MinorVer=3 + +[masidani_bot_v0.6*] +Parent=General Crawlers +Browser=masidani_bot + +[Metaspinner/0.01 (Metaspinner; http://www.meta-spinner.de/; support@meta-spinner.de/)] +Parent=General Crawlers +Browser=Metaspinner/0.01 +Version=0.01 +MajorVer=0 +MinorVer=01 + +[metatagsdir/*] +Parent=General Crawlers +Browser=metatagsdir +isBanned=true + +[Microsoft Windows Network Diagnostics] +Parent=General Crawlers +Browser=Microsoft Windows Network Diagnostics +isBanned=true + +[Miva (AlgoFeedback@miva.com)] +Parent=General Crawlers +Browser=Miva + +[moget/*] +Parent=General Crawlers +Browser=Goo + +[Mozdex/0.7.2*] +Parent=General Crawlers +Browser=Mozdex + +[Mozilla Compatible (MS IE 3.01 WinNT)] +Parent=General Crawlers +isBanned=true + +[Mozilla/* (compatible; WebCapture*)] +Parent=General Crawlers +Browser=WebCapture + +[Mozilla/4.0 (compatible; DepSpid/*)] +Parent=General Crawlers +Browser=DepSpid + +[Mozilla/4.0 (compatible; MSIE *; Windows NT *; SV1)] +Parent=General Crawlers +Browser=AVG + +[Mozilla/4.0 (compatible; MSIE 4.01; Vonna.com b o t)] +Parent=General Crawlers +Browser=Vonna.com +isBanned=true + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows95)] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MSIE 4.5; Windows 98; )] +Parent=General Crawlers +Win32=true + +[Mozilla/4.0 (compatible; MyFamilyBot/*)] +Parent=General Crawlers +Browser=MyFamilyBot + +[Mozilla/4.0 (compatible; N-Stealth)] +Parent=General Crawlers +Browser=N-Stealth + +[Mozilla/4.0 (compatible; Scumbot/*; Linux/*)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Spider; Linux)] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.0 (compatible; Win32)] +Parent=General Crawlers +Browser=Unknown Crawler +isBanned=true + +[Mozilla/4.1] +Parent=General Crawlers +isBanned=true + +[Mozilla/4.5] +Parent=General Crawlers +isBanned=true + +[Mozilla/5.0 (*http://gnomit.com/) Gecko/* Gnomit/1.0] +Parent=General Crawlers +Browser=Gnomit +isBanned=true + +[Mozilla/5.0 (compatible; AboutUsBot/*)] +Parent=General Crawlers +Browser=AboutUsBot +isBanned=true + +[Mozilla/5.0 (compatible; BuzzRankingBot/*)] +Parent=General Crawlers +Browser=BuzzRankingBot +isBanned=true + +[Mozilla/5.0 (compatible; Diffbot/0.1; http://www.diffbot.com)] +Parent=General Crawlers +Browser=Diffbot + +[Mozilla/5.0 (compatible; FirstSearchBot/1.0; *)] +Parent=General Crawlers +Browser=FirstSearchBot + +[mozilla/5.0 (compatible; genevabot http://www.healthdash.com)] +Parent=General Crawlers +Browser=Healthdash + +[Mozilla/5.0 (compatible; JadynAveBot; *http://www.jadynave.com/robot*] +Parent=General Crawlers +Browser=JadynAveBot +isBanned=true + +[Mozilla/5.0 (compatible; Kyluka crawl; http://www.kyluka.com/crawl.html; crawl@kyluka.com)] +Parent=General Crawlers +Browser=Kyluka + +[Mozilla/5.0 (compatible; MJ12bot/v1.2.*; http://www.majestic12.co.uk/bot.php*)] +Parent=General Crawlers +Browser=MJ12bot +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (compatible; MSIE 7.0 ?http://www.europarchive.org)] +Parent=General Crawlers +Browser=Europe Web Archive + +[Mozilla/5.0 (compatible; Seznam screenshot-generator 2.0;*)] +Parent=General Crawlers +Browser=Seznam screenshot-generator +isBanned=true + +[Mozilla/5.0 (compatible; Twingly Recon; http://www.twingly.com/)] +Parent=General Crawlers +Browser=Twingly Recon + +[Mozilla/5.0 (compatible; unwrapbot/2.*; http://www.unwrap.jp*)] +Parent=General Crawlers +Browser=UnWrap + +[Mozilla/5.0 (compatible; Vermut*)] +Parent=General Crawlers +Browser=Vermut + +[Mozilla/5.0 (compatible; Webbot/*)] +Parent=General Crawlers +Browser=Webbot.ru +isBanned=true + +[n4p_bot*] +Parent=General Crawlers +Browser=n4p_bot + +[nabot*] +Parent=General Crawlers +Browser=Nabot + +[NetCarta_WebMapper/*] +Parent=General Crawlers +Browser=NetCarta_WebMapper +isBanned=true + +[NetID.com Bot*] +Parent=General Crawlers +Browser=NetID.com Bot +isBanned=true + +[neTVision AG andreas.heidoetting@thomson-webcast.net] +Parent=General Crawlers +Browser=neTVision + +[NextopiaBOT*] +Parent=General Crawlers +Browser=NextopiaBOT + +[nicebot] +Parent=General Crawlers +Browser=nicebot +isBanned=true + +[niXXieBot?Foster*] +Parent=General Crawlers +Browser=niXXiebot-Foster + +[Nozilla/P.N (Just for IDS woring)] +Parent=General Crawlers +Browser=Nozilla/P.N +isBanned=true + +[Nudelsalat/*] +Parent=General Crawlers +Browser=Nudelsalat +isBanned=true + +[NV32ts] +Parent=General Crawlers +Browser=NV32ts +isBanned=true + +[Ocelli/*] +Parent=General Crawlers +Browser=Ocelli + +[OpenTaggerBot (http://www.opentagger.com/opentaggerbot.htm)] +Parent=General Crawlers +Browser=OpenTaggerBot + +[Oracle Enterprise Search] +Parent=General Crawlers +Browser=Oracle Enterprise Search +isBanned=true + +[Oracle Ultra Search] +Parent=General Crawlers +Browser=Oracle Ultra Search + +[Pajaczek/*] +Parent=General Crawlers +Browser=Pajaczek +isBanned=true + +[panscient.com] +Parent=General Crawlers +Browser=panscient.com +isBanned=true + +[Patwebbot (http://www.herz-power.de/technik.html)] +Parent=General Crawlers +Browser=Patwebbot + +[PDFBot (crawler@pdfind.com)] +Parent=General Crawlers +Browser=PDFBot + +[Pete-Spider/1.*] +Parent=General Crawlers +Browser=Pete-Spider +isBanned=true + +[PhpDig/*] +Parent=General Crawlers +Browser=PhpDig + +[PlantyNet_WebRobot*] +Parent=General Crawlers +Browser=PlantyNet +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PluckIt + +[PluckItCrawler/1.0 (*)] +Parent=General Crawlers +isMobileDevice=true + +[PMAFind] +Parent=General Crawlers +Browser=PMAFind +isBanned=true + +[Poodle_predictor_1.0] +Parent=General Crawlers +Browser=Poodle Predictor + +[QuickFinder Crawler] +Parent=General Crawlers +Browser=QuickFinder +isBanned=true + +[Radiation Retriever*] +Parent=General Crawlers +Browser=Radiation Retriever +isBanned=true + +[RedCarpet/*] +Parent=General Crawlers +Browser=RedCarpet +isBanned=true + +[RixBot (http://babelserver.org/rix)] +Parent=General Crawlers +Browser=RixBot + +[Rome Client (http://tinyurl.com/64t5n) Ver: 0.*] +Parent=General Crawlers +Browser=TinyURL + +[SBIder/*] +Parent=General Crawlers +Browser=SiteSell + +[ScollSpider/2.*] +Parent=General Crawlers +Browser=ScollSpider +isBanned=true + +[Search Fst] +Parent=General Crawlers +Browser=Search Fst + +[searchbot admin@google.com] +Parent=General Crawlers +Browser=searchbot +isBanned=true + +[Seeker.lookseek.com] +Parent=General Crawlers +Browser=LookSeek +isBanned=true + +[semanticdiscovery/*] +Parent=General Crawlers +Browser=Semantic Discovery + +[SeznamBot/*] +Parent=General Crawlers +Browser=SeznamBot +isBanned=true + +[Shelob (shelob@gmx.net)] +Parent=General Crawlers +Browser=Shelob +isBanned=true + +[shelob v1.*] +Parent=General Crawlers +Browser=shelob +isBanned=true + +[ShopWiki/1.0*] +Parent=General Crawlers +Browser=ShopWiki +Version=1.0 +MajorVer=1 +MinorVer=0 + +[ShowXML/1.0 libwww/5.4.0] +Parent=General Crawlers +Browser=ShowXML +isBanned=true + +[sitecheck.internetseer.com*] +Parent=General Crawlers +Browser=Internetseer + +[SMBot/*] +Parent=General Crawlers +Browser=SMBot + +[sohu*] +Parent=General Crawlers +Browser=sohu-search +isBanned=true + +[SpankBot*] +Parent=General Crawlers +Browser=SpankBot +isBanned=true + +[spider (tspyyp@tom.com)] +Parent=General Crawlers +Browser=spider (tspyyp@tom.com) +isBanned=true + +[Sunrise/0.*] +Parent=General Crawlers +Browser=Sunrise +isBanned=true + +[Superpages URL Verification Engine] +Parent=General Crawlers +Browser=Superpages + +[Surf Knight] +Parent=General Crawlers +Browser=Surf Knight +isBanned=true + +[SurveyBot/*] +Parent=General Crawlers +Browser=SurveyBot +isBanned=true + +[SynapticSearch/AI Crawler 1.?] +Parent=General Crawlers +Browser=SynapticSearch +isBanned=true + +[SyncMgr] +Parent=General Crawlers +Browser=SyncMgr + +[Tagyu Agent/1.0] +Parent=General Crawlers +Browser=Tagyu + +[Talkro Web-Shot/*] +Parent=General Crawlers +Browser=Talkro Web-Shot +isBanned=true + +[Tecomi Bot (http://www.tecomi.com/bot.htm)] +Parent=General Crawlers +Browser=Tecomi + +[TheInformant*] +Parent=General Crawlers +Browser=TheInformant +isBanned=true + +[Toata dragostea*] +Parent=General Crawlers +Browser=Toata dragostea +isBanned=true + +[Tutorial Crawler*] +Parent=General Crawlers +isBanned=true + +[UbiCrawler/*] +Parent=General Crawlers +Browser=UbiCrawler + +[UCmore] +Parent=General Crawlers +Browser=UCmore + +[User*Agent:*] +Parent=General Crawlers +isBanned=true + +[USER_AGENT] +Parent=General Crawlers +Browser=USER_AGENT +isBanned=true + +[VadixBot] +Parent=General Crawlers +Browser=VadixBot + +[VengaBot/*] +Parent=General Crawlers +Browser=VengaBot +isBanned=true + +[Visicom Toolbar] +Parent=General Crawlers +Browser=Visicom Toolbar + +[W3C-WebCon/*] +Parent=General Crawlers +Browser=W3C-WebCon + +[Webclipping.com] +Parent=General Crawlers +Browser=Webclipping.com +isBanned=true + +[webcollage/*] +Parent=General Crawlers +Browser=WebCollage +isBanned=true + +[WebCrawler_1.*] +Parent=General Crawlers +Browser=WebCrawler + +[WebFilter Robot*] +Parent=General Crawlers +Browser=WebFilter Robot + +[WeBoX/*] +Parent=General Crawlers +Browser=WeBoX + +[WebTrends/*] +Parent=General Crawlers +Browser=WebTrends + +[West Wind Internet Protocols*] +Parent=General Crawlers +Browser=Versatel +isBanned=true + +[WhizBang] +Parent=General Crawlers +Browser=WhizBang + +[Willow Internet Crawler by Twotrees V*] +Parent=General Crawlers +Browser=Willow Internet Crawler + +[WIRE/* (Linux; i686; Bot,Robot,Spider,Crawler)] +Parent=General Crawlers +Browser=WIRE +isBanned=true + +[www.fi crawler, contact crawler@www.fi] +Parent=General Crawlers +Browser=www.fi crawler + +[Xerka WebBot v1.*] +Parent=General Crawlers +Browser=Xerka +isBanned=true + +[XML Sitemaps Generator*] +Parent=General Crawlers +Browser=XML Sitemaps Generator + +[XSpider*] +Parent=General Crawlers +Browser=XSpider +isBanned=true + +[YooW!/* (?http://www.yoow.eu)] +Parent=General Crawlers +Browser=YooW! +isBanned=true + +[HiddenMarket-*] +Parent=General RSS +Browser=HiddenMarket +isBanned=true + +[FOTOCHECKER] +Parent=Image Crawlers +Browser=FOTOCHECKER +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Search Engines + +[Search Engines] +Parent=DefaultProperties +Browser=Search Engines +Crawler=true + +[*FDSE robot*] +Parent=Search Engines +Browser=FDSE Robot + +[*Fluffy the spider*] +Parent=Search Engines +Browser=SearchHippo + +[Abacho*] +Parent=Search Engines +Browser=Abacho + +[ah-ha.com crawler (crawler@ah-ha.com)] +Parent=Search Engines +Browser=Ah-Ha + +[AIBOT/*] +Parent=Search Engines +Browser=21Seek.Com + +[ALeadSoftbot/*] +Parent=Search Engines +Browser=ALeadSoftbot + +[Amfibibot/*] +Parent=Search Engines +Browser=Amfibi + +[AnswerBus (http://www.answerbus.com/)] +Parent=Search Engines + +[antibot-V*] +Parent=Search Engines +Browser=antibot + +[appie*(www.walhello.com)] +Parent=Search Engines +Browser=Walhello + +[ASPSeek/*] +Parent=Search Engines +Browser=ASPSeek + +[BigCliqueBOT/*] +Parent=Search Engines +Browser=BigClique.com/BigClic.com + +[Blaiz-Bee/*] +Parent=Search Engines +Browser=RawGrunt + +[btbot/*] +Parent=Search Engines +Browser=Bit Torrent Search Engine + +[Busiversebot/v1.0 (http://www.busiverse.com/bot.php)] +Parent=Search Engines +Browser=Busiversebot +isBanned=true + +[CatchBot/*; http://www.catchbot.com] +Parent=Search Engines +Browser=CatchBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CipinetBot (http://www.cipinet.com/bot.html)] +Parent=Search Engines +Browser=CipinetBot + +[Cogentbot/1.?*] +Parent=Search Engines +Browser=Cogentbot + +[compatible; Mozilla 4.0; MSIE 5.5; (SqwidgeBot v1.01 - http://www.sqwidge.com/bot/)] +Parent=Search Engines +Browser=SqwidgeBot + +[cosmos*] +Parent=Search Engines +Browser=Xyleme + +[Deepindex] +Parent=Search Engines +Browser=Deepindex + +[DiamondBot] +Parent=Search Engines +Browser=DiamondBot + +[Dumbot*] +Parent=Search Engines +Browser=Dumbot +Version=0.2 +MajorVer=0 +MinorVer=2 +Beta=true + +[Eule?Robot*] +Parent=Search Engines +Browser=Eule-Robot + +[Faxobot/*] +Parent=Search Engines +Browser=Faxo + +[Filangy/*] +Parent=Search Engines +Browser=Filangy + +[flatlandbot/*] +Parent=Search Engines +Browser=Flatland + +[Fooky.com/ScorpionBot/ScoutOut;*] +Parent=Search Engines +Browser=ScorpionBot +isBanned=true + +[FyberSpider*] +Parent=Search Engines +Browser=FyberSpider +isBanned=true + +[Gaisbot/*] +Parent=Search Engines +Browser=Gaisbot + +[gazz/*(gazz@nttr.co.jp)] +Parent=Search Engines +Browser=gazz + +[geniebot*] +Parent=Search Engines +Browser=GenieKnows + +[GOFORITBOT (?http://www.goforit.com/about/?)] +Parent=Search Engines +Browser=GoForIt + +[GoGuidesBot/*] +Parent=Search Engines +Browser=GoGuidesBot + +[GroschoBot/*] +Parent=Search Engines +Browser=GroschoBot + +[GurujiBot/1.*] +Parent=Search Engines +Browser=GurujiBot +isBanned=true + +[HenryTheMiragoRobot*] +Parent=Search Engines +Browser=Mirago + +[HolmesBot (http://holmes.ge)] +Parent=Search Engines +Browser=HolmesBot + +[Hotzonu/*] +Parent=Search Engines +Browser=Hotzonu + +[HyperEstraier/*] +Parent=Search Engines +Browser=HyperEstraier +isBanned=true + +[i1searchbot/*] +Parent=Search Engines +Browser=i1searchbot + +[IIITBOT/1.*] +Parent=Search Engines +Browser=Indian Language Web Search Engine + +[Iltrovatore-?etaccio/*] +Parent=Search Engines +Browser=Iltrovatore-Setaccio + +[InfociousBot (?http://corp.infocious.com/tech_crawler.php)] +Parent=Search Engines +Browser=InfociousBot +isBanned=true + +[Infoseek SideWinder/*] +Parent=Search Engines +Browser=Infoseek + +[iSEEKbot/*] +Parent=Search Engines +Browser=iSEEKbot + +[Knight/0.? (Zook Knight; http://knight.zook.in/; knight@zook.in)] +Parent=Search Engines +Browser=Knight + +[Kolinka Forum Search (www.kolinka.com)] +Parent=Search Engines +Browser=Kolinka Forum Search +isBanned=true + +[KRetrieve/] +Parent=Search Engines +Browser=KRetrieve +isBanned=true + +[LapozzBot/*] +Parent=Search Engines +Browser=LapozzBot + +[Linknzbot*] +Parent=Search Engines +Browser=Linknzbot + +[LocalcomBot/*] +Parent=Search Engines +Browser=LocalcomBot + +[Mail.Ru/1.0] +Parent=Search Engines +Browser=Mail.Ru + +[MaSagool/*] +Parent=Search Engines +Browser=Sagoo +Version=1.0 +MajorVer=1 +MinorVer=0 + +[miniRank/*] +Parent=Search Engines +Browser=miniRank + +[Mnogosearch*] +Parent=Search Engines +Browser=Mnogosearch + +[Mozilla/0.9* no dos :) (Linux)] +Parent=Search Engines +Browser=goliat +isBanned=true + +[Mozilla/4.0 (compatible; Arachmo)] +Parent=Search Engines +Browser=Arachmo + +[Mozilla/4.0 (compatible; http://search.thunderstone.com/texis/websearch/about.html)] +Parent=Search Engines +Browser=ThunderStone +isBanned=true + +[Mozilla/4.0 (compatible; MSIE *; Windows NT; Girafabot; girafabot at girafa dot com; http://www.girafa.com)] +Parent=Search Engines +Browser=Girafabot +Win32=true + +[Mozilla/4.0 (compatible; Vagabondo/*; webcrawler at wise-guys dot nl; *)] +Parent=Search Engines +Browser=Vagabondo + +[Mozilla/4.0(?compatible; MSIE 6.0; Qihoo *)] +Parent=Search Engines +Browser=Qihoo + +[Mozilla/4.7 (compatible; WhizBang; http://www.whizbang.com/crawler)] +Parent=Search Engines +Browser=Inxight Software + +[Mozilla/5.0 (*) VoilaBot*] +Parent=Search Engines +Browser=VoilaBot +isBanned=true + +[Mozilla/5.0 (compatible; ActiveTouristBot*; http://www.activetourist.com)] +Parent=Search Engines +Browser=ActiveTouristBot + +[Mozilla/5.0 (compatible; Butterfly/1.0; *)*] +Parent=Search Engines +Browser=Butterfly + +[Mozilla/5.0 (compatible; Charlotte/*; *)] +Parent=Search Engines +Browser=Charlotte +Beta=true +isBanned=true + +[Mozilla/5.0 (compatible; CXL-FatAssANT*)] +Parent=Search Engines +Browser=FatAssANT + +[Mozilla/5.0 (compatible; DBLBot/1.0; ?http://www.dontbuylists.com/)] +Parent=Search Engines +Browser=DBLBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; EARTHCOM.info/*)] +Parent=Search Engines +Browser=EARTHCOM + +[Mozilla/5.0 (compatible; Lipperhey Spider; http://www.lipperhey.com/)] +Parent=Search Engines +Browser=Lipperhey Spider + +[Mozilla/5.0 (compatible; MojeekBot/*; http://www.mojeek.com/bot.html)] +Parent=Search Engines +Browser=MojeekBot + +[Mozilla/5.0 (compatible; NLCrawler/*] +Parent=Search Engines +Browser=Northern Light Web Search + +[Mozilla/5.0 (compatible; OsO;*] +Parent=Search Engines +Browser=Octopodus +isBanned=true + +[Mozilla/5.0 (compatible; Pogodak.*)] +Parent=Search Engines +Browser=Pogodak + +[Mozilla/5.0 (compatible; Quantcastbot/1.*)] +Parent=Search Engines +Browser=Quantcastbot + +[Mozilla/5.0 (compatible; ScoutJet; *http://www.scoutjet.com/)] +Parent=Search Engines +Browser=ScoutJet + +[Mozilla/5.0 (compatible; Scrubby/*; http://www.scrubtheweb.com/abs/meta-check.html)] +Parent=Search Engines +Browser=Scrubby +isBanned=true + +[Mozilla/5.0 (compatible; YoudaoBot/1.*; http://www.youdao.com/help/webmaster/spider/*)] +Parent=Search Engines +Browser=YoudaoBot +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Twiceler*)] +Parent=Search Engines +Browser=Twiceler +isBanned=true + +[Mozilla/5.0 CostaCider Search*] +Parent=Search Engines +Browser=CostaCider Search + +[Mozilla/5.0 GurujiBot/1.0 (*)] +Parent=Search Engines +Browser=GurujiBot + +[NavissoBot] +Parent=Search Engines +Browser=NavissoBot + +[NextGenSearchBot*(for information visit *)] +Parent=Search Engines +Browser=ZoomInfo +isBanned=true + +[Norbert the Spider(Burf.com)] +Parent=Search Engines +Browser=Norbert the Spider + +[NuSearch Spider*] +Parent=Search Engines +Browser=nuSearch + +[ObjectsSearch/*] +Parent=Search Engines +Browser=ObjectsSearch + +[OpenISearch/1.*] +Parent=Search Engines +Browser=OpenISearch (Amazon) + +[Pagebull http://www.pagebull.com/] +Parent=Search Engines +Browser=Pagebull + +[PEERbot*] +Parent=Search Engines +Browser=PEERbot + +[Pompos/*] +Parent=Search Engines +Browser=Pompos + +[Popdexter/*] +Parent=Search Engines +Browser=Popdex + +[Qweery*] +Parent=Search Engines +Browser=QweeryBot + +[RedCell/* (*)] +Parent=Search Engines +Browser=RedCell + +[Scrubby/*] +Parent=Search Engines +Browser=Scrub The Web + +[Search-10/*] +Parent=Search Engines +Browser=Search-10 + +[search.ch*] +Parent=Search Engines +Browser=Swiss Search Engine + +[Searchmee! Spider*] +Parent=Search Engines +Browser=Searchmee! + +[Seekbot/*] +Parent=Search Engines +Browser=Seekbot + +[SiteSpider (http://www.SiteSpider.com/)] +Parent=Search Engines +Browser=SiteSpider + +[Spinne/*] +Parent=Search Engines +Browser=Spinne + +[sproose/*] +Parent=Search Engines +Browser=Sproose + +[Sqeobot/0.*] +Parent=Search Engines +Browser=Branzel +isBanned=true + +[SquigglebotBot/*] +Parent=Search Engines +Browser=SquigglebotBot +isBanned=true + +[StackRambler/*] +Parent=Search Engines +Browser=StackRambler + +[SygolBot*] +Parent=Search Engines +Browser=SygolBot + +[SynoBot] +Parent=Search Engines +Browser=SynoBot + +[Szukacz/*] +Parent=Search Engines +Browser=Szukacz + +[Tarantula/*] +Parent=Search Engines +Browser=Tarantula +isBanned=true + +[TerrawizBot/*] +Parent=Search Engines +Browser=TerrawizBot +isBanned=true + +[Tkensaku/*] +Parent=Search Engines +Browser=Tkensaku + +[TMCrawler] +Parent=Search Engines +Browser=TMCrawler +isBanned=true + +[Twingly Recon] +Parent=Search Engines +Browser=Twingly Recon +isBanned=true + +[updated/*] +Parent=Search Engines +Browser=Updated! + +[URL Spider Pro/*] +Parent=Search Engines +Browser=URL Spider Pro + +[URL Spider SQL*] +Parent=Search Engines +Browser=Innerprise Enterprise Search + +[VMBot/*] +Parent=Search Engines +Browser=VMBot + +[voyager/2.0 (http://www.kosmix.com/html/crawler.html)] +Parent=Search Engines +Browser=Voyager + +[wadaino.jp-crawler*] +Parent=Search Engines +Browser=wadaino.jp +isBanned=true + +[WebAlta Crawler/*] +Parent=Search Engines +Browser=WebAlta Crawler +isBanned=true + +[WebCorp/*] +Parent=Search Engines +Browser=WebCorp +isBanned=true + +[webcrawl.net] +Parent=Search Engines +Browser=webcrawl.net + +[WISEbot/*] +Parent=Search Engines +Browser=WISEbot +isBanned=true + +[Wotbox/*] +Parent=Search Engines +Browser=Wotbox + +[www.zatka.com] +Parent=Search Engines +Browser=Zatka + +[WWWeasel Robot v*] +Parent=Search Engines +Browser=World Wide Weasel + +[YadowsCrawler*] +Parent=Search Engines +Browser=YadowsCrawler + +[YodaoBot/*] +Parent=Search Engines +Browser=YodaoBot +isBanned=true + +[ZeBot_www.ze.bz*] +Parent=Search Engines +Browser=ZE.bz + +[zibber-v*] +Parent=Search Engines +Browser=Zibb + +[ZipppBot/*] +Parent=Search Engines +Browser=ZipppBot + +[ATA-Translation-Service] +Parent=Translators +Browser=ATA-Translation-Service + +[GJK_Browser_Check] +Parent=Version Checkers +Browser=GJK_Browser_Check + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Hatena + +[Hatena] +Parent=DefaultProperties +Browser=Hatena +isBanned=true +Crawler=true + +[Feed::Find/*] +Parent=Hatena +Browser=Feed Find +isSyndicationReader=true + +[Hatena Antenna/*] +Parent=Hatena +Browser=Hatena Antenna + +[Hatena Bookmark/*] +Parent=Hatena +Browser=Hatena Bookmark + +[Hatena RSS/*] +Parent=Hatena +Browser=Hatena RSS +isSyndicationReader=true + +[Hatena::Crawler/*] +Parent=Hatena +Browser=Hatena Crawler + +[HatenaScreenshot*] +Parent=Hatena +Browser=HatenaScreenshot + +[URI::Fetch/*] +Parent=Hatena +Browser=URI::Fetch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Internet Archive + +[Internet Archive] +Parent=DefaultProperties +Browser=Internet Archive +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*heritrix*] +Parent=Internet Archive +Browser=Heritrix +isBanned=true + +[ia_archiver*] +Parent=Internet Archive +Browser=Internet Archive + +[InternetArchive/*] +Parent=Internet Archive +Browser=InternetArchive + +[Mozilla/5.0 (compatible; archive.org_bot/1.*)] +Parent=Internet Archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nutch + +[Nutch] +Parent=DefaultProperties +Browser=Nutch +isBanned=true +Crawler=true + +[*Nutch*] +Parent=Nutch +isBanned=true + +[CazoodleBot/*] +Parent=Nutch +Browser=CazoodleBot + +[LOOQ/0.1*] +Parent=Nutch +Browser=LOOQ + +[Nutch/0.? (OpenX Spider)] +Parent=Nutch + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Webaroo + +[Webaroo] +Parent=DefaultProperties +Browser=Webaroo + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Webaroo/*)] +Parent=Webaroo +Browser=Webaroo + +[Mozilla/5.0 (Windows; U; Windows *; *; rv:*) Gecko/* Firefox/* webaroo/*] +Parent=Webaroo +Browser=Webaroo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Word Press + +[Word Press] +Parent=DefaultProperties +Browser=Word Press +Alpha=true +Beta=true +Win16=true +Win32=true +Win64=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +isBanned=true +isMobileDevice=true +isSyndicationReader=true +Crawler=true + +[WordPress-B-/2.*] +Parent=Word Press +Browser=WordPress-B + +[WordPress-Do-P-/2.*] +Parent=Word Press +Browser=WordPress-Do-P + +[BlueCoat ProxySG] +Parent=Blue Coat Systems +Browser=BlueCoat ProxySG + +[CerberianDrtrs/*] +Parent=Blue Coat Systems +Browser=Cerberian + +[Inne: Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; Cerberian Drtrs*)] +Parent=Blue Coat Systems +Browser=Cerberian + +[Mozilla/4.0 (compatible; MSIE 6.0; Bluecoat DRTR)] +Parent=Blue Coat Systems +Browser=Bluecoat + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Copyright/Plagiarism + +[Copyright/Plagiarism] +Parent=DefaultProperties +Browser=Copyright/Plagiarism +isBanned=true +Crawler=true + +[BDFetch] +Parent=Copyright/Plagiarism +Browser=BDFetch + +[copyright sheriff (*)] +Parent=Copyright/Plagiarism +Browser=copyright sheriff + +[CopyRightCheck*] +Parent=Copyright/Plagiarism +Browser=CopyRightCheck + +[FairAd Client*] +Parent=Copyright/Plagiarism +Browser=FairAd Client + +[iCopyright Conductor*] +Parent=Copyright/Plagiarism +Browser=iCopyright Conductor + +[IPiumBot laurion(dot)com] +Parent=Copyright/Plagiarism +Browser=IPiumBot + +[IWAgent/*] +Parent=Copyright/Plagiarism +Browser=Brand Protect + +[Mozilla/5.0 (compatible; DKIMRepBot/*)] +Parent=Copyright/Plagiarism +Browser=DKIMRepBot + +[oBot] +Parent=Copyright/Plagiarism +Browser=oBot + +[SlySearch/*] +Parent=Copyright/Plagiarism +Browser=SlySearch + +[TurnitinBot/*] +Parent=Copyright/Plagiarism +Browser=TurnitinBot + +[TutorGigBot/*] +Parent=Copyright/Plagiarism +Browser=TutorGig + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DNS Tools + +[DNS Tools] +Parent=DefaultProperties +Browser=DNS Tools +Crawler=true + +[Domain Dossier utility*] +Parent=DNS Tools +Browser=Domain Dossier + +[Mozilla/5.0 (compatible; DNS-Digger/*)] +Parent=DNS Tools +Browser=DNS-Digger + +[OpenDNS Domain Crawler noc@opendns.com] +Parent=DNS Tools +Browser=OpenDNS Domain Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Download Managers + +[Download Managers] +Parent=DefaultProperties +Browser=Download Managers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[AndroidDownloadManager] +Parent=Download Managers +Browser=Android Download Manager + +[AutoMate5] +Parent=Download Managers +Browser=AutoMate5 + +[Beamer*] +Parent=Download Managers +Browser=Beamer + +[BitBeamer/*] +Parent=Download Managers +Browser=BitBeamer + +[BitTorrent/*] +Parent=Download Managers +Browser=BitTorrent + +[DA *] +Parent=Download Managers +Browser=Download Accelerator + +[Download Demon*] +Parent=Download Managers +Browser=Download Demon + +[Download Express*] +Parent=Download Managers +Browser=Download Express + +[Download Master*] +Parent=Download Managers +Browser=Download Master + +[Download Ninja*] +Parent=Download Managers +Browser=Download Ninja + +[Download Wonder*] +Parent=Download Managers +Browser=Download Wonder + +[DownloadSession*] +Parent=Download Managers +Browser=DownloadSession + +[EasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[FDM 1.x] +Parent=Download Managers +Browser=Free Download Manager + +[FlashGet] +Parent=Download Managers +Browser=FlashGet + +[FreshDownload/*] +Parent=Download Managers +Browser=FreshDownload + +[GetRight/*] +Parent=Download Managers +Browser=GetRight + +[GetRightPro/*] +Parent=Download Managers +Browser=GetRightPro + +[GetSmart/*] +Parent=Download Managers +Browser=GetSmart + +[Go!Zilla*] +Parent=Download Managers +Browser=GoZilla + +[Gozilla/*] +Parent=Download Managers +Browser=Gozilla + +[Internet Ninja*] +Parent=Download Managers +Browser=Internet Ninja + +[Kontiki Client*] +Parent=Download Managers +Browser=Kontiki Client + +[lftp/3.2.1] +Parent=Download Managers +Browser=lftp + +[LightningDownload/*] +Parent=Download Managers +Browser=LightningDownload + +[LMQueueBot/*] +Parent=Download Managers +Browser=LMQueueBot + +[MetaProducts Download Express/*] +Parent=Download Managers +Browser=Download Express + +[Mozilla/4.0 (compatible; Getleft*)] +Parent=Download Managers +Browser=Getleft + +[Myzilla] +Parent=Download Managers +Browser=Myzilla + +[Net Vampire/*] +Parent=Download Managers +Browser=Net Vampire + +[Net_Vampire*] +Parent=Download Managers +Browser=Net_Vampire + +[NetAnts*] +Parent=Download Managers +Browser=NetAnts + +[NetPumper*] +Parent=Download Managers +Browser=NetPumper + +[NetSucker*] +Parent=Download Managers +Browser=NetSucker + +[NetZip Downloader*] +Parent=Download Managers +Browser=NetZip Downloader + +[NexTools WebAgent*] +Parent=Download Managers +Browser=NexTools WebAgent + +[Offline Downloader*] +Parent=Download Managers +Browser=Offline Downloader + +[P3P Client] +Parent=Download Managers +Browser=P3P Client + +[PageDown*] +Parent=Download Managers +Browser=PageDown + +[PicaLoader*] +Parent=Download Managers +Browser=PicaLoader + +[Prozilla*] +Parent=Download Managers +Browser=Prozilla + +[RealDownload/*] +Parent=Download Managers +Browser=RealDownload + +[sEasyDL/*] +Parent=Download Managers +Browser=EasyDL + +[shareaza*] +Parent=Download Managers +Browser=shareaza + +[SmartDownload/*] +Parent=Download Managers +Browser=SmartDownload + +[SpeedDownload/*] +Parent=Download Managers +Browser=Speed Download + +[Star*Downloader/*] +Parent=Download Managers +Browser=StarDownloader + +[STEROID Download] +Parent=Download Managers +Browser=STEROID Download + +[SuperBot/*] +Parent=Download Managers +Browser=SuperBot + +[Vegas95/*] +Parent=Download Managers +Browser=Vegas95 + +[WebZIP*] +Parent=Download Managers +Browser=WebZIP + +[Wget*] +Parent=Download Managers +Browser=Wget + +[WinTools] +Parent=Download Managers +Browser=WinTools + +[Xaldon WebSpider*] +Parent=Download Managers +Browser=Xaldon WebSpider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; E-Mail Harvesters + +[E-Mail Harvesters] +Parent=DefaultProperties +Browser=E-Mail Harvesters +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*E-Mail Address Extractor*] +Parent=E-Mail Harvesters +Browser=E-Mail Address Extractor + +[*Larbin*] +Parent=E-Mail Harvesters +Browser=Larbin + +[*www4mail/*] +Parent=E-Mail Harvesters +Browser=www4mail + +[8484 Boston Project*] +Parent=E-Mail Harvesters +Browser=8484 Boston Project + +[CherryPicker*/*] +Parent=E-Mail Harvesters +Browser=CherryPickerElite + +[Chilkat/*] +Parent=E-Mail Harvesters +Browser=Chilkat + +[ContactBot/*] +Parent=E-Mail Harvesters +Browser=ContactBot + +[eCatch*] +Parent=E-Mail Harvesters +Browser=eCatch + +[EmailCollector*] +Parent=E-Mail Harvesters +Browser=E-Mail Collector + +[EMAILsearcher] +Parent=E-Mail Harvesters +Browser=EMAILsearcher + +[EmailSiphon*] +Parent=E-Mail Harvesters +Browser=E-Mail Siphon + +[EmailWolf*] +Parent=E-Mail Harvesters +Browser=EMailWolf + +[Epsilon SoftWorks' MailMunky] +Parent=E-Mail Harvesters +Browser=MailMunky + +[ExtractorPro*] +Parent=E-Mail Harvesters +Browser=ExtractorPro + +[Franklin Locator*] +Parent=E-Mail Harvesters +Browser=Franklin Locator + +[Missigua Locator*] +Parent=E-Mail Harvesters +Browser=Missigua Locator + +[Mozilla/4.0 (compatible; Advanced Email Extractor*)] +Parent=E-Mail Harvesters +Browser=Advanced Email Extractor + +[Netprospector*] +Parent=E-Mail Harvesters +Browser=Netprospector + +[ProWebWalker*] +Parent=E-Mail Harvesters +Browser=ProWebWalker + +[sna-0.0.*] +Parent=E-Mail Harvesters +Browser=Mike Elliott's E-Mail Harvester + +[WebEnhancer*] +Parent=E-Mail Harvesters +Browser=WebEnhancer + +[WebMiner*] +Parent=E-Mail Harvesters +Browser=WebMiner + +[ZIBB Crawler (email address / WWW address)] +Parent=E-Mail Harvesters +Browser=ZIBB Crawler + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Blogs + +[Feeds Blogs] +Parent=DefaultProperties +Browser=Feeds Blogs +isSyndicationReader=true +Crawler=true + +[Bloglines Title Fetch/*] +Parent=Feeds Blogs +Browser=Bloglines Title Fetch + +[Bloglines/* (http://www.bloglines.com*)] +Parent=Feeds Blogs +Browser=BlogLines Web + +[BlogPulseLive (support@blogpulse.com)] +Parent=Feeds Blogs +Browser=BlogPulseLive + +[blogsearchbot-pumpkin-2] +Parent=Feeds Blogs +Browser=blogsearchbot-pumpkin +isSyndicationReader=false + +[Irish Blogs Aggregator/*1.0*] +Parent=Feeds Blogs +Browser=Irish Blogs Aggregator +Version=1.0 +MajorVer=1 +MinorVer=0 + +[kinjabot (http://www.kinja.com; *)] +Parent=Feeds Blogs +Browser=kinjabot + +[Net::Trackback/*] +Parent=Feeds Blogs +Browser=Net::Trackback + +[Reblog*] +Parent=Feeds Blogs +Browser=Reblog + +[WordPress/*] +Parent=Feeds Blogs +Browser=WordPress + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Feeds Syndicators + +[Feeds Syndicators] +Parent=DefaultProperties +Browser=Feeds Syndicators +isSyndicationReader=true + +[*LinkLint*] +Parent=Feeds Syndicators +Browser=LinkLint + +[*NetNewsWire/*] +Parent=Feeds Syndicators + +[*NetVisualize*] +Parent=Feeds Syndicators +Browser=NetVisualize + +[AideRSS 2.* (postrank.com)] +Parent=Feeds Syndicators +Browser=AideRSS + +[AideRSS/2.0 (aiderss.com)] +Parent=Feeds Syndicators +Browser=AideRSS +isBanned=true + +[Akregator/*] +Parent=Feeds Syndicators +Browser=Akregator + +[AppleSyndication/*] +Parent=Feeds Syndicators +Browser=Safari RSS +Platform=MacOSX + +[Cocoal.icio.us/* (*)*] +Parent=Feeds Syndicators +Browser=Cocoal.icio.us +isBanned=true + +[Feed43 Proxy/* (*)] +Parent=Feeds Syndicators +Browser=Feed For Free + +[FeedBurner/*] +Parent=Feeds Syndicators +Browser=FeedBurner + +[FeedDemon/* (*)] +Parent=Feeds Syndicators +Browser=FeedDemon +Platform=Win32 + +[FeedDigest/* (*)] +Parent=Feeds Syndicators +Browser=FeedDigest + +[FeedGhost/1.*] +Parent=Feeds Syndicators +Browser=FeedGhost +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedOnFeeds/0.1.* ( http://minutillo.com/steve/feedonfeeds/)] +Parent=Feeds Syndicators +Browser=FeedOnFeeds +Version=0.1 +MajorVer=0 +MinorVer=1 + +[Feedreader * (Powered by Newsbrain)] +Parent=Feeds Syndicators +Browser=Newsbrain + +[Feedshow/* (*)] +Parent=Feeds Syndicators +Browser=Feedshow + +[Feedster Crawler/?.0; Feedster, Inc.] +Parent=Feeds Syndicators +Browser=Feedster + +[GreatNews/1.0] +Parent=Feeds Syndicators +Browser=GreatNews +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Gregarius/*] +Parent=Feeds Syndicators +Browser=Gregarius + +[intraVnews/*] +Parent=Feeds Syndicators +Browser=intraVnews + +[JetBrains Omea Reader*] +Parent=Feeds Syndicators +Browser=Omea Reader +isBanned=true + +[Liferea/1.5* (Linux; *; http://liferea.sf.net/)] +Parent=Feeds Syndicators +Browser=Liferea +isBanned=true + +[livedoor FeedFetcher/0.0* (http://reader.livedoor.com/;*)] +Parent=Feeds Syndicators +Browser=FeedFetcher +Version=0.0 +MajorVer=0 +MinorVer=0 + +[MagpieRSS/* (*)] +Parent=Feeds Syndicators +Browser=MagpieRSS + +[Mobitype * (compatible; Mozilla/*; MSIE *.*; Windows *)] +Parent=Feeds Syndicators +Browser=Mobitype +Platform=Win32 + +[Mozilla/5.0 (*; Rojo *; http://www.rojo.com/corporate/help/agg; *)*] +Parent=Feeds Syndicators +Browser=Rojo + +[Mozilla/5.0 (*aggregator:TailRank; http://tailrank.com/robot)*] +Parent=Feeds Syndicators +Browser=TailRank + +[Mozilla/5.0 (compatible; MSIE 6.0; Podtech Network; crawler_admin@podtech.net)] +Parent=Feeds Syndicators +Browser=Podtech Network + +[Mozilla/5.0 (compatible; Newz Crawler *; http://www.newzcrawler.com/?)] +Parent=Feeds Syndicators +Browser=Newz Crawler + +[Mozilla/5.0 (compatible; RSSMicro.com RSS/Atom Feed Robot)] +Parent=Feeds Syndicators +Browser=RSSMicro + +[Mozilla/5.0 (compatible;*newstin.com;*)] +Parent=Feeds Syndicators +Browser=NewsTin + +[Mozilla/5.0 (RSS Reader Panel)] +Parent=Feeds Syndicators +Browser=RSS Reader Panel + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:FeedParser; *) Gecko/*] +Parent=Feeds Syndicators +Browser=FeedParser + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:NewsMonster; *) Gecko/*] +Parent=Feeds Syndicators +Browser=NewsMonster + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.*; aggregator:Rojo; *) Gecko/*] +Parent=Feeds Syndicators +Browser=Rojo + +[Netvibes (*)] +Parent=Feeds Syndicators +Browser=Netvibes + +[NewsAlloy/* (*)] +Parent=Feeds Syndicators +Browser=NewsAlloy + +[Omnipelagos*] +Parent=Feeds Syndicators +Browser=Omnipelagos + +[Particls] +Parent=Feeds Syndicators +Browser=Particls + +[Protopage/* (*)] +Parent=Feeds Syndicators +Browser=Protopage + +[PubSub-RSS-Reader/* (*)] +Parent=Feeds Syndicators +Browser=PubSub-RSS-Reader + +[RSS Menu/*] +Parent=Feeds Syndicators +Browser=RSS Menu + +[RssBandit/*] +Parent=Feeds Syndicators +Browser=RssBandit + +[RssBar/1.2*] +Parent=Feeds Syndicators +Browser=RssBar +Version=1.2 +MajorVer=1 +MinorVer=2 + +[SharpReader/*] +Parent=Feeds Syndicators +Browser=SharpReader + +[SimplePie/*] +Parent=Feeds Syndicators +Browser=SimplePie + +[Strategic Board Bot (?http://www.strategicboard.com)] +Parent=Feeds Syndicators +Browser=Strategic Board Bot +isBanned=true + +[TargetYourNews.com bot] +Parent=Feeds Syndicators +Browser=TargetYourNews + +[Technoratibot/*] +Parent=Feeds Syndicators +Browser=Technoratibot + +[Tumblr/* RSS syndication ( http://www.tumblr.com/) (support@tumblr.com)] +Parent=Feeds Syndicators +Browser=Tumblr RSS syndication + +[Windows-RSS-Platform/1.0*] +Parent=Feeds Syndicators +Browser=Windows-RSS-Platform +Version=1.0 +MajorVer=1 +MinorVer=0 +Win32=true + +[Wizz RSS News Reader] +Parent=Feeds Syndicators +Browser=Wizz + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; General RSS + +[General RSS] +Parent=DefaultProperties +Browser=General RSS +isSyndicationReader=true + +[AideRSS/1.0 (aiderss.com); * subscribers] +Parent=General RSS +Browser=AideRSS +Version=1.0 +MajorVer=1 +MinorVer=0 + +[CC Metadata Scaper http://wiki.creativecommons.org/Metadata_Scraper] +Parent=General RSS +Browser=CC Metadata Scaper + +[Mozilla/5.0 (compatible) GM RSS Panel] +Parent=General RSS +Browser=RSS Panel + +[Mozilla/5.0 http://www.inclue.com; graeme@inclue.com] +Parent=General RSS +Browser=Inclue + +[Runnk online rss reader : http://www.runnk.com/ : RSS favorites : RSS ranking : RSS aggregator*] +Parent=General RSS +Browser=Ruunk + +[Windows-RSS-Platform/2.0 (MSIE 8.0; Windows NT 6.0)] +Parent=General RSS +Browser=Windows-RSS-Platform +Platform=WinVista + +[Mozilla/5.0 (X11; ?; Linux; *) AppleWebKit/* (KHTML, like Gecko, Safari/*) Arora/0.4] +Parent=Google Code +Browser=Arora +Version=0.4 +MajorVer=0 +MinorVer=4 +Platform=Linux +CssVersion=2 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Validation Checkers + +[HTML Validators] +Parent=DefaultProperties +Browser=HTML Validators +Frames=true +IFrames=true +Tables=true +Crawler=true + +[(HTML Validator http://www.searchengineworld.com/validator/)] +Parent=HTML Validators +Browser=Search Engine World HTML Validator + +[FeedValidator/1.3] +Parent=HTML Validators +Browser=FeedValidator +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Jigsaw/* W3C_CSS_Validator_JFouffa/*] +Parent=HTML Validators +Browser=Jigsaw CSS Validator + +[Search Engine World Robots.txt Validator*] +Parent=HTML Validators +Browser=Search Engine World Robots.txt Validator + +[W3C_Validator/*] +Parent=HTML Validators +Browser=W3C Validator + +[W3CLineMode/*] +Parent=HTML Validators +Browser=W3C Line Mode + +[Weblide/2.? beta*] +Parent=HTML Validators +Browser=Weblide +Version=2.0 +MajorVer=2 +MinorVer=0 +Beta=true + +[WebmasterWorld StickyMail Server Header Checker*] +Parent=HTML Validators +Browser=WebmasterWorld Server Header Checker + +[WWWC/*] +Parent=HTML Validators + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Image Crawlers + +[Image Crawlers] +Parent=DefaultProperties +Browser=Image Crawlers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*CFNetwork*] +Parent=Image Crawlers +Browser=CFNetwork + +[*PhotoStickies/*] +Parent=Image Crawlers +Browser=PhotoStickies + +[Camcrawler*] +Parent=Image Crawlers +Browser=Camcrawler + +[CydralSpider/*] +Parent=Image Crawlers +Browser=Cydral Web Image Search +isBanned=true + +[Der gro\xdfe BilderSauger*] +Parent=Image Crawlers +Browser=Gallery Grabber + +[Extreme Picture Finder] +Parent=Image Crawlers +Browser=Extreme Picture Finder + +[FLATARTS_FAVICO] +Parent=Image Crawlers +Browser=FlatArts Favorites Icon Tool + +[HTML2JPG Blackbox, http://www.html2jpg.com] +Parent=Image Crawlers +Browser=HTML2JPG + +[IconSurf/2.*] +Parent=Image Crawlers +Browser=IconSurf + +[kalooga/KaloogaBot*] +Parent=Image Crawlers +Browser=KaloogaBot + +[Mister PIX*] +Parent=Image Crawlers +Browser=Mister PIX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X; *) AppleWebKit/* (*) Pandora/2.*] +Parent=Image Crawlers +Browser=Pandora + +[naoFavicon4IE*] +Parent=Image Crawlers +Browser=naoFavicon4IE + +[pixfinder/*] +Parent=Image Crawlers +Browser=pixfinder + +[rssImagesBot/0.1 (*http://herbert.groot.jebbink.nl/?app=rssImages)] +Parent=Image Crawlers +Browser=rssImagesBot + +[Web Image Collector*] +Parent=Image Crawlers +Browser=Web Image Collector + +[WebImages * (?http://herbert.groot.jebbink.nl/?app=WebImages?)] +Parent=Image Crawlers +Browser=WebImages + +[WebPix*] +Parent=Image Crawlers +Browser=Custo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Link Checkers + +[Link Checkers] +Parent=DefaultProperties +Browser=Link Checkers +Frames=true +IFrames=true +Tables=true +Crawler=true + +[!Susie (http://www.sync2it.com/susie)] +Parent=Link Checkers +Browser=!Susie + +[*AgentName/*] +Parent=Link Checkers +Browser=AgentName + +[*Linkman*] +Parent=Link Checkers +Browser=Linkman + +[*LinksManager.com*] +Parent=Link Checkers +Browser=LinksManager + +[*Powermarks/*] +Parent=Link Checkers +Browser=Powermarks + +[*W3C-checklink/*] +Parent=Link Checkers +Browser=W3C Link Checker + +[*Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator + +[*Zeus*] +Parent=Link Checkers +Browser=Zeus +isBanned=true + +[ActiveBookmark *] +Parent=Link Checkers +Browser=ActiveBookmark + +[Bookdog/*] +Parent=Link Checkers +Browser=Bookdog + +[Bookmark Buddy*] +Parent=Link Checkers +Browser=Bookmark Buddy + +[Bookmark Renewal Check Agent*] +Parent=Link Checkers +Browser=Bookmark Renewal Check Agent + +[Bookmark search tool*] +Parent=Link Checkers +Browser=Bookmark search tool + +[Bookmark-Manager] +Parent=Link Checkers +Browser=Bookmark-Manager + +[Checkbot*] +Parent=Link Checkers +Browser=Checkbot + +[CheckLinks/*] +Parent=Link Checkers +Browser=CheckLinks + +[CyberSpyder Link Test/*] +Parent=Link Checkers +Browser=CyberSpyder Link Test + +[DLC/*] +Parent=Link Checkers +Browser=DLC + +[DocWeb Link Crawler (http://doc.php.net)] +Parent=Link Checkers +Browser=DocWeb Link Crawler + +[FavOrg] +Parent=Link Checkers +Browser=FavOrg + +[Favorites Sweeper v.3.*] +Parent=Link Checkers +Browser=Favorites Sweeper + +[FindLinks/*] +Parent=Link Checkers +Browser=FindLinks + +[Funnel Web Profiler*] +Parent=Link Checkers +Browser=Funnel Web Profiler + +[Html Link Validator (www.lithopssoft.com)] +Parent=Link Checkers +Browser=HTML Link Validator + +[IECheck] +Parent=Link Checkers +Browser=IECheck + +[JCheckLinks/*] +Parent=Link Checkers +Browser=JCheckLinks + +[JRTwine Software Check Favorites Utility] +Parent=Link Checkers +Browser=JRTwine + +[Link Valet Online*] +Parent=Link Checkers +Browser=Link Valet +isBanned=true + +[LinkAlarm/*] +Parent=Link Checkers +Browser=LinkAlarm + +[Linkbot*] +Parent=Link Checkers +Browser=Linkbot + +[LinkChecker/*] +Parent=Link Checkers +Browser=LinkChecker + +[LinkextractorPro*] +Parent=Link Checkers +Browser=LinkextractorPro +isBanned=true + +[LinkLint-checkonly/*] +Parent=Link Checkers +Browser=LinkLint + +[LinkScan/*] +Parent=Link Checkers +Browser=LinkScan + +[LinkSweeper/*] +Parent=Link Checkers +Browser=LinkSweeper + +[LinkWalker*] +Parent=Link Checkers +Browser=LinkWalker + +[MetaGer-LinkChecker] +Parent=Link Checkers +Browser=MetaGer-LinkChecker + +[Mozilla/* (compatible; linktiger/*; *http://www.linktiger.com*)] +Parent=Link Checkers +Browser=LinkTiger +isBanned=true + +[Mozilla/4.0 (Compatible); URLBase*] +Parent=Link Checkers +Browser=URLBase + +[Mozilla/4.0 (compatible; Link Utility; http://net-promoter.com)] +Parent=Link Checkers +Browser=NetPromoter Link Utility + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98) Web Link Validator*] +Parent=Link Checkers +Browser=Web Link Validator +Win32=true + +[Mozilla/4.0 (compatible; MSIE 7.0; Win32) Link Commander 3.0] +Parent=Link Checkers +Browser=Link Commander +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Win32 + +[Mozilla/4.0 (compatible; smartBot/1.*; checking links; *)] +Parent=Link Checkers +Browser=smartBot + +[Mozilla/4.0 (compatible; SuperCleaner*;*)] +Parent=Link Checkers +Browser=SuperCleaner + +[Mozilla/5.0 gURLChecker/*] +Parent=Link Checkers +Browser=gURLChecker +isBanned=true + +[Newsgroupreporter LinkCheck] +Parent=Link Checkers +Browser=Newsgroupreporter LinkCheck + +[onCHECK Linkchecker von www.scientec.de fuer www.onsinn.de] +Parent=Link Checkers +Browser=onCHECK Linkchecker + +[online link validator (http://www.dead-links.com/)] +Parent=Link Checkers +Browser=Dead-Links.com +isBanned=true + +[REL Link Checker*] +Parent=Link Checkers +Browser=REL Link Checker + +[RLinkCheker*] +Parent=Link Checkers +Browser=RLinkCheker + +[Robozilla/*] +Parent=Link Checkers +Browser=Robozilla + +[RPT-HTTPClient/*] +Parent=Link Checkers +Browser=RPT-HTTPClient +isBanned=true + +[SafariBookmarkChecker*(?http://www.coriolis.ch/)] +Parent=Link Checkers +Browser=SafariBookmarkChecker +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Simpy/* (Simpy; http://www.simpy.com/?ref=bot; feedback at simpy dot com)] +Parent=Link Checkers +Browser=Simpy + +[SiteBar/*] +Parent=Link Checkers +Browser=SiteBar + +[Susie (http://www.sync2it.com/bms/susie.php] +Parent=Link Checkers +Browser=Susie + +[URLBase/6.*] +Parent=Link Checkers + +[VSE/*] +Parent=Link Checkers +Browser=VSE Link Tester + +[WebTrends Link Analyzer] +Parent=Link Checkers +Browser=WebTrends Link Analyzer + +[WorQmada/*] +Parent=Link Checkers +Browser=WorQmada + +[Xenu* Link Sleuth*] +Parent=Link Checkers +Browser=Xenu's Link Sleuth +isBanned=true + +[Z-Add Link Checker*] +Parent=Link Checkers +Browser=Z-Add Link Checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Microsoft + +[Microsoft] +Parent=DefaultProperties +Browser=Microsoft +isBanned=true + +[Live (http://www.live.com/)] +Parent=Microsoft +Browser=Microsoft Live +isBanned=false +isSyndicationReader=true + +[MFC Foundation Class Library*] +Parent=Microsoft +Browser=MFC Foundation Class Library + +[MFHttpScan] +Parent=Microsoft +Browser=MFHttpScan + +[Microsoft BITS/*] +Parent=Microsoft +Browser=BITS + +[Microsoft Data Access Internet Publishing Provider Cache Manager] +Parent=Microsoft +Browser=MS IPP + +[Microsoft Data Access Internet Publishing Provider DAV*] +Parent=Microsoft +Browser=MS IPP DAV + +[Microsoft Data Access Internet Publishing Provider Protocol Discovery] +Parent=Microsoft +Browser=MS IPPPD + +[Microsoft Internet Explorer] +Parent=Microsoft +Browser=Fake IE + +[Microsoft Office Existence Discovery] +Parent=Microsoft +Browser=Microsoft Office Existence Discovery + +[Microsoft Office Protocol Discovery] +Parent=Microsoft +Browser=MS OPD + +[Microsoft Office/* (*Picture Manager*)] +Parent=Microsoft +Browser=Microsoft Office Picture Manager + +[Microsoft URL Control*] +Parent=Microsoft +Browser=Microsoft URL Control + +[Microsoft Visio MSIE] +Parent=Microsoft +Browser=Microsoft Visio + +[Microsoft-WebDAV-MiniRedir/*] +Parent=Microsoft +Browser=Microsoft-WebDAV + +[Mozilla/5.0 (Macintosh; Intel Mac OS X) Excel/12.*] +Parent=Microsoft +Browser=Microsoft Excel +Version=12.0 +MajorVer=12 +MinorVer=0 +Platform=MacOSX + +[MSN Feed Manager] +Parent=Microsoft +Browser=MSN Feed Manager +isBanned=false +isSyndicationReader=true + +[MSProxy/*] +Parent=Microsoft +Browser=MS Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Browsers + +[Miscellaneous Browsers] +Parent=DefaultProperties +Browser=Miscellaneous Browsers +Frames=true +Tables=true +Cookies=true + +[*Amiga*] +Parent=Miscellaneous Browsers +Browser=Amiga +Platform=Amiga + +[*avantbrowser*] +Parent=Miscellaneous Browsers +Browser=Avant Browser + +[12345] +Parent=Miscellaneous Browsers +Browser=12345 +isBanned=true + +[Ace Explorer] +Parent=Miscellaneous Browsers +Browser=Ace Explorer + +[Enigma Browser*] +Parent=Miscellaneous Browsers +Browser=Enigma Browser + +[EVE-minibrowser/*] +Parent=Miscellaneous Browsers +Browser=EVE-minibrowser +IFrames=false +Tables=false +BackgroundSounds=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +isBanned=false +Crawler=false + +[Godzilla/* (Basic*; *; Commodore C=64; *; rv:1.*)*] +Parent=Miscellaneous Browsers +Browser=Godzilla + +[GreenBrowser] +Parent=Miscellaneous Browsers +Browser=GreenBrowser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Kopiczek/* (WyderOS*; *)] +Parent=Miscellaneous Browsers +Browser=Kopiczek +Platform=WyderOS +IFrames=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (*) - BrowseX (*)] +Parent=Miscellaneous Browsers +Browser=BrowseX + +[Mozilla/* (Win32;*Escape?*; ?)] +Parent=Miscellaneous Browsers +Browser=Escape +Platform=Win32 + +[Mozilla/4.0 (compatible; ibisBrowser)] +Parent=Miscellaneous Browsers +Browser=ibisBrowser + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) AppleWebKit/* (*) HistoryHound/*] +Parent=Miscellaneous Browsers +Browser=HistoryHound + +[NetRecorder*] +Parent=Miscellaneous Browsers +Browser=NetRecorder + +[NetSurfer*] +Parent=Miscellaneous Browsers +Browser=NetSurfer + +[ogeb browser , Version 1.1.0] +Parent=Miscellaneous Browsers +Browser=ogeb browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[SCEJ PSP BROWSER 0102pspNavigator] +Parent=Miscellaneous Browsers +Browser=Wipeout Pure + +[SlimBrowser] +Parent=Miscellaneous Browsers +Browser=SlimBrowser + +[WWW_Browser/*] +Parent=Miscellaneous Browsers +Browser=WWW Browser +Version=1.69 +MajorVer=1 +MinorVer=69 +Platform=Win16 +CssVersion=3 +supportsCSS=true + +[*Netcraft Webserver Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Offline Browsers + +[Offline Browsers] +Parent=DefaultProperties +Browser=Offline Browsers +Frames=true +Tables=true +Cookies=true +isBanned=true +Crawler=true + +[*Check&Get*] +Parent=Offline Browsers +Browser=Check&Get + +[*HTTrack*] +Parent=Offline Browsers +Browser=HTTrack + +[*MSIECrawler*] +Parent=Offline Browsers +Browser=IE Offline Browser + +[*TweakMASTER*] +Parent=Offline Browsers +Browser=TweakMASTER + +[BackStreet Browser *] +Parent=Offline Browsers +Browser=BackStreet Browser + +[Go-Ahead-Got-It*] +Parent=Offline Browsers +Browser=Go Ahead Got-It + +[iGetter/*] +Parent=Offline Browsers +Browser=iGetter + +[Teleport*] +Parent=Offline Browsers +Browser=Teleport + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Online Scanners + +[Online Scanners] +Parent=DefaultProperties +Browser=Online Scanners +isBanned=true + +[JoeDog/* (X11; I; Siege *)] +Parent=Online Scanners +Browser=JoeDog +isBanned=false + +[Morfeus Fucking Scanner] +Parent=Online Scanners +Browser=Morfeus Fucking Scanner + +[Mozilla/4.0 (compatible; Trend Micro tmdr 1.*] +Parent=Online Scanners +Browser=Trend Micro + +[Titanium 2005 (4.02.01)] +Parent=Online Scanners +Browser=Panda Antivirus Titanium + +[virus_detector*] +Parent=Online Scanners +Browser=Secure Computing Corporation + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Proxy Servers + +[Proxy Servers] +Parent=DefaultProperties +Browser=Proxy Servers +isBanned=true + +[*squid*] +Parent=Proxy Servers +Browser=Squid + +[Anonymisiert*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymizer/*] +Parent=Proxy Servers +Browser=Anonymizer + +[Anonymizied*] +Parent=Proxy Servers +Browser=Anonymizied + +[Anonymous*] +Parent=Proxy Servers +Browser=Anonymous + +[Anonymous/*] +Parent=Proxy Servers +Browser=Anonymous + +[CE-Preload] +Parent=Proxy Servers +Browser=CE-Preload + +[http://Anonymouse.org/*] +Parent=Proxy Servers +Browser=Anonymouse + +[IE/6.01 (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Mozilla/* (TuringOS; Turing Machine; 0.0)] +Parent=Proxy Servers +Browser=Anonymizer + +[Mozilla/4.0 (compatible; MSIE ?.0; SaferSurf*)] +Parent=Proxy Servers +Browser=SaferSurf + +[Mozilla/5.0 (compatible; del.icio.us-thumbnails/*; *) KHTML/* (like Gecko)] +Parent=Proxy Servers +Browser=Yahoo! +isBanned=true +Crawler=true + +[Nutscrape] +Parent=Proxy Servers +Browser=Squid + +[Nutscrape/* (CP/M; 8-bit*)] +Parent=Proxy Servers +Browser=Squid + +[Privoxy/*] +Parent=Proxy Servers +Browser=Privoxy + +[ProxyTester*] +Parent=Proxy Servers +Browser=ProxyTester +isBanned=true +Crawler=true + +[SilentSurf*] +Parent=Proxy Servers +Browser=SilentSurf + +[SmallProxy*] +Parent=Proxy Servers +Browser=SmallProxy + +[Space*Bison/*] +Parent=Proxy Servers +Browser=Proxomitron + +[Sqworm/*] +Parent=Proxy Servers +Browser=Websense + +[SurfControl] +Parent=Proxy Servers +Browser=SurfControl + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Research Projects + +[Research Projects] +Parent=DefaultProperties +Browser=Research Projects +isBanned=true +Crawler=true + +[*research*] +Parent=Research Projects + +[AcadiaUniversityWebCensusClient] +Parent=Research Projects +Browser=AcadiaUniversityWebCensusClient + +[Amico Alpha * (*) Gecko/* AmicoAlpha/*] +Parent=Research Projects +Browser=Amico Alpha + +[annotate_google; http://ponderer.org/*] +Parent=Research Projects +Browser=Annotate Google + +[CMS crawler (?http://buytaert.net/crawler/)] +Parent=Research Projects + +[e-SocietyRobot(http://www.yama.info.waseda.ac.jp/~yamana/es/)] +Parent=Research Projects +Browser=e-SocietyRobot + +[Forschungsportal/*] +Parent=Research Projects +Browser=Forschungsportal + +[Gulper Web *] +Parent=Research Projects +Browser=Gulper Web Bot + +[HooWWWer/*] +Parent=Research Projects +Browser=HooWWWer + +[http://buytaert.net/crawler] +Parent=Research Projects + +[inetbot/* (?http://www.inetbot.com/bot.html)] +Parent=Research Projects +Browser=inetbot + +[IRLbot/*] +Parent=Research Projects +Browser=IRLbot + +[Lachesis] +Parent=Research Projects +Browser=Lachesis + +[Mozilla/5.0 (compatible; nextthing.org/*)] +Parent=Research Projects +Browser=nextthing.org +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (compatible; Theophrastus/*)] +Parent=Research Projects +Browser=Theophrastus + +[Mozilla/5.0 (compatible; Webscan v0.*; http://otc.dyndns.org/webscan/)] +Parent=Research Projects +Browser=Webscan + +[MQbot*] +Parent=Research Projects +Browser=MQbot + +[OutfoxBot/*] +Parent=Research Projects +Browser=OutfoxBot + +[polybot?*] +Parent=Research Projects +Browser=Polybot + +[Shim?Crawler*] +Parent=Research Projects +Browser=Shim Crawler + +[Steeler/*] +Parent=Research Projects +Browser=Steeler + +[Taiga web spider] +Parent=Research Projects +Browser=Taiga + +[Theme Spider*] +Parent=Research Projects +Browser=Theme Spider + +[UofTDB_experiment* (leehyun@cs.toronto.edu)] +Parent=Research Projects +Browser=UofTDB Experiment + +[USyd-NLP-Spider*] +Parent=Research Projects +Browser=USyd-NLP-Spider + +[woriobot*] +Parent=Research Projects +Browser=woriobot + +[wwwster/* (Beta, mailto:gue@cis.uni-muenchen.de)] +Parent=Research Projects +Browser=wwwster +Beta=true + +[Zao-Crawler] +Parent=Research Projects +Browser=Zao-Crawler + +[Zao/*] +Parent=Research Projects +Browser=Zao + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Rippers + +[Rippers] +Parent=DefaultProperties +Browser=Rippers +Frames=true +IFrames=true +Tables=true +isBanned=true +Crawler=true + +[*grub*] +Parent=Rippers +Browser=grub + +[*ickHTTP*] +Parent=Rippers +Browser=IP*Works + +[*java*] +Parent=Rippers + +[*libwww-perl*] +Parent=Rippers +Browser=libwww-perl + +[*WebGrabber*] +Parent=Rippers + +[*WinHttpRequest*] +Parent=Rippers +Browser=WinHttp + +[3D-FTP/*] +Parent=Rippers +Browser=3D-FTP + +[3wGet/*] +Parent=Rippers +Browser=3wGet + +[ActiveRefresh*] +Parent=Rippers +Browser=ActiveRefresh + +[Artera (Version *)] +Parent=Rippers +Browser=Artera + +[AutoHotkey] +Parent=Rippers +Browser=AutoHotkey + +[b2w/*] +Parent=Rippers +Browser=b2w + +[BasicHTTP/*] +Parent=Rippers +Browser=BasicHTTP + +[BlockNote.Net] +Parent=Rippers +Browser=BlockNote.Net + +[CAST] +Parent=Rippers +Browser=CAST + +[CFNetwork/*] +Parent=Rippers +Browser=CFNetwork + +[CFSCHEDULE*] +Parent=Rippers +Browser=ColdFusion Task Scheduler + +[CobWeb/*] +Parent=Rippers +Browser=CobWeb + +[ColdFusion*] +Parent=Rippers +Browser=ColdFusion + +[Crawl_Application] +Parent=Rippers +Browser=Crawl_Application + +[curl/*] +Parent=Rippers +Browser=cURL + +[Custo*] +Parent=Rippers +Browser=Custo + +[DataCha0s/*] +Parent=Rippers +Browser=DataCha0s + +[DeepIndexer*] +Parent=Rippers +Browser=DeepIndexer + +[DISCo Pump *] +Parent=Rippers +Browser=DISCo Pump + +[eStyleSearch * (compatible; MSIE 6.0; Windows NT 5.0)] +Parent=Rippers +Browser=eStyleSearch +Win32=true + +[ezic.com http agent *] +Parent=Rippers +Browser=Ezic.com + +[fetch libfetch/*] +Parent=Rippers + +[FGet*] +Parent=Rippers +Browser=FGet + +[Flaming AttackBot*] +Parent=Rippers +Browser=Flaming AttackBot + +[Foobot*] +Parent=Rippers +Browser=Foobot + +[GameSpyHTTP/*] +Parent=Rippers +Browser=GameSpyHTTP + +[gnome-vfs/*] +Parent=Rippers +Browser=gnome-vfs + +[Harvest/*] +Parent=Rippers +Browser=Harvest + +[hcat/*] +Parent=Rippers +Browser=hcat + +[HLoader] +Parent=Rippers +Browser=HLoader + +[Holmes/*] +Parent=Rippers +Browser=Holmes + +[HTMLParser/*] +Parent=Rippers +Browser=HTMLParser + +[http generic] +Parent=Rippers +Browser=http generic + +[httpclient*] +Parent=Rippers + +[httperf/*] +Parent=Rippers +Browser=httperf + +[HTTPFetch/*] +Parent=Rippers +Browser=HTTPFetch + +[HTTPGrab] +Parent=Rippers +Browser=HTTPGrab + +[HttpSession] +Parent=Rippers +Browser=HttpSession + +[httpunit/*] +Parent=Rippers +Browser=HttpUnit + +[ICE_GetFile] +Parent=Rippers +Browser=ICE_GetFile + +[iexplore.exe] +Parent=Rippers + +[Inet - Eureka App] +Parent=Rippers +Browser=Inet - Eureka App + +[INetURL/*] +Parent=Rippers +Browser=INetURL + +[InetURL:/*] +Parent=Rippers +Browser=InetURL + +[Internet Exploiter/*] +Parent=Rippers + +[Internet Explore *] +Parent=Rippers +Browser=Fake IE + +[Internet Explorer *] +Parent=Rippers +Browser=Fake IE + +[IP*Works!*/*] +Parent=Rippers +Browser=IP*Works! + +[IrssiUrlLog/*] +Parent=Rippers +Browser=IrssiUrlLog + +[JPluck/*] +Parent=Rippers +Browser=JPluck + +[Kapere (http://www.kapere.com)] +Parent=Rippers +Browser=Kapere + +[LeechFTP] +Parent=Rippers +Browser=LeechFTP + +[LeechGet*] +Parent=Rippers +Browser=LeechGet + +[libcurl-agent/*] +Parent=Rippers +Browser=libcurl + +[libWeb/clsHTTP*] +Parent=Rippers +Browser=libWeb/clsHTTP + +[lwp*] +Parent=Rippers + +[MFC_Tear_Sample] +Parent=Rippers +Browser=MFC_Tear_Sample + +[Moozilla] +Parent=Rippers +Browser=Moozilla + +[MovableType/*] +Parent=Rippers +Browser=MovableType Web Log + +[Mozilla/2.0 (compatible; NEWT ActiveX; Win32)] +Parent=Rippers +Browser=NEWT ActiveX +Platform=Win32 + +[Mozilla/3.0 (compatible)] +Parent=Rippers + +[Mozilla/3.0 (compatible; Indy Library)] +Parent=Rippers +Cookies=true + +[Mozilla/3.01 (compatible;)] +Parent=Rippers + +[Mozilla/4.0 (compatible; BorderManager*)] +Parent=Rippers +Browser=Novell BorderManager + +[Mozilla/4.0 (compatible;)] +Parent=Rippers + +[Mozilla/5.0 (compatible; IPCheck Server Monitor*)] +Parent=Rippers +Browser=IPCheck Server Monitor + +[OCN-SOC/*] +Parent=Rippers +Browser=OCN-SOC + +[Offline Explorer*] +Parent=Rippers +Browser=Offline Explorer + +[Open Web Analytics Bot*] +Parent=Rippers +Browser=Open Web Analytics Bot + +[OSSProxy*] +Parent=Rippers +Browser=OSSProxy + +[Pageload*] +Parent=Rippers +Browser=PageLoad + +[PageNest/*] +Parent=Rippers +Browser=PageNest + +[pavuk/*] +Parent=Rippers +Browser=Pavuk + +[PEAR HTTP_Request*] +Parent=Rippers +Browser=PEAR-PHP + +[PHP*] +Parent=Rippers +Browser=PHP + +[PigBlock (Windows NT 5.1; U)*] +Parent=Rippers +Browser=PigBlock +Win32=true + +[Pockey*] +Parent=Rippers +Browser=Pockey-GetHTML + +[POE-Component-Client-HTTP/*] +Parent=Rippers +Browser=POE-Component-Client-HTTP + +[PycURL/*] +Parent=Rippers +Browser=PycURL + +[Python*] +Parent=Rippers +Browser=Python + +[RepoMonkey*] +Parent=Rippers +Browser=RepoMonkey + +[SBL-BOT*] +Parent=Rippers +Browser=BlackWidow + +[ScoutAbout*] +Parent=Rippers +Browser=ScoutAbout + +[sherlock/*] +Parent=Rippers +Browser=Sherlock + +[SiteParser/*] +Parent=Rippers +Browser=SiteParser + +[SiteSnagger*] +Parent=Rippers +Browser=SiteSnagger + +[SiteSucker/*] +Parent=Rippers +Browser=SiteSucker + +[SiteWinder*] +Parent=Rippers +Browser=SiteWinder + +[Snoopy*] +Parent=Rippers +Browser=Snoopy + +[SOFTWING_TEAR_AGENT*] +Parent=Rippers +Browser=AspTear + +[SuperHTTP/*] +Parent=Rippers +Browser=SuperHTTP + +[Tcl http client package*] +Parent=Rippers +Browser=Tcl http client package + +[Twisted PageGetter] +Parent=Rippers +Browser=Twisted PageGetter + +[URL2File/*] +Parent=Rippers +Browser=URL2File + +[UtilMind HTTPGet] +Parent=Rippers +Browser=UtilMind HTTPGet + +[VCI WebViewer*] +Parent=Rippers +Browser=VCI WebViewer + +[W3CRobot/*] +Parent=Rippers +Browser=W3CRobot + +[Web Downloader*] +Parent=Rippers +Browser=Web Downloader + +[Web Downloader/*] +Parent=Rippers +Browser=Web Downloader + +[Web Magnet*] +Parent=Rippers +Browser=Web Magnet + +[WebAuto/*] +Parent=Rippers + +[webbandit/*] +Parent=Rippers +Browser=webbandit + +[WebCopier*] +Parent=Rippers +Browser=WebCopier + +[WebDownloader*] +Parent=Rippers +Browser=WebDownloader + +[WebFetch] +Parent=Rippers +Browser=WebFetch + +[webfetch/*] +Parent=Rippers +Browser=WebFetch + +[WebGatherer*] +Parent=Rippers +Browser=WebGatherer + +[WebGet] +Parent=Rippers +Browser=WebGet + +[WebReaper*] +Parent=Rippers +Browser=WebReaper + +[WebRipper] +Parent=Rippers +Browser=WebRipper + +[WebSauger*] +Parent=Rippers +Browser=WebSauger + +[Website Downloader*] +Parent=Rippers +Browser=Website Downloader + +[Website eXtractor*] +Parent=Rippers +Browser=Website eXtractor + +[Website Quester] +Parent=Rippers +Browser=Website Quester + +[WebsiteExtractor*] +Parent=Rippers +Browser=Website eXtractor + +[WebSnatcher*] +Parent=Rippers +Browser=WebSnatcher + +[Webster Pro*] +Parent=Rippers +Browser=Webster Pro + +[WebStripper*] +Parent=Rippers +Browser=WebStripper + +[WebWhacker*] +Parent=Rippers +Browser=WebWhacker + +[WinScripter iNet Tools] +Parent=Rippers +Browser=WinScripter iNet Tools + +[WWW-Mechanize/*] +Parent=Rippers +Browser=WWW-Mechanize + +[Zend_Http_Client] +Parent=Rippers +Browser=Zend_Http_Client + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Site Monitors + +[Site Monitors] +Parent=DefaultProperties +Browser=Site Monitors +Cookies=true +isBanned=true +Crawler=true + +[*EasyRider*] +Parent=Site Monitors +Browser=EasyRider + +[*maxamine.com--robot*] +Parent=Site Monitors +Browser=maxamine.com--robot +isBanned=true + +[*WebMon ?.*] +Parent=Site Monitors +Browser=WebMon + +[Kenjin Spider*] +Parent=Site Monitors +Browser=Kenjin Spider + +[Kevin http://*] +Parent=Site Monitors +Browser=Kevin +isBanned=true + +[Mozilla/4.0 (compatible; ChangeDetection/*] +Parent=Site Monitors +Browser=ChangeDetection + +[Myst Monitor Service v*] +Parent=Site Monitors +Browser=Myst Monitor Service + +[Net Probe] +Parent=Site Monitors +Browser=Net Probe + +[NetMechanic*] +Parent=Site Monitors +Browser=NetMechanic + +[NetReality*] +Parent=Site Monitors +Browser=NetReality + +[Pingdom GIGRIB*] +Parent=Site Monitors +Browser=Pingdom + +[Site Valet Online*] +Parent=Site Monitors +Browser=Site Valet +isBanned=true + +[SITECHECKER] +Parent=Site Monitors +Browser=SITECHECKER + +[sitemonitor@dnsvr.com/*] +Parent=Site Monitors +Browser=ZoneEdit Failover Monitor +isBanned=false + +[UpTime Checker*] +Parent=Site Monitors +Browser=UpTime Checker + +[URL Control*] +Parent=Site Monitors +Browser=URL Control + +[URL_Access/*] +Parent=Site Monitors + +[URLCHECK] +Parent=Site Monitors +Browser=URLCHECK + +[URLy Warning*] +Parent=Site Monitors +Browser=URLy Warning + +[Webcheck *] +Parent=Site Monitors +Browser=Webcheck +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebPatrol/*] +Parent=Site Monitors +Browser=WebPatrol + +[websitepulse checker/*] +Parent=Site Monitors +Browser=websitepulse checker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Social Bookmarkers + +[Social Bookmarkers] +Parent=DefaultProperties +Browser=Social Bookmarkers +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[BookmarkBase(2/;http://bookmarkbase.com)] +Parent=Social Bookmarkers +Browser=BookmarkBase + +[Cocoal.icio.us/1.0 (v43) (Mac OS X; http://www.scifihifi.com/cocoalicious)] +Parent=Social Bookmarkers +Browser=Cocoalicious + +[Mozilla/5.0 (compatible; FriendFeedBot/0.*; Http://friendfeed.com/about/bot)] +Parent=Social Bookmarkers +Browser=FriendFeedBot + +[Twitturly*] +Parent=Social Bookmarkers +Browser=Twitturly + +[WinkBot/*] +Parent=Social Bookmarkers +Browser=WinkBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Translators + +[Translators] +Parent=DefaultProperties +Browser=Translators +Frames=true +Tables=true +Cookies=true + +[Seram Server] +Parent=Translators +Browser=Seram Server + +[TeragramWebcrawler/*] +Parent=Translators +Browser=TeragramWebcrawler +Version=1.0 +MajorVer=1 +MinorVer=0 + +[WebIndexer/* (Web Indexer; *)] +Parent=Translators +Browser=WorldLingo + +[WebTrans] +Parent=Translators +Browser=WebTrans + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Version Checkers + +[Version Checkers] +Parent=DefaultProperties +Browser=Version Checkers +Crawler=true + +[Automated Browscap.ini Updater. To report issues contact us at http://www.skycomp.ca] +Parent=Version Checkers +Browser=Automated Browscap.ini Updater + +[BMC Link Validator (http://www.briansmodelcars.com/links/)] +Parent=Version Checkers +Browser=BMC Link Validator +MajorVer=1 +MinorVer=0 +Platform=Win2000 + +[Browscap updater] +Parent=Version Checkers +Browser=Browscap updater + +[BrowscapUpdater1.0] +Parent=Version Checkers + +[Browser Capabilities Project (http://browsers.garykeith.com; http://browsers.garykeith.com/sitemail/contact-me.asp)] +Parent=Version Checkers +Browser=Gary Keith's Version Checker + +[Browser Capabilities Project AutoDownloader] +Parent=Version Checkers +Browser=TKC AutoDownloader + +[browsers.garykeith.com browscap.ini bot BETA] +Parent=Version Checkers + +[Code Sample Web Client] +Parent=Version Checkers +Browser=Code Sample Web Client + +[Desktop Sidebar*] +Parent=Version Checkers +Browser=Desktop Sidebar +isBanned=true + +[Mono Browser Capabilities Updater*] +Parent=Version Checkers +Browser=Mono Browser Capabilities Updater +isBanned=true + +[Rewmi/*] +Parent=Version Checkers +isBanned=true + +[Subtext Version 1.9* - http://subtextproject.com/ (Microsoft Windows NT 5.2.*)] +Parent=Version Checkers +Browser=Subtext + +[TherapeuticResearch] +Parent=Version Checkers +Browser=TherapeuticResearch + +[UpdateBrowscap*] +Parent=Version Checkers +Browser=UpdateBrowscap + +[www.garykeith.com browscap.ini bot*] +Parent=Version Checkers +Browser=clarkson.edu + +[www.substancia.com AutoHTTPAgent (ver *)] +Parent=Version Checkers +Browser=Substncia + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Become + +[Become] +Parent=DefaultProperties +Browser=Become +Frames=true +Tables=true +isSyndicationReader=true +Crawler=true + +[*BecomeBot/*] +Parent=Become +Browser=BecomeBot + +[*BecomeBot@exava.com*] +Parent=Become +Browser=BecomeBot + +[*Exabot@exava.com*] +Parent=Become +Browser=Exabot + +[MonkeyCrawl/*] +Parent=Become +Browser=MonkeyCrawl + +[Mozilla/5.0 (compatible; BecomeJPBot/2.3; *)] +Parent=Become +Browser=BecomeJPBot + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Blue Coat Systems + +[Blue Coat Systems] +Parent=DefaultProperties +Browser=Blue Coat Systems +isBanned=true +Crawler=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Browscap Abusers + +[Browscap Abusers] +Parent=DefaultProperties +Browser=Browscap Abusers +isBanned=true + +[Apple-PubSub/*] +Parent=Browscap Abusers +Browser=Apple-PubSub + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FeedHub + +[FeedHub] +Parent=DefaultProperties +Browser=FeedHub +isSyndicationReader=true + +[FeedHub FeedDiscovery/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedDiscovery +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub FeedFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub FeedFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[FeedHub MetaDataFetcher/1.0 (http://www.feedhub.com)] +Parent=FeedHub +Browser=FeedHub MetaDataFetcher +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Internet Content Rating Association] +Parent=DefaultProperties +Browser= +Frames=true +IFrames=true +Tables=true +Cookies=true +Crawler=true + +[ICRA_label_generator/1.?] +Parent=Internet Content Rating Association +Browser=ICRA_label_generator + +[ICRA_Semantic_spider/0.?] +Parent=Internet Content Rating Association +Browser=ICRA_Semantic_spider + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NameProtect + +[NameProtect] +Parent=DefaultProperties +Browser=NameProtect +isBanned=true +Crawler=true + +[abot/*] +Parent=NameProtect +Browser=NameProtect + +[NP/*] +Parent=NameProtect +Browser=NameProtect + +[NPBot*] +Parent=NameProtect +Browser=NameProtect + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netcraft + +[Netcraft] +Parent=DefaultProperties +Browser=Netcraft +isBanned=true +Crawler=true + +[*Netcraft Web Server Survey*] +Parent=Netcraft +Browser=Netcraft Webserver Survey +isBanned=true + +[Mozilla/5.0 (compatible; NetcraftSurveyAgent/1.0; info@netcraft.com)] +Parent=Netcraft +Browser=NetcraftSurveyAgent + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NewsGator + +[NewsGator] +Parent=DefaultProperties +Browser=NewsGator +isSyndicationReader=true + +[MarsEdit*] +Parent=NewsGator +Browser=MarsEdit + +[NetNewsWire*/*] +Parent=NewsGator +Browser=NetNewsWire +Platform=MacOSX + +[NewsFire/*] +Parent=NewsGator +Browser=NewsFire + +[NewsGator FetchLinks extension/*] +Parent=NewsGator +Browser=NewsGator FetchLinks + +[NewsGator/*] +Parent=NewsGator +Browser=NewsGator +isBanned=true + +[NewsGatorOnline/*] +Parent=NewsGator +Browser=NewsGatorOnline + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.2 + +[Chrome 0.2] +Parent=DefaultProperties +Browser=Chrome +Version=0.2 +MinorVer=2 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.2.* Safari/*] +Parent=Chrome 0.2 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.3 + +[Chrome 0.3] +Parent=DefaultProperties +Browser=Chrome +Version=0.3 +MinorVer=3 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.3.* Safari/*] +Parent=Chrome 0.3 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.4 + +[Chrome 0.4] +Parent=DefaultProperties +Browser=Chrome +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.4.* Safari/*] +Parent=Chrome 0.4 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 0.5 + +[Chrome 0.5] +Parent=DefaultProperties +Browser=Chrome +Version=0.5 +MinorVer=5 +Beta=true +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/0.5.* Safari/*] +Parent=Chrome 0.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 1.0 + +[Chrome 1.0] +Parent=DefaultProperties +Browser=Chrome +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/1.0.* Safari/*] +Parent=Chrome 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 2.0 + +[Chrome 2.0] +Parent=DefaultProperties +Browser=Chrome +Version=2.0 +MajorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/2.0.* Safari/*] +Parent=Chrome 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chrome 3.0 + +[Chrome 3.0] +Parent=DefaultProperties +Browser=Chrome +Version=3.0 +MajorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; U; Windows NT 7.0; *) AppleWebKit/* (KHTML, like Gecko) Chrome/3.0.* Safari/*] +Parent=Chrome 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Code + +[Google Code] +Parent=DefaultProperties +Browser=Google Code +Tables=true +Cookies=true +JavaApplets=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.2 + +[Iron 0.2] +Parent=DefaultProperties +Browser=Iron +Version=0.2 +MinorVer=2 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.2.* Safari/*] +Parent=Iron 0.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.3 + +[Iron 0.3] +Parent=DefaultProperties +Browser=Iron +Version=0.3 +MinorVer=3 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.3.* Safari/*] +Parent=Iron 0.3 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iron 0.4 + +[Iron 0.4] +Parent=DefaultProperties +Browser=Iron +Version=0.4 +MinorVer=4 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *) AppleWebKit/* (KHTML, like Gecko) Iron/0.4.* Safari/*] +Parent=Iron 0.4 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPod + +[iPod] +Parent=DefaultProperties +Browser=iPod +Platform=iPhone OSX +isMobileDevice=true + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/3.0 Mobile/* Safari/*] +Parent=iPod +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2 like Mac OS X; en-us) AppleWebKit/* (KHTML, like Gecko) Mobile/*] +Parent=iPod + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iTunes + +[iTunes] +Parent=DefaultProperties +Browser=iTunes +Platform=iPhone OSX + +[iTunes/* (Windows; ?)] +Parent=iTunes +Browser=iTunes +Platform=Win32 +Win32=true + +[MOT-* iTunes/* MIB/* Profile/MIDP-* Configuration/CLDC-* UP.Link/*] +Parent=iTunes + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Media Players + +[Media Players] +Parent=DefaultProperties +Browser=Media Players +Cookies=true + +[Microsoft NetShow(TM) Player with RealVideo(R)] +Parent=Media Players +Browser=Microsoft NetShow + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; *) AppleWebKit/* RealPlayer] +Parent=Media Players +Browser=RealPlayer +Platform=MacOSX + +[MPlayer 0.9*] +Parent=Media Players +Browser=MPlayer +Version=0.9 +MajorVer=0 +MinorVer=9 + +[MPlayer 1.*] +Parent=Media Players +Browser=MPlayer +Version=1.0 +MajorVer=1 +MinorVer=0 + +[MPlayer HEAD CVS] +Parent=Media Players +Browser=MPlayer + +[RealPlayer*] +Parent=Media Players +Browser=RealPlayer + +[RMA/*] +Parent=Media Players +Browser=RMA + +[VLC media player*] +Parent=Media Players +Browser=VLC + +[vobsub] +Parent=Media Players +Browser=vobsub +isBanned=true + +[WinampMPEG/*] +Parent=Media Players +Browser=WinAmp + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nintendo + +[Nintendo Wii] +Parent=DefaultProperties +Browser= +isMobileDevice=true + +[Opera/* (Nintendo DSi; Opera/*; *; *)] +Parent=Nintendo Wii +Browser=DSi + +[Opera/* (Nintendo Wii; U; *)] +Parent=Nintendo Wii +Browser=Wii + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Windows Media Player + +[Windows Media Player] +Parent=DefaultProperties +Browser=Windows Media Player +Cookies=true + +[NSPlayer/10.*] +Parent=Windows Media Player +Version=10.0 +MajorVer=10 +MinorVer=0 + +[NSPlayer/11.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 + +[NSPlayer/4.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=4.0 +MajorVer=4 +MinorVer=0 + +[NSPlayer/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 + +[NSPlayer/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 + +[NSPlayer/9.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 + +[Windows-Media-Player/10.*] +Parent=Windows Media Player +Browser=Windows-Media-Player +Version=10.0 +MajorVer=10 +MinorVer=0 +Win32=true + +[Windows-Media-Player/11.*] +Parent=Windows Media Player +Version=11.0 +MajorVer=11 +MinorVer=0 +Win32=true + +[Windows-Media-Player/7.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=7.0 +MajorVer=7 +MinorVer=0 +Win32=true + +[Windows-Media-Player/8.*] +Parent=Windows Media Player +Browser=Windows Media Player +Version=8.0 +MajorVer=8 +MinorVer=0 +Win32=true + +[Windows-Media-Player/9.*] +Parent=Windows Media Player +Version=9.0 +MajorVer=9 +MinorVer=0 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Zune + +[Zune] +Parent=DefaultProperties +Browser=Zune +Cookies=true + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.0*)*] +Parent=Zune +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 2.5*)*] +Parent=Zune +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Mozilla/4.0 (compatible; MSIE ?.0; *Zune 3.0*)*] +Parent=Zune +Version=3.0 +MajorVer=3 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.0 + +[QuickTime 7.0] +Parent=DefaultProperties +Browser=QuickTime +Version=7.0 +MajorVer=7 +Cookies=true + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.0 +Platform=MacOSX + +[QuickTime (qtver=7.0*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.0 +Platform=MacPPC + +[QuickTime (qtver=7.0*;os=Windows 95*)] +Parent=QuickTime 7.0 +Platform=Win95 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows 98*)] +Parent=QuickTime 7.0 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows Me*)] +Parent=QuickTime 7.0 +Platform=WinME +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 4.0*)] +Parent=QuickTime 7.0 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.0*)] +Parent=QuickTime 7.0 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.1*)] +Parent=QuickTime 7.0 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.0*;os=Windows NT 5.2*)] +Parent=QuickTime 7.0 +Platform=Win2003 +Win32=true + +[QuickTime/7.0.* (qtver=7.0.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.0 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.1 + +[QuickTime 7.1] +Parent=DefaultProperties +Browser=QuickTime +Version=7.1 +MajorVer=7 +MinorVer=1 +Cookies=true + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.1 +Platform=MacOSX + +[QuickTime (qtver=7.1*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.1 +Platform=MacPPC + +[QuickTime (qtver=7.1*;os=Windows 98*)] +Parent=QuickTime 7.1 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 4.0*)] +Parent=QuickTime 7.1 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.0*)] +Parent=QuickTime 7.1 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.1*)] +Parent=QuickTime 7.1 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.1*;os=Windows NT 5.2*)] +Parent=QuickTime 7.1 +Platform=Win2003 +Win32=true + +[QuickTime/7.1.* (qtver=7.1.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.1 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.2 + +[QuickTime 7.2] +Parent=DefaultProperties +Browser=QuickTime +Version=7.2 +MajorVer=7 +MinorVer=2 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.2 +Platform=MacOSX + +[QuickTime (qtver=7.2*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.2 +Platform=MacPPC + +[QuickTime (qtver=7.2*;os=Windows 98*)] +Parent=QuickTime 7.2 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 4.0*)] +Parent=QuickTime 7.2 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.0*)] +Parent=QuickTime 7.2 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.1*)] +Parent=QuickTime 7.2 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.2*;os=Windows NT 5.2*)] +Parent=QuickTime 7.2 +Platform=Win2003 +Win32=true + +[QuickTime/7.2.* (qtver=7.2.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.3 + +[QuickTime 7.3] +Parent=DefaultProperties +Browser=QuickTime +Version=7.3 +MajorVer=7 +MinorVer=3 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.3 +Platform=MacOSX + +[QuickTime (qtver=7.3*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.3 +Platform=MacPPC + +[QuickTime (qtver=7.3*;os=Windows 98*)] +Parent=QuickTime 7.3 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 4.0*)] +Parent=QuickTime 7.3 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.0*)] +Parent=QuickTime 7.3 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.1*)] +Parent=QuickTime 7.3 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.3*;os=Windows NT 5.2*)] +Parent=QuickTime 7.3 +Platform=Win2003 +Win32=true + +[QuickTime/7.3.* (qtver=7.3.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.3 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; QuickTime 7.4 + +[QuickTime 7.4] +Parent=DefaultProperties +Browser=QuickTime +Version=7.4 +MajorVer=7 +MinorVer=4 +Platform=MacOSX +Cookies=true + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 10.*)] +Parent=QuickTime 7.4 +Platform=MacOSX + +[QuickTime (qtver=7.4*;cpu=PPC;os=Mac 9.*)] +Parent=QuickTime 7.4 +Platform=MacPPC + +[QuickTime (qtver=7.4*;os=Windows 98*)] +Parent=QuickTime 7.4 +Platform=Win98 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 4.0*)] +Parent=QuickTime 7.4 +Platform=WinNT +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.0*)] +Parent=QuickTime 7.4 +Platform=Win2000 +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.1*)] +Parent=QuickTime 7.4 +Platform=WinXP +Win32=true + +[QuickTime (qtver=7.4*;os=Windows NT 5.2*)] +Parent=QuickTime 7.4 +Platform=Win2003 +Win32=true + +[QuickTime/7.4.* (qtver=7.4.*;*;os=Mac 10.*)*] +Parent=QuickTime 7.4 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Google Android + +[Android] +Parent=DefaultProperties +Browser=Android +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +[Mozilla/5.0 (Linux; U; Android *; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0.* Mobile Safari/*] +Parent=Android +Browser=Android +Platform=Linux +isMobileDevice=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BlackBerry + +[BlackBerry] +Parent=DefaultProperties +Browser=BlackBerry +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*BlackBerry*] +Parent=BlackBerry + +[*BlackBerrySimulator/*] +Parent=BlackBerry + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Handspring Blazer + +[Blazer] +Parent=DefaultProperties +Browser=Handspring Blazer +Platform=Palm +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 95; PalmSource; Blazer 3.0) 16;160x160] +Parent=Blazer +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.0) 16;320x448] +Parent=Blazer +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.1) 16;320x320] +Parent=Blazer +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.2) 16;320x320] +Parent=Blazer +Version=4.2 +MajorVer=4 +MinorVer=2 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.4) 16;320x320] +Parent=Blazer +Version=4.4 +MajorVer=4 +MinorVer=4 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; PalmSource/*; Blazer/4.5) 16;320x320] +Parent=Blazer +Version=4.5 +MajorVer=4 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; DoCoMo + +[DoCoMo] +Parent=DefaultProperties +Browser=DoCoMo +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[DoCoMo/1.0*] +Parent=DoCoMo +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WAP + +[DoCoMo/2.0*] +Parent=DoCoMo +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=WAP + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IEMobile + +[IEMobile] +Parent=DefaultProperties +Browser=IEMobile +Platform=WinCE +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 6.*)*] +Parent=IEMobile +Version=6.0 +MajorVer=6 +MinorVer=0 + +[Mozilla/4.0 (compatible; MSIE 6.0; Windows CE; IEMobile 7.*)*] +Parent=IEMobile +Version=7.0 +MajorVer=7 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iPhone + +[iPhone] +Parent=DefaultProperties +Browser=iPhone +Platform=iPhone OSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=3 +supportsCSS=true + +[Mozilla/4.0 (iPhone; *)] +Parent=iPhone + +[Mozilla/4.0 (iPhone; U; CPU like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_0_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone Simulator; U; CPU iPhone OS 2_1 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Browser=iPhone Simulator +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0* like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.1* Mobile/* Safari/*] +Parent=iPhone +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_0_2 like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_1 like Mac OS X; *)*] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU iPhone OS 2_2_1 like Mac OS X; *)] +Parent=iPhone + +[Mozilla/5.0 (iPhone; U; CPU like Mac OS X; *) AppleWebKit/* (KHTML, like Gecko) Version/3.0 Mobile/* Safari/*] +Parent=iPhone +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Mozilla/5.0 (iPod; U; *Mac OS X; *) AppleWebKit/* (*) Version/* Mobile/*] +Parent=iPhone +Browser=iTouch + +[Mozilla/5.0 (iPod; U; CPU iPhone OS 2_2* like Mac OS X; *)*] +Parent=iPhone +Browser=iTouch +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; KDDI + +[KDDI] +Parent=DefaultProperties +Browser=KDDI +Frames=true +Tables=true +Cookies=true +BackgroundSounds=true +VBScript=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[KDDI-* UP.Browser/* (GUI) MMP/*] +Parent=KDDI + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Miscellaneous Mobile + +[Miscellaneous Mobile] +Parent=DefaultProperties +Browser= +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; *; CentOS; *) AppleWebKit/* (KHTML, like Gecko) Bolt/0.* Version/3.0 Safari/*] +Parent=Miscellaneous Mobile +Browser=Bolt + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Motorola Internet Browser + +[Motorola Internet Browser] +Parent=DefaultProperties +Browser=Motorola Internet Browser +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[MOT-*/*] +Parent=Motorola Internet Browser + +[MOT-1*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-8700_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-0A/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-2B/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-A-88/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-C???/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-GATW_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-L6/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-L7/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-M*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-MP*/* Mozilla/* (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-MP*/* Mozilla/4.0 (compatible; MSIE *; Windows CE; *)] +Parent=Motorola Internet Browser +Win32=true + +[MOT-SAP4_/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-T*/*] +Parent=Motorola Internet Browser + +[MOT-T7*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-T721*] +Parent=Motorola Internet Browser + +[MOT-TA02/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/*] +Parent=Motorola Internet Browser + +[MOT-V*/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V*/* UP.Browser/*] +Parent=Motorola Internet Browser + +[MOT-V3/* MIB/*] +Parent=Motorola Internet Browser + +[MOT-V4*/* MIB/*] +Parent=Motorola Internet Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; MSN Mobile Proxy + +[MSN Mobile Proxy] +Parent=DefaultProperties +Browser=MSN Mobile Proxy +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true + +[Mozilla/* (compatible; MSIE *; Windows*; MSN Mobile Proxy)] +Parent=MSN Mobile Proxy + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetFront + +[NetFront] +Parent=DefaultProperties +Browser=NetFront +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[*NetFront/*] +Parent=NetFront + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Nokia + +[Nokia] +Parent=DefaultProperties +Browser=Nokia +Tables=true +Cookies=true +isMobileDevice=true + +[*Nokia*/*] +Parent=Nokia + +[Mozilla/* (SymbianOS/*; ?; *) AppleWebKit/* (KHTML, like Gecko) Safari/*] +Parent=Nokia +Platform=SymbianOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Openwave Mobile Browser + +[Openwave Mobile Browser] +Parent=DefaultProperties +Browser=Openwave Mobile Browser +Alpha=true +Win32=true +Win64=true +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[*UP.Browser/*] +Parent=Openwave Mobile Browser + +[*UP.Link/*] +Parent=Openwave Mobile Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mini + +[Opera Mini] +Parent=DefaultProperties +Browser=Opera Mini +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true + +[Opera/* (J2ME/MIDP; Opera Mini/1.0*)*] +Parent=Opera Mini +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/1.1*)*] +Parent=Opera Mini +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/1.2*)*] +Parent=Opera Mini +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Opera/* (J2ME/MIDP; Opera Mini/2.0*)*] +Parent=Opera Mini +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.0*)*] +Parent=Opera Mini +Version=3.0 +MajorVer=3 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/3.1*)*] +Parent=Opera Mini +Version=3.1 +MajorVer=3 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.0*)*] +Parent=Opera Mini +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Opera/* (J2ME/MIDP; Opera Mini/4.1*)*] +Parent=Opera Mini +Version=4.1 +MajorVer=4 +MinorVer=1 + +[Opera/* (J2ME/MIDP; Opera Mini/4.2*)*] +Parent=Opera Mini +Version=4.2 +MajorVer=4 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera Mobile + +[Opera Mobile] +Parent=DefaultProperties +Browser=Opera Mobi +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Opera/9.5 (Microsoft Windows; PPC; *Opera Mobile/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.5 (Microsoft Windows; PPC; Opera Mobi/*)] +Parent=Opera Mobile +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Opera/9.51 Beta (Microsoft Windows; PPC; Opera Mobi/*)*] +Parent=Opera Mobile +Version=9.51 +MajorVer=9 +MinorVer=51 +Beta=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Playstation + +[Playstation] +Parent=DefaultProperties +Browser=Playstation +Platform=WAP +Frames=true +Tables=true +Cookies=true +isMobileDevice=true + +[Mozilla/* (PLAYSTATION *; *)] +Parent=Playstation +Browser=PlayStation 3 +Frames=false + +[Mozilla/* (PSP (PlayStation Portable); *)] +Parent=Playstation + +[Sony PS2 (Linux)] +Parent=Playstation +Browser=Sony PS2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Pocket PC + +[Pocket PC] +Parent=DefaultProperties +Browser=Pocket PC +Platform=WinCE +Win32=true +Frames=true +Tables=true +Cookies=true +JavaScript=true +ActiveXControls=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*(compatible; MSIE *.*; Windows CE; PPC; *)] +Parent=Pocket PC + +[HTC-*/* Mozilla/* (compatible; MSIE *.*; Windows CE*)*] +Parent=Pocket PC +Win32=true + +[Mozilla/* (compatible; MSPIE *.*; *Windows CE*)*] +Parent=Pocket PC +Win32=true + +[T-Mobile* Mozilla/* (compatible; MSIE *.*; Windows CE; *)] +Parent=Pocket PC + +[Vodafone* Mozilla/* (compatible; MSIE *.*; Windows CE; *)*] +Parent=Pocket PC + +[Windows CE (Pocket PC) - Version *.*] +Parent=Pocket PC +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SEMC Browser + +[SEMC Browser] +Parent=DefaultProperties +Browser=SEMC Browser +Platform=JAVA +Tables=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*SEMC-Browser/*] +Parent=SEMC Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SonyEricsson + +[SonyEricsson] +Parent=DefaultProperties +Browser=SonyEricsson +Frames=true +Tables=true +Cookies=true +JavaScript=true +isMobileDevice=true +CssVersion=1 +supportsCSS=true + +[*Ericsson*] +Parent=SonyEricsson + +[*SonyEricsson*] +Parent=SonyEricsson + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netbox + +[Netbox] +Parent=DefaultProperties +Browser=Netbox +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/3.01 (compatible; Netbox/*; Linux*)] +Parent=Netbox +Browser=Netbox +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; PowerTV + +[PowerTV] +Parent=DefaultProperties +Browser=PowerTV +Platform=PowerTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 PowerTV/1.5 (Compatible; Spyglass DM 3.2.1, EXPLORER)] +Parent=PowerTV +Version=1.5 +MajorVer=1 +MinorVer=5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; WebTV/MSNTV + +[WebTV] +Parent=DefaultProperties +Browser=WebTV/MSNTV +Platform=WebTV +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/3.0 WebTV/1.*(compatible; MSIE 2.0)] +Parent=WebTV +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.0*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/4.0 WebTV/2.1*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/4.0 WebTV/2.2*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/4.0 WebTV/2.3*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Mozilla/4.0 WebTV/2.4*(compatible; MSIE 3.0)] +Parent=WebTV +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Mozilla/4.0 WebTV/2.5*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.5 +MajorVer=2 +MinorVer=5 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.6*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.6 +MajorVer=2 +MinorVer=6 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.7*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.7 +MajorVer=2 +MinorVer=7 +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.8*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.8 +MajorVer=2 +MinorVer=8 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0 WebTV/2.9*(compatible; MSIE 4.0)] +Parent=WebTV +Version=2.9 +MajorVer=2 +MinorVer=9 +JavaApplets=true +CssVersion=1 +supportsCSS=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Amaya + +[Amaya] +Parent=DefaultProperties +Browser=Amaya +Tables=true +Cookies=true + +[amaya/7.*] +Parent=Amaya +Version=7.0 +MajorVer=7 +MinorVer=0 + +[amaya/8.0*] +Parent=Amaya +Version=8.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/8.1*] +Parent=Amaya +Version=8.1 +MajorVer=8 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/8.2*] +Parent=Amaya +Version=8.2 +MajorVer=8 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/8.3*] +Parent=Amaya +Version=8.3 +MajorVer=8 +MinorVer=3 +CssVersion=2 +supportsCSS=true + +[amaya/8.4*] +Parent=Amaya +Version=8.4 +MajorVer=8 +MinorVer=4 +CssVersion=2 +supportsCSS=true + +[amaya/8.5*] +Parent=Amaya +Version=8.5 +MajorVer=8 +MinorVer=5 +CssVersion=2 +supportsCSS=true + +[amaya/8.6*] +Parent=Amaya +Version=8.6 +MajorVer=8 +MinorVer=6 +CssVersion=2 +supportsCSS=true + +[amaya/8.7*] +Parent=Amaya +Version=8.7 +MajorVer=8 +MinorVer=7 +CssVersion=2 +supportsCSS=true + +[amaya/8.8*] +Parent=Amaya +Version=8.8 +MajorVer=8 +MinorVer=8 +CssVersion=2 +supportsCSS=true + +[amaya/8.9*] +Parent=Amaya +Version=8.9 +MajorVer=8 +MinorVer=9 +CssVersion=2 +supportsCSS=true + +[amaya/9.0*] +Parent=Amaya +Version=9.0 +MajorVer=8 +MinorVer=0 +CssVersion=2 +supportsCSS=true + +[amaya/9.1*] +Parent=Amaya +Version=9.1 +MajorVer=9 +MinorVer=1 +CssVersion=2 +supportsCSS=true + +[amaya/9.2*] +Parent=Amaya +Version=9.2 +MajorVer=9 +MinorVer=2 +CssVersion=2 +supportsCSS=true + +[amaya/9.3*] +Parent=Amaya +Version=9.3 +MajorVer=9 +MinorVer=3 + +[amaya/9.4*] +Parent=Amaya +Version=9.4 +MajorVer=9 +MinorVer=4 + +[amaya/9.5*] +Parent=Amaya +Version=9.5 +MajorVer=9 +MinorVer=5 + +[Emacs-w3m/*] +Parent=Emacs/W3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Links + +[Links] +Parent=DefaultProperties +Browser=Links +Frames=true +Tables=true + +[Links (0.9*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=WinXP + +[Links (0.9*; Darwin*)] +Parent=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=MacPPC + +[Links (0.9*; FreeBSD*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=FreeBSD + +[Links (0.9*; Linux*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Linux + +[Links (0.9*; OS/2*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=OS/2 + +[Links (0.9*; Unix*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Unix + +[Links (0.9*; Win32*)] +Parent=Links +Browser=Links +Version=0.9 +MajorVer=0 +MinorVer=9 +Platform=Win32 +Win32=true + +[Links (1.0*; CYGWIN_NT-5.1*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP + +[Links (1.0*; FreeBSD*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=FreeBSD + +[Links (1.0*; Linux*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +[Links (1.0*; OS/2*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=OS/2 + +[Links (1.0*; Unix*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Unix + +[Links (1.0*; Win32*)] +Parent=Links +Browser=Links +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win32 +Win32=true + +[Links (2.0*; Linux*)] +Parent=Links +Browser=Links +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Links (2.1*; FreeBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=FreeBSD + +[Links (2.1*; Linux *)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=Linux + +[Links (2.1*; OpenBSD*)] +Parent=Links +Browser=Links +Version=2.1 +MajorVer=2 +MinorVer=1 +Platform=OpenBSD + +[Links (2.2*; FreeBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=FreeBSD + +[Links (2.2*; Linux *)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=Linux + +[Links (2.2*; OpenBSD*)] +Parent=Links +Version=2.2 +MajorVer=2 +MinorVer=2 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lynx + +[Lynx] +Parent=DefaultProperties +Browser=Lynx +Frames=true +Tables=true + +[Lynx *] +Parent=Lynx +Browser=Lynx + +[Lynx/2.3*] +Parent=Lynx +Browser=Lynx +Version=2.3 +MajorVer=2 +MinorVer=3 + +[Lynx/2.4*] +Parent=Lynx +Browser=Lynx +Version=2.4 +MajorVer=2 +MinorVer=4 + +[Lynx/2.5*] +Parent=Lynx +Browser=Lynx +Version=2.5 +MajorVer=2 +MinorVer=5 + +[Lynx/2.6*] +Parent=Lynx +Browser=Lynx +Version=2.6 +MajorVer=2 +MinorVer=6 + +[Lynx/2.7*] +Parent=Lynx +Browser=Lynx +Version=2.7 +MajorVer=2 +MinorVer=7 + +[Lynx/2.8*] +Parent=Lynx +Browser=Lynx +Version=2.8 +MajorVer=2 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NCSA Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; w3m + +[w3m] +Parent=DefaultProperties +Browser=w3m +Frames=true +Tables=true + +[w3m/0.1*] +Parent=w3m +Browser=w3m +Version=0.1 +MajorVer=0 +MinorVer=1 + +[w3m/0.2*] +Parent=w3m +Browser=w3m +Version=0.2 +MajorVer=0 +MinorVer=2 + +[w3m/0.3*] +Parent=w3m +Browser=w3m +Version=0.3 +MajorVer=0 +MinorVer=3 + +[w3m/0.4*] +Parent=w3m +Browser=w3m +Version=0.4 +MajorVer=0 +MinorVer=4 +Cookies=true + +[w3m/0.5*] +Parent=w3m +Browser=w3m +Version=0.5 +MajorVer=0 +MinorVer=5 +Cookies=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.10 + +[ELinks 0.10] +Parent=DefaultProperties +Browser=ELinks +Version=0.10 +MinorVer=10 +Frames=true +Tables=true + +[ELinks (0.10*; *AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks (0.10*; *BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks (0.10*; *CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks (0.10*; *Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks (0.10*; *Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks (0.10*; *FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks (0.10*; *HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks (0.10*; *IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks (0.10*; *Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks (0.10*; *NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks (0.10*; *OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks (0.10*; *OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks (0.10*; *RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks (0.10*; *Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks (0.10*; *Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +[ELinks/0.10* (*AIX*)] +Parent=ELinks 0.10 +Platform=AIX + +[ELinks/0.10* (*BeOS*)] +Parent=ELinks 0.10 +Platform=BeOS + +[ELinks/0.10* (*CygWin*)] +Parent=ELinks 0.10 +Platform=CygWin + +[ELinks/0.10* (*Darwin*)] +Parent=ELinks 0.10 +Platform=Darwin + +[ELinks/0.10* (*Digital Unix*)] +Parent=ELinks 0.10 +Platform=Digital Unix + +[ELinks/0.10* (*FreeBSD*)] +Parent=ELinks 0.10 +Platform=FreeBSD + +[ELinks/0.10* (*HPUX*)] +Parent=ELinks 0.10 +Platform=HP-UX + +[ELinks/0.10* (*IRIX*)] +Parent=ELinks 0.10 +Platform=IRIX + +[ELinks/0.10* (*Linux*)] +Parent=ELinks 0.10 +Platform=Linux + +[ELinks/0.10* (*NetBSD*)] +Parent=ELinks 0.10 +Platform=NetBSD + +[ELinks/0.10* (*OpenBSD*)] +Parent=ELinks 0.10 +Platform=OpenBSD + +[ELinks/0.10* (*OS/2*)] +Parent=ELinks 0.10 +Platform=OS/2 + +[ELinks/0.10* (*RISC*)] +Parent=ELinks 0.10 +Platform=RISC OS + +[ELinks/0.10* (*Solaris*)] +Parent=ELinks 0.10 +Platform=Solaris + +[ELinks/0.10* (*Unix*)] +Parent=ELinks 0.10 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.11 + +[ELinks 0.11] +Parent=DefaultProperties +Browser=ELinks +Version=0.11 +MinorVer=11 +Frames=true +Tables=true + +[ELinks (0.11*; *AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks (0.11*; *BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks (0.11*; *CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks (0.11*; *Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks (0.11*; *Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks (0.11*; *FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks (0.11*; *HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks (0.11*; *IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks (0.11*; *Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks (0.11*; *NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks (0.11*; *OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks (0.11*; *OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks (0.11*; *RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks (0.11*; *Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks (0.11*; *Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +[ELinks/0.11* (*AIX*)] +Parent=ELinks 0.11 +Platform=AIX + +[ELinks/0.11* (*BeOS*)] +Parent=ELinks 0.11 +Platform=BeOS + +[ELinks/0.11* (*CygWin*)] +Parent=ELinks 0.11 +Platform=CygWin + +[ELinks/0.11* (*Darwin*)] +Parent=ELinks 0.11 +Platform=Darwin + +[ELinks/0.11* (*Digital Unix*)] +Parent=ELinks 0.11 +Platform=Digital Unix + +[ELinks/0.11* (*FreeBSD*)] +Parent=ELinks 0.11 +Platform=FreeBSD + +[ELinks/0.11* (*HPUX*)] +Parent=ELinks 0.11 +Platform=HP-UX + +[ELinks/0.11* (*IRIX*)] +Parent=ELinks 0.11 +Platform=IRIX + +[ELinks/0.11* (*Linux*)] +Parent=ELinks 0.11 +Platform=Linux + +[ELinks/0.11* (*NetBSD*)] +Parent=ELinks 0.11 +Platform=NetBSD + +[ELinks/0.11* (*OpenBSD*)] +Parent=ELinks 0.11 +Platform=OpenBSD + +[ELinks/0.11* (*OS/2*)] +Parent=ELinks 0.11 +Platform=OS/2 + +[ELinks/0.11* (*RISC*)] +Parent=ELinks 0.11 +Platform=RISC OS + +[ELinks/0.11* (*Solaris*)] +Parent=ELinks 0.11 +Platform=Solaris + +[ELinks/0.11* (*Unix*)] +Parent=ELinks 0.11 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.12 + +[ELinks 0.12] +Parent=DefaultProperties +Browser=ELinks +Version=0.12 +MinorVer=12 +Frames=true +Tables=true + +[ELinks (0.12*; *AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks (0.12*; *BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks (0.12*; *CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks (0.12*; *Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks (0.12*; *Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks (0.12*; *FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks (0.12*; *HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks (0.12*; *IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks (0.12*; *Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks (0.12*; *NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks (0.12*; *OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks (0.12*; *OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks (0.12*; *RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks (0.12*; *Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks (0.12*; *Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +[ELinks/0.12* (*AIX*)] +Parent=ELinks 0.12 +Platform=AIX + +[ELinks/0.12* (*BeOS*)] +Parent=ELinks 0.12 +Platform=BeOS + +[ELinks/0.12* (*CygWin*)] +Parent=ELinks 0.12 +Platform=CygWin + +[ELinks/0.12* (*Darwin*)] +Parent=ELinks 0.12 +Platform=Darwin + +[ELinks/0.12* (*Digital Unix*)] +Parent=ELinks 0.12 +Platform=Digital Unix + +[ELinks/0.12* (*FreeBSD*)] +Parent=ELinks 0.12 +Platform=FreeBSD + +[ELinks/0.12* (*HPUX*)] +Parent=ELinks 0.12 +Platform=HP-UX + +[ELinks/0.12* (*IRIX*)] +Parent=ELinks 0.12 +Platform=IRIX + +[ELinks/0.12* (*Linux*)] +Parent=ELinks 0.12 +Platform=Linux + +[ELinks/0.12* (*NetBSD*)] +Parent=ELinks 0.12 +Platform=NetBSD + +[ELinks/0.12* (*OpenBSD*)] +Parent=ELinks 0.12 +Platform=OpenBSD + +[ELinks/0.12* (*OS/2*)] +Parent=ELinks 0.12 +Platform=OS/2 + +[ELinks/0.12* (*RISC*)] +Parent=ELinks 0.12 +Platform=RISC OS + +[ELinks/0.12* (*Solaris*)] +Parent=ELinks 0.12 +Platform=Solaris + +[ELinks/0.12* (*Unix*)] +Parent=ELinks 0.12 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ELinks 0.9 + +[ELinks 0.9] +Parent=DefaultProperties +Browser=ELinks +Version=0.9 +MinorVer=9 +Frames=true +Tables=true + +[ELinks (0.9*; *AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks (0.9*; *BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks (0.9*; *CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks (0.9*; *Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks (0.9*; *Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks (0.9*; *FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks (0.9*; *HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks (0.9*; *IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks (0.9*; *Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks (0.9*; *NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks (0.9*; *OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks (0.9*; *OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks (0.9*; *RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks (0.9*; *Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks (0.9*; *Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +[ELinks/0.9* (*AIX*)] +Parent=ELinks 0.9 +Platform=AIX + +[ELinks/0.9* (*BeOS*)] +Parent=ELinks 0.9 +Platform=BeOS + +[ELinks/0.9* (*CygWin*)] +Parent=ELinks 0.9 +Platform=CygWin + +[ELinks/0.9* (*Darwin*)] +Parent=ELinks 0.9 +Platform=Darwin + +[ELinks/0.9* (*Digital Unix*)] +Parent=ELinks 0.9 +Platform=Digital Unix + +[ELinks/0.9* (*FreeBSD*)] +Parent=ELinks 0.9 +Platform=FreeBSD + +[ELinks/0.9* (*HPUX*)] +Parent=ELinks 0.9 +Platform=HP-UX + +[ELinks/0.9* (*IRIX*)] +Parent=ELinks 0.9 +Platform=IRIX + +[ELinks/0.9* (*Linux*)] +Parent=ELinks 0.9 +Platform=Linux + +[ELinks/0.9* (*NetBSD*)] +Parent=ELinks 0.9 +Platform=NetBSD + +[ELinks/0.9* (*OpenBSD*)] +Parent=ELinks 0.9 +Platform=OpenBSD + +[ELinks/0.9* (*OS/2*)] +Parent=ELinks 0.9 +Platform=OS/2 + +[ELinks/0.9* (*RISC*)] +Parent=ELinks 0.9 +Platform=RISC OS + +[ELinks/0.9* (*Solaris*)] +Parent=ELinks 0.9 +Platform=Solaris + +[ELinks/0.9* (*Unix*)] +Parent=ELinks 0.9 +Platform=Unix + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AppleWebKit + +[AppleWebKit] +Parent=DefaultProperties +Browser=AppleWebKit +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (KHTML, like Gecko)] +Parent=AppleWebKit + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Camino + +[Camino] +Parent=DefaultProperties +Browser=Camino +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.7*] +Parent=Camino +Version=0.7 +MajorVer=0 +MinorVer=7 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.8*] +Parent=Camino +Version=0.8 +MajorVer=0 +MinorVer=8 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/0.9*] +Parent=Camino +Version=0.9 +MajorVer=0 +MinorVer=9 +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.0*] +Parent=Camino +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.2*] +Parent=Camino +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.3*] +Parent=Camino +Version=1.3 +MajorVer=1 +MinorVer=3 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.4*] +Parent=Camino +Version=1.4 +MajorVer=1 +MinorVer=4 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.5*] +Parent=Camino +Version=1.5 +MajorVer=1 +MinorVer=5 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *Mac OS X*) Gecko/* Camino/1.6*] +Parent=Camino +Version=1.6 +MajorVer=1 +MinorVer=6 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Chimera + +[Chimera] +Parent=DefaultProperties +Browser=Chimera +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Chimera/*] +Parent=Chimera +Platform=MacOSX + +[Mozilla/5.0 Gecko/* Chimera/*] +Parent=Chimera + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Dillo + +[Dillo] +Parent=DefaultProperties +Browser=Dillo +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +CssVersion=2 +supportsCSS=true + +[Dillo/0.6*] +Parent=Dillo +Version=0.6 +MajorVer=0 +MinorVer=6 + +[Dillo/0.7*] +Parent=Dillo +Version=0.7 +MajorVer=0 +MinorVer=7 + +[Dillo/0.8*] +Parent=Dillo +Version=0.8 +MajorVer=0 +MinorVer=8 + +[Dillo/2.0] +Parent=Dillo +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Emacs/W3 + +[Emacs/W3] +Parent=DefaultProperties +Browser=Emacs/W3 +Frames=true +Tables=true +Cookies=true + +[Emacs/W3/2.* (Unix*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Unix + +[Emacs/W3/2.* (X11*] +Parent=Emacs/W3 +Version=2.0 +MajorVer=2 +MinorVer=0 +Platform=Linux + +[Emacs/W3/3.* (Unix*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Unix + +[Emacs/W3/3.* (X11*] +Parent=Emacs/W3 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux + +[Emacs/W3/4.* (Unix*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Unix + +[Emacs/W3/4.* (X11*] +Parent=Emacs/W3 +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; fantomas + +[fantomas] +Parent=DefaultProperties +Browser=fantomas +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/4.0 (cloakBrowser)] +Parent=fantomas +Browser=fantomas cloakBrowser + +[Mozilla/4.0 (fantomas shadowMaker Browser)] +Parent=fantomas +Browser=fantomas shadowMaker Browser + +[Mozilla/4.0 (fantomBrowser)] +Parent=fantomas +Browser=fantomas fantomBrowser + +[Mozilla/4.0 (fantomCrew Browser)] +Parent=fantomas +Browser=fantomas fantomCrew Browser + +[Mozilla/4.0 (stealthBrowser)] +Parent=fantomas +Browser=fantomas stealthBrowser + +[multiBlocker browser*] +Parent=fantomas +Browser=fantomas multiBlocker browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; FrontPage + +[FrontPage] +Parent=DefaultProperties +Browser=FrontPage +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true + +[Mozilla/?* (compatible; MS FrontPage*)] +Parent=FrontPage + +[MSFrontPage/*] +Parent=FrontPage + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Galeon + +[Galeon] +Parent=DefaultProperties +Browser=Galeon +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/1.*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; Linux*) Gecko/* Galeon/2.*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 Galeon/1.* (X11; Linux*)*] +Parent=Galeon +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 Galeon/2.* (X11; Linux*)*] +Parent=Galeon +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HP Secure Web Browser + +[HP Secure Web Browser] +Parent=DefaultProperties +Browser=HP Secure Web Browser +Platform=OpenVMS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.0*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.1*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.2*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.3*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.4*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.4 +MajorVer=1 +MinorVer=4 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.5*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.5 +MajorVer=1 +MinorVer=5 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.6*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.6 +MajorVer=1 +MinorVer=6 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.7*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.7 +MajorVer=1 +MinorVer=7 + +[Mozilla/5.0 (X11; U; OpenVMS*; *; rv:1.8*) Gecko/*] +Parent=HP Secure Web Browser +Version=1.8 +MajorVer=1 +MinorVer=8 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IBrowse + +[IBrowse] +Parent=DefaultProperties +Browser=IBrowse +Platform=Amiga +Frames=true +Tables=true +Cookies=true +JavaScript=true + +[Arexx (compatible; MSIE 6.0; AmigaOS5.0) IBrowse 4.0] +Parent=IBrowse +Version=4.0 +MajorVer=4 +MinorVer=0 + +[IBrowse/1.22 (AmigaOS *)] +Parent=IBrowse +Version=1.22 +MajorVer=1 +MinorVer=22 + +[IBrowse/2.1 (AmigaOS *)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[IBrowse/2.2 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[IBrowse/2.3 (AmigaOS *)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=3 + +[Mozilla/* (Win98; I) IBrowse/2.1 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/* (Win98; I) IBrowse/2.2 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Mozilla/* (Win98; I) IBrowse/2.3 (AmigaOS 3.1)] +Parent=IBrowse +Version=2.3 +MajorVer=2 +MinorVer=3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iCab + +[iCab] +Parent=DefaultProperties +Browser=iCab +Frames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[iCab/2.7* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[iCab/2.7* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[iCab/2.8* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[iCab/2.8* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=Mac68K + +[iCab/2.8* (Macintosh; ?; PPC)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[iCab/2.9* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[iCab/2.9* (Macintosh; ?; 68K*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=Mac68K + +[iCab/2.9* (Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[iCab/3.0* (Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[iCab/3.0* (Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[iCab/4.0 (Macintosh; U; *Mac OS X)] +Parent=iCab +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacOSX +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; iCab 3.0*; Macintosh; ?; PPC*)] +Parent=iCab +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=MacPPC +CssVersion=2 +supportsCSS=true + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; 68K*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=Mac68K + +[Mozilla/4.5 (compatible; iCab 2.7*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.7 +MajorVer=2 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; *Mac OS X*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.8*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.8 +MajorVer=2 +MinorVer=8 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacOSX + +[Mozilla/4.5 (compatible; iCab 2.9*; Macintosh; ?; PPC*)] +Parent=iCab +Version=2.9 +MajorVer=2 +MinorVer=9 +Platform=MacPPC + +[Mozilla/4.5 (compatible; iCab 4.2*; Macintosh; *Mac OS X*)] +Parent=iCab +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacOSX + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; iSiloX + +[iSiloX] +Parent=DefaultProperties +Browser=iSiloX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +Crawler=true +CssVersion=2 +supportsCSS=true + +[iSiloX/4.0* MacOS] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[iSiloX/4.0* Windows/32] +Parent=iSiloX +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=Win32 +Win32=true + +[iSiloX/4.1* MacOS] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=MacPPC + +[iSiloX/4.1* Windows/32] +Parent=iSiloX +Version=4.1 +MajorVer=4 +MinorVer=1 +Platform=Win32 +Win32=true + +[iSiloX/4.2* MacOS] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=MacPPC + +[iSiloX/4.2* Windows/32] +Parent=iSiloX +Version=4.2 +MajorVer=4 +MinorVer=2 +Platform=Win32 +Win32=true + +[iSiloX/4.3* MacOS] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=4 +Platform=MacOSX + +[iSiloX/4.3* Windows/32] +Parent=iSiloX +Version=4.3 +MajorVer=4 +MinorVer=3 +Platform=Win32 +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Lycoris Desktop/LX + +[Lycoris Desktop/LX] +Parent=DefaultProperties +Browser=Lycoris Desktop/LX +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +Crawler=true + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*: Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.1 +MajorVer=1 +MinorVer=1 +Platform=Linux + +[Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.*; Desktop/LX Amethyst) Gecko/*] +Parent=Lycoris Desktop/LX +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mosaic + +[Mosaic] +Parent=DefaultProperties +Browser=Mosaic +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[Mozilla/4.0 (VMS_Mosaic)] +Parent=Mosaic +Platform=OpenVMS + +[VMS_Mosaic/3.7*] +Parent=Mosaic +Version=3.7 +MajorVer=3 +MinorVer=7 +Platform=OpenVMS + +[VMS_Mosaic/3.8*] +Parent=Mosaic +Version=3.8 +MajorVer=3 +MinorVer=8 +Platform=OpenVMS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; NetPositive + +[NetPositive] +Parent=DefaultProperties +Browser=NetPositive +Platform=BeOS +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true + +[*NetPositive/2.2*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +[*NetPositive/2.2*BeOS*] +Parent=NetPositive +Version=2.2 +MajorVer=2 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; OmniWeb + +[OmniWeb] +Parent=DefaultProperties +Browser=OmniWeb +Platform=MacOSX +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +isMobileDevice=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v4*] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v5*] +Parent=OmniWeb +Version=5. +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; *Mac OS X; *) AppleWebKit/* (*) OmniWeb/v6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/4*] +Parent=OmniWeb +Version=4.0 +MajorVer=4 +MinorVer=0 +Platform=MacPPC + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/5*] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 +Platform=MacOSX + +[Mozilla/* (Macintosh; ?; PPC) OmniWeb/6*] +Parent=OmniWeb +Version=6.0 +MajorVer=6 +MinorVer=0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/125.4 (KHTML, like Gecko, Safari) OmniWeb/v563.34] +Parent=OmniWeb +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/420+ (KHTML, like Gecko, Safari/420) OmniWeb/v607] +Parent=OmniWeb +Version=5.5 +MajorVer=5 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/522+ (KHTML, like Gecko, Safari/522) OmniWeb/v613] +Parent=OmniWeb +Version=5.6 +MajorVer=5 +MinorVer=6 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v496] +Parent=OmniWeb +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US) AppleWebKit/85 (KHTML, like Gecko) OmniWeb/v558.36 ] +Parent=OmniWeb +Version=5.0 +MajorVer=5 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Shiira + +[Shiira] +Parent=DefaultProperties +Browser=Shiira +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/0.9*] +Parent=Shiira +Version=0.9 +MajorVer=0 +MinorVer=9 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.0*] +Parent=Shiira +Version=1.0 +MajorVer=1 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.1*] +Parent=Shiira +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/1.2*] +Parent=Shiira +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.1*] +Parent=Shiira +Version=2.1 +MajorVer=2 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Shiira/2.2*] +Parent=Shiira +Version=2.2 +MajorVer=2 +MinorVer=2 + +[Windows Maker] +Parent=DefaultProperties +Browser=WMaker +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +VBScript=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[WMaker*] +Parent=Windows Maker + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.0 + +[K-Meleon 1.0] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.0 +MajorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.0*] +Parent=K-Meleon 1.0 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.1 + +[K-Meleon 1.1] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.1 +MajorVer=1 +MinorVer=1 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.1*] +Parent=K-Meleon 1.1 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; K-Meleon 1.5 + +[K-Meleon 1.5] +Parent=DefaultProperties +Browser=K-Meleon +Version=1.5 +MajorVer=1 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* K-Meleon?1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* K-Meleon/1.5*] +Parent=K-Meleon 1.5 +Version=1.0 +MajorVer=1 +MinorVer=0 +Platform=WinNT +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 3.0 + +[Konqueror 3.0] +Parent=DefaultProperties +Browser=Konqueror +Platform=Linux +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[*Konqueror/3.0*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +IFrames=false + +[*Konqueror/3.0*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=FreeBSD +IFrames=false + +[*Konqueror/3.0*Linux*] +Parent=Konqueror 3.0 +Version=3.0 +MajorVer=3 +MinorVer=0 +Platform=Linux +IFrames=false + +[*Konqueror/3.1*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.1*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=FreeBSD + +[*Konqueror/3.1*Linux*] +Parent=Konqueror 3.0 +Version=3.1 +MajorVer=3 +MinorVer=1 + +[*Konqueror/3.2*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 + +[*Konqueror/3.2*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=FreeBSD + +[*Konqueror/3.2*Linux*] +Parent=Konqueror 3.0 +Version=3.2 +MajorVer=3 +MinorVer=2 +Platform=Linux + +[*Konqueror/3.3*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 + +[*Konqueror/3.3*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=FreeBSD + +[*Konqueror/3.3*Linux*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=Linux + +[*Konqueror/3.3*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.3 +MajorVer=3 +MinorVer=3 +Platform=OpenBSD + +[*Konqueror/3.4*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 + +[*Konqueror/3.4*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=FreeBSD + +[*Konqueror/3.4*Linux*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=Linux + +[*Konqueror/3.4*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.4 +MajorVer=3 +MinorVer=4 +Platform=OpenBSD + +[*Konqueror/3.5*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 + +[*Konqueror/3.5*FreeBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=FreeBSD + +[*Konqueror/3.5*Linux*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=Linux + +[*Konqueror/3.5*OpenBSD*] +Parent=Konqueror 3.0 +Version=3.5 +MajorVer=3 +MinorVer=5 +Platform=OpenBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.0 + +[Konqueror 4.0] +Parent=DefaultProperties +Browser=Konqueror +Version=4.0 +MajorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.0*; Debian) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; *Linux) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; FreeBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.0.*; NetBSD) KHTML/4.* (like Gecko)] +Parent=Konqueror 4.0 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.1 + +[Konqueror 4.1] +Parent=DefaultProperties +Browser=Konqueror +Version=4.1 +MajorVer=4 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.1*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.1*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.1*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.1*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.1 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Konqueror 4.2 + +[Konqueror 4.2] +Parent=DefaultProperties +Browser=Konqueror +Version=4.2 +MajorVer=4 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (compatible; Konqueror/4.2*; *Linux*) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Linux + +[Mozilla/5.0 (compatible; Konqueror/4.2*; Debian) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=Debian + +[Mozilla/5.0 (compatible; Konqueror/4.2*; FreeBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=FreeBSD + +[Mozilla/5.0 (compatible; Konqueror/4.2*; NetBSD) KHTML/4.* (like Gecko)*] +Parent=Konqueror 4.2 +Platform=NetBSD + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari + +[Safari] +Parent=DefaultProperties +Browser=Safari +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/100*] +Parent=Safari +Version=1.1 +MajorVer=1 +MinorVer=1 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/125*] +Parent=Safari +Version=1.2 +MajorVer=1 +MinorVer=2 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/312*] +Parent=Safari +Version=1.3 +MajorVer=1 +MinorVer=3 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/412*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/416*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/417*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/418*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/419*] +Parent=Safari +Version=2.0 +MajorVer=2 +MinorVer=0 + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/52*] +Parent=Safari +Beta=true + +[Mozilla/5.0 (Macintosh; *Mac OS X*) AppleWebKit/* (*) Safari/85*] +Parent=Safari +Version=1.0 +MajorVer=1 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.0 + +[Safari 3.0] +Parent=DefaultProperties +Browser=Safari +Version=3.0 +MajorVer=3 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.0* Safari/*] +Parent=Safari 3.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.1 + +[Safari 3.1] +Parent=DefaultProperties +Browser=Safari +Version=3.1 +MajorVer=3 +MinorVer=1 +Platform=MacOSX +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.1* Safari/*] +Parent=Safari 3.1 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 3.2 + +[Safari 3.2] +Parent=DefaultProperties +Browser=Safari +Version=3.2 +MajorVer=3 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/3.2* Safari/*] +Parent=Safari 3.2 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Safari 4.0 + +[Safari 4.0] +Parent=DefaultProperties +Browser=Safari +Version=4.0 +MajorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *) AppleWebKit/* (KHTML, like Gecko) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4 Public Beta Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; Windows NT 7.0; *) AppleWebKit/* (*) Version/4.0* Safari/*] +Parent=Safari 4.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 10.0 + +[Opera 10.0] +Parent=DefaultProperties +Browser=Opera +Version=10.0 +MajorVer=10 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 10.0*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 10.0*] +Parent=Opera 10.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 10.0*] +Parent=Opera 10.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 10.0*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 10.0 +Platform=MacOSX + +[Opera/10.0* (Windows 95*)*] +Parent=Opera 10.0 +Platform=Win95 +Win32=true + +[Opera/10.0* (Windows 98*)*] +Parent=Opera 10.0 +Platform=Win98 +Win32=true + +[Opera/10.0* (Windows CE*)*] +Parent=Opera 10.0 +Platform=WinCE +Win32=true + +[Opera/10.0* (Windows ME*)*] +Parent=Opera 10.0 +Platform=WinME +Win32=true + +[Opera/10.0* (Windows NT 4.0*)*] +Parent=Opera 10.0 +Platform=WinNT +Win32=true + +[Opera/10.0* (Windows NT 5.0*)*] +Parent=Opera 10.0 +Platform=Win2000 +Win32=true + +[Opera/10.0* (Windows NT 5.1*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (Windows NT 5.2*)*] +Parent=Opera 10.0 +Platform=Win2003 +Win32=true + +[Opera/10.0* (Windows NT 6.0*)*] +Parent=Opera 10.0 +Platform=WinVista +Win32=true + +[Opera/10.0* (Windows NT 6.1*)*] +Parent=Opera 10.0 +Platform=Win7 + +[Opera/10.0* (Windows XP*)*] +Parent=Opera 10.0 +Platform=WinXP +Win32=true + +[Opera/10.0* (X11; FreeBSD*)*] +Parent=Opera 10.0 +Platform=FreeBSD + +[Opera/10.0* (X11; Linux*)*] +Parent=Opera 10.0 +Platform=Linux + +[Opera/10.0* (X11; SunOS*)*] +Parent=Opera 10.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.0 + +[Opera 7.0] +Parent=DefaultProperties +Browser=Opera +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/3.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/3.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/3.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/3.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/3.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/3.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 2000) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 95) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows 98) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows ME) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 4.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.0) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows NT 5.1) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.0 (compatible; MSIE 6.0; MSIE 5.5; Windows XP) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/4.78 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/4.78 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/4.78 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/4.78 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/4.78 (Windows Windows NT 5.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/4.78 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows 2000; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows 95; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows 98; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows ME; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows NT 4.0; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows NT 5.1; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows XP; ?) Opera 7.0*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows 2000; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows 95; ?)*] +Parent=Opera 7.0 +Platform=Win95 +Win32=true + +[Opera/7.0* (Windows 98; ?)*] +Parent=Opera 7.0 +Platform=Win98 +Win32=true + +[Opera/7.0* (Windows ME; ?)*] +Parent=Opera 7.0 +Platform=WinME +Win32=true + +[Opera/7.0* (Windows NT 4.0; ?)*] +Parent=Opera 7.0 +Platform=WinNT +Win32=true + +[Opera/7.0* (Windows NT 5.0; ?)*] +Parent=Opera 7.0 +Platform=Win2000 +Win32=true + +[Opera/7.0* (Windows NT 5.1; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +[Opera/7.0* (Windows XP; ?)*] +Parent=Opera 7.0 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.1 + +[Opera 7.1] +Parent=DefaultProperties +Browser=Opera +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.1*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.1*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Linux*; ?)*] +Parent=Opera 7.1 +Platform=Linux + +[Opera/7.1* (Windows 95; ?)*] +Parent=Opera 7.1 +Platform=Win95 +Win32=true + +[Opera/7.1* (Windows 98; ?)*] +Parent=Opera 7.1 +Platform=Win98 +Win32=true + +[Opera/7.1* (Windows ME; ?)*] +Parent=Opera 7.1 +Platform=WinME +Win32=true + +[Opera/7.1* (Windows NT 4.0; ?)*] +Parent=Opera 7.1 +Platform=WinNT +Win32=true + +[Opera/7.1* (Windows NT 5.0; ?)*] +Parent=Opera 7.1 +Platform=Win2000 +Win32=true + +[Opera/7.1* (Windows NT 5.1; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +[Opera/7.1* (Windows XP; ?)*] +Parent=Opera 7.1 +Platform=WinXP +Win32=true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.2 + +[Opera 7.2] +Parent=DefaultProperties +Browser=Opera +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.2*] +Parent=Opera 7.2 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows 2000; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.2*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (Windows 95; ?)*] +Parent=Opera 7.2 +Platform=Win95 +Win32=true + +[Opera/7.2* (Windows 98; ?)*] +Parent=Opera 7.2 +Platform=Win98 +Win32=true + +[Opera/7.2* (Windows ME; ?)*] +Parent=Opera 7.2 +Platform=WinME +Win32=true + +[Opera/7.2* (Windows NT 4.0; ?)*] +Parent=Opera 7.2 +Platform=WinNT +Win32=true + +[Opera/7.2* (Windows NT 5.0; ?)*] +Parent=Opera 7.2 +Platform=Win2000 +Win32=true + +[Opera/7.2* (Windows NT 5.1; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (Windows NT 5.2; ?)*] +Parent=Opera 7.2 +Platform=Win2003 +Win32=true + +[Opera/7.2* (Windows XP; ?)*] +Parent=Opera 7.2 +Platform=WinXP +Win32=true + +[Opera/7.2* (X11; FreeBSD*; ?)*] +Parent=Opera 7.2 +Platform=FreeBSD + +[Opera/7.2* (X11; Linux*; ?)*] +Parent=Opera 7.2 +Platform=Linux + +[Opera/7.2* (X11; SunOS*)*] +Parent=Opera 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.5 + +[Opera 7.5] +Parent=DefaultProperties +Browser=Opera +Version=7.5 +MajorVer=7 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.5*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +[Opera/7.5* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.5 +Platform=MacOSX + +[Opera/7.5* (Windows 95; ?)*] +Parent=Opera 7.5 +Platform=Win95 +Win32=true + +[Opera/7.5* (Windows 98; ?)*] +Parent=Opera 7.5 +Platform=Win98 +Win32=true + +[Opera/7.5* (Windows ME; ?)*] +Parent=Opera 7.5 +Platform=WinME +Win32=true + +[Opera/7.5* (Windows NT 4.0; ?)*] +Parent=Opera 7.5 +Platform=WinNT +Win32=true + +[Opera/7.5* (Windows NT 5.0; ?)*] +Parent=Opera 7.5 +Platform=Win2000 +Win32=true + +[Opera/7.5* (Windows NT 5.1; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (Windows NT 5.2; ?)*] +Parent=Opera 7.5 +Platform=Win2003 +Win32=true + +[Opera/7.5* (Windows XP; ?)*] +Parent=Opera 7.5 +Platform=WinXP +Win32=true + +[Opera/7.5* (X11; FreeBSD*; ?)*] +Parent=Opera 7.5 +Platform=FreeBSD + +[Opera/7.5* (X11; Linux*; ?)*] +Parent=Opera 7.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 7.6 + +[Opera 7.6] +Parent=DefaultProperties +Browser=Opera +Version=7.6 +MajorVer=7 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; U) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; ?) Opera 7.6*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +[Opera/7.6* (Macintosh; *Mac OS X; ?)*] +Parent=Opera 7.6 +Platform=MacOSX + +[Opera/7.6* (Windows 95*)*] +Parent=Opera 7.6 +Platform=Win95 +Win32=true + +[Opera/7.6* (Windows 98*)*] +Parent=Opera 7.6 +Platform=Win98 +Win32=true + +[Opera/7.6* (Windows ME*)*] +Parent=Opera 7.6 +Platform=WinME +Win32=true + +[Opera/7.6* (Windows NT 4.0*)*] +Parent=Opera 7.6 +Platform=WinNT +Win32=true + +[Opera/7.6* (Windows NT 5.0*)*] +Parent=Opera 7.6 +Platform=Win2000 +Win32=true + +[Opera/7.6* (Windows NT 5.1*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (Windows NT 5.2*)*] +Parent=Opera 7.6 +Platform=Win2003 +Win32=true + +[Opera/7.6* (Windows XP*)*] +Parent=Opera 7.6 +Platform=WinXP +Win32=true + +[Opera/7.6* (X11; FreeBSD*)*] +Parent=Opera 7.6 +Platform=FreeBSD + +[Opera/7.6* (X11; Linux*)*] +Parent=Opera 7.6 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.0 + +[Opera 8.0] +Parent=DefaultProperties +Browser=Opera +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.0*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.0*] +Parent=Opera 8.0 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.0*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +[Opera/8.0* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.0 +Platform=MacOSX + +[Opera/8.0* (Windows 95*)*] +Parent=Opera 8.0 +Platform=Win95 +Win32=true + +[Opera/8.0* (Windows 98*)*] +Parent=Opera 8.0 +Platform=Win98 +Win32=true + +[Opera/8.0* (Windows CE*)*] +Parent=Opera 8.0 +Platform=WinCE +Win32=true + +[Opera/8.0* (Windows ME*)*] +Parent=Opera 8.0 +Platform=WinME +Win32=true + +[Opera/8.0* (Windows NT 4.0*)*] +Parent=Opera 8.0 +Platform=WinNT +Win32=true + +[Opera/8.0* (Windows NT 5.0*)*] +Parent=Opera 8.0 +Platform=Win2000 +Win32=true + +[Opera/8.0* (Windows NT 5.1*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (Windows NT 5.2*)*] +Parent=Opera 8.0 +Platform=Win2003 +Win32=true + +[Opera/8.0* (Windows XP*)*] +Parent=Opera 8.0 +Platform=WinXP +Win32=true + +[Opera/8.0* (X11; FreeBSD*)*] +Parent=Opera 8.0 +Platform=FreeBSD + +[Opera/8.0* (X11; Linux*)*] +Parent=Opera 8.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.1 + +[Opera 8.1] +Parent=DefaultProperties +Browser=Opera +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.1*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.1*] +Parent=Opera 8.1 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.1*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +[Opera/8.1* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.1 +Platform=MacOSX + +[Opera/8.1* (Windows 95*)*] +Parent=Opera 8.1 +Platform=Win95 +Win32=true + +[Opera/8.1* (Windows 98*)*] +Parent=Opera 8.1 +Platform=Win98 +Win32=true + +[Opera/8.1* (Windows CE*)*] +Parent=Opera 8.1 +Platform=WinCE +Win32=true + +[Opera/8.1* (Windows ME*)*] +Parent=Opera 8.1 +Platform=WinME +Win32=true + +[Opera/8.1* (Windows NT 4.0*)*] +Parent=Opera 8.1 +Platform=WinNT +Win32=true + +[Opera/8.1* (Windows NT 5.0*)*] +Parent=Opera 8.1 +Platform=Win2000 +Win32=true + +[Opera/8.1* (Windows NT 5.1*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (Windows NT 5.2*)*] +Parent=Opera 8.1 +Platform=Win2003 +Win32=true + +[Opera/8.1* (Windows XP*)*] +Parent=Opera 8.1 +Platform=WinXP +Win32=true + +[Opera/8.1* (X11; FreeBSD*)*] +Parent=Opera 8.1 +Platform=FreeBSD + +[Opera/8.1* (X11; Linux*)*] +Parent=Opera 8.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 8.5 + +[Opera 8.5] +Parent=DefaultProperties +Browser=Opera +Version=8.5 +MajorVer=8 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (compatible; MSIE ?.*; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (compatible; MSIE ?.*; Mac_PowerPC) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacPPC + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 2000*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 95*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows 98*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows CE) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows ME*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 4.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.0*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.1*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows NT 5.2*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; Windows XP*) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (compatible; MSIE ?.*; X11; FreeBSD*) Opera 8.5*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Mozilla/?.* (compatible; MSIE ?.*; X11; Linux*) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Mozilla/?.* (Macintosh; *Mac OS X; ?) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Macintosh; PPC Mac OS X;*) Opera 8.5*] +Parent=Opera 8.5 +Platform=MacOSX + +[Mozilla/?.* (Windows 2000; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows 95; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Mozilla/?.* (Windows 98; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Mozilla/?.* (Windows ME; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Mozilla/?.* (Windows NT 4.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Mozilla/?.* (Windows NT 5.0; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Mozilla/?.* (Windows NT 5.1; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Mozilla/?.* (Windows NT 5.2; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Mozilla/?.* (X11; Linux*; *) Opera 8.5*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +[Opera/8.5* (Macintosh; *Mac OS X; *)*] +Parent=Opera 8.5 +Platform=MacOSX + +[Opera/8.5* (Windows 95*)*] +Parent=Opera 8.5 +Platform=Win95 +Win32=true + +[Opera/8.5* (Windows 98*)*] +Parent=Opera 8.5 +Platform=Win98 +Win32=true + +[Opera/8.5* (Windows CE*)*] +Parent=Opera 8.5 +Platform=WinCE +Win32=true + +[Opera/8.5* (Windows ME*)*] +Parent=Opera 8.5 +Platform=WinME +Win32=true + +[Opera/8.5* (Windows NT 4.0*)*] +Parent=Opera 8.5 +Platform=WinNT +Win32=true + +[Opera/8.5* (Windows NT 5.0*)*] +Parent=Opera 8.5 +Platform=Win2000 +Win32=true + +[Opera/8.5* (Windows NT 5.1*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (Windows NT 5.2*)*] +Parent=Opera 8.5 +Platform=Win2003 +Win32=true + +[Opera/8.5* (Windows XP*)*] +Parent=Opera 8.5 +Platform=WinXP +Win32=true + +[Opera/8.5* (X11; FreeBSD*)*] +Parent=Opera 8.5 +Platform=FreeBSD + +[Opera/8.5* (X11; Linux*)*] +Parent=Opera 8.5 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.0 + +[Opera 9.0] +Parent=DefaultProperties +Browser=Opera +Version=9.0 +MajorVer=9 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.0*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.0*] +Parent=Opera 9.0 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.0*] +Parent=Opera 9.0 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.0*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +[Opera/9.0* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.0 +Platform=MacOSX + +[Opera/9.0* (Windows 95*)*] +Parent=Opera 9.0 +Platform=Win95 +Win32=true + +[Opera/9.0* (Windows 98*)*] +Parent=Opera 9.0 +Platform=Win98 +Win32=true + +[Opera/9.0* (Windows CE*)*] +Parent=Opera 9.0 +Platform=WinCE +Win32=true + +[Opera/9.0* (Windows ME*)*] +Parent=Opera 9.0 +Platform=WinME +Win32=true + +[Opera/9.0* (Windows NT 4.0*)*] +Parent=Opera 9.0 +Platform=WinNT +Win32=true + +[Opera/9.0* (Windows NT 5.0*)*] +Parent=Opera 9.0 +Platform=Win2000 +Win32=true + +[Opera/9.0* (Windows NT 5.1*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (Windows NT 5.2*)*] +Parent=Opera 9.0 +Platform=Win2003 +Win32=true + +[Opera/9.0* (Windows NT 6.0*)*] +Parent=Opera 9.0 +Platform=WinVista +Win32=true + +[Opera/9.0* (Windows XP*)*] +Parent=Opera 9.0 +Platform=WinXP +Win32=true + +[Opera/9.0* (X11; FreeBSD*)*] +Parent=Opera 9.0 +Platform=FreeBSD + +[Opera/9.0* (X11; Linux*)*] +Parent=Opera 9.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.1 + +[Opera 9.1] +Parent=DefaultProperties +Browser=Opera +Version=9.1 +MajorVer=9 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.1*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.1*] +Parent=Opera 9.1 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.1*] +Parent=Opera 9.1 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Mozilla/* (X11; Linux*) Opera 9.1*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.1 +Platform=MacOSX + +[Opera/9.1* (Windows 95*)*] +Parent=Opera 9.1 +Platform=Win95 +Win32=true + +[Opera/9.1* (Windows 98*)*] +Parent=Opera 9.1 +Platform=Win98 +Win32=true + +[Opera/9.1* (Windows CE*)*] +Parent=Opera 9.1 +Platform=WinCE +Win32=true + +[Opera/9.1* (Windows ME*)*] +Parent=Opera 9.1 +Platform=WinME +Win32=true + +[Opera/9.1* (Windows NT 4.0*)*] +Parent=Opera 9.1 +Platform=WinNT +Win32=true + +[Opera/9.1* (Windows NT 5.0*)*] +Parent=Opera 9.1 +Platform=Win2000 +Win32=true + +[Opera/9.1* (Windows NT 5.1*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (Windows NT 5.2*)*] +Parent=Opera 9.1 +Platform=Win2003 +Win32=true + +[Opera/9.1* (Windows NT 6.0*)*] +Parent=Opera 9.1 +Platform=WinVista +Win32=true + +[Opera/9.1* (Windows XP*)*] +Parent=Opera 9.1 +Platform=WinXP +Win32=true + +[Opera/9.1* (X11; FreeBSD*)*] +Parent=Opera 9.1 +Platform=FreeBSD + +[Opera/9.1* (X11; Linux*)*] +Parent=Opera 9.1 +Platform=Linux + +[Opera/9.1* (X11; SunOS*)*] +Parent=Opera 9.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.2 + +[Opera 9.2] +Parent=DefaultProperties +Browser=Opera +Version=9.2 +MajorVer=9 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.2*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.2*] +Parent=Opera 9.2 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.2*] +Parent=Opera 9.2 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.2*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.2 +Platform=MacOSX + +[Opera/9.2* (Windows 95*)*] +Parent=Opera 9.2 +Platform=Win95 +Win32=true + +[Opera/9.2* (Windows 98*)*] +Parent=Opera 9.2 +Platform=Win98 +Win32=true + +[Opera/9.2* (Windows CE*)*] +Parent=Opera 9.2 +Platform=WinCE +Win32=true + +[Opera/9.2* (Windows ME*)*] +Parent=Opera 9.2 +Platform=WinME +Win32=true + +[Opera/9.2* (Windows NT 4.0*)*] +Parent=Opera 9.2 +Platform=WinNT +Win32=true + +[Opera/9.2* (Windows NT 5.0*)*] +Parent=Opera 9.2 +Platform=Win2000 +Win32=true + +[Opera/9.2* (Windows NT 5.1*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (Windows NT 5.2*)*] +Parent=Opera 9.2 +Platform=Win2003 +Win32=true + +[Opera/9.2* (Windows NT 6.0*)*] +Parent=Opera 9.2 +Platform=WinVista +Win32=true + +[Opera/9.2* (Windows NT 6.1*)*] +Parent=Opera 9.2 +Platform=Win7 + +[Opera/9.2* (Windows XP*)*] +Parent=Opera 9.2 +Platform=WinXP +Win32=true + +[Opera/9.2* (X11; FreeBSD*)*] +Parent=Opera 9.2 +Platform=FreeBSD + +[Opera/9.2* (X11; Linux*)*] +Parent=Opera 9.2 +Platform=Linux + +[Opera/9.2* (X11; SunOS*)*] +Parent=Opera 9.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.3 + +[Opera 9.3] +Parent=DefaultProperties +Browser=Opera +Version=9.3 +MajorVer=9 +MinorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.3*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.3*] +Parent=Opera 9.3 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.3*] +Parent=Opera 9.3 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.3*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.3 +Platform=MacOSX + +[Opera/9.3* (Windows 95*)*] +Parent=Opera 9.3 +Platform=Win95 +Win32=true + +[Opera/9.3* (Windows 98*)*] +Parent=Opera 9.3 +Platform=Win98 +Win32=true + +[Opera/9.3* (Windows CE*)*] +Parent=Opera 9.3 +Platform=WinCE +Win32=true + +[Opera/9.3* (Windows ME*)*] +Parent=Opera 9.3 +Platform=WinME +Win32=true + +[Opera/9.3* (Windows NT 4.0*)*] +Parent=Opera 9.3 +Platform=WinNT +Win32=true + +[Opera/9.3* (Windows NT 5.0*)*] +Parent=Opera 9.3 +Platform=Win2000 +Win32=true + +[Opera/9.3* (Windows NT 5.1*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (Windows NT 5.2*)*] +Parent=Opera 9.3 +Platform=Win2003 +Win32=true + +[Opera/9.3* (Windows NT 6.0*)*] +Parent=Opera 9.3 +Platform=WinVista +Win32=true + +[Opera/9.3* (Windows NT 6.1*)*] +Parent=Opera 9.3 +Platform=Win7 + +[Opera/9.3* (Windows XP*)*] +Parent=Opera 9.3 +Platform=WinXP +Win32=true + +[Opera/9.3* (X11; FreeBSD*)*] +Parent=Opera 9.3 +Platform=FreeBSD + +[Opera/9.3* (X11; Linux*)*] +Parent=Opera 9.3 +Platform=Linux + +[Opera/9.3* (X11; SunOS*)*] +Parent=Opera 9.3 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.4 + +[Opera 9.4] +Parent=DefaultProperties +Browser=Opera +Version=9.4 +MajorVer=9 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.4*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.4*] +Parent=Opera 9.4 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.4*] +Parent=Opera 9.4 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.4*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.4 +Platform=MacOSX + +[Opera/9.4* (Windows 95*)*] +Parent=Opera 9.4 +Platform=Win95 +Win32=true + +[Opera/9.4* (Windows 98*)*] +Parent=Opera 9.4 +Platform=Win98 +Win32=true + +[Opera/9.4* (Windows CE*)*] +Parent=Opera 9.4 +Platform=WinCE +Win32=true + +[Opera/9.4* (Windows ME*)*] +Parent=Opera 9.4 +Platform=WinME +Win32=true + +[Opera/9.4* (Windows NT 4.0*)*] +Parent=Opera 9.4 +Platform=WinNT +Win32=true + +[Opera/9.4* (Windows NT 5.0*)*] +Parent=Opera 9.4 +Platform=Win2000 +Win32=true + +[Opera/9.4* (Windows NT 5.1*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (Windows NT 5.2*)*] +Parent=Opera 9.4 +Platform=Win2003 +Win32=true + +[Opera/9.4* (Windows NT 6.0*)*] +Parent=Opera 9.4 +Platform=WinVista +Win32=true + +[Opera/9.4* (Windows NT 6.1*)*] +Parent=Opera 9.4 +Platform=Win7 + +[Opera/9.4* (Windows XP*)*] +Parent=Opera 9.4 +Platform=WinXP +Win32=true + +[Opera/9.4* (X11; FreeBSD*)*] +Parent=Opera 9.4 +Platform=FreeBSD + +[Opera/9.4* (X11; Linux*)*] +Parent=Opera 9.4 +Platform=Linux + +[Opera/9.4* (X11; SunOS*)*] +Parent=Opera 9.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.5 + +[Opera 9.5] +Parent=DefaultProperties +Browser=Opera +Version=9.5 +MajorVer=9 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.5*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.5*] +Parent=Opera 9.5 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.5*] +Parent=Opera 9.5 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.5*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.5 +Platform=MacOSX + +[Opera/9.5* (Windows 95*)*] +Parent=Opera 9.5 +Platform=Win95 +Win32=true + +[Opera/9.5* (Windows 98*)*] +Parent=Opera 9.5 +Platform=Win98 +Win32=true + +[Opera/9.5* (Windows CE*)*] +Parent=Opera 9.5 +Platform=WinCE +Win32=true + +[Opera/9.5* (Windows ME*)*] +Parent=Opera 9.5 +Platform=WinME +Win32=true + +[Opera/9.5* (Windows NT 4.0*)*] +Parent=Opera 9.5 +Platform=WinNT +Win32=true + +[Opera/9.5* (Windows NT 5.0*)*] +Parent=Opera 9.5 +Platform=Win2000 +Win32=true + +[Opera/9.5* (Windows NT 5.1*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (Windows NT 5.2*)*] +Parent=Opera 9.5 +Platform=Win2003 +Win32=true + +[Opera/9.5* (Windows NT 6.0*)*] +Parent=Opera 9.5 +Platform=WinVista +Win32=true + +[Opera/9.5* (Windows NT 6.1*)*] +Parent=Opera 9.5 +Platform=Win7 + +[Opera/9.5* (Windows XP*)*] +Parent=Opera 9.5 +Platform=WinXP +Win32=true + +[Opera/9.5* (X11; FreeBSD*)*] +Parent=Opera 9.5 +Platform=FreeBSD + +[Opera/9.5* (X11; Linux*)*] +Parent=Opera 9.5 +Platform=Linux + +[Opera/9.5* (X11; SunOS*)*] +Parent=Opera 9.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Opera 9.6 + +[Opera 9.6] +Parent=DefaultProperties +Browser=Opera +Version=9.6 +MajorVer=9 +MinorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/* (compatible; MSIE*; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC Mac OS X;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (compatible; MSIE*; Mac_PowerPC) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacPPC + +[Mozilla/* (compatible; MSIE*; Windows 2000*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 95*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows 98*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows CE*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows ME*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 4.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 5.2*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.0*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Mozilla/* (compatible; MSIE*; Windows NT 6.1*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (compatible; MSIE*; Windows XP*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (compatible; MSIE*; X11; FreeBSD*) Opera 9.6*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Mozilla/* (compatible; MSIE*; X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Mozilla/* (compatible; MSIE*; X11; SunOS*) Opera 9.6*] +Parent=Opera 9.6 +Platform=SunOS + +[Mozilla/* (Macintosh; *Mac OS X; ?) Opera 9.6*] +Parent=Opera 9.6 +Platform=MacOSX + +[Mozilla/* (Windows 2000;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows 95;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Mozilla/* (Windows 98;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Mozilla/* (Windows ME;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Mozilla/* (Windows NT 4.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Mozilla/* (Windows NT 5.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Mozilla/* (Windows NT 5.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Mozilla/* (Windows NT 5.2;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Mozilla/* (Windows NT 6.0;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=WinVista + +[Mozilla/* (Windows NT 6.1;*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Win7 + +[Mozilla/* (X11; Linux*) Opera 9.6*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (Macintosh; *Mac OS X;*)*] +Parent=Opera 9.6 +Platform=MacOSX + +[Opera/9.6* (Windows 95*)*] +Parent=Opera 9.6 +Platform=Win95 +Win32=true + +[Opera/9.6* (Windows 98*)*] +Parent=Opera 9.6 +Platform=Win98 +Win32=true + +[Opera/9.6* (Windows CE*)*] +Parent=Opera 9.6 +Platform=WinCE +Win32=true + +[Opera/9.6* (Windows ME*)*] +Parent=Opera 9.6 +Platform=WinME +Win32=true + +[Opera/9.6* (Windows NT 4.0*)*] +Parent=Opera 9.6 +Platform=WinNT +Win32=true + +[Opera/9.6* (Windows NT 5.0*)*] +Parent=Opera 9.6 +Platform=Win2000 +Win32=true + +[Opera/9.6* (Windows NT 5.1*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (Windows NT 5.2*)*] +Parent=Opera 9.6 +Platform=Win2003 +Win32=true + +[Opera/9.6* (Windows NT 6.0*)*] +Parent=Opera 9.6 +Platform=WinVista +Win32=true + +[Opera/9.6* (Windows NT 6.1*)*] +Parent=Opera 9.6 +Platform=Win7 + +[Opera/9.6* (Windows XP*)*] +Parent=Opera 9.6 +Platform=WinXP +Win32=true + +[Opera/9.6* (X11; FreeBSD*)*] +Parent=Opera 9.6 +Platform=FreeBSD + +[Opera/9.6* (X11; Linux*)*] +Parent=Opera 9.6 +Platform=Linux + +[Opera/9.6* (X11; SunOS*)*] +Parent=Opera 9.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.0 + +[Netscape 4.0] +Parent=DefaultProperties +Browser=Netscape +Version=4.0 +MajorVer=4 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.0*(Macintosh*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=MacPPC + +[Mozilla/4.0*(Win95;*] +Parent=Netscape 4.0 +Platform=Win95 + +[Mozilla/4.0*(Win98;*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=Win98 + +[Mozilla/4.0*(WinNT*] +Parent=Netscape 4.0 +Version=4.03 +MinorVer=03 +Platform=WinNT + +[Mozilla/4.0*(X11;*)] +Parent=Netscape 4.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.5 + +[Netscape 4.5] +Parent=DefaultProperties +Browser=Netscape +Version=4.5 +MajorVer=4 +MinorVer=5 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.5*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Platform=MacPPC + +[Mozilla/4.5*(Win2000; ?)] +Parent=Netscape 4.5 +Platform=Win2000 + +[Mozilla/4.5*(Win95; ?)] +Parent=Netscape 4.5 +Platform=Win95 + +[Mozilla/4.5*(Win98; ?)] +Parent=Netscape 4.5 +Platform=Win98 + +[Mozilla/4.5*(WinME; ?)] +Parent=Netscape 4.5 +Platform=WinME + +[Mozilla/4.5*(WinNT; ?)] +Parent=Netscape 4.5 +Platform=WinNT + +[Mozilla/4.5*(WinXP; ?)] +Parent=Netscape 4.5 +Platform=WinXP + +[Mozilla/4.5*(X11*)] +Parent=Netscape 4.5 +Platform=Linux + +[Mozilla/4.51*(Macintosh; ?; PPC)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 + +[Mozilla/4.51*(Win2000; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win2000 + +[Mozilla/4.51*(Win95; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win95 + +[Mozilla/4.51*(Win98; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Win98 + +[Mozilla/4.51*(WinME; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinME + +[Mozilla/4.51*(WinNT; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinNT + +[Mozilla/4.51*(WinXP; ?)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=WinXP + +[Mozilla/4.51*(X11*)] +Parent=Netscape 4.5 +Version=4.51 +MinorVer=51 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.6 + +[Netscape 4.6] +Parent=DefaultProperties +Browser=Netscape +Version=4.6 +MajorVer=4 +MinorVer=6 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.6 * (OS/2; ?)] +Parent=Netscape 4.6 +Platform=OS/2 + +[Mozilla/4.6*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Platform=MacPPC + +[Mozilla/4.6*(Win95; ?)] +Parent=Netscape 4.6 +Platform=Win95 + +[Mozilla/4.6*(Win98; ?)] +Parent=Netscape 4.6 +Platform=Win98 + +[Mozilla/4.6*(WinNT; ?)] +Parent=Netscape 4.6 +Platform=WinNT + +[Mozilla/4.61*(Macintosh; ?; PPC)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=MacPPC + +[Mozilla/4.61*(OS/2; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=OS/2 + +[Mozilla/4.61*(Win95; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=Win95 + +[Mozilla/4.61*(Win98; ?)] +Parent=Netscape 4.6 +Version=4.61 +Platform=Win98 + +[Mozilla/4.61*(WinNT; ?)] +Parent=Netscape 4.6 +Version=4.61 +MajorVer=4 +MinorVer=61 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.7 + +[Netscape 4.7] +Parent=DefaultProperties +Browser=Netscape +Version=4.7 +MajorVer=4 +MinorVer=7 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.7 * (Win2000; ?)] +Parent=Netscape 4.7 +Platform=Win2000 + +[Mozilla/4.7*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=MacPPC + +[Mozilla/4.7*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win95 + +[Mozilla/4.7*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win98 + +[Mozilla/4.7*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinNT +Win32=true + +[Mozilla/4.7*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=Win2000 +Win32=true + +[Mozilla/4.7*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=7 +Platform=WinXP +Win32=true + +[Mozilla/4.7*(WinNT; ?)*] +Parent=Netscape 4.7 +Platform=WinNT + +[Mozilla/4.7*(X11*)*] +Parent=Netscape 4.7 +Platform=Linux + +[Mozilla/4.7*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Platform=SunOS + +[Mozilla/4.71*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=MacPPC + +[Mozilla/4.71*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win95 + +[Mozilla/4.71*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win98 + +[Mozilla/4.71*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT +Win32=true + +[Mozilla/4.71*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Win2000 +Win32=true + +[Mozilla/4.71*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinXP +Win32=true + +[Mozilla/4.71*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=WinNT + +[Mozilla/4.71*(X11*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=Linux + +[Mozilla/4.71*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.71 +MinorVer=71 +Platform=SunOS + +[Mozilla/4.72*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=MacPPC + +[Mozilla/4.72*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win95 + +[Mozilla/4.72*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win98 + +[Mozilla/4.72*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT +Win32=true + +[Mozilla/4.72*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Win2000 +Win32=true + +[Mozilla/4.72*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinXP +Win32=true + +[Mozilla/4.72*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=WinNT + +[Mozilla/4.72*(X11*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=Linux + +[Mozilla/4.72*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=72 +Platform=SunOS + +[Mozilla/4.73*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=MacPPC + +[Mozilla/4.73*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win95 + +[Mozilla/4.73*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win98 + +[Mozilla/4.73*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT +Win32=true + +[Mozilla/4.73*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Win2000 +Win32=true + +[Mozilla/4.73*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinXP +Win32=true + +[Mozilla/4.73*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=WinNT + +[Mozilla/4.73*(X11*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=Linux + +[Mozilla/4.73*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=73 +Platform=SunOS + +[Mozilla/4.74*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=MacPPC + +[Mozilla/4.74*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win95 + +[Mozilla/4.74*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win98 + +[Mozilla/4.74*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT +Win32=true + +[Mozilla/4.74*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Win2000 +Win32=true + +[Mozilla/4.74*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinXP +Win32=true + +[Mozilla/4.74*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=WinNT + +[Mozilla/4.74*(X11*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=Linux + +[Mozilla/4.74*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=74 +Platform=SunOS + +[Mozilla/4.75*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=MacPPC + +[Mozilla/4.75*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win95 + +[Mozilla/4.75*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win98 + +[Mozilla/4.75*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT +Win32=true + +[Mozilla/4.75*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Win2000 +Win32=true + +[Mozilla/4.75*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinXP +Win32=true + +[Mozilla/4.75*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=WinNT + +[Mozilla/4.75*(X11*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=Linux + +[Mozilla/4.75*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=75 +Platform=SunOS + +[Mozilla/4.76*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=MacPPC + +[Mozilla/4.76*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win95 + +[Mozilla/4.76*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win98 + +[Mozilla/4.76*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT +Win32=true + +[Mozilla/4.76*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Win2000 +Win32=true + +[Mozilla/4.76*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinXP +Win32=true + +[Mozilla/4.76*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=WinNT + +[Mozilla/4.76*(X11*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=Linux + +[Mozilla/4.76*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=76 +Platform=SunOS + +[Mozilla/4.77*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=MacPPC + +[Mozilla/4.77*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win95 + +[Mozilla/4.77*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win98 + +[Mozilla/4.77*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT +Win32=true + +[Mozilla/4.77*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Win2000 +Win32=true + +[Mozilla/4.77*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinXP +Win32=true + +[Mozilla/4.77*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=WinNT + +[Mozilla/4.77*(X11*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=Linux + +[Mozilla/4.77*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=77 +Platform=SunOS + +[Mozilla/4.78*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=MacPPC + +[Mozilla/4.78*(Win95; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win95 + +[Mozilla/4.78*(Win98; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win98 + +[Mozilla/4.78*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT +Win32=true + +[Mozilla/4.78*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Win2000 +Win32=true + +[Mozilla/4.78*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinXP +Win32=true + +[Mozilla/4.78*(WinNT; ?)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=WinNT + +[Mozilla/4.78*(X11*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=Linux + +[Mozilla/4.78*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +MinorVer=78 +Platform=SunOS + +[Mozilla/4.79*(Macintosh; ?; PPC)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=MacPPC + +[Mozilla/4.79*(Win95; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win95 + +[Mozilla/4.79*(Win98; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win98 + +[Mozilla/4.79*(Windows NT 4.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT +Win32=true + +[Mozilla/4.79*(Windows NT 5.0; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Win2000 +Win32=true + +[Mozilla/4.79*(Windows NT 5.1; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinXP +Win32=true + +[Mozilla/4.79*(WinNT; ?)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=WinNT + +[Mozilla/4.79*(X11*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=Linux + +[Mozilla/4.79*(X11; ?; SunOS*)*] +Parent=Netscape 4.7 +Version=4.79 +MinorVer=79 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 4.8 + +[Netscape 4.8] +Parent=DefaultProperties +Browser=Netscape +Version=4.8 +MajorVer=4 +MinorVer=8 +Frames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/4.8*(Macintosh; ?; MacPPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Macintosh; ?; PPC Mac OS X*] +Parent=Netscape 4.8 +Platform=MacOSX + +[Mozilla/4.8*(Macintosh; ?; PPC)*] +Parent=Netscape 4.8 +Platform=MacPPC + +[Mozilla/4.8*(Win95; *)*] +Parent=Netscape 4.8 + +[Mozilla/4.8*(Win98; *)*] +Parent=Netscape 4.8 +Platform=Win98 + +[Mozilla/4.8*(Windows NT 4.0; *)*] +Parent=Netscape 4.8 +Platform=WinNT +Win32=true + +[Mozilla/4.8*(Windows NT 5.0; *)*] +Parent=Netscape 4.8 +Platform=Win2000 +Win32=true + +[Mozilla/4.8*(Windows NT 5.1; *)*] +Parent=Netscape 4.8 +Platform=WinXP +Win32=true + +[Mozilla/4.8*(WinNT; *)*] +Parent=Netscape 4.8 +Platform=WinNT + +[Mozilla/4.8*(X11; *)*] +Parent=Netscape 4.8 +Platform=Linux + +[Mozilla/4.8*(X11; *SunOS*)*] +Parent=Netscape 4.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.0 + +[Netscape 6.0] +Parent=DefaultProperties +Browser=Netscape +Version=6.0 +MajorVer=6 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.0*] +Parent=Netscape 6.0 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.1 + +[Netscape 6.1] +Parent=DefaultProperties +Browser=Netscape +Version=6.1 +MajorVer=6 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.1*] +Parent=Netscape 6.1 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 6.2 + +[Netscape 6.2] +Parent=DefaultProperties +Browser=Netscape +Version=6.2 +MajorVer=6 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape6/6.2*] +Parent=Netscape 6.2 +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.0 + +[Netscape 7.0] +Parent=DefaultProperties +Browser=Netscape +Version=7.0 +MajorVer=7 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win*9x 4.90; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.0*] +Parent=Netscape 7.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.1 + +[Netscape 7.1] +Parent=DefaultProperties +Browser=Netscape +Version=7.1 +MajorVer=7 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.1] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.1*] +Parent=Netscape 7.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 7.2 + +[Netscape 7.2] +Parent=DefaultProperties +Browser=Netscape +Version=7.2 +MajorVer=7 +MinorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/7.2*] +Parent=Netscape 7.2 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.0 + +[Netscape 8.0] +Parent=DefaultProperties +Browser=Netscape +Version=8.0 +MajorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X Mach-O; *; rv:*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC Mac OS X;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.0*] +Parent=Netscape 8.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Netscape 8.1 + +[Netscape 8.1] +Parent=DefaultProperties +Browser=Netscape +Version=8.1 +MajorVer=8 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; ?; PPC;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=MacPPC + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95;*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win9x 4.90; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT5.2; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.0; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT6.1; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; *) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*) Gecko/* Netscape*/8.1*] +Parent=Netscape 8.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.0 + +[SeaMonkey 1.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.0*] +Parent=SeaMonkey 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 1.1 + +[SeaMonkey 1.1] +Parent=DefaultProperties +Browser=SeaMonkey +Version=1.1 +MajorVer=1 +MinorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.8*) Gecko/20060221 SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.8*) Gecko/* SeaMonkey/1.1*] +Parent=SeaMonkey 1.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; SeaMonkey 2.0 + +[SeaMonkey 2.0] +Parent=DefaultProperties +Browser=SeaMonkey +Version=2.0 +MajorVer=2 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; ?; Win98; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win98 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; ?; Windows NT 6.0; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; ?; Windows NT 6.1; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Win7 + +[Mozilla/5.0 (X11; ?; FreeBSD*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; ?; Linux*; *; rv:1.9*) Gecko/20060221 SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; ?; SunOS*; *; rv:1.9*) Gecko/* SeaMonkey/2.0*] +Parent=SeaMonkey 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 1.0 + +[Flock 1.0] +Parent=DefaultProperties +Browser=Flock +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/2.* Flock/1.*] +Parent=Flock 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Flock 2.0 + +[Flock 2.0] +Parent=DefaultProperties +Browser=Flock +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; U; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; U; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinME + +[Mozilla/5.0 (Windows; U; Windows NT 5.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; U; Windows NT 5.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 5.2*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win2003 + +[Mozilla/5.0 (Windows; U; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1*; *; rv:1.*) Gecko/* Firefox/3.* Flock/2.*] +Parent=Flock 2.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Sleipnir 2.0 + +[Sleipnir] +Parent=DefaultProperties +Browser=Sleipnir +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 5.2*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.0*) Sleipnir/2.*] +Parent=Sleipnir +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE ?.0; Windows NT 6.1*) Sleipnir/2.*] +Parent=Sleipnir +Platform=Win7 + +[Sleipnir*] +Parent=Sleipnir + +[Sleipnir/2.*] +Parent=Sleipnir + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Fennec 1.0 + +[Fennec 1.0] +Parent=DefaultProperties +Browser=Firefox Mobile +Version=1.0 +MajorVer=1 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinXP + +[Mozilla/5.0 (Windows; U; Windows NT 6.0; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1; *; rv:1.9*) Gecko/* Fennec/1.0*] +Parent=Fennec 1.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firebird + +[Firebird] +Parent=DefaultProperties +Browser=Firebird +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Linux; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird Browser/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; IRIX*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firebird/0.*] +Parent=Firebird + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Mozilla Firebird/0.*] +Parent=Firebird + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox + +[Firefox] +Parent=DefaultProperties +Browser=Firefox +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=MacOSX + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (OS/2; *; Warp*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (Windows NT 5.?; ?; rv:1.*) Gecko/* Firefox] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.*; *; rv:1.*) Gecko/* Deer Park/Alpha*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.?; *; rv:1.*) Gecko/* Firefox/10.5] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Win32=true + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; FreeBSD*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; HP-UX*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; Linux*; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/0.*] +Parent=Firefox +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.0 + +[Firefox 1.0] +Parent=DefaultProperties +Browser=Firefox +Version=1.0 +MajorVer=1 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacPPC + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; *Linux*; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; DragonFly*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.0*] +Parent=Firefox 1.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.4 + +[Firefox 1.4] +Parent=DefaultProperties +Browser=Firefox +Version=1.4 +MajorVer=1 +MinorVer=4 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.4*] +Parent=Firefox 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 1.5 + +[Firefox 1.5] +Parent=DefaultProperties +Browser=Firefox +Version=1.5 +MajorVer=1 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OS/2 + +[Mozilla/5.0 (rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2 x64; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.*) Gecko/* Firefox/1.5*] +Parent=Firefox 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 2.0 + +[Firefox 2.0] +Parent=DefaultProperties +Browser=Firefox +Version=2.0 +MajorVer=2 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Linux; *; PPC*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=MacOSX + +[Mozilla/5.0 (OS/2; *; Warp*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OS/2 + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win95; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.8*) Gecko/* Firefox/2.0*] +Parent=Firefox 2.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.0 + +[Firefox 3.0] +Parent=DefaultProperties +Browser=Firefox +Version=3.0 +MajorVer=3 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.0; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2000 + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.0*] +Parent=Firefox 3.0 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.1 + +[Firefox 3.1] +Parent=DefaultProperties +Browser=Firefox +Version=3.1 +MajorVer=3 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9*) Gecko/* Firefox/3.1*] +Parent=Firefox 3.1 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Firefox 3.5 + +[Firefox 3.5] +Parent=DefaultProperties +Browser=Firefox +Version=3.5 +MajorVer=3 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=3 +supportsCSS=true + +[Mozilla/5.0 (Macintosh; *; *Mac OS X*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 6.1; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (Windows; *; WinNT4.0; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 5.2 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win2003 +Win32=false +Win64=true + +[Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=WinVista + +[Mozilla/5.0 (Windows; U; Windows NT 6.1 x64; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Win7 + +[Mozilla/5.0 (X11; *; *Linux*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=Linux + +[Mozilla/5.0 (X11; *; FreeBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *; HP-UX*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=HP-UX + +[Mozilla/5.0 (X11; *; IRIX64*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=IRIX64 + +[Mozilla/5.0 (X11; *; OpenBSD*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *; SunOS*; *; rv:1.9.*) Gecko/* Firefox/3.5b*] +Parent=Firefox 3.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Phoenix + +[Phoenix] +Parent=DefaultProperties +Browser=Phoenix +Version=0.5 +MinorVer=5 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (Windows; *; Win 9x 4.90; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; *; Win98; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.0*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.1; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; *; Windows NT 5.2*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (X11; *; Linux*; *; rv:1.4*) Gecko/* Phoenix/0.5*] +Parent=Phoenix +Platform=Linux + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Iceweasel + +[Iceweasel] +Parent=DefaultProperties +Browser=Iceweasel +Platform=Linux +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (X11; U; Linux*; *; rv:1.8*) Gecko/* Iceweasel/2.0* (Debian-*)] +Parent=Iceweasel +Version=2.0 +MajorVer=2 +MinorVer=0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.0 + +[Mozilla 1.0] +Parent=DefaultProperties +Browser=Mozilla +Version=1.0 +MajorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.0.*) Gecko/*] +Parent=Mozilla 1.0 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.1 + +[Mozilla 1.1] +Parent=DefaultProperties +Browser=Mozilla +Version=1.1 +MajorVer=1 +MinorVer=1 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.1.*) Gecko/*] +Parent=Mozilla 1.1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.2 + +[Mozilla 1.2] +Parent=DefaultProperties +Browser=Mozilla +Version=1.2 +MajorVer=1 +MinorVer=2 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.2.*) Gecko/*] +Parent=Mozilla 1.2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.3 + +[Mozilla 1.3] +Parent=DefaultProperties +Browser=Mozilla +Version=1.3 +MajorVer=1 +MinorVer=3 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.3.*) Gecko/*] +Parent=Mozilla 1.3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.4 + +[Mozilla 1.4] +Parent=DefaultProperties +Browser=Mozilla +Version=1.4 +MajorVer=1 +MinorVer=4 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.4*) Gecko/*] +Parent=Mozilla 1.4 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.5 + +[Mozilla 1.5] +Parent=DefaultProperties +Browser=Mozilla +Version=1.5 +MajorVer=1 +MinorVer=5 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.5*) Gecko/*] +Parent=Mozilla 1.5 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.6 + +[Mozilla 1.6] +Parent=DefaultProperties +Browser=Mozilla +Version=1.6 +MajorVer=1 +MinorVer=6 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.6*) Gecko/*] +Parent=Mozilla 1.6 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.7 + +[Mozilla 1.7] +Parent=DefaultProperties +Browser=Mozilla +Version=1.7 +MajorVer=1 +MinorVer=7 +Beta=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.7*) Gecko/*] +Parent=Mozilla 1.7 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.8 + +[Mozilla 1.8] +Parent=DefaultProperties +Browser=Mozilla +Version=1.8 +MajorVer=1 +MinorVer=8 +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.5 +w3cdomversion=1.0 + +[Mozilla/5.0 (*rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.8*) Gecko/*] +Parent=Mozilla 1.8 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Mozilla 1.9 + +[Mozilla 1.9] +Parent=DefaultProperties +Browser=Mozilla +Version=1.9 +MajorVer=1 +MinorVer=9 +Alpha=true +Frames=true +IFrames=true +Tables=true +Cookies=true +JavaApplets=true +JavaScript=true +CssVersion=2 +supportsCSS=true + +[Mozilla/5.0 (*rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 + +[Mozilla/5.0 (Macintosh; ?; *Mac OS X*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=MacOSX + +[Mozilla/5.0 (Windows; ?; Win 9x 4.90; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinME +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win3.11; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win31 +Win16=true +Win32=true + +[Mozilla/5.0 (Windows; ?; Win95; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win95 +Win32=true + +[Mozilla/5.0 (Windows; ?; Win98; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win98 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2000 +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinXP +Win32=true + +[Mozilla/5.0 (Windows; ?; Windows NT 5.2; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Win2003 +Win32=true + +[Mozilla/5.0 (Windows; ?; WinNT4.0; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=WinNT +Win32=true + +[Mozilla/5.0 (X11; *FreeBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=FreeBSD + +[Mozilla/5.0 (X11; *Linux*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=Linux + +[Mozilla/5.0 (X11; *OpenBSD*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=OpenBSD + +[Mozilla/5.0 (X11; *SunOS*; *rv:1.9*) Gecko/*] +Parent=Mozilla 1.9 +Platform=SunOS + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE Mac + +[IE Mac] +Parent=DefaultProperties +Browser=IE +Platform=MacPPC +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +JavaApplets=true +JavaScript=true +CssVersion=1 +supportsCSS=true + +[Mozilla/?.? (compatible; MSIE 4.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.0 +MajorVer=4 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 4.5*; *Mac_PowerPC*] +Parent=IE Mac +Version=4.5 +MajorVer=4 +MinorVer=5 + +[Mozilla/?.? (compatible; MSIE 5.0*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.0 +MajorVer=5 +MinorVer=0 + +[Mozilla/?.? (compatible; MSIE 5.1*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.1 +MajorVer=5 +MinorVer=1 + +[Mozilla/?.? (compatible; MSIE 5.2*; *Mac_PowerPC*] +Parent=IE Mac +Version=5.2 +MajorVer=5 +MinorVer=2 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 5.5 + +[AOL 9.0/IE 5.5] +Parent=DefaultProperties +Browser=AOL +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5; *AOL 9.0*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 5.5; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 5.5 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 6.0 + +[AOL 9.0/IE 6.0] +Parent=DefaultProperties +Browser=AOL +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 +ecmascriptversion=1.3 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 6.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; AOL 9.0/IE 7.0 + +[AOL 9.0/IE 7.0] +Parent=DefaultProperties +Browser=AOL +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +AOL=true +aolVersion=9.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0; *AOL 9.0*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 95*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +CssVersion=2 +supportsCSS=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows 98; Win 9x 4.90*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 4.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.01*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.1*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 5.2*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 1*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *AOL 9.0; *Windows NT 6.0*.NET CLR 2*.NET CLR 1*)*] +Parent=AOL 9.0/IE 7.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Avant Browser + +[Avant Browser] +Parent=DefaultProperties +Browser=Avant Browser +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Advanced Browser (http://www.avantbrowser.com)] +Parent=Avant Browser + +[Avant Browser*] +Parent=Avant Browser + +[Avant Browser/*] +Parent=Avant Browser + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 4.01 + +[IE 4.01] +Parent=DefaultProperties +Browser=IE +Version=4.01 +MajorVer=4 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 4.01*)*] +Parent=IE 4.01 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 95*)*] +Parent=IE 4.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98*)*] +Parent=IE 4.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 4.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 4.0*)*] +Parent=IE 4.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.0*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; *Windows NT 5.01*)*] +Parent=IE 4.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 4.01; Windows NT)] +Parent=IE 4.01 +Platform=WinNT + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.0 + +[IE 5.0] +Parent=DefaultProperties +Browser=IE +Version=5.0 +MajorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.0*)*] +Parent=IE 5.0 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 95*)*] +Parent=IE 5.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98*)*] +Parent=IE 5.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 4.0*)*] +Parent=IE 5.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.0*)*] +Parent=IE 5.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.0; *Windows NT 5.01*)*] +Parent=IE 5.0 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.01 + +[IE 5.01] +Parent=DefaultProperties +Browser=IE +Version=5.01 +MajorVer=5 +MinorVer=01 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true + +[Mozilla/?.* (?compatible; *MSIE 5.01*)*] +Parent=IE 5.01 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 95*)*] +Parent=IE 5.01 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98*)*] +Parent=IE 5.01 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 5.01 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 4.0*)*] +Parent=IE 5.01 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.0*)*] +Parent=IE 5.01 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.01; *Windows NT 5.01*)*] +Parent=IE 5.01 +Platform=Win2000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 5.5 + +[IE 5.5] +Parent=DefaultProperties +Browser=IE +Version=5.5 +MajorVer=5 +MinorVer=5 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 5.5*)*] +Parent=IE 5.5 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 95*)*] +Parent=IE 5.5 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98*)*] +Parent=IE 5.5 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows 98; Win 9x 4.90*)*] +Parent=IE 5.5 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 4.0*)*] +Parent=IE 5.5 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.0*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.01*)*] +Parent=IE 5.5 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.1*)*] +Parent=IE 5.5 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 5.5; *Windows NT 5.2*)*] +Parent=IE 5.5 +Platform=Win2003 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 6.0 + +[IE 6.0] +Parent=DefaultProperties +Browser=IE +Version=6.0 +MajorVer=6 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +w3cdomversion=1.0 +msdomversion=6.0 + +[Mozilla/?.* (?compatible; *MSIE 6.0*)*] +Parent=IE 6.0 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 95*)*] +Parent=IE 6.0 +Platform=Win95 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98*)*] +Parent=IE 6.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows 98; Win 9x 4.90*)*] +Parent=IE 6.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 4.0*)*] +Parent=IE 6.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.0*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.01*)*] +Parent=IE 6.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.1*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2*)*] +Parent=IE 6.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 6.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 6.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 6.0; *Windows NT 6.0*)*] +Parent=IE 6.0 +Platform=WinVista + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 7.0 + +[IE 7.0] +Parent=DefaultProperties +Browser=IE +Version=7.0 +MajorVer=7 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=2 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=7.0 +w3cdomversion=1.0 + +[Mozilla/?.* (?compatible; *MSIE 7.0*)*] +Parent=IE 7.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98*)*] +Parent=IE 7.0 +Platform=Win98 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows 98; Win 9x 4.90;*)*] +Parent=IE 7.0 +Platform=WinME + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 4.0*)*] +Parent=IE 7.0 +Platform=WinNT + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.0*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.01*)*] +Parent=IE 7.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.1*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2*)*] +Parent=IE 7.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*Win64;*)*] +Parent=IE 7.0 +Platform=WinXP +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 5.2;*WOW64;*)*] +Parent=IE 7.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.0*)*] +Parent=IE 7.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 7.0; *Windows NT 6.1*)*] +Parent=IE 7.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/4.0; *)*] +Parent=IE 7.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; IE 8.0 + +[IE 8.0] +Parent=DefaultProperties +Browser=IE +Version=8.0 +MajorVer=8 +Win32=true +Frames=true +IFrames=true +Tables=true +Cookies=true +BackgroundSounds=true +CDF=true +VBScript=true +JavaApplets=true +JavaScript=true +ActiveXControls=true +CssVersion=3 +supportsCSS=true +ecmascriptversion=1.2 +msdomversion=8.0 +w3cdomversion=1.0 + +[Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Win32*)*] +Parent=IE 8.0 +Platform=Win32 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.0*)*] +Parent=IE 8.0 +Platform=Win2000 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1*)*] +Parent=IE 8.0 +Platform=WinXP + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2*)*] +Parent=IE 8.0 +Platform=Win2003 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=WinVista +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Win64; x64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win32=false +Win64=true + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 +Win64=false + +[Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 7.0; Trident/4.0*)*] +Parent=IE 8.0 +Platform=Win7 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Default Browser + +[*] +Browser=Default Browser +Version=0 +MajorVer=0 +MinorVer=0 +Platform=unknown +Alpha=false +Beta=false +Win16=false +Win32=false +Win64=false +Frames=true +IFrames=false +Tables=true +Cookies=false +BackgroundSounds=false +CDF=false +VBScript=false +JavaApplets=false +JavaScript=false +ActiveXControls=false +Stripper=false +isBanned=false +isMobileDevice=false +isSyndicationReader=false +Crawler=false +CssVersion=0 +supportsCSS=false +AOL=false +aolVersion=0 +AuthenticodeUpdate=0 +CSS=0 +WAP=false +netCLR=false +ClrVersion=0 +ECMAScriptVersion=0.0 +W3CDOMVersion=0.0 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/config b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/config new file mode 100644 index 000000000..385128f74 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/config @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/mconfig/config.xml b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/mconfig/config.xml new file mode 100644 index 000000000..a3df3b5e9 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/etc/mono/mconfig/config.xml @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + +
+
+
+ + + + + +
+ +
+
+
+
+ + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + + + +]]> + + + + + + + +
+
+
+ + + + + +
+ +
+
+
+ + + + ]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+ + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + + + +]]> + + + + + +
+
+
+ + + + + + + + + + + + + +]]> + + + + + + +
+
+
+
+
+
+
+ + + + +]]> + + + + + +
+
+
+
+
+
+
+ + + + + + + + + + + +]]> + + + + + +
+
+
+
+
+ + + + +]]> + + + + + + + + ]]> + + + + + + ]]> + + + + + + ]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + + +]]> + + + + +
+
+
+
+
+
+ + diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Accessibility.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Mono.Security.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Configuration.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Core.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Deployment.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Drawing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Json.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Management.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Messaging.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Numerics.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Security.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Transactions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xaml.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/WindowsBase.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/mscorlib.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/mscorlib.dll new file mode 100644 index 000000000..7b6afe057 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/4.5/mscorlib.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b1945a39b4cc3ff3d16d1ed359fca1399248b54dc41da14c51db37ace45eddf9 +size 4498432 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll new file mode 100644 index 000000000..853d3c046 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Accessibility/4.0.0.0__b03f5f7f11d50a3a/Accessibility.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a0912a0bebc016e611e4900d99485713fbf0e013f496afc8fc837be08611723e +size 12288 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll new file mode 100644 index 000000000..24e19fd94 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Mono.Posix/4.0.0.0__0738eb9f132ed756/Mono.Posix.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:808439c9d7c076eb2522fdfe2ce1098abae6f6e285d6abc55d97ddb6d0d26e08 +size 212480 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll new file mode 100644 index 000000000..951b0bfae --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/Mono.Security/4.0.0.0__0738eb9f132ed756/Mono.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3f217f4a364c34d7f49936cf260433f45611a04429a2e3984b323a59f830589 +size 314368 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll new file mode 100644 index 000000000..8bfd1a09b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ComponentModel.Composition/4.0.0.0__b77a5c561934e089/System.ComponentModel.Composition.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2383b6b3a6b26d1087085b36c870f0ec9bbdea2b1bdbc84a0fae1199c748b7bc +size 259072 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll new file mode 100644 index 000000000..ab6ebc5e5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ComponentModel.DataAnnotations/4.0.0.0__31bf3856ad364e35/System.ComponentModel.DataAnnotations.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:eba35e43d95ab785e49df375698e0d16dc96c01913f122d8e28037ede27a352d +size 84992 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll new file mode 100644 index 000000000..466defc1b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Configuration.Install/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.Install.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:252e5a4efb637836e095d3b548f260a5f102e1d9a7ab60d6e86f1d037fd5a9a9 +size 24064 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll new file mode 100644 index 000000000..b527bebb0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Configuration/4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7b80cf5be3c7057d75a8316656c2908fee6c42c56db496a3cd7360fd7f7ef1a8 +size 122880 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll new file mode 100644 index 000000000..800084cbe --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Core/4.0.0.0__b77a5c561934e089/System.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:cbbbec2664d3db5ba45968309567fd8f1a40e2b7f850f105f65542ee2e6a120b +size 1060864 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll new file mode 100644 index 000000000..20c4a229d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.DataSetExtensions/4.0.0.0__b77a5c561934e089/System.Data.DataSetExtensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:47d6066206c902291116777a12866baaf14047881b2a81c1581043da98f87d33 +size 29696 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll new file mode 100644 index 000000000..89a341f3d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Entity/4.0.0.0__b77a5c561934e089/System.Data.Entity.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60d64c82a582aa890534cc712d433821054e06410bde58064e93d5e018c42863 +size 3339264 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll new file mode 100644 index 000000000..3b46bead2 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Linq/4.0.0.0__b77a5c561934e089/System.Data.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:17a0d35c1ad7d7b08a1b587cf356642afbfa79c7dedce2a7f45233b4484ec0ab +size 493568 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll new file mode 100644 index 000000000..305c96c77 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.OracleClient/4.0.0.0__b77a5c561934e089/System.Data.OracleClient.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0d505d83165e22e7ab370453cf9a18df8719c85275f7ff14b66c3345cfae0a07 +size 173056 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll new file mode 100644 index 000000000..7a63dfefe --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Services.Client/4.0.0.0__b77a5c561934e089/System.Data.Services.Client.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c36d770c293ee54ffc024ccd306ed52b0b1c673e938e70d2d545366e93b1fbf +size 418816 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll new file mode 100644 index 000000000..0289c8cba --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data.Services/4.0.0.0__b77a5c561934e089/System.Data.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7eb71c131eb85bd425da257dc16f33eae51f4860d3acd6cc4b6012cad61feb6b +size 56320 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll new file mode 100644 index 000000000..03c392621 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Data/4.0.0.0__b77a5c561934e089/System.Data.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3b1ff22e881e7942f699a47baf8b19a4c130e06f979d5f040b38a083bd3c80f +size 2176000 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll new file mode 100644 index 000000000..9ae5b7f34 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Deployment/4.0.0.0__b03f5f7f11d50a3a/System.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:db9299957f72f26dc76cc3d99a2eed9cc2dfdcedf3e5d3b7126040a61df404bb +size 11264 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll new file mode 100644 index 000000000..cc9ac46dc --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.DirectoryServices.Protocols/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.Protocols.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c0e27e7d6f334d21a0d79d5590a2910d7aea644f7c8f4ad3b8d95978d97bd287 +size 61952 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll new file mode 100644 index 000000000..b8ac625bc --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.DirectoryServices/4.0.0.0__b03f5f7f11d50a3a/System.DirectoryServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d4a7f98fb1e80e5d337bbc4836d8fa3545bb9c5da96de9bf5ee0fbbb8b4c2ef0 +size 94208 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll new file mode 100644 index 000000000..71fb58128 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Drawing/4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:032e72d1767859c9e9de20117b3ca2823e29d79a545608eb5fa4f0e432c95be9 +size 482816 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll new file mode 100644 index 000000000..19d37807a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Dynamic/4.0.0.0__b03f5f7f11d50a3a/System.Dynamic.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:faeabe9ab6fb8c6c6f7401440b61f50742d6337422dbe877ffbd2863f8ed7f14 +size 87040 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll new file mode 100644 index 000000000..1bd5a2168 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.EnterpriseServices/4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bab34e6aee689697f3de11997bf78d708ca9f388ebd8b4ef8444a72ad146b435 +size 46592 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll new file mode 100644 index 000000000..f0a3d2170 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IO.Compression.FileSystem/4.0.0.0__b77a5c561934e089/System.IO.Compression.FileSystem.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:07509ad8d972a949d23f28182f1014493827c522c0a05c362a322194dcc958d7 +size 18432 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll new file mode 100644 index 000000000..72c2b69a4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IO.Compression/4.0.0.0__b77a5c561934e089/System.IO.Compression.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:854d4c3792cb38bdd150587483a4546ec00402c15ef800fbf9710e769bc6a858 +size 99840 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll new file mode 100644 index 000000000..2e27836a5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IdentityModel.Selectors/4.0.0.0__b77a5c561934e089/System.IdentityModel.Selectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b10311f5e74a932b53bf5246cb8c5d0870c8abb86b44f346b42d944e0d5aa4cc +size 17408 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll new file mode 100644 index 000000000..fdc4af3ba --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.IdentityModel/4.0.0.0__b77a5c561934e089/System.IdentityModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:af5babdd0ed1f293f34cdb5de60990bbbff29b7210ec33b88216d1bcd6690c9f +size 139776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll new file mode 100644 index 000000000..7fd728f75 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Json.Microsoft/4.0.0.0__31bf3856ad364e35/System.Json.Microsoft.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8db90c030ac969ffb0eff96c588b48e687f6578de07dd501c5285adb38d52dc6 +size 54784 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll new file mode 100644 index 000000000..d2b1ea8b4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Json/4.0.0.0__31bf3856ad364e35/System.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:63b117af842abfd437b9a12d05b5e46eb893128e63d435a3945411a2c5f2c3be +size 32768 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll new file mode 100644 index 000000000..6d5b77cf6 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Management/4.0.0.0__b03f5f7f11d50a3a/System.Management.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:167f222464d487e2e1fc3c3e650c8709ef69843e13b396b54832fef13fd2f17f +size 49152 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll new file mode 100644 index 000000000..f1832234a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Messaging/4.0.0.0__b03f5f7f11d50a3a/System.Messaging.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:23f29e2f9611bf7f723fbcbf8093ea76fa69e7c95f52af11e13ae9c524e36309 +size 75776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll new file mode 100644 index 000000000..3bae6b653 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http.Formatting/4.0.0.0__31bf3856ad364e35/System.Net.Http.Formatting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a2a0a7ef44aa32beb43360c15276c97d3d2f43fded9b49059ec4b5cd7375eef0 +size 519168 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll new file mode 100644 index 000000000..486b58b3f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http.WebRequest/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.WebRequest.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:056222d594bd4d6d66778e2bbeb13fb60d67ec3bb8132d299b768f528e2b59dc +size 8704 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll new file mode 100644 index 000000000..9ed326fe0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net.Http/4.0.0.0__b03f5f7f11d50a3a/System.Net.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c622434b946190b68d1a06c9c4cbb255a335ceb7951ca3c95264f7134d962a89 +size 115712 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll new file mode 100644 index 000000000..d5e539cc0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Net/4.0.0.0__b03f5f7f11d50a3a/System.Net.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:794e311e903861dc9c1fd58ca94d1020e69d2082ec57868ce9b057f0c7febed7 +size 13312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll new file mode 100644 index 000000000..3832659b8 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Numerics.Vectors/4.0.0.0__b03f5f7f11d50a3a/System.Numerics.Vectors.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a8605dc6f36efaa5caae780981ef26eb0f1e0991214b6fcc78b65b02de24d57d +size 12288 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll new file mode 100644 index 000000000..0712c5db6 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Numerics/4.0.0.0__b77a5c561934e089/System.Numerics.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a34de47b07a11476d320e8bc90839497666a672dede5f0d89fdaddef9da7fb92 +size 119296 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll new file mode 100644 index 000000000..71a460cff --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Core/2.2.0.0__31bf3856ad364e35/System.Reactive.Core.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4de31ce3baff183fd92197bf54538ef856c48d11aa6e09415fbaa2731b152c2c +size 96256 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll new file mode 100644 index 000000000..017efea9d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Debugger/2.2.0.0__31bf3856ad364e35/System.Reactive.Debugger.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e8d86f058f7449f9562487d55fc6f6d8c48d1ae392031693c412027ab8c725dc +size 5120 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll new file mode 100644 index 000000000..8cd931a90 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Experimental/2.2.0.0__31bf3856ad364e35/System.Reactive.Experimental.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:270fc54fffab856dc39c59f4b8f36c3ea100077d277f8376b38c0defc4ca7106 +size 28672 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll new file mode 100644 index 000000000..cd36c3941 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Interfaces/2.2.0.0__31bf3856ad364e35/System.Reactive.Interfaces.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1d9455be0e328fb04c676c098ddbdaae2ec502c3c0c40e5fa8df55eea934be88 +size 7680 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll new file mode 100644 index 000000000..896df65a1 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Linq/2.2.0.0__31bf3856ad364e35/System.Reactive.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2c3d59871c8372fe66118ad949fb63e27d1c9a5224411ca8ea6ff72e7810ce97 +size 683008 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll new file mode 100644 index 000000000..ca13cac26 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Observable.Aliases/0.0.0.0__31bf3856ad364e35/System.Reactive.Observable.Aliases.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d5c4c8215b336d46a9c0c2c17eb7e5b5f0cd1fd4dcb000c078c4e04eaceebf5 +size 9728 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll new file mode 100644 index 000000000..5d81b4873 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.PlatformServices/2.2.0.0__31bf3856ad364e35/System.Reactive.PlatformServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:79083f313b2f5e3b20faa88e49205aece830c554e2fc7166d2163aa6367378bd +size 22528 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll new file mode 100644 index 000000000..6baa78665 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Providers/2.2.0.0__31bf3856ad364e35/System.Reactive.Providers.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a6cca58ace28725eab8be54c5ce63f38226e00491e6f18e870f2c4de955f7eb1 +size 243200 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll new file mode 100644 index 000000000..a76d185f1 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Runtime.Remoting/2.2.0.0__31bf3856ad364e35/System.Reactive.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1de1731d7fb418f4d190d8bfb4a82c9fa98a7ed2dfb87c9f090b86f5859df9e3 +size 9216 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll new file mode 100644 index 000000000..9732542ef --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Forms/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a45b23e876eaa89da807f8e569d4310b7837b15e8c1fa5d7f96b0cfc102a4e9a +size 9728 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll new file mode 100644 index 000000000..c7d365f14 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reactive.Windows.Threading/2.2.0.0__31bf3856ad364e35/System.Reactive.Windows.Threading.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b4bab7f093518c414085258a5ed9da770be284b6a0fd50717d7890ec743e7ec7 +size 12800 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll new file mode 100644 index 000000000..35115a643 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Reflection.Context/4.0.0.0__b77a5c561934e089/System.Reflection.Context.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dd06d517d0d44a2f2c0b9ef30212f54f3c36b0db8c6efacab98a4685b1f64dea +size 13312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll new file mode 100644 index 000000000..fc7961035 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Caching/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Caching.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:44472e1daf4804d9cbb27570a33637f8fff7baaf2a34cb1b0265ec0ce126560a +size 72192 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll new file mode 100644 index 000000000..d8deafe7b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.DurableInstancing/4.0.0.0__31bf3856ad364e35/System.Runtime.DurableInstancing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a602889eb1f44c67e0f007302b60cc597cebbe1497602251b72aead641b0b30 +size 107008 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll new file mode 100644 index 000000000..739ba99fb --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Remoting/4.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f969cb59d10e32c8ca64315202d9b7f4c281f90644eb3def96043630db93cea1 +size 119808 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll new file mode 100644 index 000000000..fd8edb333 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization.Formatters.Soap/4.0.0.0__b03f5f7f11d50a3a/System.Runtime.Serialization.Formatters.Soap.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:11095119a3bb3e90062f5d945ee84cafd9f5d398b3469b7dea93226a8969f597 +size 38912 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll new file mode 100644 index 000000000..86d9f24ec --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Runtime.Serialization/4.0.0.0__b77a5c561934e089/System.Runtime.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e79e892dd359575db05e94540e258abd7d00d866537884b08f40496b8324bda1 +size 934400 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll new file mode 100644 index 000000000..e9f767348 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Security/4.0.0.0__b03f5f7f11d50a3a/System.Security.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3aa7e023a1603b1b8a75238fd90d84404270f4d0e1e19f4b990d516da69c4ae5 +size 281600 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll new file mode 100644 index 000000000..0549bdb6d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Activation/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Activation.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f469c217afd60fcb81a9a74465cbf0354d8e67d1d2e7092a0e58868a0048c8d9 +size 13312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll new file mode 100644 index 000000000..91210a18c --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Discovery/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Discovery.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:99fe4cfa49222d8d6c8a1168e42be676574dd035040b1bbe4528c32b215e2c8f +size 141312 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll new file mode 100644 index 000000000..3c8004057 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Internals/0.0.0.0__b77a5c561934e089/System.ServiceModel.Internals.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a89bf31e08fee2d8922b534387b5e1b73f66de4aaff8ef3267574c55dfa8b099 +size 214528 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll new file mode 100644 index 000000000..7f7a47794 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Routing/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e3f2ebe00b9ce96573985d158625c77d67fddf9ffb9c6932f88b094f01dfd68f +size 37376 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll new file mode 100644 index 000000000..40e3cc005 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel.Web/4.0.0.0__31bf3856ad364e35/System.ServiceModel.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:60bbb932cfd6740d5f33eb1606f5f37c84177dc690b0621a369015eb1c039cfa +size 79360 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll new file mode 100644 index 000000000..963c03d04 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceModel/4.0.0.0__b77a5c561934e089/System.ServiceModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a5a0ac8df58b6ec822693e7560d99bdf18390c653255b32c944b15b6a3444ec4 +size 1426944 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll new file mode 100644 index 000000000..7f7f8abc4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.ServiceProcess/4.0.0.0__b03f5f7f11d50a3a/System.ServiceProcess.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7c4a73a29be261f5ccb86488ffe10f0a39e89da06bd79dfb14a8fcfa9220ab0d +size 47104 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll new file mode 100644 index 000000000..4e93ddc2f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Threading.Tasks.Dataflow/4.0.0.0__b77a5c561934e089/System.Threading.Tasks.Dataflow.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cb9c05d93e946fb60be318c84f8f160b9a629a419932ec5a7d15caaaf684f8f +size 168960 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll new file mode 100644 index 000000000..5a32ec0ad --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Transactions/4.0.0.0__b77a5c561934e089/System.Transactions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6c42f2468cda39b9a52b122dcd18d0377220c396cb69b2b493ce7f8754fc1f1d +size 34304 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll new file mode 100644 index 000000000..98eb8573f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Abstractions/4.0.0.0__31bf3856ad364e35/System.Web.Abstractions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c3f86f31d8a6ae98982e2d3dac1fd8f25b1ebb58f1206edfb118a41e9ffd319 +size 12800 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll new file mode 100644 index 000000000..fdca73577 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.ApplicationServices/4.0.0.0__31bf3856ad364e35/System.Web.ApplicationServices.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2fabe15ee190b3d1c4ffaa467cd76bfeeb174c26e85f9324b30a5ffaab13d5bf +size 33792 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll new file mode 100644 index 000000000..ef466b724 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.DynamicData/4.0.0.0__31bf3856ad364e35/System.Web.DynamicData.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:66a107c6d94a6f4811240d1fde552d9fdac32b4a0cb985766e6c5570e1661002 +size 69120 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll new file mode 100644 index 000000000..7b6226fef --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Extensions/4.0.0.0__31bf3856ad364e35/System.Web.Extensions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0162659ab054c3969ae150f0e05368b57e45518c49ac3ceb97c5d55a6c529cf9 +size 746496 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll new file mode 100644 index 000000000..74f0a27c1 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http.SelfHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.SelfHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:53b4ec85036c686ffac982c7bdfe9991ac25fb6e316a341a5a07ce96e9513e55 +size 88064 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll new file mode 100644 index 000000000..fc0cbcc1e --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http.WebHost/4.0.0.0__31bf3856ad364e35/System.Web.Http.WebHost.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4cc0e41b1640296696ed6d3a6940acdb0746e45549f97809ea634444eadbca72 +size 56320 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll new file mode 100644 index 000000000..c11535639 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Http/4.0.0.0__31bf3856ad364e35/System.Web.Http.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6d3314f0fd4caab1d63c2349c30ef557c74ae3ff2719a7998873b62180261f52 +size 326144 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll new file mode 100644 index 000000000..2f83ca253 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Mobile/4.0.0.0__b03f5f7f11d50a3a/System.Web.Mobile.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2a836e3e93e5828736088cde47e28512c5cc57a2009db9805a797516e70245b7 +size 11264 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll new file mode 100644 index 000000000..985161adf --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Mvc/3.0.0.0__31bf3856ad364e35/System.Web.Mvc.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e16b3608d9d80935dfb5d7fee7c52ff010313177c336e699e197521f57a776e +size 420352 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll new file mode 100644 index 000000000..dbcb53418 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Razor/2.0.0.0__31bf3856ad364e35/System.Web.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c880284f07b77730ff6f403c404165de5bfc6cef7c114015f357f375b59200d9 +size 254976 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll new file mode 100644 index 000000000..8e64c7e1d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.RegularExpressions/4.0.0.0__b03f5f7f11d50a3a/System.Web.RegularExpressions.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:6ac0e21ae2a3806a9b4022003e34c8fec95764b41de2b1c22053a5a4210b99f5 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll new file mode 100644 index 000000000..84a86a1ff --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Routing/4.0.0.0__31bf3856ad364e35/System.Web.Routing.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f77a573dbf24e8d4c97b10ac1db02006a3a10b59fcf00f491a48d95e08f2d9a5 +size 12288 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll new file mode 100644 index 000000000..684f807d8 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.Services/4.0.0.0__b03f5f7f11d50a3a/System.Web.Services.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9e6957762acf08a660d95f8f53360b0f5d5f964faff1e8883a0a05d17d088181 +size 736256 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll new file mode 100644 index 000000000..217074c81 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Deployment/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Deployment.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:d3b155c702b203bd92bb000674ecbb17268c1f286d862456420a07fb06aea296 +size 39424 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll new file mode 100644 index 000000000..9c180770d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages.Razor/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.Razor.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1935aae7b622b37295665235e0ec74a8821b3c010c20f558b3d13be42d1e77c6 +size 38400 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll new file mode 100644 index 000000000..bc5c14264 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web.WebPages/2.0.0.0__31bf3856ad364e35/System.Web.WebPages.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:f5cb446d04971bbd2b6e911b9751c953f95d41f2c1d86291d683caf62644c613 +size 196608 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll new file mode 100644 index 000000000..76076e618 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Web/4.0.0.0__b03f5f7f11d50a3a/System.Web.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5edaae59667f870f05981d83c31ff25de85a56bcac1c3c21b2a3536439ef6930 +size 3030016 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll new file mode 100644 index 000000000..23fa3775b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows.Forms.DataVisualization/4.0.0.0__31bf3856ad364e35/System.Windows.Forms.DataVisualization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:8313360d08f86b6c805df0a3576a2dc2f5d253241ba22a868e65b09d947343bf +size 145920 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll new file mode 100644 index 000000000..3ff3435d4 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows.Forms/4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e2cb88a463f0f8e7025b6e6988ee2e3d4001ce0b7cf5a37560e1002e325bb0eb +size 2898432 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll new file mode 100644 index 000000000..a0d16168d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Windows/4.0.0.0__b03f5f7f11d50a3a/System.Windows.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ec90da3e05d35fa76a1d576a9c14e0fb95e9c5016305352607029ff080a4bc1a +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll new file mode 100644 index 000000000..159d8a7e5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.Activities/4.0.0.0__31bf3856ad364e35/System.Workflow.Activities.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3ffda734f630f52c7aabf9b6dfbb1cfd43be266f5761f8df8e1ae1b9e5f7dcc1 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll new file mode 100644 index 000000000..2547b6648 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.ComponentModel/4.0.0.0__31bf3856ad364e35/System.Workflow.ComponentModel.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5c0c81efccdd49d67ba923bb9f96e7b095ae0c5726620ab0e98ecaab65dc299b +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll new file mode 100644 index 000000000..2c2b17854 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Workflow.Runtime/4.0.0.0__31bf3856ad364e35/System.Workflow.Runtime.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2b09dd31624af27363fab179b4b0a2dae32e698eb4284f187742a3129f1f44e9 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll new file mode 100644 index 000000000..9d4b1802f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xaml/4.0.0.0__b77a5c561934e089/System.Xaml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:610a9d1d412a1785d2d04be3549e8b708977ddcfb3cd73241a659afa5039a381 +size 188928 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll new file mode 100644 index 000000000..07bb029db --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml.Linq/4.0.0.0__b77a5c561934e089/System.Xml.Linq.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:74e12d93dc79b18aef8241d4dbfc7a5ab4a2457ec94f087ab280809dde3cb9b0 +size 137216 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll new file mode 100644 index 000000000..71501bb82 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml.Serialization/4.0.0.0__b77a5c561934e089/System.Xml.Serialization.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2d51a04521acc7d37047913b82a2973edcaf6db96ce74f2e3fe3fa506d1b0b70 +size 11776 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll new file mode 100644 index 000000000..88dfe5ae7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System.Xml/4.0.0.0__b77a5c561934e089/System.Xml.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:58196401c5c8f3323e0912b4422137612bd7eb2a3821cb53c4ac74fb7b26dda1 +size 3174912 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll new file mode 100644 index 000000000..997f34981 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/System/4.0.0.0__b77a5c561934e089/System.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:bb1d7b4b87422c0cd8f0aa847c382cbcb1bad88872f013ef164eaaf0ed76a5fc +size 2456064 diff --git a/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll new file mode 100644 index 000000000..345f59f24 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Mono/lib/mono/gac/WindowsBase/4.0.0.0__31bf3856ad364e35/WindowsBase.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:445e763848380e33861eda9af9b2d871237c12f4799603f32b0c42abf9875a7c +size 161792 diff --git a/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.dll b/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.dll new file mode 100644 index 000000000..4c908a1ce --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:a753e82f0d128171be8df8693872615974526e41200105c2853d54283014e1d3 +size 624640 diff --git a/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.pdb b/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.pdb new file mode 100644 index 000000000..ae45100f6 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:b999346525f40ccb72ecbc560462d94c8c2cce6fa515722b8f2a53f0fa334b4f +size 236420 diff --git a/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.xml b/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.xml new file mode 100644 index 000000000..5e472c8a0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Newtonsoft.Json.xml @@ -0,0 +1,10588 @@ + + + + Newtonsoft.Json + + + + + Represents a BSON Oid (object id). + + + + + Gets or sets the value of the Oid. + + The value of the Oid. + + + + Initializes a new instance of the class. + + The Oid value. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized BSON data. + + + + + Gets or sets a value indicating whether binary data reading should be compatible with incorrect Json.NET 3.5 written binary. + + + true if binary data reading will be compatible with incorrect Json.NET 3.5 written binary; otherwise, false. + + + + + Gets or sets a value indicating whether the root object will be read as a JSON array. + + + true if the root object will be read as a JSON array; otherwise, false. + + + + + Gets or sets the used when reading values from BSON. + + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Initializes a new instance of the class. + + The containing the BSON data to read. + if set to true the root object will be read as a JSON array. + The used when reading values from BSON. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating BSON data. + + + + + Gets or sets the used when writing values to BSON. + When set to no conversion will occur. + + The used when writing values to BSON. + + + + Initializes a new instance of the class. + + The to write to. + + + + Initializes a new instance of the class. + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying stream. + + + + + Writes the end. + + The token. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes the beginning of a JSON array. + + + + + Writes the beginning of a JSON object. + + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value that represents a BSON object id. + + The Object ID value to write. + + + + Writes a BSON regex. + + The regex pattern. + The regex options. + + + + Specifies how constructors are used when initializing objects during deserialization by the . + + + + + First attempt to use the public default constructor, then fall back to a single parameterized constructor, then to the non-public default constructor. + + + + + Json.NET will use a non-public default constructor before falling back to a parameterized constructor. + + + + + Converts a binary value to and from a base 64 string value. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Creates a custom object. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Creates an object which will then be populated by the serializer. + + Type of the object. + The created object. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Provides a base class for converting a to and from JSON. + + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can write JSON. + + + true if this can write JSON; otherwise, false. + + + + + Converts a to and from the ISO 8601 date format (e.g. "2008-04-12T12:53Z"). + + + + + Gets or sets the date time styles used when converting a date to and from JSON. + + The date time styles used when converting a date to and from JSON. + + + + Gets or sets the date time format used when converting a date to and from JSON. + + The date time format used when converting a date to and from JSON. + + + + Gets or sets the culture used when converting a date to and from JSON. + + The culture used when converting a date to and from JSON. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Converts a to and from a JavaScript Date constructor (e.g. new Date(52231943)). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from JSON and BSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts an to and from its name string value. + + + + + Gets or sets a value indicating whether the written enum text should be camel case. + The default value is false. + + true if the written enum text will be camel case; otherwise, false. + + + + Gets or sets a value indicating whether integer values are allowed when deserializing. + The default value is true. + + true if integers are allowed when deserializing; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class. + + true if the written enum text will be camel case; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts a to and from Unix epoch time + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Converts a to and from a string (e.g. "1.2.3.4"). + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing property value of the JSON that is being converted. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Converts XML to and from JSON. + + + + + Gets or sets the name of the root element to insert when deserializing to XML if the JSON structure has produced multiple root elements. + + The name of the deserialized root element. + + + + Gets or sets a flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + true if the array attribute is written to the XML; otherwise, false. + + + + Gets or sets a value indicating whether to write the root JSON object. + + true if the JSON root object is omitted; otherwise, false. + + + + Writes the JSON representation of the object. + + The to write to. + The calling serializer. + The value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Checks if the is a namespace attribute. + + Attribute name to test. + The attribute name prefix if it has one, otherwise an empty string. + true if attribute name is for a namespace attribute, otherwise false. + + + + Determines whether this instance can convert the specified value type. + + Type of the value. + + true if this instance can convert the specified value type; otherwise, false. + + + + + Specifies how dates are formatted when writing JSON text. + + + + + Dates are written in the ISO 8601 format, e.g. "2012-03-21T05:40Z". + + + + + Dates are written in the Microsoft JSON format, e.g. "\/Date(1198908717056)\/". + + + + + Specifies how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON text. + + + + + Date formatted strings are not parsed to a date type and are read as strings. + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed to . + + + + + Specifies how to treat the time value when converting between string and . + + + + + Treat as local time. If the object represents a Coordinated Universal Time (UTC), it is converted to the local time. + + + + + Treat as a UTC. If the object represents a local time, it is converted to a UTC. + + + + + Treat as a local time if a is being converted to a string. + If a string is being converted to , convert to a local time if a time zone is specified. + + + + + Time zone information should be preserved when converting. + + + + + Specifies default value handling options for the . + + + + + + + + + Include members where the member value is the same as the member's default value when serializing objects. + Included members are written to JSON. Has no effect when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + so that it is not written to JSON. + This option will ignore all default values (e.g. null for objects and nullable types; 0 for integers, + decimals and floating point numbers; and false for booleans). The default value ignored can be changed by + placing the on the property. + + + + + Members with a default value but no JSON will be set to their default value when deserializing. + + + + + Ignore members where the member value is the same as the member's default value when serializing objects + and set members to their default value when deserializing. + + + + + Specifies float format handling options when writing special floating point numbers, e.g. , + and with . + + + + + Write special floating point values as strings in JSON, e.g. "NaN", "Infinity", "-Infinity". + + + + + Write special floating point values as symbols in JSON, e.g. NaN, Infinity, -Infinity. + Note that this will produce non-valid JSON. + + + + + Write special floating point values as the property's default value in JSON, e.g. 0.0 for a property, null for a of property. + + + + + Specifies how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Floating point numbers are parsed to . + + + + + Floating point numbers are parsed to . + + + + + Specifies formatting options for the . + + + + + No special formatting is applied. This is the default. + + + + + Causes child objects to be indented according to the and settings. + + + + + Provides an interface for using pooled arrays. + + The array type content. + + + + Rent an array from the pool. This array must be returned when it is no longer needed. + + The minimum required length of the array. The returned array may be longer. + The rented array from the pool. This array must be returned when it is no longer needed. + + + + Return an array to the pool. + + The array that is being returned. + + + + Provides an interface to enable a class to return line and position information. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + The current line number or 0 if no line information is available (for example, when returns false). + + + + Gets the current line position. + + The current line position or 0 if no line information is available (for example, when returns false). + + + + Instructs the how to serialize the collection. + + + + + Gets or sets a value indicating whether null items are allowed in the collection. + + true if null items are allowed in the collection; otherwise, false. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with a flag indicating whether the array can contain null items. + + A flag indicating whether the array can contain null items. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to use the specified constructor when deserializing that object. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the id. + + The id. + + + + Gets or sets the title. + + The title. + + + + Gets or sets the description. + + The description. + + + + Gets or sets the collection's items converter. + + The collection's items converter. + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonContainer(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets a value that indicates whether to preserve object references. + + + true to keep object reference; otherwise, false. The default is false. + + + + + Gets or sets a value that indicates whether to preserve collection's items references. + + + true to keep collection's items object references; otherwise, false. The default is false. + + + + + Gets or sets the reference loop handling used when serializing the collection's items. + + The reference loop handling. + + + + Gets or sets the type name handling used when serializing the collection's items. + + The type name handling. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Provides methods for converting between .NET types and JSON types. + + + + + + + + Gets or sets a function that creates default . + Default settings are automatically used by serialization methods on , + and and on . + To serialize without using any default settings create a with + . + + + + + Represents JavaScript's boolean value true as a string. This field is read-only. + + + + + Represents JavaScript's boolean value false as a string. This field is read-only. + + + + + Represents JavaScript's null as a string. This field is read-only. + + + + + Represents JavaScript's undefined as a string. This field is read-only. + + + + + Represents JavaScript's positive infinity as a string. This field is read-only. + + + + + Represents JavaScript's negative infinity as a string. This field is read-only. + + + + + Represents JavaScript's NaN as a string. This field is read-only. + + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + The time zone handling when the date is converted to a string. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation using the specified. + + The value to convert. + The format the date will be converted to. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + The string delimiter character. + The string escape handling. + A JSON string representation of the . + + + + Converts the to its JSON string representation. + + The value to convert. + A JSON string representation of the . + + + + Serializes the specified object to a JSON string. + + The object to serialize. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting. + + The object to serialize. + Indicates how the output should be formatted. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a collection of . + + The object to serialize. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using formatting and a collection of . + + The object to serialize. + Indicates how the output should be formatted. + A collection of converters used while serializing. + A JSON string representation of the object. + + + + Serializes the specified object to a JSON string using . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + A JSON string representation of the object. + + + + + Serializes the specified object to a JSON string using a type, formatting and . + + The object to serialize. + Indicates how the output should be formatted. + The used to serialize the object. + If this is null, default serialization settings will be used. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + A JSON string representation of the object. + + + + + Deserializes the JSON to a .NET object. + + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to a .NET object using . + + The JSON to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The JSON to deserialize. + The of object being deserialized. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type. + + The type of the object to deserialize to. + The JSON to deserialize. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the given anonymous type. + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the given anonymous type using . + + + The anonymous type to deserialize to. This can't be specified + traditionally and must be inferred from the anonymous type passed + as a parameter. + + The JSON to deserialize. + The anonymous type object. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized anonymous type from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The type of the object to deserialize to. + The JSON to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The type of the object to deserialize to. + The object to deserialize. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using a collection of . + + The JSON to deserialize. + The type of the object to deserialize. + Converters to use while deserializing. + The deserialized object from the JSON string. + + + + Deserializes the JSON to the specified .NET type using . + + The JSON to deserialize. + The type of the object to deserialize to. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + The deserialized object from the JSON string. + + + + Populates the object with values from the JSON string. + + The JSON to populate values from. + The target object to populate values onto. + + + + Populates the object with values from the JSON string using . + + The JSON to populate values from. + The target object to populate values onto. + + The used to deserialize the object. + If this is null, default serialization settings will be used. + + + + + Serializes the to a JSON string. + + The node to serialize. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to serialize. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Serializes the to a JSON string. + + The node to convert to JSON. + A JSON string of the . + + + + Serializes the to a JSON string using formatting. + + The node to convert to JSON. + Indicates how the output should be formatted. + A JSON string of the . + + + + Serializes the to a JSON string using formatting and omits the root object if is true. + + The node to serialize. + Indicates how the output should be formatted. + Omits writing the root object. + A JSON string of the . + + + + Deserializes the from a JSON string. + + The JSON string. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by . + + The JSON string. + The name of the root element to append when deserializing. + The deserialized . + + + + Deserializes the from a JSON string nested in a root element specified by + and writes a Json.NET array attribute for collections. + + The JSON string. + The name of the root element to append when deserializing. + + A flag to indicate whether to write the Json.NET array attribute. + This attribute helps preserve arrays when converting the written XML back to JSON. + + The deserialized . + + + + Converts an object to and from JSON. + + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Gets a value indicating whether this can read JSON. + + true if this can read JSON; otherwise, false. + + + + Gets a value indicating whether this can write JSON. + + true if this can write JSON; otherwise, false. + + + + Converts an object to and from JSON. + + The object type to convert. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Writes the JSON representation of the object. + + The to write to. + The value. + The calling serializer. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. + The calling serializer. + The object value. + + + + Reads the JSON representation of the object. + + The to read from. + Type of the object. + The existing value of object being read. If there is no existing value then null will be used. + The existing value has a value. + The calling serializer. + The object value. + + + + Determines whether this instance can convert the specified object type. + + Type of the object. + + true if this instance can convert the specified object type; otherwise, false. + + + + + Instructs the to use the specified when serializing the member or class. + + + + + Gets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + + + + + Initializes a new instance of the class. + + Type of the . + + + + Initializes a new instance of the class. + + Type of the . + Parameter list to use when constructing the . Can be null. + + + + Represents a collection of . + + + + + Instructs the how to serialize the collection. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to deserialize properties with no matching class member into the specified collection + and write values during serialization. + + + + + Gets or sets a value that indicates whether to write extension data when serializing the object. + + + true to write extension data when serializing the object; otherwise, false. The default is true. + + + + + Gets or sets a value that indicates whether to read extension data when deserializing the object. + + + true to read extension data when deserializing the object; otherwise, false. The default is true. + + + + + Initializes a new instance of the class. + + + + + Instructs the not to serialize the public field or public read/write property value. + + + + + Instructs the how to serialize the object. + + + + + Gets or sets the member serialization. + + The member serialization. + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified member serialization. + + The member serialization. + + + + Initializes a new instance of the class with the specified container Id. + + The container Id. + + + + Instructs the to always serialize the member with the specified name. + + + + + Gets or sets the used when serializing the property's collection items. + + The collection's items . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(ItemConverterType = typeof(MyContainerConverter), ItemConverterParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the of the . + + The of the . + + + + The parameter list to use when constructing the described by . + If null, the default constructor is used. + When non-null, there must be a constructor defined in the that exactly matches the number, + order, and type of these parameters. + + + + [JsonProperty(NamingStrategyType = typeof(MyNamingStrategy), NamingStrategyParameters = new object[] { 123, "Four" })] + + + + + + Gets or sets the null value handling used when serializing this property. + + The null value handling. + + + + Gets or sets the default value handling used when serializing this property. + + The default value handling. + + + + Gets or sets the reference loop handling used when serializing this property. + + The reference loop handling. + + + + Gets or sets the object creation handling used when deserializing this property. + + The object creation handling. + + + + Gets or sets the type name handling used when serializing this property. + + The type name handling. + + + + Gets or sets whether this property's value is serialized as a reference. + + Whether this property's value is serialized as a reference. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets a value indicating whether this property is required. + + + A value indicating whether this property is required. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class with the specified name. + + Name of the property. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously skips the children of the current token. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Specifies the state of the reader. + + + + + A read method has not been called. + + + + + The end of the file has been reached successfully. + + + + + Reader is at a property. + + + + + Reader is at the start of an object. + + + + + Reader is in an object. + + + + + Reader is at the start of an array. + + + + + Reader is in an array. + + + + + The method has been called. + + + + + Reader has just read a value. + + + + + Reader is at the start of a constructor. + + + + + Reader is in a constructor. + + + + + An error occurred that prevents the read operation from continuing. + + + + + The end of the file has been reached successfully. + + + + + Gets the current reader state. + + The current reader state. + + + + Gets or sets a value indicating whether the source should be closed when this reader is closed. + + + true to close the source when this reader is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether multiple pieces of JSON content can + be read from a continuous stream without erroring. + + + true to support reading multiple pieces of JSON content; otherwise false. + The default is false. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + Gets or sets how time zones are handled when reading JSON. + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + + + + + Gets or sets how custom date formatted strings are parsed when reading JSON. + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + + + + + Gets the type of the current JSON token. + + + + + Gets the text value of the current JSON token. + + + + + Gets the .NET type for the current JSON token. + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets or sets the culture used when reading JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Reads the next JSON token from the source. + + true if the next token was read successfully; false if there are no more tokens to read. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the source as a of . + + A of . This method will return null at the end of an array. + + + + Skips the children of the current token. + + + + + Sets the current token. + + The new token. + + + + Sets the current token and value. + + The new token. + The value. + + + + Sets the current token and value. + + The new token. + The value. + A flag indicating whether the position index inside an array should be updated. + + + + Sets the state based on current token type. + + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Changes the reader's state to . + If is set to true, the source is also closed. + + + + + The exception thrown when an error occurs while reading JSON text. + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path, line number, line position, and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The line number indicating where the error occurred. + The line position indicating where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Instructs the to always serialize the member, and to require that the member has a value. + + + + + The exception thrown when an error occurs during JSON serialization or deserialization. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Serializes and deserializes objects into and from the JSON format. + The enables you to control how objects are encoded into JSON. + + + + + Occurs when the errors during serialization and deserialization. + + + + + Gets or sets the used by the serializer when resolving references. + + + + + Gets or sets the used by the serializer when resolving type names. + + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + + + + Gets or sets how reference loops (e.g. a class referencing itself) is handled. + The default value is . + + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets a collection that will be used during serialization. + + Collection that will be used during serialization. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Gets a value indicating whether there will be a check for additional JSON content after deserializing an object. + The default value is false. + + + true if there will be a check for additional JSON content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Clears all the cached types, attributes and methods to release references to any types of the other assemblies. + + + + + Creates a new instance. + The will not use default settings + from . + + + A new instance. + The will not use default settings + from . + + + + + Creates a new instance using the specified . + The will not use default settings + from . + + The settings to be applied to the . + + A new instance using the specified . + The will not use default settings + from . + + + + + Creates a new instance. + The will use default settings + from . + + + A new instance. + The will use default settings + from . + + + + + Creates a new instance using the specified . + The will use default settings + from as well as the specified . + + The settings to be applied to the . + + A new instance using the specified . + The will use default settings + from as well as the specified . + + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Populates the JSON values onto the target object. + + The that contains the JSON structure to reader values from. + The target object to populate values onto. + + + + Deserializes the JSON structure contained by the specified . + + The that contains the JSON structure to deserialize. + The being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The type of the object to deserialize. + The instance of being deserialized. + + + + Deserializes the JSON structure contained by the specified + into an instance of the specified type. + + The containing the object. + The of object being deserialized. + The instance of being deserialized. + + + + Serializes the specified difference to the other object of the same type. and writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + The reference object. + + + + Serializes the specified difference to the other object of the same type. Writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + The reference object. + + + + Serializes the specified difference to the other object of the same type. Writes the JSON structure using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + The reference object. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + The reference object. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + The type of the value being serialized. + This parameter is used when is Auto to write out the type name if the type of the value does not match. + Specifying the type is optional. + + + + + Serializes the specified and writes the JSON structure + using the specified . + + The used to write the JSON structure. + The to serialize. + + + + Specifies the settings on a object. + + + + + Gets or sets how reference loops (e.g. a class referencing itself) are handled. + The default value is . + + Reference loop handling. + + + + Gets or sets how missing members (e.g. JSON contains a property that isn't a member on the object) are handled during deserialization. + The default value is . + + Missing member handling. + + + + Gets or sets how objects are created during deserialization. + The default value is . + + The object creation handling. + + + + Gets or sets how null values are handled during serialization and deserialization. + The default value is . + + Null value handling. + + + + Gets or sets how default values are handled during serialization and deserialization. + The default value is . + + The default value handling. + + + + Gets or sets a collection that will be used during serialization. + + The converters. + + + + Gets or sets how object references are preserved by the serializer. + The default value is . + + The preserve references handling. + + + + Gets or sets how type name writing and reading is handled by the serializer. + The default value is . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + The type name handling. + + + + Gets or sets how metadata properties are used during deserialization. + The default value is . + + The metadata properties handling. + + + + Gets or sets how a type name assembly is written and resolved by the serializer. + The default value is . + + The type name assembly format. + + + + Gets or sets how constructors are used during deserialization. + The default value is . + + The constructor handling. + + + + Gets or sets the contract resolver used by the serializer when + serializing .NET objects to JSON and vice versa. + + The contract resolver. + + + + Gets or sets the equality comparer used by the serializer when comparing references. + + The equality comparer. + + + + Gets or sets a function that creates the used by the serializer when resolving references. + + A function that creates the used by the serializer when resolving references. + + + + Gets or sets the used by the serializer when resolving type names. + + The binder. + + + + Gets or sets the error handler called during serialization and deserialization. + + The error handler called during serialization and deserialization. + + + + Gets or sets how and values are formatted when writing JSON text, + and the expected date format when reading JSON text. + The default value is "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK". + + + + + Gets or sets the maximum depth allowed when reading JSON. Reading past this depth will throw a . + A null value means there is no maximum. + The default value is null. + + + + + Indicates how JSON text output is formatted. + The default value is . + + + + + Gets or sets how dates are written to JSON text. + The default value is . + + + + + Gets or sets how time zones are handled during serialization and deserialization. + The default value is . + + + + + Gets or sets how date formatted strings, e.g. "\/Date(1198908717056)\/" and "2012-03-21T05:40Z", are parsed when reading JSON. + The default value is . + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written as JSON. + The default value is . + + + + + Gets or sets how floating point numbers, e.g. 1.0 and 9.9, are parsed when reading JSON text. + The default value is . + + + + + Gets or sets how strings are escaped when writing JSON text. + The default value is . + + + + + Gets or sets the culture used when reading JSON. + The default value is . + + + + + Gets a value indicating whether there will be a check for additional content after deserializing an object. + The default value is false. + + + true if there will be a check for additional content after deserializing an object; otherwise, false. + + + + + Initializes a new instance of the class. + + + + + Represents a reader that provides fast, non-cached, forward-only access to JSON text data. + + + + + Asynchronously reads the next JSON token from the source. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns true if the next token was read successfully; false if there are no more tokens to read. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a []. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the []. This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a of . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the of . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously reads the next JSON token from the source as a . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous read. The + property returns the . This result will be null at the end of an array. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Initializes a new instance of the class with the specified . + + The containing the JSON data to read. + + + + Gets or sets the reader's character buffer pool. + + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a []. + + A [] or null if the next JSON token is null. This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Gets a value indicating whether the class can return line information. + + + true if and can be provided; otherwise, false. + + + + + Gets the current line number. + + + The current line number or 0 if no line information is available (for example, returns false). + + + + + Gets the current line position. + + + The current line position or 0 if no line information is available (for example, returns false). + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + Derived classes must override this method to get asynchronous behaviour. Otherwise it will + execute synchronously, returning an already-completed task. + + + + Gets or sets the writer's character array pool. + + + + + Gets or sets how many s to write for each level in the hierarchy when is set to . + + + + + Gets or sets which character to use to quote attribute values. + + + + + Gets or sets which character to use for indenting when is set to . + + + + + Gets or sets a value indicating whether object names will be surrounded with quotes. + + + + + Initializes a new instance of the class using the specified . + + The to write to. + + + + Flushes whatever is in the buffer to the underlying and also flushes the underlying . + + + + + Closes this writer. + If is set to true, the underlying is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the specified end token. + + The end token to write. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Specifies the type of JSON token. + + + + + This is returned by the if a read method has not been called. + + + + + An object start token. + + + + + An array start token. + + + + + A constructor start token. + + + + + An object property name. + + + + + A comment. + + + + + Raw JSON. + + + + + An integer. + + + + + A float. + + + + + A string. + + + + + A boolean. + + + + + A null token. + + + + + An undefined token. + + + + + An object end token. + + + + + An array end token. + + + + + A constructor end token. + + + + + A Date. + + + + + Byte data. + + + + + + Represents a reader that provides validation. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Sets an event handler for receiving schema validation errors. + + + + + Gets the text value of the current JSON token. + + + + + + Gets the depth of the current token in the JSON document. + + The depth of the current token in the JSON document. + + + + Gets the path of the current JSON token. + + + + + Gets the quotation mark character used to enclose the value of a string. + + + + + + Gets the type of the current JSON token. + + + + + + Gets the .NET type for the current JSON token. + + + + + + Initializes a new instance of the class that + validates the content returned from the given . + + The to read from while validating. + + + + Gets or sets the schema. + + The schema. + + + + Gets the used to construct this . + + The specified in the constructor. + + + + Changes the reader's state to . + If is set to true, the underlying is also closed. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a []. + + + A [] or null if the next JSON token is null. + + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying as a . + + A . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . This method will return null at the end of an array. + + + + Reads the next JSON token from the underlying as a of . + + A of . + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Asynchronously closes this writer. + If is set to true, the destination is also closed. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously flushes whatever is in the buffer to the destination and also flushes the destination. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the specified end token. + + The end token to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes indent characters. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the JSON value delimiter. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an indent space. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON without changing the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of the current JSON object or array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of an array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a constructor. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the end of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a null value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON array. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the start of a constructor with the given name. + + The name of the constructor. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the beginning of a JSON object. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a [] value. + + The [] value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a value. + + The value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes a of value. + + The of value to write. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes an undefined value. + + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously writes the given white space. + + The string of white space characters. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Asynchronously ets the state of the . + + The being written. + The value being written. + The token to monitor for cancellation requests. The default value is . + A that represents the asynchronous operation. + The default behaviour is to execute synchronously, returning an already-completed task. Derived + classes can override this behaviour for true asynchronicity. + + + + Gets or sets a value indicating whether the destination should be closed when this writer is closed. + + + true to close the destination when this writer is closed; otherwise false. The default is true. + + + + + Gets or sets a value indicating whether the JSON should be auto-completed when this writer is closed. + + + true to auto-complete the JSON when this writer is closed; otherwise false. The default is true. + + + + + Gets the top. + + The top. + + + + Gets the state of the writer. + + + + + Gets the path of the writer. + + + + + Gets or sets a value indicating how JSON text output should be formatted. + + + + + Gets or sets how dates are written to JSON text. + + + + + Gets or sets how time zones are handled when writing JSON text. + + + + + Gets or sets how strings are escaped when writing JSON text. + + + + + Gets or sets how special floating point numbers, e.g. , + and , + are written to JSON text. + + + + + Gets or sets how and values are formatted when writing JSON text. + + + + + Gets or sets the culture used when writing JSON. Defaults to . + + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the destination and also flushes the destination. + + + + + Closes this writer. + If is set to true, the destination is also closed. + If is set to true, the JSON is auto-completed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the end of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the end of an array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end constructor. + + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + + + + Writes the property name of a name/value pair of a JSON object. + + The name of the property. + A flag to indicate whether the text should be escaped when it is written as a JSON property name. + + + + Writes the end of the current JSON object or array. + + + + + Writes the current token and its children. + + The to read the token from. + + + + Writes the current token. + + The to read the token from. + A flag indicating whether the current token's children should be written. + + + + Writes the token and its value. + + The to write. + + The value to write. + A value is only required for tokens that have an associated value, e.g. the property name for . + null can be passed to the method for tokens that don't have a value, e.g. . + + + + + Writes the token. + + The to write. + + + + Writes the specified end token. + + The end token to write. + + + + Writes indent characters. + + + + + Writes the JSON value delimiter. + + + + + Writes an indent space. + + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON without changing the writer's state. + + The raw JSON to write. + + + + Writes raw JSON where a value is expected and updates the writer's state. + + The raw JSON to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a of value. + + The of value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + An error will raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes the given white space. + + The string of white space characters. + + + + Releases unmanaged and - optionally - managed resources. + + true to release both managed and unmanaged resources; false to release only unmanaged resources. + + + + Sets the state of the . + + The being written. + The value being written. + + + + The exception thrown when an error occurs while writing JSON text. + + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Initializes a new instance of the class + with a specified error message, JSON path and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The path to the JSON where the error occurred. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + Specifies how JSON comments are handled when loading JSON. + + + + + Ignore comments. + + + + + Load comments as a with type . + + + + + Contains the LINQ to JSON extension methods. + + + + + Returns a collection of tokens that contains the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the ancestors of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, the ancestors of every token in the source collection. + + + + Returns a collection of tokens that contains the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains the descendants of every token in the source collection. + + + + Returns a collection of tokens that contains every token in the source collection, and the descendants of every token in the source collection. + + The type of the objects in source, constrained to . + An of that contains the source collection. + An of that contains every token in the source collection, and the descendants of every token in the source collection. + + + + Returns a collection of child properties of every object in the source collection. + + An of that contains the source collection. + An of that contains the properties of every object in the source collection. + + + + Returns a collection of child values of every object in the source collection with the given key. + + An of that contains the source collection. + The token key. + An of that contains the values of every token in the source collection with the given key. + + + + Returns a collection of child values of every object in the source collection. + + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child values of every object in the source collection with the given key. + + The type to convert the values to. + An of that contains the source collection. + The token key. + An that contains the converted values of every token in the source collection with the given key. + + + + Returns a collection of converted child values of every object in the source collection. + + The type to convert the values to. + An of that contains the source collection. + An that contains the converted values of every token in the source collection. + + + + Converts the value. + + The type to convert the value to. + A cast as a of . + A converted value. + + + + Converts the value. + + The source collection type. + The type to convert the value to. + A cast as a of . + A converted value. + + + + Returns a collection of child tokens of every array in the source collection. + + The source collection type. + An of that contains the source collection. + An of that contains the values of every token in the source collection. + + + + Returns a collection of converted child tokens of every array in the source collection. + + An of that contains the source collection. + The type to convert the values to. + The source collection type. + An that contains the converted values of every token in the source collection. + + + + Returns the input typed as . + + An of that contains the source collection. + The input typed as . + + + + Returns the input typed as . + + The source collection type. + An of that contains the source collection. + The input typed as . + + + + Represents a collection of objects. + + The type of token. + + + + Gets the of with the specified key. + + + + + + Represents a JSON array. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous load. The property contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Initializes a new instance of the class with the specified content. + + The contents of the array. + + + + Loads an from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads an from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the at the specified index. + + + + + + Determines the index of a specific item in the . + + The object to locate in the . + + The index of if found in the list; otherwise, -1. + + + + + Inserts an item to the at the specified index. + + The zero-based index at which should be inserted. + The object to insert into the . + + is not a valid index in the . + + + + + Removes the item at the specified index. + + The zero-based index of the item to remove. + + is not a valid index in the . + + + + + Returns an enumerator that iterates through the collection. + + + A of that can be used to iterate through the collection. + + + + + Adds an item to the . + + The object to add to the . + + + + Removes all items from the . + + + + + Determines whether the contains a specific value. + + The object to locate in the . + + true if is found in the ; otherwise, false. + + + + + Copies the elements of the to an array, starting at a particular array index. + + The array. + Index of the array. + + + + Gets a value indicating whether the is read-only. + + true if the is read-only; otherwise, false. + + + + Removes the first occurrence of a specific object from the . + + The object to remove from the . + + true if was successfully removed from the ; otherwise, false. This method also returns false if is not found in the original . + + + + + Represents a JSON constructor. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets or sets the name of this constructor. + + The constructor name. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name and content. + + The constructor name. + The contents of the constructor. + + + + Initializes a new instance of the class with the specified name. + + The constructor name. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified key. + + The with the specified key. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a token that can contain other tokens. + + + + + Occurs when the list changes or an item in the list changes. + + + + + Occurs before an item is added to the collection. + + + + + Occurs when the items list of the collection has changed, or the collection is reset. + + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Raises the event. + + The instance containing the event data. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Get the first child token of this token. + + + A containing the first child token of the . + + + + + Get the last child token of this token. + + + A containing the last child token of the . + + + + + Returns a collection of the child tokens of this token, in document order. + + + An of containing the child tokens of this , in document order. + + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + + A containing the child values of this , in document order. + + + + + Returns a collection of the descendant tokens for this token in document order. + + An of containing the descendant tokens of the . + + + + Returns a collection of the tokens that contain this token, and all descendant tokens of this token, in document order. + + An of containing this token, and all the descendant tokens of the . + + + + Adds the specified content as children of this . + + The content to be added. + + + + Adds the specified content as the first children of this . + + The content to be added. + + + + Creates a that can be used to add tokens to the . + + A that is ready to have content written to it. + + + + Replaces the child nodes of this token with the specified content. + + The content. + + + + Removes the child nodes from this token. + + + + + Merge the specified content into this . + + The content to be merged. + + + + Merge the specified content into this using . + + The content to be merged. + The used to merge the content. + + + + Gets the count of child JSON tokens. + + The count of child JSON tokens. + + + + Represents a collection of objects. + + The type of token. + + + + An empty collection of objects. + + + + + Initializes a new instance of the struct. + + The enumerable. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Gets the of with the specified key. + + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Determines whether the specified is equal to this instance. + + The to compare with this instance. + + true if the specified is equal to this instance; otherwise, false. + + + + + Returns a hash code for this instance. + + + A hash code for this instance, suitable for use in hashing algorithms and data structures like a hash table. + + + + + Represents a JSON object. + + + + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous load. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Occurs when a property value changes. + + + + + Occurs when a property value is changing. + + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Initializes a new instance of the class with the specified content. + + The contents of the object. + + + + Gets the node type for this . + + The type. + + + + Gets an of of this object's properties. + + An of of this object's properties. + + + + Gets a the specified name. + + The property name. + A with the specified name or null. + + + + Gets a of of this object's property values. + + A of of this object's property values. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets or sets the with the specified property name. + + + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + is not valid JSON. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + is not valid JSON. + + + + + + + + Creates a from an object. + + The object that will be used to create . + A with the values of the specified object. + + + + Creates a from an object. + + The object that will be used to create . + The that will be used to read the object. + A with the values of the specified object. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Gets the with the specified property name. + + Name of the property. + The with the specified property name. + + + + Gets the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + One of the enumeration values that specifies how the strings will be compared. + The with the specified property name. + + + + Tries to get the with the specified property name. + The exact property name will be searched for first and if no matching property is found then + the will be used to match a property. + + Name of the property. + The value. + One of the enumeration values that specifies how the strings will be compared. + true if a value was successfully retrieved; otherwise, false. + + + + Adds the specified property name. + + Name of the property. + The value. + + + + Determines whether the JSON object has the specified property name. + + Name of the property. + true if the JSON object has the specified property name; otherwise, false. + + + + Removes the property with the specified name. + + Name of the property. + true if item was successfully removed; otherwise, false. + + + + Tries to get the with the specified property name. + + Name of the property. + The value. + true if a value was successfully retrieved; otherwise, false. + + + + Returns an enumerator that can be used to iterate through the collection. + + + A that can be used to iterate through the collection. + + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Raises the event with the provided arguments. + + Name of the property. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Represents a JSON property. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Asynchronously loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns a that contains the JSON that was read from the specified . + + + + Gets the container's children tokens. + + The container's children tokens. + + + + Gets the property name. + + The property name. + + + + Gets or sets the property value. + + The property value. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Gets the node type for this . + + The type. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Initializes a new instance of the class. + + The property name. + The property content. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Loads a from a . + + A that will be read for the content of the . + A that contains the JSON that was read from the specified . + + + + Loads a from a . + + A that will be read for the content of the . + The used to load the JSON. + If this is null, default load settings will be used. + A that contains the JSON that was read from the specified . + + + + Represents a view of a . + + + + + Initializes a new instance of the class. + + The name. + + + + When overridden in a derived class, returns whether resetting an object changes its value. + + + true if resetting the component changes its value; otherwise, false. + + The component to test for reset capability. + + + + When overridden in a derived class, gets the current value of the property on a component. + + + The value of a property for a given component. + + The component with the property for which to retrieve the value. + + + + When overridden in a derived class, resets the value for this property of the component to the default value. + + The component with the property value that is to be reset to the default value. + + + + When overridden in a derived class, sets the value of the component to a different value. + + The component with the property value that is to be set. + The new value. + + + + When overridden in a derived class, determines a value indicating whether the value of this property needs to be persisted. + + + true if the property should be persisted; otherwise, false. + + The component with the property to be examined for persistence. + + + + When overridden in a derived class, gets the type of the component this property is bound to. + + + A that represents the type of component this property is bound to. + When the or + + methods are invoked, the object specified might be an instance of this type. + + + + + When overridden in a derived class, gets a value indicating whether this property is read-only. + + + true if the property is read-only; otherwise, false. + + + + + When overridden in a derived class, gets the type of the property. + + + A that represents the type of the property. + + + + + Gets the hash code for the name of the member. + + + + The hash code for the name of the member. + + + + + Represents a raw JSON string. + + + + + Asynchronously creates an instance of with the content of the reader's current token. + + The reader. + The token to monitor for cancellation requests. The default value is . + A representing the asynchronous creation. The + property returns an instance of with the content of the reader's current token. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class. + + The raw json. + + + + Creates an instance of with the content of the reader's current token. + + The reader. + An instance of with the content of the reader's current token. + + + + Specifies the settings used when loading JSON. + + + + + Initializes a new instance of the class. + + + + + Gets or sets how JSON comments are handled when loading JSON. + + The JSON comment handling. + + + + Gets or sets how JSON line info is handled when loading JSON. + + The JSON line info handling. + + + + Specifies the settings used when merging JSON. + + + + + Gets or sets the method used when merging JSON arrays. + + The method used when merging JSON arrays. + + + + Gets or sets how null value properties are merged. + + How null value properties are merged. + + + + Represents an abstract JSON token. + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Writes this token to a asynchronously. + + A into which this method will write. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains + the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Asynchronously creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + The token to monitor for cancellation requests. The default value is . + + A that represents the asynchronous creation. The + property returns a that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Gets a comparer that can compare two tokens for value equality. + + A that can compare two nodes for value equality. + + + + Gets or sets the parent. + + The parent. + + + + Gets the root of this . + + The root of this . + + + + Gets the node type for this . + + The type. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Compares the values of two tokens, including the values of all descendant tokens. + + The first to compare. + The second to compare. + true if the tokens are equal; otherwise false. + + + + Gets the next sibling token of this node. + + The that contains the next sibling token. + + + + Gets the previous sibling token of this node. + + The that contains the previous sibling token. + + + + Gets the path of the JSON token. + + + + + Adds the specified content immediately after this token. + + A content object that contains simple content or a collection of content objects to be added after this token. + + + + Adds the specified content immediately before this token. + + A content object that contains simple content or a collection of content objects to be added before this token. + + + + Returns a collection of the ancestor tokens of this token. + + A collection of the ancestor tokens of this token. + + + + Returns a collection of tokens that contain this token, and the ancestors of this token. + + A collection of tokens that contain this token, and the ancestors of this token. + + + + Returns a collection of the sibling tokens after this token, in document order. + + A collection of the sibling tokens after this tokens, in document order. + + + + Returns a collection of the sibling tokens before this token, in document order. + + A collection of the sibling tokens before this token, in document order. + + + + Gets the with the specified key. + + The with the specified key. + + + + Gets the with the specified key converted to the specified type. + + The type to convert the token to. + The token key. + The converted token value. + + + + Get the first child token of this token. + + A containing the first child token of the . + + + + Get the last child token of this token. + + A containing the last child token of the . + + + + Returns a collection of the child tokens of this token, in document order. + + An of containing the child tokens of this , in document order. + + + + Returns a collection of the child tokens of this token, in document order, filtered by the specified type. + + The type to filter the child tokens on. + A containing the child tokens of this , in document order. + + + + Returns a collection of the child values of this token, in document order. + + The type to convert the values to. + A containing the child values of this , in document order. + + + + Removes this token from its parent. + + + + + Replaces this token with the specified token. + + The value. + + + + Writes this token to a . + + A into which this method will write. + A collection of which will be used when writing the token. + + + + Returns the indented JSON for this token. + + + The indented JSON for this token. + + + + + Returns the JSON for this token using the given formatting and converters. + + Indicates how the output should be formatted. + A collection of s which will be used when writing the token. + The JSON for this token using the given formatting and converters. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to []. + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to of . + + The value. + The result of the conversion. + + + + Performs an explicit conversion from to . + + The value. + The result of the conversion. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from [] to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from to . + + The value to create a from. + The initialized with the specified value. + + + + Performs an implicit conversion from of to . + + The value to create a from. + The initialized with the specified value. + + + + Creates a for this token. + + A that can be used to read this token and its descendants. + + + + Creates a from an object. + + The object that will be used to create . + A with the value of the specified object. + + + + Creates a from an object using the specified . + + The object that will be used to create . + The that will be used when reading the object. + A with the value of the specified object. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the . + + The object type that the token will be deserialized to. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates an instance of the specified .NET type from the using the specified . + + The object type that the token will be deserialized to. + The that will be used when creating the object. + The new object created from the JSON value. + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + An positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Load a from a string that contains JSON. + + A that contains JSON. + A populated from the string that contains JSON. + + + + Load a from a string that contains JSON. + + A that contains JSON. + The used to load the JSON. + If this is null, default load settings will be used. + A populated from the string that contains JSON. + + + + Creates a from a . + + A positioned at the token to read into this . + The used to load the JSON. + If this is null, default load settings will be used. + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Creates a from a . + + A positioned at the token to read into this . + + A that contains the token and its descendant tokens + that were read from the reader. The runtime type of the token is determined + by the token type of the first token encountered in the reader. + + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A , or null. + + + + Selects a using a JPath expression. Selects the token that matches the object path. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + A . + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + An of that contains the selected elements. + + + + Selects a collection of elements using a JPath expression. + + + A that contains a JPath expression. + + A flag to indicate whether an error should be thrown if no tokens are found when evaluating part of the expression. + An of that contains the selected elements. + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Creates a new instance of the . All child tokens are recursively cloned. + + A new instance of the . + + + + Adds an object to the annotation list of this . + + The annotation to add. + + + + Get the first annotation object of the specified type from this . + + The type of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets the first annotation object of the specified type from this . + + The of the annotation to retrieve. + The first annotation object that matches the specified type, or null if no annotation is of the specified type. + + + + Gets a collection of annotations of the specified type for this . + + The type of the annotations to retrieve. + An that contains the annotations for this . + + + + Gets a collection of annotations of the specified type for this . + + The of the annotations to retrieve. + An of that contains the annotations that match the specified type for this . + + + + Removes the annotations of the specified type from this . + + The type of annotations to remove. + + + + Removes the annotations of the specified type from this . + + The of annotations to remove. + + + + Compares tokens to determine whether they are equal. + + + + + Determines whether the specified objects are equal. + + The first object of type to compare. + The second object of type to compare. + + true if the specified objects are equal; otherwise, false. + + + + + Returns a hash code for the specified object. + + The for which a hash code is to be returned. + A hash code for the specified object. + The type of is a reference type and is null. + + + + Represents a reader that provides fast, non-cached, forward-only access to serialized JSON data. + + + + + Gets the at the reader's current position. + + + + + Initializes a new instance of the class. + + The token to read from. + + + + Reads the next JSON token from the underlying . + + + true if the next token was read successfully; false if there are no more tokens to read. + + + + + Gets the path of the current JSON token. + + + + + Specifies the type of token. + + + + + No token type has been set. + + + + + A JSON object. + + + + + A JSON array. + + + + + A JSON constructor. + + + + + A JSON object property. + + + + + A comment. + + + + + An integer value. + + + + + A float value. + + + + + A string value. + + + + + A boolean value. + + + + + A null value. + + + + + An undefined value. + + + + + A date value. + + + + + A raw JSON value. + + + + + A collection of bytes value. + + + + + A Guid value. + + + + + A Uri value. + + + + + A TimeSpan value. + + + + + Represents a writer that provides a fast, non-cached, forward-only way of generating JSON data. + + + + + Gets the at the writer's current position. + + + + + Gets the token being written. + + The token being written. + + + + Initializes a new instance of the class writing to the given . + + The container being written to. + + + + Initializes a new instance of the class. + + + + + Flushes whatever is in the buffer to the underlying . + + + + + Closes this writer. + If is set to true, the JSON is auto-completed. + + + Setting to true has no additional effect, since the underlying is a type that cannot be closed. + + + + + Writes the beginning of a JSON object. + + + + + Writes the beginning of a JSON array. + + + + + Writes the start of a constructor with the given name. + + The name of the constructor. + + + + Writes the end. + + The token. + + + + Writes the property name of a name/value pair on a JSON object. + + The name of the property. + + + + Writes a value. + An error will be raised if the value cannot be written as a single JSON token. + + The value to write. + + + + Writes a null value. + + + + + Writes an undefined value. + + + + + Writes raw JSON. + + The raw JSON to write. + + + + Writes a comment /*...*/ containing the specified text. + + Text to place inside the comment. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a [] value. + + The [] value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Writes a value. + + The value to write. + + + + Represents a value in JSON (string, integer, date, etc). + + + + + Writes this token to a asynchronously. + + A into which this method will write. + The token to monitor for cancellation requests. + A collection of which will be used when writing the token. + A that represents the asynchronous write operation. + + + + Initializes a new instance of the class from another object. + + A object to copy from. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Initializes a new instance of the class with the given value. + + The value. + + + + Gets a value indicating whether this token has child tokens. + + + true if this token has child values; otherwise, false. + + + + + Creates a comment with the given value. + + The value. + A comment with the given value. + + + + Creates a string with the given value. + + The value. + A string with the given value. + + + + Creates a null value. + + A null value. + + + + Creates a undefined value. + + A undefined value. + + + + Gets the node type for this . + + The type. + + + + Gets or sets the underlying token value. + + The underlying token value. + + + + Writes this token to a . + + A into which this method will write. + A collection of s which will be used when writing the token. + + + + Indicates whether the current object is equal to another object of the same type. + + + true if the current object is equal to the parameter; otherwise, false. + + An object to compare with this object. + + + + Determines whether the specified is equal to the current . + + The to compare with the current . + + true if the specified is equal to the current ; otherwise, false. + + + + + Serves as a hash function for a particular type. + + + A hash code for the current . + + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format provider. + + A that represents this instance. + + + + + Returns a that represents this instance. + + The format. + The format provider. + + A that represents this instance. + + + + + Returns the responsible for binding operations performed on this object. + + The expression tree representation of the runtime value. + + The to bind this object. + + + + + Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object. + + An object to compare with this instance. + + A 32-bit signed integer that indicates the relative order of the objects being compared. The return value has these meanings: + Value + Meaning + Less than zero + This instance is less than . + Zero + This instance is equal to . + Greater than zero + This instance is greater than . + + + is not of the same type as this instance. + + + + + Specifies how line information is handled when loading JSON. + + + + + Ignore line information. + + + + + Load line information. + + + + + Specifies how JSON arrays are merged together. + + + + Concatenate arrays. + + + Union arrays, skipping items that already exist. + + + Replace all array items. + + + Merge array items together, matched by index. + + + + Specifies how null value properties are merged. + + + + + The content's null value properties will be ignored during merging. + + + + + The content's null value properties will be merged. + + + + + Specifies the member serialization options for the . + + + + + All public members are serialized by default. Members can be excluded using or . + This is the default member serialization mode. + + + + + Only members marked with or are serialized. + This member serialization mode can also be set by marking the class with . + + + + + All public and private fields are serialized. Members can be excluded using or . + This member serialization mode can also be set by marking the class with + and setting IgnoreSerializableAttribute on to false. + + + + + Specifies metadata property handling options for the . + + + + + Read metadata properties located at the start of a JSON object. + + + + + Read metadata properties located anywhere in a JSON object. Note that this setting will impact performance. + + + + + Do not try to read metadata properties. + + + + + Specifies missing member handling options for the . + + + + + Ignore a missing member and do not attempt to deserialize it. + + + + + Throw a when a missing member is encountered during deserialization. + + + + + Specifies null value handling options for the . + + + + + + + + + Include null values when serializing and deserializing objects. + + + + + Ignore null values when serializing and deserializing objects. + + + + + Specifies how object creation is handled by the . + + + + + Reuse existing objects, create new objects when needed. + + + + + Only reuse existing objects. + + + + + Always create new objects. + + + + + Specifies reference handling options for the . + Note that references cannot be preserved when a value is set via a non-default constructor such as types that implement . + + + + + + + + Do not preserve references when serializing types. + + + + + Preserve references when serializing into a JSON object structure. + + + + + Preserve references when serializing into a JSON array structure. + + + + + Preserve references when serializing. + + + + + Specifies reference loop handling options for the . + + + + + Throw a when a loop is encountered. + + + + + Ignore loop references and do not serialize. + + + + + Serialize loop references. + + + + + Indicating whether a property is required. + + + + + The property is not required. The default state. + + + + + The property must be defined in JSON but can be a null value. + + + + + The property must be defined in JSON and cannot be a null value. + + + + + The property is not required but it cannot be a null value. + + + + + + Contains the JSON schema extension methods. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + true if the specified is valid; otherwise, false. + + + + + + Determines whether the is valid. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + When this method returns, contains any error messages generated while validating. + + true if the specified is valid; otherwise, false. + + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + + + + + Validates the specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + The source to test. + The schema to test with. + The validation event handler. + + + + + An in-memory representation of a JSON Schema. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the id. + + + + + Gets or sets the title. + + + + + Gets or sets whether the object is required. + + + + + Gets or sets whether the object is read-only. + + + + + Gets or sets whether the object is visible to users. + + + + + Gets or sets whether the object is transient. + + + + + Gets or sets the description of the object. + + + + + Gets or sets the types of values allowed by the object. + + The type. + + + + Gets or sets the pattern. + + The pattern. + + + + Gets or sets the minimum length. + + The minimum length. + + + + Gets or sets the maximum length. + + The maximum length. + + + + Gets or sets a number that the value should be divisible by. + + A number that the value should be divisible by. + + + + Gets or sets the minimum. + + The minimum. + + + + Gets or sets the maximum. + + The maximum. + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the minimum attribute (). + + A flag indicating whether the value can not equal the number defined by the minimum attribute (). + + + + Gets or sets a flag indicating whether the value can not equal the number defined by the maximum attribute (). + + A flag indicating whether the value can not equal the number defined by the maximum attribute (). + + + + Gets or sets the minimum number of items. + + The minimum number of items. + + + + Gets or sets the maximum number of items. + + The maximum number of items. + + + + Gets or sets the of items. + + The of items. + + + + Gets or sets a value indicating whether items in an array are validated using the instance at their array position from . + + + true if items are validated using their array position; otherwise, false. + + + + + Gets or sets the of additional items. + + The of additional items. + + + + Gets or sets a value indicating whether additional items are allowed. + + + true if additional items are allowed; otherwise, false. + + + + + Gets or sets whether the array items must be unique. + + + + + Gets or sets the of properties. + + The of properties. + + + + Gets or sets the of additional properties. + + The of additional properties. + + + + Gets or sets the pattern properties. + + The pattern properties. + + + + Gets or sets a value indicating whether additional properties are allowed. + + + true if additional properties are allowed; otherwise, false. + + + + + Gets or sets the required property if this property is present. + + The required property if this property is present. + + + + Gets or sets the a collection of valid enum values allowed. + + A collection of valid enum values allowed. + + + + Gets or sets disallowed types. + + The disallowed types. + + + + Gets or sets the default value. + + The default value. + + + + Gets or sets the collection of that this schema extends. + + The collection of that this schema extends. + + + + Gets or sets the format. + + The format. + + + + Initializes a new instance of the class. + + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The object representing the JSON Schema. + + + + Reads a from the specified . + + The containing the JSON Schema to read. + The to use when resolving schema references. + The object representing the JSON Schema. + + + + Load a from a string that contains JSON Schema. + + A that contains JSON Schema. + A populated from the string that contains JSON Schema. + + + + Load a from a string that contains JSON Schema using the specified . + + A that contains JSON Schema. + The resolver. + A populated from the string that contains JSON Schema. + + + + Writes this schema to a . + + A into which this method will write. + + + + Writes this schema to a using the specified . + + A into which this method will write. + The resolver used. + + + + Returns a that represents the current . + + + A that represents the current . + + + + + + Returns detailed information about the schema exception. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the line number indicating where the error occurred. + + The line number indicating where the error occurred. + + + + Gets the line position indicating where the error occurred. + + The line position indicating where the error occurred. + + + + Gets the path to the JSON where the error occurred. + + The path to the JSON where the error occurred. + + + + Initializes a new instance of the class. + + + + + Initializes a new instance of the class + with a specified error message. + + The error message that explains the reason for the exception. + + + + Initializes a new instance of the class + with a specified error message and a reference to the inner exception that is the cause of this exception. + + The error message that explains the reason for the exception. + The exception that is the cause of the current exception, or null if no inner exception is specified. + + + + + Generates a from a specified . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets how undefined schemas are handled by the serializer. + + + + + Gets or sets the contract resolver. + + The contract resolver. + + + + Generate a from the specified type. + + The type to generate a from. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + Generate a from the specified type. + + The type to generate a from. + The used to resolve schema references. + Specify whether the generated root will be nullable. + A generated from the specified type. + + + + + Resolves from an id. + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets or sets the loaded schemas. + + The loaded schemas. + + + + Initializes a new instance of the class. + + + + + Gets a for the specified reference. + + The id. + A for the specified reference. + + + + + The value types allowed by the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + No type specified. + + + + + String type. + + + + + Float type. + + + + + Integer type. + + + + + Boolean type. + + + + + Object type. + + + + + Array type. + + + + + Null type. + + + + + Any type. + + + + + + Specifies undefined schema Id handling options for the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Do not infer a schema Id. + + + + + Use the .NET type name as the schema Id. + + + + + Use the assembly qualified .NET type name as the schema Id. + + + + + + Returns detailed information related to the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + Gets the associated with the validation error. + + The JsonSchemaException associated with the validation error. + + + + Gets the path of the JSON location where the validation error occurred. + + The path of the JSON location where the validation error occurred. + + + + Gets the text description corresponding to the validation error. + + The text description. + + + + + Represents the callback method that will handle JSON schema validation events and the . + + + JSON Schema validation has been moved to its own package. See http://www.newtonsoft.com/jsonschema for more details. + + + + + + A camel case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Resolves member mappings for a type, camel casing property names. + + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used by to resolve a for a given . + + + + + Gets a value indicating whether members are being get and set using dynamic code generation. + This value is determined by the runtime permissions available. + + + true if using dynamic code generation; otherwise, false. + + + + + Gets or sets the default members search flags. + + The default members search flags. + + + + Gets or sets a value indicating whether compiler generated members should be serialized. + + + true if serialized compiler generated members; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the interface when serializing and deserializing types. + + + true if the interface will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore the attribute when serializing and deserializing types. + + + true if the attribute will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore IsSpecified members when serializing and deserializing types. + + + true if the IsSpecified members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets a value indicating whether to ignore ShouldSerialize members when serializing and deserializing types. + + + true if the ShouldSerialize members will be ignored when serializing and deserializing types; otherwise, false. + + + + + Gets or sets the naming strategy used to resolve how property names and dictionary keys are serialized. + + The naming strategy used to resolve how property names and dictionary keys are serialized. + + + + Initializes a new instance of the class. + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Gets the serializable members for the type. + + The type to get serializable members for. + The serializable members for the type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates the constructor parameters. + + The constructor to create properties for. + The type's member properties. + Properties for the given . + + + + Creates a for the given . + + The matching member property. + The constructor parameter. + A created for the given . + + + + Resolves the default for the contract. + + Type of the object. + The contract's default . + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Creates a for the given type. + + Type of the object. + A for the given type. + + + + Determines which contract type is created for the given type. + + Type of the object. + A for the given type. + + + + Creates properties for the given . + + The type to create properties for. + /// The member serialization mode for the type. + Properties for the given . + + + + Creates the used by the serializer to get and set values from a member. + + The member. + The used by the serializer to get and set values from a member. + + + + Creates a for the given . + + The member's parent . + The member to create a for. + A created for the given . + + + + Resolves the name of the property. + + Name of the property. + Resolved name of the property. + + + + Resolves the name of the extension data. By default no changes are made to extension data names. + + Name of the extension data. + Resolved name of the extension data. + + + + Resolves the key of the dictionary. By default is used to resolve dictionary keys. + + Key of the dictionary. + Resolved key of the dictionary. + + + + Gets the resolved name of the property. + + Name of the property. + Name of the property. + + + + The default naming strategy. Property names and dictionary keys are unchanged. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + The default serialization binder used when resolving and loading classes from type names. + + + + + Initializes a new instance of the class. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + The type of the object the formatter creates a new instance of. + + + + + When overridden in a derived class, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides information surrounding an error. + + + + + Gets the error. + + The error. + + + + Gets the original object that caused the error. + + The original object that caused the error. + + + + Gets the member that caused the error. + + The member that caused the error. + + + + Gets the path of the JSON location where the error occurred. + + The path of the JSON location where the error occurred. + + + + Gets or sets a value indicating whether this is handled. + + true if handled; otherwise, false. + + + + Provides data for the Error event. + + + + + Gets the current object the error event is being raised against. + + The current object the error event is being raised against. + + + + Gets the error context. + + The error context. + + + + Initializes a new instance of the class. + + The current object. + The error context. + + + + Get and set values for a using dynamic methods. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Provides methods to get attributes. + + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Used by to resolve a for a given . + + + + + + + + + Resolves the contract for a given type. + + The type to resolve a contract for. + The contract for a given type. + + + + Used to resolve references when serializing and deserializing JSON by the . + + + + + Resolves a reference to its object. + + The serialization context. + The reference to resolve. + The object that was resolved from the reference. + + + + Gets the reference for the specified object. + + The serialization context. + The object to get a reference for. + The reference to the object. + + + + Determines whether the specified object is referenced. + + The serialization context. + The object to test for a reference. + + true if the specified object is referenced; otherwise, false. + + + + + Adds a reference to the specified object. + + The serialization context. + The reference. + The object to reference. + + + + Allows users to control class loading and mandate what class to load. + + + + + When implemented, controls the binding of a serialized object to a type. + + Specifies the name of the serialized object. + Specifies the name of the serialized object + The type of the object the formatter creates a new instance of. + + + + When implemented, controls the binding of a serialized object to a type. + + The type of the object the formatter creates a new instance of. + Specifies the name of the serialized object. + Specifies the name of the serialized object. + + + + Provides methods to get and set values. + + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + Contract details for a used by the . + + + + + Gets the of the collection items. + + The of the collection items. + + + + Gets a value indicating whether the collection type is a multidimensional array. + + true if the collection type is a multidimensional array; otherwise, false. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the collection values. + + true if the creator has a parameter with the collection values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the default collection items . + + The converter. + + + + Gets or sets a value indicating whether the collection items preserve object references. + + true if collection items preserve object references; otherwise, false. + + + + Gets or sets the collection item reference loop handling. + + The reference loop handling. + + + + Gets or sets the collection item type name handling. + + The type name handling. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Sets extension data for an object during deserialization. + + The object to set extension data on. + The extension data key. + The extension data value. + + + + Gets extension data for an object during serialization. + + The object to set extension data on. + + + + Contract details for a used by the . + + + + + Gets the underlying type for the contract. + + The underlying type for the contract. + + + + Gets or sets the type created during deserialization. + + The type created during deserialization. + + + + Gets or sets whether this type contract is serialized as a reference. + + Whether this type contract is serialized as a reference. + + + + Gets or sets the default for this contract. + + The converter. + + + + Gets or sets the default creator method used to create the object. + + The default creator method used to create the object. + + + + Gets or sets a value indicating whether the default creator is non-public. + + true if the default object creator is non-public; otherwise, false. + + + + Contract details for a used by the . + + + + + Gets or sets the dictionary key resolver. + + The dictionary key resolver. + + + + Gets the of the dictionary keys. + + The of the dictionary keys. + + + + Gets the of the dictionary values. + + The of the dictionary values. + + + + Gets or sets the function used to create the object. When set this function will override . + + The function used to create the object. + + + + Gets a value indicating whether the creator has a parameter with the dictionary values. + + true if the creator has a parameter with the dictionary values; otherwise, false. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets the object's properties. + + The object's properties. + + + + Gets or sets the property name resolver. + + The property name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Gets or sets the object member serialization. + + The member object serialization. + + + + Gets or sets a value that indicates whether the object's properties are required. + + + A value indicating whether the object's properties are required. + + + + + Gets or sets how the object's properties with null values are handled during serialization and deserialization. + + How the object's properties with null values are handled during serialization and deserialization. + + + + Gets the object's properties. + + The object's properties. + + + + Gets a collection of instances that define the parameters used with . + + + + + Gets or sets the function used to create the object. When set this function will override . + This function is called with a collection of arguments which are defined by the collection. + + The function used to create the object. + + + + Gets or sets the extension data setter. + + + + + Gets or sets the extension data getter. + + + + + Gets or sets the extension data value type. + + + + + Gets or sets the extension data name resolver. + + The extension data name resolver. + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Maps a JSON property to a .NET member or constructor parameter. + + + + + Gets or sets the name of the property. + + The name of the property. + + + + Gets or sets the type that declared this property. + + The type that declared this property. + + + + Gets or sets the order of serialization of a member. + + The numeric order of serialization. + + + + Gets or sets the name of the underlying member or parameter. + + The name of the underlying member or parameter. + + + + Gets the that will get and set the during serialization. + + The that will get and set the during serialization. + + + + Gets or sets the for this property. + + The for this property. + + + + Gets or sets the type of the property. + + The type of the property. + + + + Gets or sets the for the property. + If set this converter takes precedence over the contract converter for the property type. + + The converter. + + + + Gets or sets the member converter. + + The member converter. + + + + Gets or sets a value indicating whether this is ignored. + + true if ignored; otherwise, false. + + + + Gets or sets a value indicating whether this is readable. + + true if readable; otherwise, false. + + + + Gets or sets a value indicating whether this is writable. + + true if writable; otherwise, false. + + + + Gets or sets a value indicating whether this has a member attribute. + + true if has a member attribute; otherwise, false. + + + + Gets the default value. + + The default value. + + + + Gets or sets a value indicating whether this is required. + + A value indicating whether this is required. + + + + Gets or sets a value indicating whether this property preserves object references. + + + true if this instance is reference; otherwise, false. + + + + + Gets or sets the property null value handling. + + The null value handling. + + + + Gets or sets the property default value handling. + + The default value handling. + + + + Gets or sets the property reference loop handling. + + The reference loop handling. + + + + Gets or sets the property object creation handling. + + The object creation handling. + + + + Gets or sets or sets the type name handling. + + The type name handling. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets a predicate used to determine whether the property should be deserialized. + + A predicate used to determine whether the property should be deserialized. + + + + Gets or sets a predicate used to determine whether the property should be serialized. + + A predicate used to determine whether the property should be serialized. + + + + Gets or sets an action used to set whether the property has been deserialized. + + An action used to set whether the property has been deserialized. + + + + Returns a that represents this instance. + + + A that represents this instance. + + + + + Gets or sets the converter used when serializing the property's collection items. + + The collection's items converter. + + + + Gets or sets whether this property's collection items are serialized as a reference. + + Whether this property's collection items are serialized as a reference. + + + + Gets or sets the type name handling used when serializing the property's collection items. + + The collection's items type name handling. + + + + Gets or sets the reference loop handling used when serializing the property's collection items. + + The collection's items reference loop handling. + + + + A collection of objects. + + + + + Initializes a new instance of the class. + + The type. + + + + When implemented in a derived class, extracts the key from the specified element. + + The element from which to extract the key. + The key for the specified element. + + + + Adds a object. + + The property to add to the collection. + + + + Gets the closest matching object. + First attempts to get an exact case match of and then + a case insensitive match. + + Name of the property. + A matching property if found. + + + + Gets a property by property name. + + The name of the property to get. + Type property name string comparison. + A matching property if found. + + + + The JSON writer. + + + + + + Gets the size of the serialize stack (amount of the objects serialized in the hierachy before the current). + + + + + Contract details for a used by the . + + + + + Initializes a new instance of the class. + + The underlying type for the contract. + + + + Lookup and create an instance of the type described by the argument. + + The type to create. + Optional arguments to pass to an initializing constructor of the JsonConverter. + If null, the default constructor is used. + + + + A base class for resolving how property names and dictionary keys are serialized. + + + + + A flag indicating whether dictionary keys should be processed. + Defaults to false. + + + + + A flag indicating whether extension data names should be processed. + Defaults to false. + + + + + A flag indicating whether explicitly specified property names, + e.g. a property name customized with a , should be processed. + Defaults to false. + + + + + Gets the serialized name for a given property name. + + The initial property name. + A flag indicating whether the property has had a name explicitly specified. + The serialized property name. + + + + Gets the serialized name for a given extension data name. + + The initial extension data name. + The serialized extension data name. + + + + Gets the serialized key for a given dictionary key. + + The initial dictionary key. + The serialized dictionary key. + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Represents a method that constructs an object. + + The object type to create. + + + + When applied to a method, specifies that the method is called when an error occurs serializing an object. + + + + + Provides methods to get attributes from a , , or . + + + + + Initializes a new instance of the class. + + The instance to get attributes for. This parameter should be a , , or . + + + + Returns a collection of all of the attributes, or an empty collection if there are no attributes. + + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Returns a collection of attributes, identified by type, or an empty collection if there are no attributes. + + The type of the attributes. + When true, look up the hierarchy chain for the inherited custom attribute. + A collection of s, or an empty collection. + + + + Get and set values for a using reflection. + + + + + Initializes a new instance of the class. + + The member info. + + + + Sets the value. + + The target to set the value on. + The value to set on the target. + + + + Gets the value. + + The target to get the value from. + The value. + + + + A snake case naming strategy. + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + + + Initializes a new instance of the class. + + + A flag indicating whether dictionary keys should be processed. + + + A flag indicating whether explicitly specified property names should be processed, + e.g. a property name customized with a . + + + A flag indicating whether extension data names should be processed. + + + + + Initializes a new instance of the class. + + + + + Resolves the specified property name. + + The property name to resolve. + The resolved property name. + + + + Specifies how strings are escaped when writing JSON text. + + + + + Only control characters (e.g. newline) are escaped. + + + + + All non-ASCII and control characters (e.g. newline) are escaped. + + + + + HTML (<, >, &, ', ") and control characters (e.g. newline) are escaped. + + + + + Indicates the method that will be used during deserialization for locating and loading assemblies. + + + + + In simple mode, the assembly used during deserialization need not match exactly the assembly used during serialization. Specifically, the version numbers need not match as the LoadWithPartialName method of the class is used to load the assembly. + + + + + In full mode, the assembly used during deserialization must match exactly the assembly used during serialization. The Load method of the class is used to load the assembly. + + + + + Specifies type name handling options for the . + + + should be used with caution when your application deserializes JSON from an external source. + Incoming types should be validated with a custom + when deserializing with a value other than . + + + + + Do not include the .NET type name when serializing types. + + + + + Include the .NET type name when serializing into a JSON object structure. + + + + + Include the .NET type name when serializing into a JSON array structure. + + + + + Always include the .NET type name when serializing. + + + + + Include the .NET type name when the type of the object being serialized is not the same as its declared type. + Note that this doesn't include the root serialized object by default. To include the root object's type name in JSON + you must specify a root type object with + or . + + + + + Determines whether the collection is null or empty. + + The collection. + + true if the collection is null or empty; otherwise, false. + + + + + Adds the elements of the specified collection to the specified generic . + + The list to add to. + The collection of elements to add. + + + + Converts the value to the specified type. If the value is unable to be converted, the + value is checked whether it assignable to the specified type. + + The value to convert. + The culture to use when converting. + The type to convert or cast the value to. + + The converted type. If conversion was unsuccessful, the initial value + is returned if assignable to the target type. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic that returns a result + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Helper method for generating a MetaObject which calls a + specific method on Dynamic, but uses one of the arguments for + the result. + + + + + Returns a Restrictions object which includes our current restrictions merged + with a restriction limiting our type + + + + + Helper class for serializing immutable collections. + Note that this is used by all builds, even those that don't support immutable collections, in case the DLL is GACed + https://github.com/JamesNK/Newtonsoft.Json/issues/652 + + + + + Helper utilities. + + + + + Compares two objects data. + + The object a. + The object b. + True if both objects are equal, otherwise false. + + + + The custom value comparision callback. + + + + + The default implementation of the values comparision function. + + The object a. + The object b. + True if both objects are equal, otherwise false. + + + + Gets the type of the typed collection's items. + + The type. + The type of the typed collection's items. + + + + Gets the member's underlying type. + + The member. + The underlying type of the member. + + + + Determines whether the member is an indexed property. + + The member. + + true if the member is an indexed property; otherwise, false. + + + + + Determines whether the property is an indexed property. + + The property. + + true if the property is an indexed property; otherwise, false. + + + + + Gets the member's value on the object. + + The member. + The target object. + The member's value on the object. + + + + Sets the member's value on the target object. + + The member. + The target. + The value. + + + + Determines whether the specified MemberInfo can be read. + + The MemberInfo to determine whether can be read. + /// if set to true then allow the member to be gotten non-publicly. + + true if the specified MemberInfo can be read; otherwise, false. + + + + + Determines whether the specified MemberInfo can be set. + + The MemberInfo to determine whether can be set. + if set to true then allow the member to be set non-publicly. + if set to true then allow the member to be set if read-only. + + true if the specified MemberInfo can be set; otherwise, false. + + + + + Builds a string. Unlike this class lets you reuse its internal buffer. + + + + + Determines whether the string is all white space. Empty string will return false. + + The string to test whether it is all white space. + + true if the string is all white space; otherwise, false. + + + + + Specifies the state of the . + + + + + An exception has been thrown, which has left the in an invalid state. + You may call the method to put the in the Closed state. + Any other method calls result in an being thrown. + + + + + The method has been called. + + + + + An object is being written. + + + + + An array is being written. + + + + + A constructor is being written. + + + + + A property is being written. + + + + + A write method has not been called. + + + + diff --git a/Source/Platforms/XboxOne/Binaries/Package.appxmanifest b/Source/Platforms/XboxOne/Binaries/Package.appxmanifest new file mode 100644 index 000000000..fefe3b93d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Package.appxmanifest @@ -0,0 +1,34 @@ + + + + + + {0} + {1} + Assets\StoreLogo.png + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/Project.csproj b/Source/Platforms/XboxOne/Binaries/Project.csproj new file mode 100644 index 000000000..c6c48c200 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Project.csproj @@ -0,0 +1,127 @@ + + + + + Release + {1} + {2} + AppContainerExe + Properties + {4} + {0} + en-US + UAP + 10.0.17763.0 + 10.0.15063.0 + 14 + 512 + {{A5A43C5B-DE2A-4C0C-9213-0A381AF9435A}};{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}} + true + WSACertificate.pfx + + + true + bin\{1}\Debug\ + DEBUG;TRACE;NETFX_CORE;WINDOWS_UWP;FLAX_UWP + ;2008 + full + {1} + false + prompt + true + + + bin\{1}\Release\ + TRACE;NETFX_CORE;WINDOWS_UWP;FLAX_UWP + true + ;2008 + pdbonly + {1} + false + prompt + true + true + + + PackageReference + + + + + + + + + Designer + + + + {3} + + + + + + + + + + + + + + + + + + + 6.0.1 + + + + + FlaxEngine.winmd + + + + + Visual C++ 2015 Runtime for Universal Windows Platform Apps + + + Visual C++ 2015 UWP Desktop Runtime for native apps + + + + + 14.0 + + + + + + + + + + + + + + <_GenerateAppxManifestDependsOn> + ModifyAppXPackage; + $(_GenerateAppxManifestDependsOn) + + + + + + + FlaxEngine.dll + + + Mono\%(RecursiveDir)%(Filename)%(Extension) + + + + + \ No newline at end of file diff --git a/Source/Platforms/XboxOne/Binaries/Solution.sln b/Source/Platforms/XboxOne/Binaries/Solution.sln new file mode 100644 index 000000000..b40534bb0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Solution.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 15 +VisualStudioVersion = 15.0.27004.2006 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}}") = "{0}", "{0}.csproj", "{2}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|{1} = Debug|{1} + Release|{1} = Release|{1} + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2}.Debug|{1}.ActiveCfg = Debug|{1} + {2}.Debug|{1}.Build.0 = Debug|{1} + {2}.Debug|{1}.Deploy.0 = Debug|{1} + {2}.Release|{1}.ActiveCfg = Release|{1} + {2}.Release|{1}.Build.0 = Release|{1} + {2}.Release|{1}.Deploy.0 = Release|{1} + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {{67F59049-E9C3-4BD3-979B-696F64AED75C}} + EndGlobalSection +EndGlobal diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/DirectXTex.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/DirectXTex.lib new file mode 100644 index 000000000..142c20c74 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/DirectXTex.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4b15ce907e25fc731cf84cc85b4d8dbafec4b8ef5ecb1c88d3fca1da3e363a08 +size 9981608 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/DirectXTex.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/DirectXTex.pdb new file mode 100644 index 000000000..70429bc4b --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/DirectXTex.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:dac7713181ffee6b188a655f5cf258b55c8ff0632d18e85cfd49bbecd6ebd28a +size 17551360 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/MonoPosixHelper.dll b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/MonoPosixHelper.dll new file mode 100644 index 000000000..51d662ee5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/MonoPosixHelper.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:36e61af1ed92e748ac188eb0dcce0422e91475c06ccf59537fa56a7013397ac9 +size 160256 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib new file mode 100644 index 000000000..27c214582 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:c986187f7fca939a69eaeacba4332e01db0c68d0feee0e0fe834222ff4c29c11 +size 1160038 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb new file mode 100644 index 000000000..570a68ec5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCharacterKinematic_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1a698a17a6071690ba7e93a16f60711b9e1dd12d9b88174ca7f9d29d2b053b0b +size 602112 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib new file mode 100644 index 000000000..cf6608e84 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCommon_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:00ed6a4568e61d4409af3a3f6299b9210c91fc1b8963e153e524aea226a8c49d +size 17406072 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb new file mode 100644 index 000000000..6946ac30d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCommon_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3a571c9c0a8f39450c9b3a6fab66ced2585e509d5c1e5e73eb117153e5f7d834 +size 1044480 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib new file mode 100644 index 000000000..0bd2e9e5d --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCooking_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:850ba049434cb58ee690d551e9c773185fd7ccc0c0addf85def0cd5718b6bb7f +size 1895882 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb new file mode 100644 index 000000000..b743a5291 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXCooking_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:377ee4a14c8728dd6d5e642f1bff2bbaedfed51e62fd1c9828f03faa2ea2a0dc +size 634880 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib new file mode 100644 index 000000000..f6735824a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXExtensions_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:2cdcdb71d9d78e6e2e322ec267b5dcd42c26c82eb957a479ed05a7975cd9f36c +size 9502710 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb new file mode 100644 index 000000000..3665d8fce --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXExtensions_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:50d911bc5766a579ac25d4490100ba1170392b9c66f5b3b86523dec595aabd5a +size 3461120 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib new file mode 100644 index 000000000..17f6bc953 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXFoundation_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:293fa914b5eb94a153253bb5356ecb1384427e311e251015608159c0f1409e17 +size 953572 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb new file mode 100644 index 000000000..e39923857 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXFoundation_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:645c7bc2bba8a2298e045ede40301946bd44b20365140514b905a1288403737b +size 397312 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib new file mode 100644 index 000000000..9c5df13b9 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:505caf793a09b86c6b05c28cd5e3fd791b35230a16b44e391737eec6d6ae7af3 +size 1940572 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb new file mode 100644 index 000000000..2fb3a2430 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXPvdSDK_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:5e0702a48fcd7d709d93203409115fa8aff9a8cc76d0f28cc140a6884be1d505 +size 921600 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib new file mode 100644 index 000000000..223e067f5 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXVehicle_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:227c07b7dd537650458acf6ab1a4a0c35d3dcfb200a0134d2f380eb4e202421c +size 5114932 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb new file mode 100644 index 000000000..80829688a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysXVehicle_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:18b038d7f74fa55a51f063a1fda9dc84e25f7563cd86021cbc47b82d14b68424 +size 3117056 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysX_static_64.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysX_static_64.lib new file mode 100644 index 000000000..5533dc220 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysX_static_64.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ef330e4655c0d9118ad7b6f314d12f1e2006befb7fe90afd5992b810cbd36db4 +size 28750550 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysX_static_64.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysX_static_64.pdb new file mode 100644 index 000000000..0a4a20714 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/PhysX_static_64.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:510840dd3fe26655fc205f9831cb6eb20f7737b456b2cf07249d511424b4b223 +size 3518464 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/eglib.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/eglib.pdb new file mode 100644 index 000000000..2b458f6a3 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/eglib.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4ac922cc6323a0d18d81daf9abe043e2b0a9779cf219ee9e7fe259d9c1b7d5d7 +size 159744 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/freetype.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/freetype.lib new file mode 100644 index 000000000..7a90fd32a --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/freetype.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:807983e2dbb0ec031ec38f8d7c4735ab841de95c66459122abcc25318dfc0b4c +size 3893188 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/freetype.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/freetype.pdb new file mode 100644 index 000000000..fb762114f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/freetype.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4a789455e9555b93416f8c78cc415bd3d633e25fe7e5f6f7e8cbbc26778aabe8 +size 487424 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libgcmonosgen.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libgcmonosgen.pdb new file mode 100644 index 000000000..2988a0a8e --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libgcmonosgen.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:e7ab3ec3b6f842ad64a00404c9a24c6ccacea316e1edf272291cb9de46f4d423 +size 348160 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmini.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmini.pdb new file mode 100644 index 000000000..bebda1681 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmini.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4305a7048c47cd106ddf06be89561ab251d6b04f3f451063b8de2eef8c64094e +size 864256 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmono-static.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmono-static.lib new file mode 100644 index 000000000..0da8765f7 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmono-static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3e21f28055d7e8bc4303f02b8c1e95ff5bd668a191ab2bdc8eb2a6386c57b456 +size 22747546 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmonoruntime.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmonoruntime.pdb new file mode 100644 index 000000000..00dab1aab --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmonoruntime.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc54df1b057b60405fa18ab7fb1939b256bc93b6235658ba4d6abec0ff4f8d0c +size 1249280 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmonoutils.pdb b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmonoutils.pdb new file mode 100644 index 000000000..24fa395ec --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libmonoutils.pdb @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:1b249a2f99e60d9069d3368f37b89a09213ca397228b6b174e826ff40c525d9d +size 356352 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libogg_static.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libogg_static.lib new file mode 100644 index 000000000..61f5a15e6 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libogg_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:7e7af4da0866d415488a21442dec7bdafa304bce8a5aae28b158bba94006c789 +size 38752 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libvorbis_static.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libvorbis_static.lib new file mode 100644 index 000000000..419e56fef --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libvorbis_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0cac40df57ea48fa5649d5fdb7fb073692eeb1208e9436c507f67dac2b8d3f89 +size 1003650 diff --git a/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libvorbisfile_static.lib b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libvorbisfile_static.lib new file mode 100644 index 000000000..743b204c2 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/ThirdParty/x64/libvorbisfile_static.lib @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:ab7e31480b7dc5682413e90bb417f8f5e825da179d510097755511e1bf2fec2a +size 65890 diff --git a/Source/Platforms/XboxOne/Binaries/Tools/clang.exe b/Source/Platforms/XboxOne/Binaries/Tools/clang.exe new file mode 100644 index 000000000..beb09b0e0 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Tools/clang.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:832d7963da0760a0bcce55c778c735289eba50983f1faa29176b4510a3cc6841 +size 37653272 diff --git a/Source/Platforms/XboxOne/Binaries/Tools/link.exe b/Source/Platforms/XboxOne/Binaries/Tools/link.exe new file mode 100644 index 000000000..a78eec640 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Tools/link.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:4def50fac505213ea0e722450437f740804856108cc1849ef86f4f5222b04c76 +size 1747552 diff --git a/Source/Platforms/XboxOne/Binaries/Tools/mono-2.0-sgen.dll b/Source/Platforms/XboxOne/Binaries/Tools/mono-2.0-sgen.dll new file mode 100644 index 000000000..241309269 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Tools/mono-2.0-sgen.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:589c52b67e95becffe8ee2283907e612cd212c991eb19e76ecb625c745a77e31 +size 5994496 diff --git a/Source/Platforms/XboxOne/Binaries/Tools/mono.exe b/Source/Platforms/XboxOne/Binaries/Tools/mono.exe new file mode 100644 index 000000000..8288bd168 --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Tools/mono.exe @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:feff5cbd757e6fb535ce3c13307a5a2172a6aee8aa49dbb6425a4796988c92c4 +size 156160 diff --git a/Source/Platforms/XboxOne/Binaries/Tools/msobj140.dll b/Source/Platforms/XboxOne/Binaries/Tools/msobj140.dll new file mode 100644 index 000000000..4d8d547dc --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Tools/msobj140.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:28fea8ab5a2b8fd082ad1479ce9b0a9c415bb3dc8039a18907693baf377fb69a +size 141968 diff --git a/Source/Platforms/XboxOne/Binaries/Tools/mspdbcore.dll b/Source/Platforms/XboxOne/Binaries/Tools/mspdbcore.dll new file mode 100644 index 000000000..901463d9f --- /dev/null +++ b/Source/Platforms/XboxOne/Binaries/Tools/mspdbcore.dll @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:0339235ca81ed7322fca3186fdddcad6d76f7ffeb72b0d07dcda2adaa809ed5b +size 631440 diff --git a/Source/Shaders/ACES.hlsl b/Source/Shaders/ACES.hlsl new file mode 100644 index 000000000..803fb0000 --- /dev/null +++ b/Source/Shaders/ACES.hlsl @@ -0,0 +1,1187 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __ACES__ +#define __ACES__ + +/* +============================================================================= + ACES: Academy Color Encoding System + https://github.com/ampas/aces-dev/tree/v1.0 + + License Terms for Academy Color Encoding System Components + + Academy Color Encoding System (ACES) software and tools are provided by the Academy under + the following terms and conditions: A worldwide, royalty-free, non-exclusive right to copy, modify, create + derivatives, and use, in source and binary forms, is hereby granted, subject to acceptance of this license. + + Copyright (c) 2013 Academy of Motion Picture Arts and Sciences (A.M.P.A.S.). Portions contributed by + others as indicated. All rights reserved. + + Performance of any of the aforementioned acts indicates acceptance to be bound by the following + terms and conditions: + + * Copies of source code, in whole or in part, must retain the above copyright + notice, this list of conditions and the Disclaimer of Warranty. + * Use in binary form must retain the above copyright notice, this list of + conditions and the Disclaimer of Warranty in the documentation and/or other + materials provided with the distribution. + * Nothing in this license shall be deemed to grant any rights to trademarks, + copyrights, patents, trade secrets or any other intellectual property of + A.M.P.A.S. or any contributors, except as expressly stated herein. + * Neither the name "A.M.P.A.S." nor the name of any other contributors to this + software may be used to endorse or promote products derivative of or based on + this software without express prior written permission of A.M.P.A.S. or the + contributors, as appropriate. + + This license shall be construed pursuant to the laws of the State of California, + and any disputes related thereto shall be subject to the jurisdiction of the courts therein. + + Disclaimer of Warranty: THIS SOFTWARE IS PROVIDED BY A.M.P.A.S. AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND + NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL A.M.P.A.S., OR ANY + CONTRIBUTORS OR DISTRIBUTORS, BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, RESITUTIONARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, + EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + WITHOUT LIMITING THE GENERALITY OF THE FOREGOING, THE ACADEMY SPECIFICALLY + DISCLAIMS ANY REPRESENTATIONS OR WARRANTIES WHATSOEVER RELATED TO PATENT OR + OTHER INTELLECTUAL PROPERTY RIGHTS IN THE ACADEMY COLOR ENCODING SYSTEM, OR + APPLICATIONS THEREOF, HELD BY PARTIES OTHER THAN A.M.P.A.S.,WHETHER DISCLOSED + OR UNDISCLOSED. +============================================================================= +*/ + +static const float3x3 AP0_2_XYZ_MAT = +{ + 0.9525523959, 0.0000000000, 0.0000936786, + 0.3439664498, 0.7281660966,-0.0721325464, + 0.0000000000, 0.0000000000, 1.0088251844, +}; + +static const float3x3 XYZ_2_AP0_MAT = +{ + 1.0498110175, 0.0000000000,-0.0000974845, + -0.4959030231, 1.3733130458, 0.0982400361, + 0.0000000000, 0.0000000000, 0.9912520182, +}; + +static const float3x3 AP1_2_XYZ_MAT = +{ + 0.6624541811, 0.1340042065, 0.1561876870, + 0.2722287168, 0.6740817658, 0.0536895174, + -0.0055746495, 0.0040607335, 1.0103391003, +}; + +static const float3x3 XYZ_2_AP1_MAT = +{ + 1.6410233797, -0.3248032942, -0.2364246952, + -0.6636628587, 1.6153315917, 0.0167563477, + 0.0117218943, -0.0082844420, 0.9883948585, +}; + +static const float3x3 AP0_2_AP1_MAT = //mul( AP0_2_XYZ_MAT, XYZ_2_AP1_MAT ); +{ + 1.4514393161, -0.2365107469, -0.2149285693, + -0.0765537734, 1.1762296998, -0.0996759264, + 0.0083161484, -0.0060324498, 0.9977163014, +}; + +static const float3x3 AP1_2_AP0_MAT = //mul( AP1_2_XYZ_MAT, XYZ_2_AP0_MAT ); +{ + 0.6954522414, 0.1406786965, 0.1638690622, + 0.0447945634, 0.8596711185, 0.0955343182, + -0.0055258826, 0.0040252103, 1.0015006723, +}; + +static const float3 AP1_RGB2Y = +{ + 0.2722287168, //AP1_2_XYZ_MAT[0][1], + 0.6740817658, //AP1_2_XYZ_MAT[1][1], + 0.0536895174, //AP1_2_XYZ_MAT[2][1] +}; + +// REC 709 primaries +static const float3x3 XYZ_2_sRGB_MAT = +{ + 3.2409699419, -1.5373831776, -0.4986107603, + -0.9692436363, 1.8759675015, 0.0415550574, + 0.0556300797, -0.2039769589, 1.0569715142, +}; + +static const float3x3 sRGB_2_XYZ_MAT = +{ + 0.4124564, 0.3575761, 0.1804375, + 0.2126729, 0.7151522, 0.0721750, + 0.0193339, 0.1191920, 0.9503041, +}; + +// REC 2020 primaries +static const float3x3 XYZ_2_Rec2020_MAT = +{ + 1.7166084, -0.3556621, -0.2533601, + -0.6666829, 1.6164776, 0.0157685, + 0.0176422, -0.0427763, 0.94222867 +}; + +static const float3x3 Rec2020_2_XYZ_MAT = +{ + 0.6369736, 0.1446172, 0.1688585, + 0.2627066, 0.6779996, 0.0592938, + 0.0000000, 0.0280728, 1.0608437 +}; + +// P3, D65 primaries +static const float3x3 XYZ_2_P3D65_MAT = +{ + 2.4933963, -0.9313459, -0.4026945, + -0.8294868, 1.7626597, 0.0236246, + 0.0358507, -0.0761827, 0.9570140 +}; + +static const float3x3 P3D65_2_XYZ_MAT = +{ + 0.4865906, 0.2656683, 0.1981905, + 0.2289838, 0.6917402, 0.0792762, + 0.0000000, 0.0451135, 1.0438031 +}; + +// Bradford chromatic adaptation transforms between ACES white point (D60) and sRGB white point (D65) +static const float3x3 D65_2_D60_CAT = +{ + 1.01303, 0.00610531, -0.014971, + 0.00769823, 0.998165, -0.00503203, + -0.00284131, 0.00468516, 0.924507, +}; + +static const float3x3 D60_2_D65_CAT = +{ + 0.987224, -0.00611327, 0.0159533, + -0.00759836, 1.00186, 0.00533002, + 0.00307257, -0.00509595, 1.08168, +}; + +static const float HALF_MAX = 65504.0; + +float rgb_2_saturation( float3 rgb ) +{ + float minrgb = min( min(rgb.r, rgb.g ), rgb.b ); + float maxrgb = max( max(rgb.r, rgb.g ), rgb.b ); + return ( max( maxrgb, 1e-10 ) - max( minrgb, 1e-10 ) ) / max( maxrgb, 1e-2 ); +} + +float glow_fwd( float ycIn, float glowGainIn, float glowMid) +{ + float glowGainOut; + + if (ycIn <= 2./3. * glowMid) { + glowGainOut = glowGainIn; + } else if ( ycIn >= 2 * glowMid) { + glowGainOut = 0; + } else { + glowGainOut = glowGainIn * (glowMid / ycIn - 0.5); + } + + return glowGainOut; +} + +float glow_inv( float ycOut, float glowGainIn, float glowMid) +{ + float glowGainOut; + + if (ycOut <= ((1 + glowGainIn) * 2./3. * glowMid)) { + glowGainOut = -glowGainIn / (1 + glowGainIn); + } else if ( ycOut >= (2. * glowMid)) { + glowGainOut = 0.; + } else { + glowGainOut = glowGainIn * (glowMid / ycOut - 1./2.) / (glowGainIn / 2. - 1.); + } + + return glowGainOut; +} + + +float sigmoid_shaper( float x) +{ + // Sigmoid function in the range 0 to 1 spanning -2 to +2. + + float t = max( 1 - abs( 0.5 * x ), 0 ); + float y = 1 + sign(x) * (1 - t*t); + return 0.5 * y; +} + + +// ------- Red modifier functions +float cubic_basis_shaper +( + float x, + float w // full base width of the shaper function (in degrees) +) +{ + //return Square( smoothstep( 0, 1, 1 - abs( 2 * x/w ) ) ); + + float M[16] = + { + -1./6, 3./6, -3./6, 1./6 , + 3./6, -6./6, 3./6, 0./6 , + -3./6, 0./6, 3./6, 0./6 , + 1./6, 4./6, 1./6, 0./6 + }; + + float knots[5] = { -0.5 * w, -0.25 * w, 0, 0.25 * w, 0.5 * w }; + + float y = 0; + if ((x > knots[0]) && (x < knots[4])) + { + float knot_coord = (x - knots[0]) * 4.0 / w; + int j = knot_coord; + float t = knot_coord - j; + + float monomials[4] = { t*t*t, t*t, t, 1.0 }; + + // (if/else structure required for compatibility with CTL < v1.5.) + if ( j == 3) { + y = monomials[0] * M[0*4+0] + monomials[1] * M[1*4+0] + + monomials[2] * M[2*4+0] + monomials[3] * M[3*4+0]; + } else if ( j == 2) { + y = monomials[0] * M[0*4+1] + monomials[1] * M[1*4+1] + + monomials[2] * M[2*4+1] + monomials[3] * M[3*4+1]; + } else if ( j == 1) { + y = monomials[0] * M[0*4+2] + monomials[1] * M[1*4+2] + + monomials[2] * M[2*4+2] + monomials[3] * M[3*4+2]; + } else if ( j == 0) { + y = monomials[0] * M[0*4+3] + monomials[1] * M[1*4+3] + + monomials[2] * M[2*4+3] + monomials[3] * M[3*4+3]; + } else { + y = 0.0; + } + } + + return y * 1.5; +} + +float center_hue( float hue, float centerH) +{ + float hueCentered = hue - centerH; + if (hueCentered < -180.) + hueCentered += 360; + else if (hueCentered > 180.) + hueCentered -= 360; + return hueCentered; +} + + +// Textbook monomial to basis-function conversion matrix. +static const float3x3 M = +{ + { 0.5, -1.0, 0.5 }, + { -1.0, 1.0, 0.5 }, + { 0.5, 0.0, 0.0 } +}; + +struct SegmentedSplineParams_c5 +{ + float coefsLow[6]; // coefs for B-spline between minPoint and midPoint (units of log luminance) + float coefsHigh[6]; // coefs for B-spline between midPoint and maxPoint (units of log luminance) + float2 minPoint; // {luminance, luminance} linear extension below this + float2 midPoint; // {luminance, luminance} + float2 maxPoint; // {luminance, luminance} linear extension above this + float slopeLow; // log-log slope of low linear extension + float slopeHigh; // log-log slope of high linear extension +}; + +struct SegmentedSplineParams_c9 +{ + float coefsLow[10]; // coefs for B-spline between minPoint and midPoint (units of log luminance) + float coefsHigh[10]; // coefs for B-spline between midPoint and maxPoint (units of log luminance) + float2 minPoint; // {luminance, luminance} linear extension below this + float2 midPoint; // {luminance, luminance} + float2 maxPoint; // {luminance, luminance} linear extension above this + float slopeLow; // log-log slope of low linear extension + float slopeHigh; // log-log slope of high linear extension +}; + +float segmented_spline_c5_fwd( float x ) +{ + // RRT_PARAMS + const SegmentedSplineParams_c5 C = + { + // coefsLow[6] + { -4.0000000000, -4.0000000000, -3.1573765773, -0.4852499958, 1.8477324706, 1.8477324706 }, + // coefsHigh[6] + { -0.7185482425, 2.0810307172, 3.6681241237, 4.0000000000, 4.0000000000, 4.0000000000 }, + { 0.18*exp2(-15.0), 0.0001}, // minPoint + { 0.18, 4.8}, // midPoint + { 0.18*exp2(18.0), 10000.}, // maxPoint + 0.0, // slopeLow + 0.0 // slopeHigh + }; + + const int N_KNOTS_LOW = 4; + const int N_KNOTS_HIGH = 4; + + // Check for negatives or zero before taking the log. If negative or zero, + // set to ACESMIN.1 + float xCheck = x <= 0 ? exp2(-14.0) : x; + + float logx = log10( xCheck); + float logy; + + if ( logx <= log10(C.minPoint.x) ) + { + logy = logx * C.slopeLow + ( log10(C.minPoint.y) - C.slopeLow * log10(C.minPoint.x) ); + } + else if (( logx > log10(C.minPoint.x) ) && ( logx < log10(C.midPoint.x) )) + { + float knot_coord = (N_KNOTS_LOW-1) * (logx-log10(C.minPoint.x))/(log10(C.midPoint.x)-log10(C.minPoint.x)); + int j = knot_coord; + float t = knot_coord - j; + + float3 cf = { C.coefsLow[ j], C.coefsLow[ j + 1], C.coefsLow[ j + 2]}; + + float3 monomials = { t * t, t, 1.0 }; + logy = dot( monomials, mul( cf, M)); + } + else if (( logx >= log10(C.midPoint.x) ) && ( logx < log10(C.maxPoint.x) )) + { + float knot_coord = (N_KNOTS_HIGH-1) * (logx-log10(C.midPoint.x))/(log10(C.maxPoint.x)-log10(C.midPoint.x)); + int j = knot_coord; + float t = knot_coord - j; + + float3 cf = { C.coefsHigh[ j], C.coefsHigh[ j + 1], C.coefsHigh[ j + 2]}; + + float3 monomials = { t * t, t, 1.0 }; + logy = dot( monomials, mul( cf, M)); + } + else + { //if ( logIn >= log10(C.maxPoint.x) ) { + logy = logx * C.slopeHigh + ( log10(C.maxPoint.y) - C.slopeHigh * log10(C.maxPoint.x) ); + } + + return pow( 10, logy ); +} + +float segmented_spline_c5_rev( float y ) +{ + // RRT_PARAMS + const SegmentedSplineParams_c5 C = + { + // coefsLow[6] + { -4.0000000000, -4.0000000000, -3.1573765773, -0.4852499958, 1.8477324706, 1.8477324706 }, + // coefsHigh[6] + { -0.7185482425, 2.0810307172, 3.6681241237, 4.0000000000, 4.0000000000, 4.0000000000 }, + { 0.18*exp2(-15.0), 0.0001}, // minPoint + { 0.18, 4.8}, // midPoint + { 0.18*exp2(18.0), 10000.}, // maxPoint + 0.0, // slopeLow + 0.0 // slopeHigh + }; + + const int N_KNOTS_LOW = 4; + const int N_KNOTS_HIGH = 4; + + const float KNOT_INC_LOW = (log10(C.midPoint.x) - log10(C.minPoint.x)) / (N_KNOTS_LOW - 1.); + const float KNOT_INC_HIGH = (log10(C.maxPoint.x) - log10(C.midPoint.x)) / (N_KNOTS_HIGH - 1.); + + int i; + + // KNOT_Y is luminance of the spline at each knot + float KNOT_Y_LOW[N_KNOTS_LOW]; + for (i = 0; i < N_KNOTS_LOW; i = i+1) + { + KNOT_Y_LOW[i] = (C.coefsLow[i] + C.coefsLow[i+1]) / 2.; + }; + + float KNOT_Y_HIGH[N_KNOTS_HIGH]; + for (i = 0; i < N_KNOTS_HIGH; i = i+1) + { + KNOT_Y_HIGH[i] = ( C.coefsHigh[i] + C.coefsHigh[i+1]) / 2.; + }; + + float logy = log10(max(y,1e-10)); + + float logx; + if (logy <= log10(C.minPoint.y)) + { + logx = log10(C.minPoint.x); + } + else if ( (logy > log10(C.minPoint.y)) && (logy <= log10(C.midPoint.y)) ) + { + uint j; + float3 cf; + if (logy > KNOT_Y_LOW[ 0] && logy <= KNOT_Y_LOW[ 1]) { + cf[ 0] = C.coefsLow[0]; cf[ 1] = C.coefsLow[1]; cf[ 2] = C.coefsLow[2]; j = 0; + } else if ( logy > KNOT_Y_LOW[ 1] && logy <= KNOT_Y_LOW[ 2]) { + cf[ 0] = C.coefsLow[1]; cf[ 1] = C.coefsLow[2]; cf[ 2] = C.coefsLow[3]; j = 1; + } else if ( logy > KNOT_Y_LOW[ 2] && logy <= KNOT_Y_LOW[ 3]) { + cf[ 0] = C.coefsLow[2]; cf[ 1] = C.coefsLow[3]; cf[ 2] = C.coefsLow[4]; j = 2; + } + + const float3 tmp = mul( cf, M); + + float a = tmp[ 0]; + float b = tmp[ 1]; + float c = tmp[ 2]; + c = c - logy; + + const float d = sqrt( b * b - 4. * a * c); + + const float t = ( 2. * c) / ( -d - b); + + logx = log10(C.minPoint.x) + ( t + j) * KNOT_INC_LOW; + } + else if ( (logy > log10(C.midPoint.y)) && (logy < log10(C.maxPoint.y)) ) + { + uint j; + float3 cf; + if ( logy > KNOT_Y_HIGH[ 0] && logy <= KNOT_Y_HIGH[ 1]) { + cf[ 0] = C.coefsHigh[0]; cf[ 1] = C.coefsHigh[1]; cf[ 2] = C.coefsHigh[2]; j = 0; + } else if ( logy > KNOT_Y_HIGH[ 1] && logy <= KNOT_Y_HIGH[ 2]) { + cf[ 0] = C.coefsHigh[1]; cf[ 1] = C.coefsHigh[2]; cf[ 2] = C.coefsHigh[3]; j = 1; + } else if ( logy > KNOT_Y_HIGH[ 2] && logy <= KNOT_Y_HIGH[ 3]) { + cf[ 0] = C.coefsHigh[2]; cf[ 1] = C.coefsHigh[3]; cf[ 2] = C.coefsHigh[4]; j = 2; + } + + const float3 tmp = mul( cf, M); + + float a = tmp[ 0]; + float b = tmp[ 1]; + float c = tmp[ 2]; + c = c - logy; + + const float d = sqrt( b * b - 4. * a * c); + + const float t = ( 2. * c) / ( -d - b); + + logx = log10(C.midPoint.x) + ( t + j) * KNOT_INC_HIGH; + } + else + { //if ( logy >= log10(C.maxPoint.y) ) { + logx = log10(C.maxPoint.x); + } + + return pow(10, logx); +} + +float segmented_spline_c9_fwd( float x, const SegmentedSplineParams_c9 C ) +{ + const int N_KNOTS_LOW = 8; + const int N_KNOTS_HIGH = 8; + + // Check for negatives or zero before taking the log. If negative or zero, + // set to OCESMIN. + float xCheck = x <= 0 ? 1e-4 : x; + + float logx = log10(xCheck); + float logy; + + if (logx <= log10(C.minPoint.x)) + { + logy = logx * C.slopeLow + (log10(C.minPoint.y) - C.slopeLow * log10(C.minPoint.x)); + } + else if ((logx > log10(C.minPoint.x)) && (logx < log10(C.midPoint.x))) + { + float knot_coord = (N_KNOTS_LOW - 1) * (logx - log10(C.minPoint.x)) / (log10(C.midPoint.x) - log10(C.minPoint.x)); + int j = knot_coord; + float t = knot_coord - j; + + float3 cf = { C.coefsLow[j], C.coefsLow[j + 1], C.coefsLow[j + 2] }; + + float3 monomials = { t * t, t, 1.0 }; + logy = dot(monomials, mul(cf, M)); + } + else if ((logx >= log10(C.midPoint.x)) && (logx < log10(C.maxPoint.x))) + { + float knot_coord = (N_KNOTS_HIGH - 1) * (logx - log10(C.midPoint.x)) / (log10(C.maxPoint.x) - log10(C.midPoint.x)); + int j = knot_coord; + float t = knot_coord - j; + + float3 cf = { C.coefsHigh[j], C.coefsHigh[j + 1], C.coefsHigh[j + 2] }; + + float3 monomials = { t * t, t, 1.0 }; + logy = dot(monomials, mul(cf, M)); + } + else//if ( logIn >= log10(C.maxPoint.x) ) + { + logy = logx * C.slopeHigh + (log10(C.maxPoint.y) - C.slopeHigh * log10(C.maxPoint.x)); + } + + return pow( 10, logy ); +} + +float segmented_spline_c9_rev( float y, const SegmentedSplineParams_c9 C ) +{ + const int N_KNOTS_LOW = 8; + const int N_KNOTS_HIGH = 8; + + const float KNOT_INC_LOW = (log10(C.midPoint.x) - log10(C.minPoint.x)) / (N_KNOTS_LOW - 1.); + const float KNOT_INC_HIGH = (log10(C.maxPoint.x) - log10(C.midPoint.x)) / (N_KNOTS_HIGH - 1.); + + int i; + + // KNOT_Y is luminance of the spline at each knot + float KNOT_Y_LOW[ N_KNOTS_LOW]; + for (i = 0; i < N_KNOTS_LOW; i = i+1) { + KNOT_Y_LOW[ i] = ( C.coefsLow[i] + C.coefsLow[i+1]) / 2.; + }; + + float KNOT_Y_HIGH[ N_KNOTS_HIGH]; + for (i = 0; i < N_KNOTS_HIGH; i = i+1) { + KNOT_Y_HIGH[ i] = ( C.coefsHigh[i] + C.coefsHigh[i+1]) / 2.; + }; + + float logy = log10( max( y, 1e-10)); + + float logx; + if (logy <= log10(C.minPoint.y)) { + logx = log10(C.minPoint.x); + } else if ( (logy > log10(C.minPoint.y)) && (logy <= log10(C.midPoint.y)) ) { + uint j; + float3 cf; + if ( logy > KNOT_Y_LOW[ 0] && logy <= KNOT_Y_LOW[ 1]) { + cf[ 0] = C.coefsLow[0]; cf[ 1] = C.coefsLow[1]; cf[ 2] = C.coefsLow[2]; j = 0; + } else if ( logy > KNOT_Y_LOW[ 1] && logy <= KNOT_Y_LOW[ 2]) { + cf[ 0] = C.coefsLow[1]; cf[ 1] = C.coefsLow[2]; cf[ 2] = C.coefsLow[3]; j = 1; + } else if ( logy > KNOT_Y_LOW[ 2] && logy <= KNOT_Y_LOW[ 3]) { + cf[ 0] = C.coefsLow[2]; cf[ 1] = C.coefsLow[3]; cf[ 2] = C.coefsLow[4]; j = 2; + } else if ( logy > KNOT_Y_LOW[ 3] && logy <= KNOT_Y_LOW[ 4]) { + cf[ 0] = C.coefsLow[3]; cf[ 1] = C.coefsLow[4]; cf[ 2] = C.coefsLow[5]; j = 3; + } else if ( logy > KNOT_Y_LOW[ 4] && logy <= KNOT_Y_LOW[ 5]) { + cf[ 0] = C.coefsLow[4]; cf[ 1] = C.coefsLow[5]; cf[ 2] = C.coefsLow[6]; j = 4; + } else if ( logy > KNOT_Y_LOW[ 5] && logy <= KNOT_Y_LOW[ 6]) { + cf[ 0] = C.coefsLow[5]; cf[ 1] = C.coefsLow[6]; cf[ 2] = C.coefsLow[7]; j = 5; + } else if ( logy > KNOT_Y_LOW[ 6] && logy <= KNOT_Y_LOW[ 7]) { + cf[ 0] = C.coefsLow[6]; cf[ 1] = C.coefsLow[7]; cf[ 2] = C.coefsLow[8]; j = 6; + } + + const float3 tmp = mul( cf, M); + + float a = tmp[ 0]; + float b = tmp[ 1]; + float c = tmp[ 2]; + c = c - logy; + + const float d = sqrt( b * b - 4. * a * c); + + const float t = ( 2. * c) / ( -d - b); + + logx = log10(C.minPoint.x) + ( t + j) * KNOT_INC_LOW; + } else if ( (logy > log10(C.midPoint.y)) && (logy < log10(C.maxPoint.y)) ) { + uint j; + float3 cf; + if ( logy > KNOT_Y_HIGH[ 0] && logy <= KNOT_Y_HIGH[ 1]) { + cf[ 0] = C.coefsHigh[0]; cf[ 1] = C.coefsHigh[1]; cf[ 2] = C.coefsHigh[2]; j = 0; + } else if ( logy > KNOT_Y_HIGH[ 1] && logy <= KNOT_Y_HIGH[ 2]) { + cf[ 0] = C.coefsHigh[1]; cf[ 1] = C.coefsHigh[2]; cf[ 2] = C.coefsHigh[3]; j = 1; + } else if ( logy > KNOT_Y_HIGH[ 2] && logy <= KNOT_Y_HIGH[ 3]) { + cf[ 0] = C.coefsHigh[2]; cf[ 1] = C.coefsHigh[3]; cf[ 2] = C.coefsHigh[4]; j = 2; + } else if ( logy > KNOT_Y_HIGH[ 3] && logy <= KNOT_Y_HIGH[ 4]) { + cf[ 0] = C.coefsHigh[3]; cf[ 1] = C.coefsHigh[4]; cf[ 2] = C.coefsHigh[5]; j = 3; + } else if ( logy > KNOT_Y_HIGH[ 4] && logy <= KNOT_Y_HIGH[ 5]) { + cf[ 0] = C.coefsHigh[4]; cf[ 1] = C.coefsHigh[5]; cf[ 2] = C.coefsHigh[6]; j = 4; + } else if ( logy > KNOT_Y_HIGH[ 5] && logy <= KNOT_Y_HIGH[ 6]) { + cf[ 0] = C.coefsHigh[5]; cf[ 1] = C.coefsHigh[6]; cf[ 2] = C.coefsHigh[7]; j = 5; + } else if ( logy > KNOT_Y_HIGH[ 6] && logy <= KNOT_Y_HIGH[ 7]) { + cf[ 0] = C.coefsHigh[6]; cf[ 1] = C.coefsHigh[7]; cf[ 2] = C.coefsHigh[8]; j = 6; + } + + const float3 tmp = mul( cf, M); + + float a = tmp[ 0]; + float b = tmp[ 1]; + float c = tmp[ 2]; + c = c - logy; + + const float d = sqrt( b * b - 4. * a * c); + + const float t = ( 2. * c) / ( -d - b); + + logx = log10(C.midPoint.x) + ( t + j) * KNOT_INC_HIGH; + } + else + { //if ( logy >= log10(C.maxPoint.y) ) { + logx = log10(C.maxPoint.x); + } + + return pow(10, logx); +} + +// Transformations from RGB to other color representations +float rgb_2_hue( float3 rgb ) +{ + // Returns a geometric hue angle in degrees (0-360) based on RGB values. + // For neutral colors, hue is undefined and the function will return a quiet NaN value. + float hue; + if (rgb[0] == rgb[1] && rgb[1] == rgb[2]) + { + //hue = FLT_NAN; // RGB triplets where RGB are equal have an undefined hue + hue = 0; + } + else + { + hue = (180. / PI) * atan2(sqrt(3.0)*(rgb[1] - rgb[2]), 2 * rgb[0] - rgb[1] - rgb[2]); + } + + if (hue < 0.) + hue = hue + 360; + + return clamp( hue, 0, 360 ); +} + +float rgb_2_yc( float3 rgb, float ycRadiusWeight = 1.75) +{ + // Converts RGB to a luminance proxy, here called YC + // YC is ~ Y + K * Chroma + // Constant YC is a cone-shaped surface in RGB space, with the tip on the + // neutral axis, towards white. + // YC is normalized: RGB 1 1 1 maps to YC = 1 + // + // ycRadiusWeight defaults to 1.75, although can be overridden in function + // call to rgb_2_yc + // ycRadiusWeight = 1 -> YC for pure cyan, magenta, yellow == YC for neutral + // of same value + // ycRadiusWeight = 2 -> YC for pure red, green, blue == YC for neutral of + // same value. + + float r = rgb[0]; + float g = rgb[1]; + float b = rgb[2]; + + float chroma = sqrt(b*(b-g)+g*(g-r)+r*(r-b)); + + return ( b + g + r + ycRadiusWeight * chroma) / 3.; +} + +// +// Reference Rendering Transform (RRT) +// +// Input is ACES +// Output is OCES +// +float3 RRT( float3 aces ) +{ + // "Glow" module constants + const float RRT_GLOW_GAIN = 0.05; + const float RRT_GLOW_MID = 0.08; + + float saturation = rgb_2_saturation( aces ); + float ycIn = rgb_2_yc( aces ); + float s = sigmoid_shaper( (saturation - 0.4) / 0.2); + float addedGlow = 1 + glow_fwd( ycIn, RRT_GLOW_GAIN * s, RRT_GLOW_MID); + aces *= addedGlow; + + // --- Red modifier --- // + const float RRT_RED_SCALE = 0.82; + const float RRT_RED_PIVOT = 0.03; + const float RRT_RED_HUE = 0; + const float RRT_RED_WIDTH = 135; + float hue = rgb_2_hue( aces ); + float centeredHue = center_hue( hue, RRT_RED_HUE ); + float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH ); + + aces.r += hueWeight * saturation * (RRT_RED_PIVOT - aces.r) * (1. - RRT_RED_SCALE); + + // --- ACES to RGB rendering space --- // + aces = clamp( aces, 0, 65535 ); // avoids saturated negative colors from becoming positive in the matrix + + float3 rgbPre = mul( AP0_2_AP1_MAT, aces ); + + rgbPre = clamp( rgbPre, 0, 65535 ); + + // --- Global desaturation --- // + const float RRT_SAT_FACTOR = 0.96; + rgbPre = lerp( dot( rgbPre, AP1_RGB2Y ), rgbPre, RRT_SAT_FACTOR ); + + // --- Apply the tonescale independently in rendering-space RGB --- // + float3 rgbPost; + rgbPost[0] = segmented_spline_c5_fwd( rgbPre[0] ); + rgbPost[1] = segmented_spline_c5_fwd( rgbPre[1] ); + rgbPost[2] = segmented_spline_c5_fwd( rgbPre[2] ); + + // --- RGB rendering space to OCES --- // + float3 rgbOces = mul( AP1_2_AP0_MAT, rgbPost ); + return rgbOces; +} + +// +// Inverse Reference Rendering Transform (RRT) +// +// Input is OCES +// Output is ACES +// + +float3 Inverse_RRT( float3 oces ) +{ + // "Glow" module constants + const float RRT_GLOW_GAIN = 0.05; + const float RRT_GLOW_MID = 0.08; + + // --- OCES to RGB rendering space --- // + float3 rgbPre = mul(AP0_2_AP1_MAT, oces); + + // --- Apply the tonescale independently in rendering-space RGB --- // + float3 rgbPost; + rgbPost[0] = segmented_spline_c5_rev( rgbPre[0]); + rgbPost[1] = segmented_spline_c5_rev( rgbPre[1]); + rgbPost[2] = segmented_spline_c5_rev( rgbPre[2]); + + // --- Global desaturation --- // + // rgbPost = mul( rgbPost, invert_f33(RRT_SAT_MAT)); + const float RRT_SAT_FACTOR = 0.96; + rgbPost = lerp( dot( rgbPost, AP1_RGB2Y ), rgbPost, rcp(RRT_SAT_FACTOR) ); + + rgbPost = clamp( rgbPost, 0., HALF_MAX); + + // --- RGB rendering space to ACES --- // + float3 aces = mul( AP1_2_AP0_MAT, rgbPost); + + aces = clamp( aces, 0., HALF_MAX); + + // --- Red modifier --- // + const float RRT_RED_SCALE = 0.82; + const float RRT_RED_PIVOT = 0.03; + const float RRT_RED_HUE = 0; + const float RRT_RED_WIDTH = 135; + float hue = rgb_2_hue( aces); + float centeredHue = center_hue( hue, RRT_RED_HUE); + float hueWeight = cubic_basis_shaper( centeredHue, RRT_RED_WIDTH); + + float minChan; + if (centeredHue < 0) { + // min_f3(aces) = aces[1] (i.e. magenta-red) + minChan = aces[1]; + } else { // min_f3(aces) = aces[2] (i.e. yellow-red) + minChan = aces[2]; + } + + float a = hueWeight * (1. - RRT_RED_SCALE) - 1.; + float b = aces[0] - hueWeight * (RRT_RED_PIVOT + minChan) * (1. - RRT_RED_SCALE); + float c = hueWeight * RRT_RED_PIVOT * minChan * (1. - RRT_RED_SCALE); + + aces[0] = ( -b - sqrt( b * b - 4. * a * c)) / ( 2. * a); + + // --- Glow module --- // + float saturation = rgb_2_saturation( aces); + float ycOut = rgb_2_yc( aces); + float s = sigmoid_shaper( (saturation - 0.4) / 0.2); + float reducedGlow = 1. + glow_inv( ycOut, RRT_GLOW_GAIN * s, RRT_GLOW_MID); + + aces = reducedGlow * aces; + + // Assign ACES RGB to output variables (ACES) + return aces; +} + + + +// Transformations between CIE XYZ tristimulus values and CIE x,y +// chromaticity coordinates +float3 XYZ_2_xyY( float3 XYZ ) +{ + float3 xyY; + float divisor = (XYZ[0] + XYZ[1] + XYZ[2]); + if (divisor == 0.) divisor = 1e-10; + xyY[0] = XYZ[0] / divisor; + xyY[1] = XYZ[1] / divisor; + xyY[2] = XYZ[1]; + + return xyY; +} + +float3 xyY_2_XYZ( float3 xyY ) +{ + float3 XYZ; + XYZ[0] = xyY[0] * xyY[2] / max( xyY[1], 1e-10); + XYZ[1] = xyY[2]; + XYZ[2] = (1.0 - xyY[0] - xyY[1]) * xyY[2] / max( xyY[1], 1e-10); + + return XYZ; +} + + +float3x3 ChromaticAdaptation( float2 src_xy, float2 dst_xy ) +{ + // Von Kries chromatic adaptation + + // Bradford + const float3x3 ConeResponse = + { + 0.8951, 0.2664, -0.1614, + -0.7502, 1.7135, 0.0367, + 0.0389, -0.0685, 1.0296, + }; + const float3x3 InvConeResponse = + { + 0.9869929, -0.1470543, 0.1599627, + 0.4323053, 0.5183603, 0.0492912, + -0.0085287, 0.0400428, 0.9684867, + }; + + float3 src_XYZ = xyY_2_XYZ( float3( src_xy, 1 ) ); + float3 dst_XYZ = xyY_2_XYZ( float3( dst_xy, 1 ) ); + + float3 src_coneResp = mul( ConeResponse, src_XYZ ); + float3 dst_coneResp = mul( ConeResponse, dst_XYZ ); + + float3x3 VonKriesMat = + { + { dst_coneResp[0] / src_coneResp[0], 0.0, 0.0 }, + { 0.0, dst_coneResp[1] / src_coneResp[1], 0.0 }, + { 0.0, 0.0, dst_coneResp[2] / src_coneResp[2] } + }; + + return mul( InvConeResponse, mul( VonKriesMat, ConeResponse ) ); +} + +float Y_2_linCV( float Y, float Ymax, float Ymin) +{ + return (Y - Ymin) / (Ymax - Ymin); +} + +float linCV_2_Y( float linCV, float Ymax, float Ymin) +{ + return linCV * (Ymax - Ymin) + Ymin; +} + +// Gamma compensation factor +static const float DIM_SURROUND_GAMMA = 0.9811; + +float3 darkSurround_to_dimSurround( float3 linearCV ) +{ + float3 XYZ = mul( AP1_2_XYZ_MAT, linearCV ); + + float3 xyY = XYZ_2_xyY(XYZ); + xyY[2] = clamp( xyY[2], 0, 65535 ); + xyY[2] = pow( xyY[2], DIM_SURROUND_GAMMA ); + XYZ = xyY_2_XYZ(xyY); + + return mul( XYZ_2_AP1_MAT, XYZ ); +} + +float3 dimSurround_to_darkSurround( float3 linearCV) +{ + float3 XYZ = mul( linearCV, AP1_2_XYZ_MAT); + + float3 xyY = XYZ_2_xyY(XYZ); + xyY[2] = clamp( xyY[2], 0., 65535); + xyY[2] = pow( xyY[2], 1./DIM_SURROUND_GAMMA); + XYZ = xyY_2_XYZ(xyY); + + return mul( XYZ, XYZ_2_AP1_MAT); +} + +// +// Output Device Transform - RGB computer monitor (D60 simulation) +// + +// +// Summary : +// This transform is intended for mapping OCES onto a desktop computer monitor +// typical of those used in motion picture visual effects production used to +// simulate the image appearance produced by odt_p3d60. These monitors may +// occasionally be referred to as "sRGB" displays, however, the monitor for +// which this transform is designed does not exactly match the specifications +// in IEC 61966-2-1:1999. +// +// The assumed observer adapted white is D60, and the viewing environment is +// that of a dim surround. +// +// The monitor specified is intended to be more typical of those found in +// visual effects production. +// +// Device Primaries : +// Primaries are those specified in Rec. ITU-R BT.709 +// CIE 1931 chromaticities: x y Y +// Red: 0.64 0.33 +// Green: 0.3 0.6 +// Blue: 0.15 0.06 +// White: 0.3217 0.329 100 cd/m^2 +// +// Display EOTF : +// The reference electro-optical transfer function specified in +// IEC 61966-2-1:1999. +// +// Signal Range: +// This tranform outputs full range code values. +// +// Assumed observer adapted white point: +// CIE 1931 chromaticities: x y +// 0.32168 0.33767 +// +// Viewing Environment: +// This ODT has a compensation for viewing environment variables more typical +// of those associated with video mastering. +// + +// +// Epic edits: +// - This ODT has been modified to target an observer adapted white of D65. +// - The output of the function is linear output referred values. The +// linear to sRGB transform should be applied after this function. +// + +float3 ODT_sRGB_D65( float3 oces ) +{ + // OCES to RGB rendering space + float3 rgbPre = mul( AP0_2_AP1_MAT, oces ); + + const SegmentedSplineParams_c9 ODT_48nits = + { + // coefsLow[10] + { -1.6989700043, -1.6989700043, -1.4779000000, -1.2291000000, -0.8648000000, -0.4480000000, 0.0051800000, 0.4511080334, 0.9113744414, 0.9113744414}, + // coefsHigh[10] + { 0.5154386965, 0.8470437783, 1.1358000000, 1.3802000000, 1.5197000000, 1.5985000000, 1.6467000000, 1.6746091357, 1.6878733390, 1.6878733390 }, + {segmented_spline_c5_fwd( 0.18*exp2(-6.5) ), 0.02}, // minPoint + {segmented_spline_c5_fwd( 0.18 ), 4.8}, // midPoint + {segmented_spline_c5_fwd( 0.18*exp2(6.5) ), 48.0}, // maxPoint + 0.0, // slopeLow + 0.04 // slopeHigh + }; + + // Apply the tonescale independently in rendering-space RGB + float3 rgbPost; + rgbPost[0] = segmented_spline_c9_fwd( rgbPre[0], ODT_48nits ); + rgbPost[1] = segmented_spline_c9_fwd( rgbPre[1], ODT_48nits ); + rgbPost[2] = segmented_spline_c9_fwd( rgbPre[2], ODT_48nits ); + + // Target white and black points for cinema system tonescale + const float CINEMA_WHITE = 48.0; + const float CINEMA_BLACK = 0.02; // CINEMA_WHITE / 2400. + + // Scale luminance to linear code value + float3 linearCV; + linearCV[0] = Y_2_linCV( rgbPost[0], CINEMA_WHITE, CINEMA_BLACK ); + linearCV[1] = Y_2_linCV( rgbPost[1], CINEMA_WHITE, CINEMA_BLACK ); + linearCV[2] = Y_2_linCV( rgbPost[2], CINEMA_WHITE, CINEMA_BLACK ); + + // Apply gamma adjustment to compensate for dim surround + linearCV = darkSurround_to_dimSurround( linearCV ); + + // Apply desaturation to compensate for luminance difference + const float ODT_SAT_FACTOR = 0.93; + linearCV = lerp( dot( linearCV, AP1_RGB2Y ), linearCV, ODT_SAT_FACTOR ); + + // Convert to display primary encoding + // Rendering space RGB to XYZ + float3 XYZ = mul( AP1_2_XYZ_MAT, linearCV ); + + // Apply CAT from ACES white point to assumed observer adapted white point + /* + const float3x3 D60_2_D65_CAT = + { + 0.987224, -0.00611327, 0.0159533, + -0.00759836, 1.00186, 0.00533002, + 0.00307257, -0.00509595, 1.08168, + }; + */ + XYZ = mul( D60_2_D65_CAT, XYZ ); + + // CIE XYZ to display primaries + linearCV = mul( XYZ_2_sRGB_MAT, XYZ ); + + // Handle out-of-gamut values + // Clip values < 0 or > 1 (i.e. projecting outside the display primaries) + linearCV = saturate( linearCV ); + + return linearCV; +} + +// +// Inverse Output Device Transform - RGB computer monitor (D60 simulation) +// + +// +// Epic edits: +// - This Inverse ODT has been modified to accept an observer adapted white of D65. +// - The input to the function is linear output referred values. The +// sRGB to linear transform should be applied before this function. +// + +float3 Inverse_ODT_sRGB_D65(float3 linearCV) +{ + // Convert from display primary encoding + // Display primaries to CIE XYZ + float3 XYZ = mul( sRGB_2_XYZ_MAT, linearCV); + + // CIE XYZ to rendering space RGB + linearCV = mul( XYZ_2_AP1_MAT, XYZ); + + // Apply CAT from ACES white point to assumed observer adapted white point + XYZ = mul( D65_2_D60_CAT, XYZ ); + + // Undo desaturation to compensate for luminance difference + //linearCV = mul( linearCV, invert_f33( ODT_SAT_MAT)); + const float ODT_SAT_FACTOR = 0.93; + linearCV = lerp( dot( linearCV, AP1_RGB2Y ), linearCV, rcp(ODT_SAT_FACTOR) ); + + // Undo gamma adjustment to compensate for dim surround + linearCV = dimSurround_to_darkSurround( linearCV); + + // Undo scaling done for D60 simulation + const float SCALE = 0.955; + linearCV = linearCV * rcp(SCALE); + + // Target white and black points for cinema system tonescale + const float CINEMA_WHITE = 48.0; + const float CINEMA_BLACK = 0.02; // CINEMA_WHITE / 2400. + + // Scale linear code value to luminance + float3 rgbPre; + rgbPre[0] = linCV_2_Y( linearCV[0], CINEMA_WHITE, CINEMA_BLACK); + rgbPre[1] = linCV_2_Y( linearCV[1], CINEMA_WHITE, CINEMA_BLACK); + rgbPre[2] = linCV_2_Y( linearCV[2], CINEMA_WHITE, CINEMA_BLACK); + + const SegmentedSplineParams_c9 ODT_48nits = + { + // coefsLow[10] + { -1.6989700043, -1.6989700043, -1.4779000000, -1.2291000000, -0.8648000000, -0.4480000000, 0.0051800000, 0.4511080334, 0.9113744414, 0.9113744414}, + // coefsHigh[10] + { 0.5154386965, 0.8470437783, 1.1358000000, 1.3802000000, 1.5197000000, 1.5985000000, 1.6467000000, 1.6746091357, 1.6878733390, 1.6878733390 }, + {segmented_spline_c5_fwd( 0.18*pow(2.,-6.5) ), 0.02}, // minPoint + {segmented_spline_c5_fwd( 0.18 ), 4.8}, // midPoint + {segmented_spline_c5_fwd( 0.18*pow(2.,6.5) ), 48.0}, // maxPoint + 0.0, // slopeLow + 0.04 // slopeHigh + }; + + // Apply the tonescale independently in rendering-space RGB + float3 rgbPost; + rgbPost[0] = segmented_spline_c9_rev( rgbPre[0], ODT_48nits ); + rgbPost[1] = segmented_spline_c9_rev( rgbPre[1], ODT_48nits ); + rgbPost[2] = segmented_spline_c9_rev( rgbPre[2], ODT_48nits ); + + // Rendering space RGB to OCES + float3 oces = mul(AP1_2_AP0_MAT, rgbPost); + + return oces; +} + + +// +// Output Device Transform - Rec.2020 (1000 cd/m^2) +// + +// +// Summary : +// This transform is intended for mapping OCES onto a Rec.2020 HDR display calibrated +// to a D65 white point at 1000 cd/m^2. The assumed observer adapted white is +// D65, and the viewing environment is that of a dim surround. +// +// Device Primaries : +// Primaries are those specified in Rec. ITU-R BT.2020 +// CIE 1931 chromaticities: x y Y +// Red: 0.708 0.292 +// Green: 0.17 0.797 +// Blue: 0.131 0.046 +// White: 0.3127 0.329 1000 cd/m^2 +// +// Display EOTF : +// The reference electro-optical transfer function specified in SMPTE ST +// 2084-2014. This transform makes no attempt to address the Annex functions +// which address integer quantization. +// +// Assumed observer adapted white point: +// CIE 1931 chromaticities: x y +// 0.3127 0.329 +// +// Viewing Environment: +// This ODT is designed for a viewing environment more typically associated +// with video mastering. +// + +float3 ODT_1000nits( float3 oces ) +{ + // OCES to RGB rendering space + float3 rgbPre = mul( AP0_2_AP1_MAT, oces ); + + const SegmentedSplineParams_c9 ODT_1000nits = + { + // coefsLow[10] + { -4.9706219331, -3.0293780669, -2.1262, -1.5105, -1.0578, -0.4668, 0.11938, 0.7088134201, 1.2911865799, 1.2911865799 }, + // coefsHigh[10] + { 0.8089132070, 1.1910867930, 1.5683, 1.9483, 2.3083, 2.6384, 2.8595, 2.9872608805, 3.0127391195, 3.0127391195 }, + {segmented_spline_c5_fwd( 0.18*pow(2.,-12.) ), 0.0001}, // minPoint + {segmented_spline_c5_fwd( 0.18 ), 10.0}, // midPoint + {segmented_spline_c5_fwd( 0.18*pow(2.,10.) ), 1000.0}, // maxPoint + 3.0, // slopeLow + 0.06 // slopeHigh + }; + + // Apply the tonescale independently in rendering-space RGB + float3 rgbPost; + rgbPost[0] = segmented_spline_c9_fwd( rgbPre[0], ODT_1000nits ); + rgbPost[1] = segmented_spline_c9_fwd( rgbPre[1], ODT_1000nits ); + rgbPost[2] = segmented_spline_c9_fwd( rgbPre[2], ODT_1000nits ); + + // Subtract small offset to allow for a code value of 0 + rgbPost -= 0.00003507384284432574; + + return rgbPost; +} + + +// +// Output Device Transform - P3D60 (2000 cd/m^2) +// + +// +// Summary : +// This transform is intended for mapping OCES onto an HDR display calibrated +// to a D60 white point at 2000 cd/m^2. The assumed observer adapted white is +// D60, and the viewing environment is that of a dim surround. +// +// Device Primaries : +// CIE 1931 chromaticities: x y Y +// Red: 0.68 0.32 +// Green: 0.265 0.69 +// Blue: 0.15 0.06 +// White: 0.32168 0.33767 2000 cd/m^2 +// +// Also assumes a black level of 0.005 cd/m^2 +// +// Display EOTF : +// The reference electro-optical transfer function specified in SMPTE ST +// 2084-2014. This transform makes no attempt to address the Annex functions +// which address integer quantization. +// +// Assumed observer adapted white point: +// CIE 1931 chromaticities: x y +// 0.32168 0.33767 +// +// Viewing Environment: +// This ODT is designed for a viewing environment more typically associated +// with video mastering. +// + +float3 ODT_2000nits( float3 oces ) +{ + // OCES to RGB rendering space + float3 rgbPre = mul( AP0_2_AP1_MAT, oces ); + + const SegmentedSplineParams_c9 ODT_2000nits = + { + // coefsLow[10] + { -2.3010299957, -2.3010299957, -1.9312000000, -1.5205000000, -1.0578000000, -0.4668000000, 0.1193800000, 0.7088134201, 1.2911865799, 1.2911865799 }, + // coefsHigh[10] + { 0.8019952042, 1.1980047958, 1.5943000000, 1.9973000000, 2.3783000000, 2.7684000000, 3.0515000000, 3.2746293562, 3.3274306351, 3.3274306351 }, + {segmented_spline_c5_fwd( 0.18*pow(2.,-12.) ), 0.005}, // minPoint + {segmented_spline_c5_fwd( 0.18 ), 10.0}, // midPoint + {segmented_spline_c5_fwd( 0.18*pow(2.,11.) ), 2000.0}, // maxPoint + 0.0, // slopeLow + 0.12 // slopeHigh + }; + + // Apply the tonescale independently in rendering-space RGB + float3 rgbPost; + rgbPost[0] = segmented_spline_c9_fwd( rgbPre[0], ODT_2000nits ); + rgbPost[1] = segmented_spline_c9_fwd( rgbPre[1], ODT_2000nits ); + rgbPost[2] = segmented_spline_c9_fwd( rgbPre[2], ODT_2000nits ); + + return rgbPost; +} + +#endif diff --git a/Source/Shaders/Atmosphere.hlsl b/Source/Shaders/Atmosphere.hlsl new file mode 100644 index 000000000..411586946 --- /dev/null +++ b/Source/Shaders/Atmosphere.hlsl @@ -0,0 +1,327 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __ATMOSPHERE__ +#define __ATMOSPHERE__ + +/// Provides functions for atmospheric scattering and aerial perspective. +// +// Explanations: +// Scale Height = the altitude (height above ground) at which the average +// atmospheric density is found. +// Optical Depth = also called optical length, airmass, etc. +// +// References: +// [GPUGems2] GPU Gems 2: Accurate Atmospheric Scattering by Sean O'Neil. +// [GPUPro3] An Approximation to the Chapman Grazing-Incidence Function for +// Atmospheric Scattering, GPU Pro3, pp. 105. +// Papers bei Bruneton, Nishita, etc. +// +// This code contains embedded portions of free sample source code from +// http://www-evasion.imag.fr/Membres/Eric.Bruneton/PrecomputedAtmosphericScattering2.zip, Author: Eric Bruneton, +// 08/16/2011, Copyright (c) 2008 INRIA, All Rights Reserved, which have been altered from their original version. + +//----------------------------------------------------------------------------- + +#include "./Flax/Common.hlsl" + +// Magic numbers are based on paper (http://hal.inria.fr/docs/00/28/87/58/PDF/article.pdf) + +// Simple approximation ground reflection light +const static float AverageGroundRelectance = 0.1f; + +// Rayleigh scattering terms +const static float HeightScaleRayleigh = 8.0; +const static float3 BetaRayleighScattering = float3(5.8e-3, 1.35e-2, 3.31e-2); // Equation 1, REK 04 + +// Mie scattering terms +const static float HeightScaleMie = 1.2f; // 1.2 km, for Mie scattering +const static float3 BetaMieScattering = float3(4e-3f, 4e-3f, 4e-3f); // Equation 4 +const static float BetaRatio = 0.9f; // Figure 6, BetaMScattering/BetaMExtinction = 0.9 +const static float3 BetaMieExtinction = BetaMieScattering / BetaRatio.rrr; +const static float MieG = 0.8f; // Equation 4 + +const static float RadiusScale = 1; +const static float RadiusGround = 6360 * RadiusScale; +const static float RadiusAtmosphere = 6420 * RadiusScale; +const static float RadiusLimit = 6421 * RadiusScale; +#define Rg RadiusGround +#define Rt RadiusAtmosphere +#define RL RadiusLimit + +const static int IrradianceTexWidth = 64; +const static int IrradianceTexHeight = 16; + +const static int InscatterMuNum = 128; +const static int InscatterMuSNum = 32; +const static int InscatterNuNum = 8; +const static int AtmosphericFogInscatterAltitudeSampleNum = 4; + +// Configuration +#define TRANSMITTANCE_NON_LINEAR 1 +#define INSCATTER_NON_LINEAR 1 +#define ATMOSPHERIC_TEXTURE_SAMPLE_FIX 1 + +#ifndef ATMOSPHERIC_NO_SUN_DISK +#define ATMOSPHERIC_NO_SUN_DISK 0 +#endif + +#ifndef ATMOSPHERIC_NO_GROUND_SCATTERING +#define ATMOSPHERIC_NO_GROUND_SCATTERING 0 +#endif + +#ifndef ATMOSPHERIC_NO_DECAY +#define ATMOSPHERIC_NO_DECAY 0 +#endif + +// Textures for rendering atmosphere +#ifdef __GBUFFER__ // Prevent from overlapping registers ( 4 * GBuffer + Depth = 5 registers ) +Texture2D AtmosphereTransmittanceTexture : register(t4); +Texture2D AtmosphereIrradianceTexture : register(t5); +Texture3D AtmosphereInscatterTexture : register(t6); +#elif MATERIAL // For materials start from the 4th slot (3 lightmaps) +Texture2D AtmosphereTransmittanceTexture : register(t3); +Texture2D AtmosphereIrradianceTexture : register(t4); +Texture3D AtmosphereInscatterTexture : register(t5); +#else +Texture2D AtmosphereTransmittanceTexture : register(t0); +Texture2D AtmosphereIrradianceTexture : register(t1); +Texture3D AtmosphereInscatterTexture : register(t2); +#endif + +float2 GetTransmittanceUV(float radius, float Mu) +{ + float U, V; +#if TRANSMITTANCE_NON_LINEAR + V = sqrt((radius - RadiusGround) / (RadiusAtmosphere - RadiusGround)); + U = atan((Mu + 0.15) / (1.0 + 0.15) * tan(1.5)) / 1.5; +#else + V = (radius - RadiusGround) / (RadiusAtmosphere - RadiusGround); + U = (Mu + 0.15) / (1.0 + 0.15); +#endif + return float2(U, V); +} + +void GetTransmittanceRMuS(float2 uv, out float radius, out float MuS) +{ + radius = uv.y; + MuS = uv.x; +#if TRANSMITTANCE_NON_LINEAR + radius = RadiusGround + (radius * radius) * (RadiusAtmosphere - RadiusGround); + MuS = -0.15 + tan(1.5 * MuS) / tan(1.5) * (1.0 + 0.15); +#else + r = RadiusGround + r * (RadiusAtmosphere - RadiusGround); + muS = -0.15 + muS * (1.0 + 0.15); +#endif +} + +float2 GetIrradianceUV(float radius, float MuS) +{ + float V = (radius - RadiusGround) / (RadiusAtmosphere - RadiusGround); + float U = (MuS + 0.2) / (1.0 + 0.2); + return float2(U, V); +} + +void GetIrradianceRMuS(float2 uv, out float radius, out float MuS) +{ + radius = RadiusGround + (uv.y * float(IrradianceTexHeight) - 0.5) / (float(IrradianceTexHeight) - 1.0) * (RadiusAtmosphere - RadiusGround); + MuS = -0.2 + (uv.x * float(IrradianceTexWidth) - 0.5) / (float(IrradianceTexWidth) - 1.0) * (1.0 + 0.2); +} + +float4 Texture4DSample(Texture3D tex, float radius, float Mu, float MuS, float Nu) +{ + float H = sqrt(RadiusAtmosphere * RadiusAtmosphere - RadiusGround * RadiusGround); + float Rho = sqrt(radius * radius - RadiusGround * RadiusGround); +#if INSCATTER_NON_LINEAR + float RMu = radius * Mu; + float Delta = RMu * RMu - radius * radius + RadiusGround * RadiusGround; + float4 TexOffset = RMu < 0.0 && Delta > 0.0 ? float4(1.0, 0.0, 0.0, 0.5 - 0.5 / float(InscatterMuNum)) : float4(-1.0, H * H, H, 0.5 + 0.5 / float(InscatterMuNum)); + float MuR = 0.5 / float(AtmosphericFogInscatterAltitudeSampleNum) + Rho / H * (1.0 - 1.0 / float(AtmosphericFogInscatterAltitudeSampleNum)); + float MuMu = TexOffset.w + (RMu * TexOffset.x + sqrt(Delta + TexOffset.y)) / (Rho + TexOffset.z) * (0.5 - 1.0 / float(InscatterMuNum)); + // paper formula + //float MuMuS = 0.5 / float(InscatterMuSNum) + max((1.0 - exp(-3.0 * MuS - 0.6)) / (1.0 - exp(-3.6)), 0.0) * (1.0 - 1.0 / float(InscatterMuSNum)); + // better formula + float MuMuS = 0.5 / float(InscatterMuSNum) + (atan(max(MuS, -0.1975) * tan(1.26 * 1.1)) / 1.1 + (1.0 - 0.26)) * 0.5 * (1.0 - 1.0 / float(InscatterMuSNum)); +#else + float MuR = 0.5 / float(AtmosphericFogInscatterAltitudeSampleNum) + Rho / H * (1.0 - 1.0 / float(AtmosphericFogInscatterAltitudeSampleNum)); + float MuMu = 0.5 / float(InscatterMuNum) + (Mu + 1.0) * 0.5f * (1.0 - 1.0 / float(InscatterMuNum)); + float MuMuS = 0.5 / float(InscatterMuSNum) + max(MuS + 0.2, 0.0) / 1.2 * (1.0 - 1.0 / float(InscatterMuSNum)); +#endif + float LerpValue = (Nu + 1.0) * 0.5f * (float(InscatterNuNum) - 1.0); + float MuNu = floor(LerpValue); + LerpValue = LerpValue - MuNu; + + return tex.SampleLevel(SamplerLinearClamp, float3((MuNu + MuMuS) / float(InscatterNuNum), MuMu, MuR), 0) * (1.0 - LerpValue) + + tex.SampleLevel(SamplerLinearClamp, float3((MuNu + MuMuS + 1.0) / float(InscatterNuNum), MuMu, MuR), 0) * LerpValue; +} + +float Mod(float X, float Y) +{ + return X - Y * floor(X/Y); +} + +void GetMuMuSNu(float2 uv, float radius, float4 DhdH, out float Mu, out float MuS, out float Nu) +{ + float X = uv.x * float(InscatterMuSNum * InscatterNuNum) - 0.5; + float Y = uv.y * float(InscatterMuNum) - 0.5; +#if INSCATTER_NON_LINEAR + if (Y < float(InscatterMuNum) * 0.5f) + { + float D = 1.0 - Y / (float(InscatterMuNum) * 0.5f - 1.0); + D = min(max(DhdH.z, D * DhdH.w), DhdH.w * 0.999); + Mu = (RadiusGround * RadiusGround - radius * radius - D * D) / (2.0 * radius * D); + Mu = min(Mu, -sqrt(1.0 - (RadiusGround / radius) * (RadiusGround / radius)) - 0.001); + } + else + { + float D = (Y - float(InscatterMuNum) * 0.5f) / (float(InscatterMuNum) * 0.5f - 1.0); + D = min(max(DhdH.x, D * DhdH.y), DhdH.y * 0.999); + Mu = (RadiusAtmosphere * RadiusAtmosphere - radius * radius - D * D) / (2.0 * radius * D); + } + MuS = Mod(X, float(InscatterMuSNum)) / (float(InscatterMuSNum) - 1.0); + // paper formula + //MuS = -(0.6 + log(1.0 - MuS * (1.0 - exp(-3.6)))) / 3.0; + // better formula + MuS = tan((2.0 * MuS - 1.0 + 0.26) * 1.1) / tan(1.26 * 1.1); + Nu = -1.0 + floor(X / float(InscatterMuSNum)) / (float(InscatterNuNum) - 1.0) * 2.0; +#else + Mu = -1.0 + 2.0 * Y / (float(InscatterMuNum) - 1.0); + MuS = Mod(X, float(InscatterMuSNum)) / (float(InscatterMuSNum) - 1.0); + MuS = -0.2 + MuS * 1.2; + Nu = -1.0 + floor(X / float(InscatterMuSNum)) / (float(InscatterNuNum) - 1.0) * 2.0; +#endif +} + +/** + * Nearest intersection of ray r,mu with ground or top atmosphere boundary + * mu=cos(ray zenith angle at ray origin) + */ +float Limit(float radius, float Mu) +{ + float Dout = -radius * Mu + sqrt(radius * radius * (Mu * Mu - 1.0) + RadiusLimit * RadiusLimit); + float Delta2 = radius * radius * (Mu * Mu - 1.0) + RadiusGround * RadiusGround; + if (Delta2 >= 0.0) + { + float Din = -radius * Mu - sqrt(Delta2); + if (Din >= 0.0) + { + Dout = min(Dout, Din); + } + } + return Dout; +} + +/** + * Transmittance(=transparency) of atmosphere for infinite ray (r,mu) + * (mu=cos(view zenith angle)), intersections with ground ignored + */ +float3 Transmittance(float radius, float Mu) +{ + float2 uv = GetTransmittanceUV(radius, Mu); + return AtmosphereTransmittanceTexture.SampleLevel(SamplerLinearClamp, uv, 0).rgb; +} + +/** + * Transmittance(=transparency) of atmosphere for infinite ray (r,mu) + * (mu=cos(view zenith angle)), or zero if ray intersects ground + */ +float3 TransmittanceWithShadow(float radius, float Mu) +{ + // Need to correct calculation based on shadow feature, currently don't consider + //return Mu < -sqrt(1.0 - (RadiusGround / radius) * (RadiusGround / radius)) ? float3(0.f, 0.f, 0.f) : Transmittance(Radius, Mu); + return Transmittance(radius, Mu); +} + +/** + * Transmittance(=transparency) of atmosphere between x and x0 + * Assume segment x,x0 not intersecting ground + * D = Distance between x and x0, mu=cos(zenith angle of [x,x0) ray at x) + */ +float3 TransmittanceWithDistance(float radius, float Mu, float D) +{ + float3 result; + float R1 = sqrt(radius * radius + D * D + 2.0 * radius * Mu * D); + float Mu1 = (radius * Mu + D) / R1; + if (Mu > 0.0) + { + result = min(Transmittance(radius, Mu) / Transmittance(R1, Mu1), 1.0); + } + else + { + result = min(Transmittance(R1, -Mu1) / Transmittance(radius, -Mu), 1.0); + } + return result; +} + +/** + * Transmittance(=transparency) of atmosphere between x and x0 + * Assume segment x,x0 not intersecting ground + * radius=||x||, Mu=cos(zenith angle of [x,x0) ray at x), v=unit direction vector of [x,x0) ray + */ +float3 TransmittanceWithDistance(float radius, float Mu, float3 V, float3 X0) +{ + float3 result; + float R1 = length(X0); + float Mu1 = dot(X0, V) / radius; + if (Mu > 0.0) + { + result = min(Transmittance(radius, Mu) / Transmittance(R1, Mu1), 1.0); + } + else + { + result = min(Transmittance(R1, -Mu1) / Transmittance(radius, -Mu), 1.0); + } + return result; +} + +/** + * Optical depth for ray (r,mu) of length d, using analytic formula + * (mu=cos(view zenith angle)), intersections with ground ignored + * H=height scale of exponential density function + */ +float OpticalDepthWithDistance(float H, float radius, float Mu, float D) +{ + float particleDensity = 6.2831; // REK 04, Table 2 + float A = sqrt((0.5/H)*radius); + float2 A01 = A * float2(Mu, Mu + D / radius); + float2 A01Sign = sign(A01); + float2 A01Squared = A01*A01; + float X = A01Sign.y > A01Sign.x ? exp(A01Squared.x) : 0.0; + float2 Y = A01Sign / (2.3193 * abs(A01) + sqrt(1.52 * A01Squared + 4.0)) * float2(1.0, exp(-D / H*(D / (2.0 * radius) + Mu))); + return sqrt((particleDensity * H)*radius) * exp((RadiusGround - radius) / H) * (X + dot(Y, float2(1.0, -1.0))); +} + +float3 Irradiance(Texture2D tex, float r, float muS) +{ + float2 uv = GetIrradianceUV(r, muS); + return tex.SampleLevel(SamplerLinearClamp, uv, 0).rgb; +} + +/** Rayleigh phase function */ +float PhaseFunctionR(float Mu) +{ + return (3.0 / (16.0 * PI)) * (1.0 + Mu * Mu); +} + +/** Mie phase function */ +float PhaseFunctionM(float Mu) +{ + return 1.5 * 1.0 / (4.0 * PI) * (1.0 - MieG * MieG) * pow(1.0 + (MieG * MieG) - 2.0 * MieG * Mu, -3.0/2.0) * (1.0 + Mu * Mu) / (2.0 + MieG * MieG); +} + +/** Approximated single Mie scattering (cf. approximate Cm in paragraph "Angular precision") */ +float3 GetMie(float4 RayMie) +{ + // RayMie.rgb=C*, RayMie.w=Cm,r + return RayMie.rgb * RayMie.w / max(RayMie.r, 1e-4) * (BetaRayleighScattering.rrr / BetaRayleighScattering.rgb); +} + +/** Transmittance(=transparency) of atmosphere for ray (r,mu) of length d + * (mu=cos(view zenith angle)), intersections with ground ignored + * uses analytic formula instead of transmittance texture, REK 04, Atmospheric Transparency + */ +float3 AnalyticTransmittance(float R, float Mu, float D) +{ + return exp(- BetaRayleighScattering * OpticalDepthWithDistance(HeightScaleRayleigh, R, Mu, D) - BetaMieExtinction * OpticalDepthWithDistance(HeightScaleMie, R, Mu, D)); +} + +#endif diff --git a/Source/Shaders/AtmosphereFog.hlsl b/Source/Shaders/AtmosphereFog.hlsl new file mode 100644 index 000000000..69bbaefc6 --- /dev/null +++ b/Source/Shaders/AtmosphereFog.hlsl @@ -0,0 +1,629 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __ATMOSPHERE_FOG__ +#define __ATMOSPHERE_FOG__ + +// Provides functions for atmospheric scattering and aerial perspective. +// +// Explanations: +// Scale Height = the altitude (height above ground) at which the average +// atmospheric density is found. +// Optical Depth = also called optical length, airmass, etc. +// +// References: +// [GPUGems2] GPU Gems 2: Accurate Atmospheric Scattering by Sean O'Neil. +// [GPUPro3] An Approximation to the Chapman Grazing-Incidence Function for +// Atmospheric Scattering, GPU Pro3, pp. 105. +// Papers bei Bruneton, Nishita, etc. +// +// This code contains embedded portions of free sample source code from +// http://www-evasion.imag.fr/Membres/Eric.Bruneton/PrecomputedAtmosphericScattering2.zip, Author: Eric Bruneton, +// 08/16/2011, Copyright (c) 2008 INRIA, All Rights Reserved, which have been altered from their original version. + +#include "./Flax/Atmosphere.hlsl" + +static const float HeightOffset = 0.01f; + +/** inscattered light along ray x+tv, when sun in direction s (=S[L]-T(x,x0)S[L]|x0) */ +float3 GetInscatterColor(float fogDepth, float3 X, float T, float3 V, float3 S, float radius, float Mu, out float3 attenuation, bool isSceneGeometry) +{ + float3 result = float3(0.f, 0.f, 0.f); // X in space and ray looking in space, intialize + attenuation = float3(1.f, 1.f, 1.f); + + float D = -radius * Mu - sqrt(radius * radius * (Mu * Mu - 1.0) + RadiusAtmosphere * RadiusAtmosphere); + if (D > 0.0) + { + // if X in space and ray intersects atmosphere + // move X to nearest intersection of ray with top atmosphere boundary + X += D * V; + T -= D; + Mu = (radius * Mu + D) / RadiusAtmosphere; + radius = RadiusAtmosphere; + } + + float Epsilon = 0.005f;//maybe 0.004? + + if (radius < RadiusGround + HeightOffset + Epsilon) + { + float Diff = (RadiusGround + HeightOffset + Epsilon) - radius; + X -= Diff * V; + T -= Diff; + radius = RadiusGround + HeightOffset + Epsilon; + Mu = dot(X, V) / radius; + } + + if (radius <= RadiusAtmosphere && fogDepth > 0.f) + { + float3 X0 = X + T * V; + float R0 = length(X0); + // if ray intersects atmosphere + float Nu = dot(V, S); + float MuS = dot(X, S) / radius; + + float MuHorizon = -sqrt(1.0 - (RadiusGround / radius) * (RadiusGround / radius)); + + if (isSceneGeometry) + { + Mu = max(Mu, MuHorizon + Epsilon + 0.15); + } + else + { + Mu = max(Mu, MuHorizon + Epsilon); + } + + float MuOriginal = Mu; + float blendRatio = 0.0f; + + if (isSceneGeometry) + { + blendRatio = saturate(exp(-V.z) - 0.5); + if (blendRatio < 1.0) + { + V.z = max(V.z, 0.15); + V = normalize(V); + float3 X1 = X + T * V; + float R1 = length(X1); + Mu = dot(X1, V) / R1; + } + } + + float phaseR = PhaseFunctionR(Nu); + float phaseM = PhaseFunctionM(Nu); + float4 inscatter = max(Texture4DSample(AtmosphereInscatterTexture, radius, Mu, MuS, Nu), 0.0); + + if (T > 0.0) + { +#if ATMOSPHERIC_TEXTURE_SAMPLE_FIX + // Avoids imprecision problems in transmittance computations based on textures + attenuation = AnalyticTransmittance(radius, Mu, T); +#else + attenuation = TransmittanceWithDistance(radius, Mu, V, X0); +#endif + + float Mu0 = dot(X0, V) / R0; + float MuS0 = dot(X0, S) / R0; + + if (isSceneGeometry) + { + R0 = max(R0, radius); + } + + if (R0 > RadiusGround + HeightOffset) + { + if (blendRatio < 1.0) + { + inscatter = max(inscatter - attenuation.rgbr * Texture4DSample(AtmosphereInscatterTexture, R0, Mu0, MuS0, Nu), 0.0); +#if ATMOSPHERIC_TEXTURE_SAMPLE_FIX + // avoids imprecision problems near horizon by interpolating between two points above and below horizon + if (!isSceneGeometry ) + { + if (abs(Mu - MuHorizon) < Epsilon) + { + float Alpha = ((Mu - MuHorizon) + Epsilon) * 0.5f / Epsilon; + + Mu = MuHorizon - Epsilon; + R0 = sqrt(radius * radius + T * T + 2.0 * radius * T * Mu); + Mu0 = (radius * Mu + T) / R0; + + Mu0 = max(MuHorizon + Epsilon, Mu0); + float4 Inscatter0 = Texture4DSample(AtmosphereInscatterTexture, radius, Mu, MuS, Nu); + float4 Inscatter1 = Texture4DSample(AtmosphereInscatterTexture, R0, Mu0, MuS0, Nu); + float4 InscatterA = max(Inscatter0 - attenuation.rgbr * Inscatter1, 0.0); + + Mu = MuHorizon + Epsilon; + R0 = sqrt(radius * radius + T * T + 2.0 * radius * T * Mu); + + Mu0 = (radius * Mu + T) / R0; + Mu0 = max(MuHorizon + Epsilon, Mu0); + Inscatter0 = Texture4DSample(AtmosphereInscatterTexture, radius, Mu, MuS, Nu); + Inscatter1 = Texture4DSample(AtmosphereInscatterTexture, R0, Mu0, MuS0, Nu); + float4 InscatterB = max(Inscatter0 - attenuation.rgbr * Inscatter1, 0.0); + + inscatter = lerp(InscatterA, InscatterB, Alpha); + } + } + else if (blendRatio > 0.0) + { + inscatter = lerp(inscatter, (1.0 - attenuation.rgbr) * max(Texture4DSample(AtmosphereInscatterTexture, radius, MuOriginal, MuS, Nu), 0.0), blendRatio); + } +#endif + } + else + { + inscatter = (1.0 - attenuation.rgbr) * inscatter; + } + } + } +#if ATMOSPHERIC_TEXTURE_SAMPLE_FIX + // Avoids imprecision problems in Mie scattering when sun is below horizon + inscatter.w *= smoothstep(0.00, 0.02, MuS); +#endif + result = max(inscatter.rgb * phaseR + GetMie(inscatter) * phaseM, 0.0); + } + + return result; +} + +// Ground radiance at end of ray x+tv, when sun in direction s attenuated bewteen ground and viewer (=R[L0]+R[L*]) +float3 GetGroundColor(float4 sceneColor, float3 X, float T, float3 V, float3 S, float radius, float3 attenuation, bool isSceneGeometry) +{ + float3 result = float3(0.f, 0.f, 0.f); // ray looking at the sky (for intial value) + if (T > 0.0) + { + // if ray hits ground surface + // ground Reflectance at end of ray, X0 + float3 X0 = X + T * V; + float R0 = length(X0); + float3 N = X0 / R0; + N = X0 / R0; + sceneColor.xyz = saturate(sceneColor.xyz + 0.05); + + float4 reflectance = sceneColor * float4(0.2, 0.2, 0.2, 1.0); + + // direct sun light (radiance) reaching X0 + float MuS = dot(N, S); + float3 SunLight = isSceneGeometry ? float3(0.f, 0.f, 0.f) : TransmittanceWithShadow(R0, MuS); + + // precomputed sky light (irradiance) (=E[L*]) at X0 + float3 GroundSkyLight = Irradiance(AtmosphereIrradianceTexture, R0, MuS); + + // light reflected at X0 (=(R[L0]+R[L*])/T(X,X0)) + float3 groundColor = (reflectance.rgb * (max(MuS, 0.0) * SunLight + GroundSkyLight)) / PI; + + // water specular color due to SunLight + if (!isSceneGeometry && reflectance.w > 0.0) + { + float3 H = normalize(S - V); + float fresnel = 0.02 + 0.98 * pow(1.0 - dot(-V, H), 5.0); + float waterBrdf = fresnel * pow(max(dot(H, N), 0.0), 150.0); + groundColor += reflectance.w * max(waterBrdf, 0.0) * SunLight; + } + + result = attenuation * groundColor; //=R[L0]+R[L*] + } + return result; +} + +// Direct sun light for ray x+tv, when sun in direction s (=L0) +float3 GetSunColor(AtmosphericFogData atmosphericFog, float3 X, float T, float3 V, float3 S, float radius, float Mu) +{ + if (T > 0.0) + { + return float3(0.0f, 0.0f, 0.0f); + } + else + { + float3 transmittance = radius <= RadiusAtmosphere ? TransmittanceWithShadow(radius, Mu) : float3(1.0, 1.0, 1.0); // T(X,xo) + float sunIntensity = step(cos(PI * atmosphericFog.AtmosphericFogSunDiscScale / 180.0), dot(V, S)); // Lsun + return transmittance * sunIntensity; // Eq (9) + } +} + +float3 inscatter(inout float3 x, inout float t, float3 v, float3 s, out float r, out float mu, out float3 attenuation) +{ + float3 result = 0; + r = length(x); + mu = dot(x, v) / r; + float d = -r * mu - sqrt(r * r * (mu * mu - 1.0) + RadiusAtmosphere * RadiusAtmosphere); + + // if x in space and ray intersects atmosphere + if (d > 0.0) + { + // move x to nearest intersection of ray with top atmosphere boundary + x += d * v; + t -= d; + mu = (r * mu + d) / RadiusAtmosphere; + r = RadiusAtmosphere; + } + + // if ray intersects atmosphere + if (r <= RadiusAtmosphere) + { + float nu = dot(v, s); + float muS = dot(x, s) / r; + float phaseR = PhaseFunctionR(nu); + float phaseM = PhaseFunctionM(nu); + float4 inscatter = max(Texture4DSample(AtmosphereInscatterTexture, r, mu, muS, nu), 0.0); + + if (t > 0.0) + { + float3 x0 = x + t * v; + float r0 = length(x0); + float rMu0 = dot(x0, v); + float mu0 = rMu0 / r0; + float muS0 = dot(x0, s) / r0; +#ifdef ATMOSPHERIC_TEXTURE_SAMPLE_FIX + // avoids imprecision problems in transmittance computations based on textures + attenuation = AnalyticTransmittance(r, mu, t); +#else + attenuation = TransmittanceWithDistance(r, mu, v, x0); +#endif + if (r0 > RadiusGround + 0.01) + { + // computes S[L]-T(x,x0)S[L]|x0 + inscatter = max(inscatter - attenuation.rgbr * Texture4DSample(AtmosphereInscatterTexture, r0, mu0, muS0, nu), 0.0); +#ifdef ATMOSPHERIC_TEXTURE_SAMPLE_FIX + // avoids imprecision problems near horizon by interpolating between two points above and below horizon + const float EPS = 0.004; + float muHoriz = -sqrt(1.0 - (RadiusGround / r) * (RadiusGround / r)); + if (abs(mu - muHoriz) < EPS) + { + float a = ((mu - muHoriz) + EPS) / (2.0 * EPS); + + mu = muHoriz - EPS; + r0 = sqrt(r * r + t * t + 2.0 * r * t * mu); + mu0 = (r * mu + t) / r0; + float4 inScatter0 = Texture4DSample(AtmosphereInscatterTexture, r, mu, muS, nu); + float4 inScatter1 = Texture4DSample(AtmosphereInscatterTexture, r0, mu0, muS0, nu); + float4 inScatterA = max(inScatter0 - attenuation.rgbr * inScatter1, 0.0); + + mu = muHoriz + EPS; + r0 = sqrt(r * r + t * t + 2.0 * r * t * mu); + mu0 = (r * mu + t) / r0; + inScatter0 = Texture4DSample(AtmosphereInscatterTexture, r, mu, muS, nu); + inScatter1 = Texture4DSample(AtmosphereInscatterTexture, r0, mu0, muS0, nu); + float4 inScatterB = max(inScatter0 - attenuation.rgbr * inScatter1, 0.0); + + inscatter = lerp(inScatterA, inScatterB, a); + } +#endif + } + } +#ifdef ATMOSPHERIC_TEXTURE_SAMPLE_FIX + // avoids imprecision problems in Mie scattering when sun is below horizon + inscatter.w *= smoothstep(0.00, 0.02, muS); +#endif + result = max(inscatter.rgb * phaseR + GetMie(inscatter) * phaseM, 0.0); + } + + return result; +} +/* +//ground radiance at end of ray x+tv, when sun in direction s +//attenuated bewteen ground and viewer (=R[L0]+R[L*]) +float3 groundColor(float3 x, float t, float3 v, float3 s, float r, float mu, float3 attenuation) +{ + float3 result; + if (t > 0.0) + { + // if ray hits ground surface + // ground reflectance at end of ray, x0 + float3 x0 = x + t * v; + float r0 = length(x0); + float3 n = x0 / r0; + + float4 SceneColor = 0; + + SceneColor.xyz = saturate(SceneColor.xyz + 0.05); + + float4 Reflectance = SceneColor * float4(0.2, 0.2, 0.2, 1.0); + + if (r0 > RadiusGround + 0.01) + { + reflectance = float4(0.4, 0.4, 0.4, 0.0); + } + + // direct sun light (radiance) reaching x0 + float muS = dot(n, s); + float3 sunLight = transmittanceWithShadow(r0, muS); + + // precomputed sky light (irradiance) (=E[L*]) at x0 + float3 groundSkyLight = Irradiance(AtmosphereIrradianceTexture, r0, muS); + + // light reflected at x0 (=(R[L0]+R[L*])/T(x,x0)) + float3 groundColor = reflectance.rgb * (max(muS, 0.0) * sunLight + groundSkyLight) * ISun / M_PI; + + // water specular color due to sunLight + if (reflectance.w > 0.0) + { + float3 h = normalize(s - v); + float fresnel = 0.02 + 0.98 * pow(1.0 - dot(-v, h), 5.0); + float waterBrdf = fresnel * pow(max(dot(h, n), 0.0), 150.0); + groundColor += reflectance.w * max(waterBrdf, 0.0) * sunLight * ISun; + } + + result = attenuation * groundColor; //=R[L0]+R[L*] + } else { // ray looking at the sky + result = 0.0; + } +return result; +} +*/ + +static const float EPSILON_ATMOSPHERE = 0.002f; +static const float EPSILON_INSCATTER = 0.004f; + +// input - viewPosition: view position in world space +// input - d: view ray in world space +// output - offset: distance to atmosphere or 0 if within atmosphere +// output - maxPathLength: distance traversed within atmosphere +// output - return value: intersection occurred true/false +bool intersectAtmosphere(in float3 viewPosition, in float3 d, out float offset, out float maxPathLength) +{ + offset = 0.0f; + maxPathLength = 0.0f; + + // vector from ray origin to center of the sphere + float3 l = -viewPosition; + float l2 = dot(l,l); + float s = dot(l,d); + + // adjust top atmosphere boundary by small epsilon to prevent artifacts + float r = Rt - EPSILON_ATMOSPHERE; + float r2 = r*r; + if(l2 <= r2) + { + // ray origin inside sphere, hit is ensured + float m2 = l2 - (s * s); + float q = sqrt(r2 - m2); + maxPathLength = s + q; + return true; + } + else if(s >= 0) + { + // ray starts outside in front of sphere, hit is possible + float m2 = l2 - (s * s); + if(m2 <= r2) + { + // ray hits atmosphere definitely + float q = sqrt(r2 - m2); + offset = s - q; + maxPathLength = (s + q) - offset; + return true; + } + } + + return false; +} + +// input - surfacePos: reconstructed position of current pixel +// input - viewDir: view ray in world space +// input/output - attenuation: extinction factor along view path +// input/output - irradianceFactor: surface hit within atmosphere 1.0f, otherwise 0.0f +// output - return value: total in-scattered light +float3 GetInscatteredLight(AtmosphericFogData atmosphericFog, in float3 viewPosition, in float3 surfacePos, in float3 viewDir, in out float3 attenuation, in out float irradianceFactor) +{ + float3 inscatteredLight = float3(0.0f, 0.0f, 0.0f); + float offset; + float maxPathLength; + + if (intersectAtmosphere(viewPosition, viewDir, offset, maxPathLength)) + { + return float3(offset / 10,0,0); + + float pathLength = distance(viewPosition, surfacePos); + //return pathLength.xxx; + + // check if object occludes atmosphere + if (pathLength > offset) + { + //return float3(1,0,0); + + // offsetting camera + float3 startPos = viewPosition + offset * viewDir; + float startPosHeight = length(startPos); pathLength -= offset; + + // starting position of path is now ensured to be inside atmosphere + // was either originally there or has been moved to top boundary + float muStartPos = dot(startPos, viewDir) / startPosHeight; + float nuStartPos = dot(viewDir, atmosphericFog.AtmosphericFogSunDirection); + float musStartPos = dot(startPos, atmosphericFog.AtmosphericFogSunDirection) / startPosHeight; + + // in-scattering for infinite ray (light in-scattered when + // no surface hit or object behind atmosphere) + float4 inscatter = max(Texture4DSample(AtmosphereInscatterTexture, startPosHeight, muStartPos, musStartPos, nuStartPos), 0.0f); + float surfacePosHeight = length(surfacePos); + float musEndPos = dot(surfacePos, atmosphericFog.AtmosphericFogSunDirection) / surfacePosHeight; + //return float3(muStartPos, 0, 0); + + // check if object hit is inside atmosphere + if (pathLength < maxPathLength) + { + //return float3(1,0,0); + + // reduce total in-scattered light when surface hit + // within atmosphere + // fíx described in chapter 5.1.1 + attenuation = AnalyticTransmittance(startPosHeight, muStartPos, pathLength); // TODO: optimize this!! here + float muEndPos = dot(surfacePos, viewDir) / surfacePosHeight; + float4 inscatterSurface = Texture4DSample(AtmosphereInscatterTexture, surfacePosHeight, muEndPos, musEndPos, nuStartPos); + inscatter = max(inscatter - attenuation.rgbr * inscatterSurface, 0.0f); + irradianceFactor = 1.0f; + } + else + { + //return float3(1,0,0); + + // retrieve extinction factor for inifinte ray + // fíx described in chapter 5.1.1 + attenuation = AnalyticTransmittance(startPosHeight, muStartPos, pathLength); // TODO: optimize this! and here + } + /* + // avoids imprecision problems near horizon by interpolating between + // two points above and below horizon + // fíx described in chapter 5.1.2 + float muHorizon = -sqrt(1.0 - (g_Rg / startPosHeight) * (g_Rg / startPosHeight)); + if (abs(muStartPos - muHorizon) < EPSILON_INSCATTER) + { + float mu = muHorizon - EPSILON_INSCATTER; + float samplePosHeight = sqrt(startPosHeight*startPosHeight + pathLength * pathLength + 2.0f * startPosHeight * pathLength*mu); + float muSamplePos = (startPosHeight * mu + pathLength) / samplePosHeight; + float4 inScatter0 = Texture4DSample(AtmosphereInscatterTexture, startPosHeight, mu, musStartPos, nuStartPos); + float4 inScatter1 = Texture4DSample(AtmosphereInscatterTexture, samplePosHeight, muSamplePos, musEndPos, nuStartPos); + float4 inScatterA = max(inScatter0 - attenuation.rgbr * inScatter1, 0.0); + mu = muHorizon + EPSILON_INSCATTER; + samplePosHeight = sqrt(startPosHeight * startPosHeight + pathLength * pathLength + 2.0f * startPosHeight * pathLength * mu); + muSamplePos = (startPosHeight * mu + pathLength) / samplePosHeight; + inScatter0 = Texture4DSample(AtmosphereInscatterTexture, startPosHeight, mu, musStartPos, nuStartPos); + inScatter1 = Texture4DSample(AtmosphereInscatterTexture, samplePosHeight, muSamplePos, musEndPos, nuStartPos); + float4 inScatterB = max(inScatter0 - attenuation.rgbr * inScatter1, 0.0f); + float t = ((muStartPos - muHorizon) + EPSILON_INSCATTER) / (2.0 * EPSILON_INSCATTER); + inscatter = lerp(inScatterA, inScatterB, t); + } + */ + + // avoids imprecision problems in Mie scattering when sun is below + //horizon + // fíx described in chapter 5.1.3 + inscatter.w *= smoothstep(0.00, 0.02, musStartPos); + float phaseR = PhaseFunctionR(nuStartPos); + float phaseM = PhaseFunctionM(nuStartPos); + inscatteredLight = max(inscatter.rgb * phaseR + GetMie(inscatter) * phaseM, 0.0f); + + float sunIntensity = 10; + inscatteredLight *= sunIntensity; + } + } + + return inscatteredLight; +} + +float4 GetAtmosphericFog(AtmosphericFogData atmosphericFog, float viewFar, float3 viewPosition, float3 viewVector, float sceneDepth, float3 sceneColor) +{ + float4 result = float4(1, 0, 0, 1); + +#if 0 + + float scale = 0.00001f * atmosphericFog.AtmosphericFogDistanceScale;// convert cm to km + viewPosition.y = (viewPosition.y - atmosphericFog.AtmosphericFogGroundOffset) * atmosphericFog.AtmosphericFogAltitudeScale; + //viewPosition *= atmosphericFog.AtmosphericFogDistanceScale; + //viewPosition *= scale; + + //viewPosition *= scale; + + //if(length(worldPosition) > Rg) + // return float4(0, 0,0 ,0); + + float3 attenuation = float3(1.0f, 1.0f, 1.0f); + float irradianceFactor = 0.0f; + float3 inscatteredLight = GetInscatteredLight(atmosphericFog, viewPosition, worldPosition, viewVector, attenuation, irradianceFactor); + //float3 inscatteredLight = GetInscatteredLight(atmosphericFog, worldPosition, viewPosition, viewVector, attenuation, irradianceFactor); + + return float4(inscatteredLight, 1); + + /*float offset = 0.0f; + float maxPathLength = 0.0f; + if(intersectAtmosphere(worldPosition, viewVector, offset, maxPathLength)) + { + return float4(1,0,0,1); + }*/ + + return float4(0, 0, 0, 1); + +#endif + +#if 1 + + // TODO: scale viewPosition from cm to km !!!!!!! + + float scale = 0.0001f * atmosphericFog.AtmosphericFogDistanceScale; + viewPosition.y = (viewPosition.y - atmosphericFog.AtmosphericFogGroundOffset) * atmosphericFog.AtmosphericFogAltitudeScale; + //viewPosition *= atmosphericFog.AtmosphericFogDistanceScale; + viewPosition *= scale; + //viewPosition.xz *= 0.00001f; + + //viewPosition *= scale; + viewPosition.y += RadiusGround + HeightOffset; + + //viewPosition.y -= atmosphericFog.AtmosphericFogGroundOffset; + //worldPosition + float Radius = length(viewPosition); + float3 V = normalize(viewVector); + float Mu = dot(viewPosition, V) / Radius; + float T = -Radius * Mu - sqrt(Radius * Radius * (Mu * Mu - 1.0) + RadiusGround * RadiusGround); + + //-Radius * Mu > sqrt(Radius * Radius * (Mu * Mu - 1.0) + RadiusGround * RadiusGround) + /* + float3 g = viewPosition - float3(0.0, 0.0, RadiusGround + 10.0); + float a = V.x * V.x + V.y * V.y - V.z * V.z; + float b = 2.0 * (g.x * V.x + g.y * V.y - g.z * V.z); + float c = g.x * g.x + g.y * g.y - g.z * g.z; + float d = -(b + sqrt(b * b - 4.0 * a * c)) / (2.0 * a); + bool cone = d > 0.0 && abs(viewPosition.z + d * V.z - RadiusGround) <= 10.0; + + if (T > 0.0) + { + if (cone && d < T) + T = d; + //return float4(1,0,0,1); + } + else if (cone) + { + T = d; + //return float4(0,0,1,1); + } + */ + //return float4(V, 1); + + // TODO: create uniform param for that depth limit + float depthThreshold = min(100.0f * atmosphericFog.AtmosphericFogDistanceScale, (viewFar * 0.997f) * scale); // 100km limit or far plane + sceneDepth *= scale; + + float fogDepth = max(0.0f, sceneDepth - atmosphericFog.AtmosphericFogStartDistance); + float shadowFactor = 1.0f; + float DistanceRatio = min(fogDepth * 0.1f / atmosphericFog.AtmosphericFogStartDistance, 1.0f); + bool isSceneGeometry = (sceneDepth < depthThreshold); // Assume as scene geometry + //isSceneGeometry = false; + if (isSceneGeometry) + { + shadowFactor = DistanceRatio * atmosphericFog.AtmosphericFogPower; + T = max(sceneDepth + atmosphericFog.AtmosphericFogDistanceOffset, 1.0f); + + // TODO: fog for scene objects + return 0; + //return float4(0, 1, 0, 1); + } + + float3 attenuation; + float3 inscatterColor = GetInscatterColor(fogDepth, viewPosition, T, V, atmosphericFog.AtmosphericFogSunDirection, Radius, Mu, attenuation, isSceneGeometry); //S[L]-T(viewPosition,xs)S[l]|xs + //float3 inscatterColor = inscatter(viewPosition, T, V, atmosphericFog.AtmosphericFogSunDirection, Radius, Mu, attenuation); //S[L]-T(viewPosition,xs)S[l]|xs + //float3 groundColor = 0; + float3 groundColor = GetGroundColor(float4(sceneColor.rgb, 1.f), viewPosition, T, V, atmosphericFog.AtmosphericFogSunDirection, Radius, attenuation, isSceneGeometry); //R[L0]+R[L*] + float3 sun = GetSunColor(atmosphericFog, viewPosition, T, V, atmosphericFog.AtmosphericFogSunDirection, Radius, Mu); //L0 + + float3 color = (atmosphericFog.AtmosphericFogSunPower) * (sun + groundColor + inscatterColor) * atmosphericFog.AtmosphericFogSunColor.rgb; + //return float4(color, lerp(saturate(attenuation.r * atmosphericFog.AtmosphericFogDensityScale - atmosphericFog.AtmosphericFogDensityOffset), 1.0f, (1.0f - DistanceRatio)) ); + //return lerp(saturate(attenuation.r * atmosphericFog.AtmosphericFogDensityScale - atmosphericFog.AtmosphericFogDensityOffset), 1.0f, (1.0f - DistanceRatio)); + //color *= lerp(saturate(attenuation.r * atmosphericFog.AtmosphericFogDensityScale - atmosphericFog.AtmosphericFogDensityOffset), 1.0f, (1.0f - DistanceRatio)); + + //return attenuation.bbbb; + + return float4(color, 1); + + //return float4(sun, 1); + //return float4(inscatterColor + sun, 1); + //return float4(sun + groundColor, 1); + //return float4(sun + groundColor + inscatterColor, 1); + +#endif + + return result; +} + +float4 GetAtmosphericFog(AtmosphericFogData atmosphericFog, float viewFar, float3 worldPosition, float3 cameraPosition) +{ + float3 viewVector = worldPosition - cameraPosition; + return GetAtmosphericFog(atmosphericFog, viewFar, cameraPosition, viewVector, length(viewVector), float3(0, 0, 0)); +} + +#endif diff --git a/Source/Shaders/AtmospherePreCompute.shader b/Source/Shaders/AtmospherePreCompute.shader new file mode 100644 index 000000000..76e2309d0 --- /dev/null +++ b/Source/Shaders/AtmospherePreCompute.shader @@ -0,0 +1,364 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/Atmosphere.hlsl" + +const static int TransmittanceIntegralSamples = 500; +const static int InscatterIntegralSamples = 50; +const static int IrradianceIntegralSamples = 32; +const static int IrradianceIntegralSamplesHalf = IrradianceIntegralSamples / 2; +const static int InscatterSphericalIntegralSamples = 16; +const static float IrradianceDeltaPhi = PI / float(IrradianceIntegralSamples); +const static float IrradianceDeltaTheta = PI / float(IrradianceIntegralSamples); +const static float InscatterDeltaPhi = PI / float(InscatterSphericalIntegralSamples); +const static float InscatterDeltaTheta = PI / float(InscatterSphericalIntegralSamples); + +META_CB_BEGIN(0, Data) +float FirstOrder; +float AtmosphereR; +int AtmosphereLayer; +float Dummy0; +float4 DhdH; +META_CB_END + +Texture2D AtmosphereDeltaETexture : register(t3); +Texture3D AtmosphereDeltaSRTexture : register(t4); +Texture3D AtmosphereDeltaSMTexture : register(t5); +Texture3D AtmosphereDeltaJTexture : register(t6); + +struct AtmosphereGSOutput +{ + float4 Position : SV_Position; + float2 TexCoord : TEXCOORD0; + //uint LayerIndex : SV_RenderTargetArrayIndex; +}; + +/* +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +Quad_VS2PS VS(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0) +{ + Quad_VS2PS output; + + output.Position = float4(Position, 0, 1); + output.TexCoord = TexCoord; + + return output; +} + +META_GS(true, FEATURE_LEVEL_SM4) +[maxvertexcount(3)] +void GS_Atmosphere(triangle Quad_VS2PS input[3], inout TriangleStream output) +{ + AtmosphereGSOutput vertex; + + for(int i = 0; i < 3; i++) + { + vertex.Position = input[i].Position; + vertex.TexCoord = input[i].TexCoord; + vertex.LayerIndex = AtmosphereLayer; + + output.Append(vertex); + } +} +*/ +float OpticalDepth(float H, float radius, float Mu) +{ + float result = 0.0; + float Dx = Limit(radius, Mu) / float(TransmittanceIntegralSamples); + float Xi = 0.0; + float Yi = exp(-(radius - RadiusGround) / H); + + LOOP + for (int i = 1; i <= TransmittanceIntegralSamples; i++) + { + float Xj = float(i) * Dx; + float Yj = exp(-(sqrt(radius * radius + Xj * Xj + 2.0 * Xj * radius * Mu) - RadiusGround) / H); + result += (Yi + Yj) / 2.0 * Dx; + Xi = Xj; + Yi = Yj; + } + + return Mu < -sqrt(1.0 - (RadiusGround / radius) * (RadiusGround / radius)) ? 1e9 : result; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Transmittance(Quad_VS2PS input) : SV_Target0 +{ + float radius, MuS; + GetTransmittanceRMuS(input.TexCoord, radius, MuS); + float3 depth = BetaRayleighScattering * OpticalDepth(HeightScaleRayleigh, radius, MuS) + BetaMieExtinction * OpticalDepth(HeightScaleMie, radius, MuS); + return float4(exp(-depth), 0.0f); // Eq (5) +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Irradiance1(Quad_VS2PS input) : SV_Target0 +{ + float radius, MuS; + GetIrradianceRMuS(input.TexCoord, radius, MuS); + return float4(Transmittance(radius, MuS) * max(MuS, 0.0), 0.0); +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_IrradianceN(Quad_VS2PS input) : SV_Target0 +{ + float radius, MuS; + GetIrradianceRMuS(input.TexCoord, radius, MuS); + float3 S = float3(sqrt(max(1.0 - MuS * MuS, 0.0)), 0.0, MuS); + float3 result = float3(0.0f, 0.0f, 0.0f); + + // Integral over 2.PI around x with two nested loops over W directions (theta, phi) -- Eq (15) + for (int iPhi = 0; iPhi < 4 * IrradianceIntegralSamplesHalf; iPhi++) + { + float phi = (float(iPhi) + 0.5) * IrradianceDeltaPhi; + for (int iTheta = 0; iTheta < IrradianceIntegralSamplesHalf; iTheta++) + { + float theta = (float(iTheta) + 0.5) * IrradianceDeltaTheta; + float Dw = IrradianceDeltaTheta * IrradianceDeltaPhi * sin(theta); + float3 W = float3(cos(phi) * sin(theta), sin(phi) * sin(theta), cos(theta)); + float Nu = dot(S, W); + + if (FirstOrder == 1.0) + { + // First iteration is special because Rayleigh and Mie were stored separately, + // without the phase functions factors; they must be reintroduced here + float Pr1 = PhaseFunctionR(Nu); + float Pm1 = PhaseFunctionM(Nu); + float3 Ray1 = Texture4DSample(AtmosphereDeltaSRTexture, radius, W.z, MuS, Nu).rgb; + float3 Mie1 = Texture4DSample(AtmosphereDeltaSMTexture, radius, W.z, MuS, Nu).rgb; + + result += (Ray1 * Pr1 + Mie1 * Pm1) * W.z * Dw; + } + else + { + result += Texture4DSample(AtmosphereDeltaSRTexture, radius, W.z, MuS, Nu).rgb * W.z * Dw; + } + } + } + + return float4(result, 0.0); +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CopyIrradiance1(Quad_VS2PS input) : SV_Target0 +{ + return AtmosphereDeltaETexture.Sample(SamplerLinearClamp, input.TexCoord); +} + +void Integrand(float radius, float Mu, float MuS, float Nu, float T, out float3 Ray, out float3 Mie) +{ + Ray = float3(0, 0, 0); + Mie = float3(0, 0, 0); + float Ri = sqrt(radius * radius + T * T + 2.0 * radius * Mu * T); + float MuSi = (Nu * T + MuS * radius) / Ri; + Ri = max(RadiusGround, Ri); + if (MuSi >= -sqrt(1.0 - RadiusGround * RadiusGround / (Ri * Ri)) ) + { + float3 Ti = TransmittanceWithDistance(radius, Mu, T) * Transmittance(Ri, MuSi); + Ray = exp(-(Ri - RadiusGround) / HeightScaleRayleigh) * Ti; + Mie = exp(-(Ri - RadiusGround) / HeightScaleMie) * Ti; + } +} + +// For Inscatter 1 +void Inscatter(float radius, float Mu, float MuS, float Nu, out float3 Ray, out float3 Mie) +{ + Ray = float3(0, 0, 0); + Mie = float3(0, 0, 0); + float Dx = Limit(radius, Mu) / float(InscatterIntegralSamples); + float Xi = 0.0; + float3 Rayi; + float3 Miei; + Integrand(radius, Mu, MuS, Nu, 0.0, Rayi, Miei); + for (int i = 1; i <= InscatterIntegralSamples; i++) + { + float Xj = float(i) * Dx; + float3 Rayj; + float3 Miej; + Integrand(radius, Mu, MuS, Nu, Xj, Rayj, Miej); + Ray += (Rayi + Rayj) / 2.0 * Dx; + Mie += (Miei + Miej) / 2.0 * Dx; + Xi = Xj; + Rayi = Rayj; + Miei = Miej; + } + Ray *= BetaRayleighScattering; + Mie *= BetaMieScattering; +} + +struct Inscatter1Output +{ + float4 DeltaSR : SV_Target0; + float4 DeltaSM : SV_Target1; +}; + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Inscatter1_A(AtmosphereGSOutput input) : SV_Target +{ + float3 Ray; + float3 Mie; + float Mu, MuS, Nu; + GetMuMuSNu(input.TexCoord, AtmosphereR, DhdH, Mu, MuS, Nu); + Inscatter(AtmosphereR, Mu, MuS, Nu, Ray, Mie); + + // Store separately Rayleigh and Mie contributions, WITHOUT the phase function factor (cf "Angular precision") + return float4(Ray, 1); +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CopyInscatter1(AtmosphereGSOutput input) : SV_Target0 +{ + float3 UVW = float3(input.TexCoord, (float(AtmosphereLayer) + 0.5f) / float(AtmosphericFogInscatterAltitudeSampleNum)); + float4 Ray = AtmosphereDeltaSRTexture.Sample(SamplerLinearClamp, UVW); + float4 Mie = AtmosphereDeltaSRTexture.Sample(SamplerLinearClamp, UVW); + return float4(Ray.rgb, Mie.r); +} + +// For Inscatter S +void Inscatter(float Radius, float Mu, float MuS, float Nu, out float3 RayMie) +{ + Radius = clamp(Radius, RadiusGround, RadiusAtmosphere); + Mu = clamp(Mu, -1.0, 1.0); + MuS = clamp(MuS, -1.0, 1.0); + float Variation = sqrt(1.0 - Mu * Mu) * sqrt(1.0 - MuS * MuS); + Nu = clamp(Nu, MuS * Mu - Variation, MuS * Mu + Variation); + + float cThetaMin = -sqrt(1.0 - (RadiusGround / Radius) * (RadiusGround / Radius)); + + float3 V = float3(sqrt(1.0 - Mu * Mu), 0.0, Mu); + float Sx = V.x == 0.0 ? 0.0 : (Nu - MuS * Mu) / V.x; + float3 S = float3(Sx, sqrt(max(0.0, 1.0 - Sx * Sx - MuS * MuS)), MuS); + + RayMie = float3(0.f, 0.f, 0.f); + + // Integral over 4.PI around x with two nested loops over W directions (theta, phi) - Eq (7) + for (int iTheta = 0; iTheta < InscatterSphericalIntegralSamples; iTheta++) + { + float theta = (float(iTheta) + 0.5) * InscatterDeltaTheta; + float cTheta = cos(theta); + + float GReflectance = 0.0; + float DGround = 0.0; + float3 GTransmittance = float3(0.f, 0.f, 0.f); + if (cTheta < cThetaMin) + { + // If ground visible in direction W, Compute transparency GTransmittance between x and ground + GReflectance = AverageGroundRelectance / PI; + DGround = -Radius * cTheta - sqrt(Radius * Radius * (cTheta * cTheta - 1.0) + RadiusGround * RadiusGround); + GTransmittance = TransmittanceWithDistance(RadiusGround, -(Radius * cTheta + DGround) / RadiusGround, DGround); + } + + for (int iPhi = 0; iPhi < 2 * InscatterSphericalIntegralSamples; iPhi++) + { + float phi = (float(iPhi) + 0.5) * InscatterDeltaPhi; + float Dw = InscatterDeltaTheta * InscatterDeltaPhi * sin(theta); + float3 W = float3(cos(phi) * sin(theta), sin(phi) * sin(theta), cTheta); + + float Nu1 = dot(S, W); + float Nu2 = dot(V, W); + float Pr2 = PhaseFunctionR(Nu2); + float Pm2 = PhaseFunctionM(Nu2); + + // Compute irradiance received at ground in direction W (if ground visible) =deltaE + float3 GNormal = (float3(0.0, 0.0, Radius) + DGround * W) / RadiusGround; + float3 GIrradiance = Irradiance(AtmosphereDeltaETexture, RadiusGround, dot(GNormal, S)); + + float3 RayMie1; // light arriving at x from direction W + + // First term = light reflected from the ground and attenuated before reaching x, =T.alpha/PI.deltaE + RayMie1 = GReflectance * GIrradiance * GTransmittance; + + // Second term = inscattered light, =deltaS + if (FirstOrder == 1.0) + { + // First iteration is special because Rayleigh and Mie were stored separately, + // without the phase functions factors; they must be reintroduced here + float Pr1 = PhaseFunctionR(Nu1); + float Pm1 = PhaseFunctionM(Nu1); + float3 Ray1 = Texture4DSample(AtmosphereDeltaSRTexture, Radius, W.z, MuS, Nu1).rgb; + float3 Mie1 = Texture4DSample(AtmosphereDeltaSMTexture, Radius, W.z, MuS, Nu1).rgb; + RayMie1 += Ray1 * Pr1 + Mie1 * Pm1; + } + else + { + RayMie1 += Texture4DSample(AtmosphereDeltaSRTexture, Radius, W.z, MuS, Nu1).rgb; + } + + // Light coming from direction W and scattered in direction V + // = light arriving at x from direction W (RayMie1) * SUM(scattering coefficient * phaseFunction) - Eq (7) + RayMie += RayMie1 * (BetaRayleighScattering * exp(-(Radius - RadiusGround) / HeightScaleRayleigh) * Pr2 + BetaMieScattering * exp(-(Radius - RadiusGround) / HeightScaleMie) * Pm2) * Dw; + } + } + + // output RayMie = J[T.alpha/PI.deltaE + deltaS] (line 7 in algorithm 4.1) +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_InscatterS(AtmosphereGSOutput input) : SV_Target0 +{ + float3 RayMie; + float Mu, MuS, Nu; + GetMuMuSNu(input.TexCoord, AtmosphereR, DhdH, Mu, MuS, Nu); + Inscatter(AtmosphereR, Mu, MuS, Nu, RayMie); + return float4(RayMie, 0); +} + +float3 Integrand(float Radius, float Mu, float MuS, float Nu, float T) +{ + float Ri = sqrt(Radius * Radius + T * T + 2.0 * Radius * Mu * T); + float Mui = (Radius * Mu + T) / Ri; + float MuSi = (Nu * T + MuS * Radius) / Ri; + return Texture4DSample(AtmosphereDeltaJTexture, Ri, Mui, MuSi, Nu).rgb * TransmittanceWithDistance(Radius, Mu, T); +} + +// InscatterN +float3 Inscatter(float Radius, float Mu, float MuS, float Nu) +{ + float3 RayMie = float3(0.f, 0.f, 0.f); + float Dx = Limit(Radius, Mu) / float(InscatterIntegralSamples); + float Xi = 0.0; + float3 RayMiei = Integrand(Radius, Mu, MuS, Nu, 0.0); + + for (int i = 1; i <= InscatterIntegralSamples; i++) + { + float Xj = float(i) * Dx; + float3 RayMiej = Integrand(Radius, Mu, MuS, Nu, Xj); + RayMie += (RayMiei + RayMiej) / 2.0 * Dx; + Xi = Xj; + RayMiei = RayMiej; + } + + return RayMie; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_InscatterN(AtmosphereGSOutput input) : SV_Target0 +{ + float Mu, MuS, Nu; + GetMuMuSNu(input.TexCoord, AtmosphereR, DhdH, Mu, MuS, Nu); + return float4(Inscatter(AtmosphereR, Mu, MuS, Nu), 0); +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CopyInscatterN(AtmosphereGSOutput input) : SV_Target0 +{ + float Mu, MuS, Nu; + GetMuMuSNu(input.TexCoord, AtmosphereR, DhdH, Mu, MuS, Nu); + float3 UVW = float3(input.TexCoord, (float(AtmosphereLayer) + 0.5f) / float(AtmosphericFogInscatterAltitudeSampleNum)); + float4 Ray = AtmosphereDeltaSRTexture.Sample(SamplerLinearClamp, UVW) / PhaseFunctionR(Nu); + return float4(Ray.rgb, 0); +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Inscatter1_B(AtmosphereGSOutput input) : SV_Target +{ + float3 Ray; + float3 Mie; + float Mu, MuS, Nu; + GetMuMuSNu(input.TexCoord, AtmosphereR, DhdH, Mu, MuS, Nu); + Inscatter(AtmosphereR, Mu, MuS, Nu, Ray, Mie); + + // Store separately Rayleigh and Mie contributions, WITHOUT the phase function factor (cf "Angular precision") + return float4(Mie, 1); +} diff --git a/Source/Shaders/BRDF.hlsl b/Source/Shaders/BRDF.hlsl new file mode 100644 index 000000000..24f87b7a5 --- /dev/null +++ b/Source/Shaders/BRDF.hlsl @@ -0,0 +1,259 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __BRDF__ +#define __BRDF__ + +#include "./Flax/Math.hlsl" + +// Bidirectional reflectance distribution functions +// Physically based shading model: +// Microfacet specular = D*G*F / (4*NoL*NoV) = D*Vis*F +// Vis = G / (4*NoL*NoV) + +float3 Diffuse_Lambert(float3 diffuseColor) +{ + return diffuseColor * (1 / PI); +} + +// [Burley 2012, "Physically-Based Shading at Disney"] +float3 Diffuse_Burley(float3 diffuseColor, float roughness, float NoV, float NoL, float VoH) +{ + float FD90 = 0.5 + 2 * VoH * VoH * roughness; + float FdV = 1 + (FD90 - 1) * Pow5(1 - NoV); + float FdL = 1 + (FD90 - 1) * Pow5(1 - NoL); + return diffuseColor * ((1 / PI) * FdV * FdL); +} + +// [Gotanda 2012, "Beyond a Simple Physically Based Blinn-Phong Model in Real-Time"] +float3 Diffuse_OrenNayar(float3 diffuseColor, float roughness, float NoV, float NoL, float VoH) +{ + float a = roughness * roughness; + float s = a; + float s2 = s * s; + float VoL = 2 * VoH * VoH - 1; + float Cosri = VoL - NoV * NoL; + float C1 = 1 - 0.5 * s2 / (s2 + 0.33); + float C2 = 0.45 * s2 / (s2 + 0.09) * Cosri * (Cosri >= 0 ? rcp( max(NoL, NoV)) : 1); + return diffuseColor / PI * (C1 + C2) * (1 + roughness * 0.5); +} + +float PhongShadingPow(float x, float y) +{ + return ClampedPow(x, y); +} + +// [Blinn 1977, "Models of light reflection for computer synthesized pictures"] +float D_Blinn(float roughness, float NoH) +{ + float a = roughness * roughness; + float a2 = a * a; + float n = 2 / a2 - 2; + return (n + 2) / (2 * PI) * PhongShadingPow(NoH, n); +} + +// [Beckmann 1963, "The scattering of electromagnetic waves from rough surfaces"] +float D_Beckmann(float roughness, float NoH) +{ + float a = roughness * roughness; + float a2 = a * a; + float NoH2 = NoH * NoH; + return exp((NoH2 - 1) / (a2 * NoH2)) / (PI * a2 * NoH2 * NoH2); +} + +// GGX / Trowbridge-Reitz +// [Walter et al. 2007, "Microfacet models for refraction through rough surfaces"] +float D_GGX(float roughness, float NoH) +{ + float a = roughness * roughness; + float a2 = a * a; + float d = (NoH * a2 - NoH) * NoH + 1; + return a2 / (PI * d * d); +} + +// Anisotropic GGX +// [Burley 2012, "Physically-Based Shading at Disney"] +float D_GGXaniso(float roughnessX, float roughnessY, float NoH, float3 H, float3 X, float3 Y) +{ + float ax = roughnessX * roughnessX; + float ay = roughnessY * roughnessY; + float XoH = dot(X, H); + float YoH = dot(Y, H); + float d = XoH * XoH / (ax * ax) + YoH * YoH / (ay * ay) + NoH * NoH; + return 1 / (PI * ax * ay * d * d); +} + +float Vis_Implicit() +{ + return 0.25; +} + +// [Neumann et al. 1999, "Compact metallic reflectance models"] +float Vis_Neumann(float NoV, float NoL) +{ + return 1 / (4 * max(NoL, NoV)); +} + +// [Kelemen 2001, "A microfacet based coupled specular-matte brdf model with importance sampling"] +float Vis_Kelemen(float VoH) +{ + // constant to prevent NaN + return rcp(4 * VoH * VoH + 1e-5); +} + +// Tuned to match behavior of Vis_Smith +// [Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering"] +float Vis_Schlick(float roughness, float NoV, float NoL) +{ + float k = Square(roughness) * 0.5; + float vis_SchlickV = NoV * (1 - k) + k; + float vis_SchlickL = NoL * (1 - k) + k; + return 0.25 / (vis_SchlickV * vis_SchlickL); +} + +// Smith term for GGX +// [Smith 1967, "Geometrical shadowing of a random rough surface"] +float Vis_Smith(float roughness, float NoV, float NoL) +{ + float a = Square(roughness); + float a2 = a * a; + float vis_SmithV = NoV + sqrt( NoV * (NoV - NoV * a2) + a2); + float vis_SmithL = NoL + sqrt( NoL * (NoL - NoL * a2) + a2); + return rcp(vis_SmithV * vis_SmithL); +} + +// Appoximation of joint Smith term for GGX +// [Heitz 2014, "Understanding the Masking-Shadowing Function in Microfacet-Based BRDFs"] +float Vis_SmithJointApprox(float roughness, float NoV, float NoL) +{ + float a = Square(roughness); + float vis_SmithV = NoL * (NoV * (1 - a) + a); + float vis_SmithL = NoV * (NoL * (1 - a) + a); + return 0.5 * rcp(vis_SmithV + vis_SmithL); +} + +float3 F_None(float3 specularColor) +{ + return specularColor; +} + +// [Schlick 1994, "An Inexpensive BRDF Model for Physically-Based Rendering"] +float3 F_Schlick(float3 specularColor, float VoH) +{ + float fc = Pow5(1 - VoH); + return saturate(50.0 * specularColor.g) * fc + (1 - fc) * specularColor; +} + +float3 F_Fresnel(float3 specularColor, float VoH) +{ + float3 specularColorSqrt = sqrt(clamp(float3(0, 0, 0), float3(0.99, 0.99, 0.99), specularColor)); + float3 n = (1 + specularColorSqrt ) / (1 - specularColorSqrt); + float3 g = sqrt(n * n + VoH * VoH - 1); + return 0.5 * Square((g - VoH) / (g + VoH)) * (1 + Square(((g + VoH) * VoH - 1) / ((g - VoH) * VoH + 1))); +} + +float D_InvBlinn(float roughness, float NoH) +{ + float m = roughness * roughness; + float m2 = m * m; + float A = 4; + float cos2h = NoH * NoH; + return rcp( PI * (1 + A * m2)) * (1 + A * exp(-cos2h / m2)); +} + +float D_InvBeckmann(float roughness, float NoH) +{ + float m = roughness * roughness; + float m2 = m * m; + float A = 4; + float cos2h = NoH * NoH; + float sin2h = 1 - cos2h; + float sin4h = sin2h * sin2h; + return rcp(PI * (1 + A * m2) * sin4h) * (sin4h + A * exp(-cos2h / (m2 * sin2h))); +} + +float D_InvGGX(float roughness, float NoH) +{ + float a = roughness * roughness; + float a2 = a * a; + float A = 4; + float d = (NoH - a2 * NoH) * NoH + a2; + return rcp(PI * (1 + A * a2)) * (1 + 4 * a2 * a2 / (d * d)); +} + +float Vis_Cloth(float NoV, float NoL) +{ + return rcp(4 * (NoL + NoV - NoL * NoV)); +} + +#define REFLECTION_CAPTURE_NUM_MIPS 7 +#define REFLECTION_CAPTURE_ROUGHEST_MIP 1 +#define REFLECTION_CAPTURE_ROUGHNESS_MIP_SCALE 1.2 + +half ProbeMipFromRoughness(half roughness) +{ + half levelFrom1x1 = REFLECTION_CAPTURE_ROUGHEST_MIP - REFLECTION_CAPTURE_ROUGHNESS_MIP_SCALE * log2(roughness); + return REFLECTION_CAPTURE_NUM_MIPS - 1 - levelFrom1x1; +} + +half SSRMipFromRoughness(half roughness) +{ + half levelFrom1x1 = 4 - REFLECTION_CAPTURE_ROUGHNESS_MIP_SCALE * log2(roughness); + return max(1, 10 - levelFrom1x1); +} + +float ComputeReflectionCaptureRoughnessFromMip(float mip) +{ + float levelFrom1x1 = REFLECTION_CAPTURE_NUM_MIPS - 1 - mip; + return exp2((REFLECTION_CAPTURE_ROUGHEST_MIP - levelFrom1x1) / REFLECTION_CAPTURE_ROUGHNESS_MIP_SCALE); +} + +// [Lazarov 2013, "Getting More Physical in Call of Duty: Black Ops II"] +float3 EnvBRDFApprox(float3 specularColor, float roughness, float NoV) +{ + // Approximate version, base for pre integrated version + const half4 c0 = {-1, -0.0275, -0.572, 0.022}; + const half4 c1 = {1, 0.0425, 1.04, -0.04}; + half4 r = roughness * c0 + c1; + half a004 = min(r.x * r.x, exp2(-9.28 * NoV)) * r.x + r.y; + half2 ab = half2(-1.04, 1.04) * a004 + r.zw; + return specularColor * ab.x + saturate(50.0 * specularColor.g) * ab.y; +} + +// Pre integrated environment GF +float3 EnvBRDF(Texture2D preIntegratedGF, float3 specularColor, float roughness, float NoV) +{ + // Importance sampled preintegrated G * F + float2 ab = preIntegratedGF.SampleLevel(SamplerLinearClamp, float2(NoV, roughness), 0).rg; + return specularColor * ab.x + saturate(50.0 * specularColor.g) * ab.y; +} + +#define MAX_SPECULAR_POWER 10000000000.0f + +float RoughnessToSpecularPower(float roughness) +{ + // TODO: use path tracer as a reference and calculate valid params for this conversion + + return pow(2, 13 * (1 - roughness)); + +#if 0 + + float coeff = pow(4, roughness); + coeff = max(coeff, 2.0f / (MAX_SPECULAR_POWER + 2.0f)); + return 2.0f / coeff - 2.0f; + + //const float Log2Of1OnLn2_Plus1 = 1.52876637294; // log2(1 / ln(2)) + 1 + //return exp2(10 * roughness + Log2Of1OnLn2_Plus1); + + //return pow(2, 2 * (1 - roughness)); + return pow(2, 13 * (1 - roughness)); + + //return exp2(10 * roughness + 1); +#endif +} +/* +float SpecularPowerToRoughness(float specularPower) +{ + return pow(-0.25f, specularPower * 0.5f + 1.0f); +} +*/ +#endif diff --git a/Source/Shaders/BakeLightmap.shader b/Source/Shaders/BakeLightmap.shader new file mode 100644 index 000000000..c76aed284 --- /dev/null +++ b/Source/Shaders/BakeLightmap.shader @@ -0,0 +1,487 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define USE_VERTEX_COLOR 0 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/SH.hlsl" + +// This config must match C++ code +#define HEMISPHERES_RESOLUTION 64 +#define NUM_SH_TARGETS 3 + +META_CB_BEGIN(0, Data) +float4 LightmapArea; +float4x4 WorldMatrix; +float4x4 ToTangentSpace; +float FinalWeight; +uint TexelAdress; +uint AtlasSize; +float TerrainChunkSizeLOD0; +float4 HeightmapUVScaleBias; +float3 WorldInvScale; +float Dummy1; +META_CB_END + +#define USED_TEXELS_BIAS 0.001f +#define BACKGROUND_TEXELS_MARK -1.0f + +struct RenderCacheVSOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float3 WorldNormal : TEXCOORD1; +}; + +struct RenderCachePSOutput +{ + float4 WorldPosition : SV_Target0; + float4 WorldNormal : SV_Target1; +}; + +META_VS(true, FEATURE_LEVEL_SM5) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 1, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R16G16_FLOAT, 1, ALIGN, PER_VERTEX, 0, true) +RenderCacheVSOutput VS_RenderCacheModel(ModelInput input) +{ + RenderCacheVSOutput output; + + // Calculate vertex world position + output.WorldPosition = mul(float4(input.Position.xyz, 1), WorldMatrix).xyz; + + // Unpack and transform vertex tangent frame vectors to world space + float3 normal = normalize(input.Normal.xyz * 2.0 - 1.0); + output.WorldNormal = mul(normal, (float3x3)WorldMatrix); + + // Transform lightmap UV to clip-space + float2 lightmapUV = input.LightmapUV * LightmapArea.zw + LightmapArea.xy; + lightmapUV.y = 1.0 - lightmapUV.y; + lightmapUV.xy = lightmapUV.xy * 2.0 - 1.0; + output.Position = float4(lightmapUV, 0, 1); + + return output; +} + +// Must match structure defined in TerrainManager.cpp +struct TerrainVertexInput +{ + float2 TexCoord : TEXCOORD0; + float4 Morph : TEXCOORD1; +}; + +#if defined(_VS_RenderCacheTerrain) + +Texture2D Heightmap : register(t0); + +// Removes the scale vector from the local to world transformation matrix +float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld) +{ + localToWorld[0] *= WorldInvScale.x; + localToWorld[1] *= WorldInvScale.y; + localToWorld[2] *= WorldInvScale.z; + return localToWorld; +} + +float3x3 CalcTangentToWorld(float4x4 world, float3x3 tangentToLocal) +{ + float3x3 localToWorld = RemoveScaleFromLocalToWorld((float3x3)world); + return mul(tangentToLocal, localToWorld); +} + +META_VS(true, FEATURE_LEVEL_SM5) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R8G8B8A8_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +RenderCacheVSOutput VS_RenderCacheTerrain(TerrainVertexInput input) +{ + RenderCacheVSOutput output; + + // Sample heightmap + float2 heightmapUVs = input.TexCoord * HeightmapUVScaleBias.xy + HeightmapUVScaleBias.zw; + float4 heightmapValue = Heightmap.SampleLevel(SamplerPointClamp, heightmapUVs, 0); + bool isHole = (heightmapValue.b + heightmapValue.a) >= 1.9f; + float height = (float)((int)(heightmapValue.x * 255.0) + ((int)(heightmapValue.y * 255) << 8)) / 65535.0; + + // Extract normal and the holes mask + float2 normalTemp = float2(heightmapValue.b, heightmapValue.a) * 2.0f - 1.0f; + float3 normal = float3(normalTemp.x, sqrt(1.0 - saturate(dot(normalTemp, normalTemp))), normalTemp.y); + normal = normalize(normal); + if (isHole) + { + normal = float3(0, 1, 0); + } + + // Construct vertex position + float2 positionXZ = input.TexCoord * TerrainChunkSizeLOD0; + float3 position = float3(positionXZ.x, height, positionXZ.y); + + // Calculate vertex world position + output.WorldPosition = mul(float4(position, 1), WorldMatrix).xyz; + + // Compute world space normal vector + float3x3 tangentToLocal = CalcTangentBasisFromWorldNormal(normal); + float3x3 tangentToWorld = CalcTangentToWorld(WorldMatrix, tangentToLocal); + output.WorldNormal = tangentToWorld[2]; + + // Transform lightmap UV to clip-space + float2 texCoord = input.TexCoord; + float2 lightmapUV = texCoord * LightmapArea.zw + LightmapArea.xy; + lightmapUV.y = 1.0 - lightmapUV.y; + lightmapUV.xy = lightmapUV.xy * 2.0 - 1.0; + output.Position = float4(lightmapUV, 0, 1); + + return output; +} + +#endif + +META_PS(true, FEATURE_LEVEL_SM5) +RenderCachePSOutput PS_RenderCache(RenderCacheVSOutput input) +{ + RenderCachePSOutput output; + + // Just pass interpolated values to the output render targets + output.WorldPosition = float4(input.WorldPosition, 0); + output.WorldNormal = float4(normalize(input.WorldNormal), 0); + + return output; +} + +#if defined(_PS_BlurCache) + +Texture2D WorldNormalsCache : register(t0); +Texture2D WorldPositionsCache : register(t1); + +META_PS(true, FEATURE_LEVEL_SM5) +RenderCachePSOutput PS_BlurCache(Quad_VS2PS input) +{ + RenderCachePSOutput output; + + output.WorldNormal = WorldNormalsCache.SampleLevel(SamplerPointClamp, input.TexCoord, 0); + output.WorldPosition = WorldPositionsCache.SampleLevel(SamplerPointClamp, input.TexCoord, 0); + + // TODO: check if we need to use that filter - this will add more hemispheres for rendering + + /* + // Check if pixel isn't empty + if(length(output.WorldNormal.xyz) > 0.1) + return output; + + // Simple box filter (using only valid samples) + const float blurRadius = 2.0f; + float offset = 1.0f / AtlasSize; + float weight = 0; + float3 totalNormal = 0; + float3 totalPosition = 0; + for(float x = -blurRadius; x <= blurRadius; x++) + { + for(float y = -blurRadius; y <= blurRadius; y++) + { + float2 sampleUV = input.TexCoord + float2(x, y) * offset; + float3 normal = WorldNormalsCache.SampleLevel(SamplerPointClamp, sampleUV, 0).xyz; + float3 position = WorldPositionsCache.SampleLevel(SamplerPointClamp, sampleUV, 0).xyz; + + // Check if pixel isn't empty + if(length(normal) > 0.1) + { + totalNormal += normal; + totalPosition += position; + weight++; + } + } + } + + // Calculate avg values + weight = 1.0 / max(weight, 1); + output.WorldPosition = float4(totalPosition * weight, 0); + output.WorldNormal = float4(normalize(totalNormal * weight), 0); + */ + return output; +} + +#elif defined(_CS_Integrate) + +Texture2D RadianceMap : register(t0); +RWBuffer OutputBuffer : register(u0); + +// Shared memory for summing H-Basis coefficients for a row +groupshared float3 RowHBasis[HEMISPHERES_RESOLUTION][4]; + +// Performs the initial integration/weighting for each pixel and sums together all SH coefficients for a row. +// The integration is based on the "Projection from Cube Maps" section of Peter Pike Sloan's "Stupid Spherical Harmonics Tricks". +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(HEMISPHERES_RESOLUTION, 1, 1)] +void CS_Integrate(uint3 GroupID : SV_GroupID, uint3 GroupThreadID : SV_GroupThreadID) +{ + const int2 location = int2(GroupThreadID.x, GroupID.y); + + // Sample radiance + float3 radiance = RadianceMap.Load(int3(location, 0)).rgb; + + // Calculate the location in [-1, 1] texture space + float u = (location.x / float(HEMISPHERES_RESOLUTION)) * 2.0f - 1.0f; + float v = -((location.y / float(HEMISPHERES_RESOLUTION)) * 2.0f - 1.0f); + + // Calculate weight + float squaredUVs = 1 + u * u + v * v; + float weight = 4 / (sqrt(squaredUVs) * squaredUVs); + + // Extract direction from texel uv + float3 dirVS = normalize(float3(u, v, 1.0f)); + float3 dirTS = mul(dirVS, (float3x3)ToTangentSpace); + + // Project onto SH + float3 sh[9]; + ProjectOntoSH3(dirTS, radiance * weight, sh); + + // Convert to H-Basis + float3 hBasis[4]; + ConvertSH3ToHBasis(sh, hBasis); + + // Store in shared memory + RowHBasis[GroupThreadID.x][0] = hBasis[0]; + RowHBasis[GroupThreadID.x][1] = hBasis[1]; + RowHBasis[GroupThreadID.x][2] = hBasis[2]; + RowHBasis[GroupThreadID.x][3] = hBasis[3]; + GroupMemoryBarrierWithGroupSync(); + + // Sum the coefficients for the row + [unroll(HEMISPHERES_RESOLUTION)] + for (uint s = HEMISPHERES_RESOLUTION / 2; s > 0; s >>= 1) + { + if (GroupThreadID.x < s) + { + RowHBasis[GroupThreadID.x][0] += RowHBasis[GroupThreadID.x + s][0]; + RowHBasis[GroupThreadID.x][1] += RowHBasis[GroupThreadID.x + s][1]; + RowHBasis[GroupThreadID.x][2] += RowHBasis[GroupThreadID.x + s][2]; + RowHBasis[GroupThreadID.x][3] += RowHBasis[GroupThreadID.x + s][3]; + } + + GroupMemoryBarrierWithGroupSync(); + } + + // Have the first thread write out to the output texture + if (GroupThreadID.x == 0) + { + UNROLL + for (uint i = 0; i < NUM_SH_TARGETS; i++) + { + float4 packed = float4(RowHBasis[0][0][i], RowHBasis[0][1][i], RowHBasis[0][2][i], RowHBasis[0][3][i]); + OutputBuffer[GroupID.y + HEMISPHERES_RESOLUTION * i] = packed; + } + } +} + +#elif defined(_CS_Reduction) + +Buffer InputBuffer : register(t0); +RWBuffer OutputBuffer : register(u0); + +// Shared memory for reducing H-Basis coefficients +groupshared float4 ColumnHBasis[HEMISPHERES_RESOLUTION][3]; + +// Reduces H-basis to a 1x1 buffer +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(HEMISPHERES_RESOLUTION, 1, 1)] +void CS_Reduction(uint3 GroupID : SV_GroupID, uint3 GroupThreadID : SV_GroupThreadID) +{ + const int2 location = int2(GroupThreadID.x, GroupID.y); + + // Store in shared memory + ColumnHBasis[location.x][location.y] = InputBuffer[location.x + HEMISPHERES_RESOLUTION * location.y]; + GroupMemoryBarrierWithGroupSync(); + + // Sum the coefficients for the column + [unroll(HEMISPHERES_RESOLUTION)] + for (uint s = HEMISPHERES_RESOLUTION / 2; s > 0; s >>= 1) + { + if (GroupThreadID.x < s) + ColumnHBasis[location.x][location.y] += ColumnHBasis[location.x + s][location.y]; + + GroupMemoryBarrierWithGroupSync(); + } + + // Have the first thread write out to the output buffer + if (GroupThreadID.x == 0 && GroupThreadID.z == 0) + { + float4 output = ColumnHBasis[location.x][location.y]; + + // Note: we add some bias to indicate that this texel has been used + output = output * FinalWeight + USED_TEXELS_BIAS; + output = clamp(output, 0, 10000); + OutputBuffer[TexelAdress + location.y] = output; + } +} + +#elif defined(_CS_BlurEmpty) + +Buffer InputBuffer : register(t0); +RWBuffer OutputBuffer : register(u0); + +// Blur empty lightmap texels to reduce artifacts (blurs only holes and sets -1 to pixels that are not using lightmap - no data) +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1, 1, 1)] +void CS_BlurEmpty(uint3 GroupID : SV_GroupID, uint3 GroupThreadID : SV_GroupThreadID) +{ + const int2 location = int2(GroupID.x, GroupID.y); + const uint texelAdress = (location.y * AtlasSize + location.x) * NUM_SH_TARGETS; + + // TODO: use more therads to sample lightmap and final therad make it blur + + // Simple box filter (using only valid samples) + const int blurRadius = 2; + float weight = 0; + float4 total0 = 0; + float4 total1 = 0; + float4 total2 = 0; + for (int x = -blurRadius; x <= blurRadius; x++) + { + for (int y = -blurRadius; y <= blurRadius; y++) + { + int2 sampleLocation = location + int2(x, y); + uint sampleAdress = (clamp(sampleLocation.y, 0, AtlasSize - 1) * AtlasSize + clamp(sampleLocation.x, 0, AtlasSize - 1)) * NUM_SH_TARGETS; + + float4 sample0 = InputBuffer[sampleAdress + 0]; + float4 sample1 = InputBuffer[sampleAdress + 1]; + float4 sample2 = InputBuffer[sampleAdress + 2]; + + if (any(sample0)) + { + total0 += sample0 - USED_TEXELS_BIAS; + total1 += sample1 - USED_TEXELS_BIAS; + total2 += sample2 - USED_TEXELS_BIAS; + weight++; + } + } + } + + // Check if pixel has invalid value + /*float4 lightmap0 = InputBuffer[texelAdress + 0]; + if (any(lightmap0)) + { + // Discard sampling results + total0 = lightmap0 - USED_TEXELS_BIAS; + total1 = InputBuffer[texelAdress + 1] - USED_TEXELS_BIAS; + total2 = InputBuffer[texelAdress + 2] - USED_TEXELS_BIAS; + } + else*/ if (weight > 0.0001f) + { + // Calculate avg values and save results + weight = 1.0 / weight; + total0 *= weight; + total1 *= weight; + total2 *= weight; + } + else + { + // No data - use wide gaussian blur for the background in + total0 = BACKGROUND_TEXELS_MARK; + total1 = BACKGROUND_TEXELS_MARK; + total2 = BACKGROUND_TEXELS_MARK; + } + + // Save results +#if 1 + OutputBuffer[texelAdress + 0] = total0; + OutputBuffer[texelAdress + 1] = total1; + OutputBuffer[texelAdress + 2] = total2; +#else + OutputBuffer[texelAdress + 0] = InputBuffer[texelAdress + 0]; + OutputBuffer[texelAdress + 1] = InputBuffer[texelAdress + 1]; + OutputBuffer[texelAdress + 2] = InputBuffer[texelAdress + 2]; +#endif +} + +#elif defined(_CS_Dilate) + +Buffer InputBuffer : register(t0); +RWBuffer OutputBuffer : register(u0); + +// Fills the empty lightmap texels with blurred data of the surroundings texels (uses only valid ones) +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1, 1, 1)] +void CS_Dilate(uint3 GroupID : SV_GroupID, uint3 GroupThreadID : SV_GroupThreadID) +{ + const int2 location = int2(GroupID.x, GroupID.y); + const uint texelAdress = (location.y * AtlasSize + location.x) * NUM_SH_TARGETS; + + // Copy data + float4 lightmap0 = InputBuffer[texelAdress + 0]; + float4 lightmap1 = InputBuffer[texelAdress + 1]; + float4 lightmap2 = InputBuffer[texelAdress + 2]; + OutputBuffer[texelAdress + 0] = lightmap0; + OutputBuffer[texelAdress + 1] = lightmap1; + OutputBuffer[texelAdress + 2] = lightmap2; + + // Check if pixel has valid value + if (abs(lightmap0.r - BACKGROUND_TEXELS_MARK) > 0.001f) + return; + + float total = 0; + float4 total0 = 0; + float4 total1 = 0; + float4 total2 = 0; + + const int OffsetX[] = { -1, 0, 1, -1, 0, 1, -1, 0, 1, }; + const int OffsetY[] = { -1, -1, -1, 0, 0, 0, 1, 1, 1, }; + + UNROLL + for (int sampleIndex = 0; sampleIndex < 9; sampleIndex++) + { + int2 sampleLocation = location + int2(OffsetX[sampleIndex], OffsetY[sampleIndex]); + + if (sampleLocation.x >= 0 && sampleLocation.x < AtlasSize && sampleLocation.y >= 0 && sampleLocation.y < AtlasSize) + { + uint sampleAdress = (sampleLocation.y * AtlasSize + sampleLocation.x) * NUM_SH_TARGETS; + + float4 sample0 = InputBuffer[sampleAdress + 0]; + float4 sample1 = InputBuffer[sampleAdress + 1]; + float4 sample2 = InputBuffer[sampleAdress + 2]; + + // Use only valid texels + if (abs(sample0.r - BACKGROUND_TEXELS_MARK) > 0.001f) + { + total0 += sample0; + total1 += sample1; + total2 += sample2; + total++; + } + } + } + + if (total > 0) + { + total = 1.0f / total; + + OutputBuffer[texelAdress + 0] = total0 * total; + OutputBuffer[texelAdress + 1] = total1 * total; + OutputBuffer[texelAdress + 2] = total2 * total; + } +} + +#elif defined(_CS_Finalize) + +RWBuffer OutputBuffer : register(u0); + +// Cleanups the lightmap data by removing the invalid texels to be just pure black +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1, 1, 1)] +void CS_Finalize(uint3 GroupID : SV_GroupID, uint3 GroupThreadID : SV_GroupThreadID) +{ + const int2 location = int2(GroupID.x, GroupID.y); + const uint texelAdress = (location.y * AtlasSize + location.x) * NUM_SH_TARGETS; + + // Check if pixel has valid value + if (abs(OutputBuffer[texelAdress].r - BACKGROUND_TEXELS_MARK) > 0.001f) + return; + + // Make it black + float4 clearColor = float4(0, 0, 0, 0); + OutputBuffer[texelAdress + 0] = clearColor; + OutputBuffer[texelAdress + 1] = clearColor; + OutputBuffer[texelAdress + 2] = clearColor; +} + +#endif diff --git a/Source/Shaders/BitonicSort.shader b/Source/Shaders/BitonicSort.shader new file mode 100644 index 000000000..07d608e33 --- /dev/null +++ b/Source/Shaders/BitonicSort.shader @@ -0,0 +1,252 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/Math.hlsl" + +struct Item +{ + float Key; + uint Value; +}; + +META_CB_BEGIN(0, Data) +Item NullItem; +uint CounterOffset; +uint MaxIterations; +uint LoopK; +float KeySign; +uint LoopJ; +float Dummy0; +META_CB_END + +// Buffer with counter of items to sort (accessed via uint load at CounterOffset address) +ByteAddressBuffer CounterBuffer : register(t0); + +// Takes value and widens it by one bit at the location of the bit in the mask. +// A one is inserted in the space. The oneBitMask must have one and only one bit set. +uint InsertOneBit(uint value, uint oneBitMask) +{ + uint mask = oneBitMask - 1; + return (value & ~mask) << 1 | (value & mask) | oneBitMask; +} + +// Determines if two sort keys should be swapped in the list. KeySign is +// either 1 or -1. Multiplication with the KeySign will either invert the sign +// (effectively a negation) or leave the value alone. When the the KeySign is +// 1, we are sorting descending, so when A < B, they should swap. For an +// ascending sort, -A < -B should swap. +bool ShouldSwap(Item a, Item b) +{ + //return (a ^ NullItem) < (b ^ NullItem); + + //return (a.Key) < (b.Key); + return (a.Key * KeySign) < (b.Key * KeySign); + //return asfloat(a) < asfloat(b); + //return (asfloat(a) * KeySign) < (asfloat(b) * KeySign); +} + +#ifdef _CS_IndirectArgs + +RWByteAddressBuffer IndirectArgsBuffer : register(u0); + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(22, 1, 1)] +void CS_IndirectArgs(uint groupIndex : SV_GroupIndex) +{ + if (groupIndex >= MaxIterations) + return; + + uint count = CounterBuffer.Load(CounterOffset); + uint k = 2048 << groupIndex; + + // We need one more iteration every time the number of thread groups doubles + if (k > NextPow2((count + 2047) & ~2047)) + count = 0; + + uint prevDispatches = groupIndex * (groupIndex + 1) / 2; + uint offset = 12 * prevDispatches; + + // Generate outer sort dispatch arguments + for (uint j = k / 2; j > 1024; j /= 2) + { + // All of the groups of size 2j that are full + uint completeGroups = (count & ~(2 * j - 1)) / 2048; + + // Remaining items must only be sorted if there are more than j of them + uint partialGroups = ((uint)max(int(count - completeGroups * 2048 - j), 0) + 1023) / 1024; + + IndirectArgsBuffer.Store3(offset, uint3(completeGroups + partialGroups, 1, 1)); + + offset += 12; + } + + // The inner sort always sorts all groups (rounded up to multiples of 2048) + IndirectArgsBuffer.Store3(offset, uint3((count + 2047) / 2048, 1, 1)); +} + +#endif + +#if defined(_CS_PreSort) || defined(_CS_InnerSort) + +RWStructuredBuffer SortBuffer : register(u0); + +groupshared Item SortData[2048]; + +void LoadItem(uint element, uint count) +{ + // Unused elements must sort to the end + if (element < count) + SortData[element & 2047] = SortBuffer[element]; + else + SortData[element & 2047] = NullItem; +} + +void StoreItem(uint element, uint count) +{ + if (element < count) + { + SortBuffer[element] = SortData[element & 2047]; + } +} + +#endif + +#ifdef _CS_PreSort + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1024, 1, 1)] +void CS_PreSort(uint3 groupID : SV_GroupID, uint groupIndex : SV_GroupIndex) +{ + // Item index of the start of this group + const uint groupStart = groupID.x * 2048; + + // Actual number of items that need sorting + const uint count = CounterBuffer.Load(CounterOffset); + + LoadItem(groupStart + groupIndex, count); + LoadItem(groupStart + groupIndex + 1024, count); + + GroupMemoryBarrierWithGroupSync(); + + UNROLL + for (uint k = 2; k <= 2048; k <<= 1) + { + for (uint j = k / 2; j > 0; j /= 2) + { + uint index2 = InsertOneBit(groupIndex, j); + uint index1 = index2 ^ (k == 2 * j ? k - 1 : j); + + Item A = SortData[index1]; + Item B = SortData[index2]; + + if (ShouldSwap(A, B)) + { + // Swap the items + SortData[index1] = B; + SortData[index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + } + + // Write sorted results to memory + StoreItem(groupStart + groupIndex, count); + StoreItem(groupStart + groupIndex + 1024, count); +} + +#endif + +#ifdef _CS_InnerSort + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1024, 1, 1)] +void CS_InnerSort(uint3 groupID : SV_GroupID, uint groupIndex : SV_GroupIndex) +{ + const uint count = CounterBuffer.Load(CounterOffset); + + // Item index of the start of this group + const uint groupStart = groupID.x * 2048; + + // Load from memory into LDS to prepare sort + LoadItem(groupStart + groupIndex, count); + LoadItem(groupStart + groupIndex + 1024, count); + + GroupMemoryBarrierWithGroupSync(); + + UNROLL + for (uint j = 1024; j > 0; j /= 2) + { + uint index2 = InsertOneBit(groupIndex, j); + uint index1 = index2 ^ j; + + Item A = SortData[index1]; + Item B = SortData[index2]; + + if (ShouldSwap(A, B)) + { + // Swap the items + SortData[index1] = B; + SortData[index2] = A; + } + + GroupMemoryBarrierWithGroupSync(); + } + + StoreItem(groupStart + groupIndex, count); + StoreItem(groupStart + groupIndex + 1024, count); +} + +#endif + +#ifdef _CS_OuterSort + +RWStructuredBuffer SortBuffer : register(u0); + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1024, 1, 1)] +void CS_OuterSort(uint3 dispatchThreadId : SV_DispatchThreadID) +{ + const uint count = CounterBuffer.Load(CounterOffset); + + // Form unique index pair from dispatch thread ID + uint index2 = InsertOneBit(dispatchThreadId.x, LoopJ); + uint index1 = index2 ^ (LoopK == 2 * LoopJ ? LoopK - 1 : LoopJ); + + if (index2 >= count) + return; + + Item A = SortBuffer[index1]; + Item B = SortBuffer[index2]; + + if (ShouldSwap(A, B)) + { + // Swap the items + SortBuffer[index1] = B; + SortBuffer[index2] = A; + } +} + +#endif + +#ifdef _CS_CopyIndices + +StructuredBuffer SortBuffer : register(t1); +RWBuffer SortedIndices : register(u0); + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1024, 1, 1)] +void CS_CopyIndices(uint3 dispatchThreadId : SV_DispatchThreadID) +{ + const uint count = CounterBuffer.Load(CounterOffset); + uint index = dispatchThreadId.x; + + if (index >= count) + return; + + Item element = SortBuffer[index]; + + SortedIndices[index] = element.Value; +} + +#endif diff --git a/Source/Shaders/Collisions.hlsl b/Source/Shaders/Collisions.hlsl new file mode 100644 index 000000000..a372d649b --- /dev/null +++ b/Source/Shaders/Collisions.hlsl @@ -0,0 +1,84 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __COLLISIONS__ +#define __COLLISIONS__ + +bool RayHitSphere(float3 r, float3 sphereCenter, float sphereRadius) +{ + float3 closestPointOnRay = max(0, dot(sphereCenter, r)) * r; + float3 centerToRay = closestPointOnRay - sphereCenter; + return dot(centerToRay, centerToRay) <= (sphereRadius * sphereRadius); +} + +bool RayHitRect(float3 r, float3 rectCenter, float3 rectX, float3 rectY, float3 rectZ, float rectExtentX, float rectExtentY) +{ + float3 pointOnPlane = r * max(0, dot(rectZ, rectCenter) / dot(rectZ, r)); + bool inExtentX = abs(dot(rectX, pointOnPlane - rectCenter)) <= rectExtentX; + bool inExtentY = abs(dot(rectY, pointOnPlane - rectCenter)) <= rectExtentY; + return inExtentX && inExtentY; +} + +// Computes where a ray hits a sphere (which is centered at the origin). +// \param[in] rayOrigin The start position of the ray. +// \param[in] rayDirection The normalized direction of the ray. +// \param[in] radius The radius of the sphere. +// \param[out] enter The ray parameter where the ray enters the sphere. +// 0 if the ray is already in the sphere. +// \param[out] exit The ray parameter where the ray exits the sphere. +// \return 0 or a positive value if the ray hits the sphere. A negative value +// if the ray does not touch the sphere. +float HitSphere(float3 rayOrigin, float3 rayDirection, float radius, out float enter, out float exit) +{ + // Solve the equation: ||rayOrigin + distance * rayDirection|| = r + // + // This is a straight-forward quadratic equation: + // ||O + d * D|| = r + // => (O + d * D)2 = r2 where V2 means V.V + // => d2 * D2 + 2 * d * (O.D) + O2 - r2 = 0 + // D2 is 1 because the rayDirection is normalized. + // => d = -O.D + sqrt((O.D)2 - O2 + r2) + + float OD = dot(rayOrigin, rayDirection); + float OO = dot(rayOrigin, rayOrigin); + float radicand = OD * OD - OO + radius * radius; + enter = max(0, -OD - sqrt(radicand)); + exit = -OD + sqrt(radicand); + + // If radicand is negative then we do not have a result - no hit. + return radicand; +} + +// Clips a ray to an AABB. Does not handle rays parallel to any of the planes. +// +// @param rayOrigin - The origin of the ray in world space. +// @param rayEnd - The end of the ray in world space. +// @param boxMin - The minimum extrema of the box. +// @param boxMax - The maximum extrema of the box. +// @return - Returns the closest intersection along the ray in x, and furthest in y. +// If the ray did not intersect the box, then the furthest intersection <= the closest intersection. +// The intersections will always be in the range [0,1], which corresponds to [rayOrigin, rayEnd] in worldspace. +// To find the world space position of either intersection, simply plug it back into the ray equation: +// WorldPos = RayOrigin + (rayEnd - RayOrigin) * Intersection; +float2 LineBoxIntersect(float3 rayOrigin, float3 rayEnd, float3 boxMin, float3 boxMax) +{ + float3 invRayDir = 1.0f / (rayEnd - rayOrigin); + + //find the ray intersection with each of the 3 planes defined by the minimum extrema. + float3 planeIntersections1 = (boxMin - rayOrigin) * invRayDir; + //find the ray intersection with each of the 3 planes defined by the maximum extrema. + float3 planeIntersections2 = (boxMax - rayOrigin) * invRayDir; + //get the closest of these intersections along the ray + float3 closestPlaneIntersections = min(planeIntersections1, planeIntersections2); + //get the furthest of these intersections along the ray + float3 furthestPlaneIntersections = max(planeIntersections1, planeIntersections2); + + float2 boxIntersections; + //find the furthest near intersection + boxIntersections.x = max(closestPlaneIntersections.x, max(closestPlaneIntersections.y, closestPlaneIntersections.z)); + //find the closest far intersection + boxIntersections.y = min(furthestPlaneIntersections.x, min(furthestPlaneIntersections.y, furthestPlaneIntersections.z)); + //clamp the intersections to be between rayOrigin and RayEnd on the ray + return saturate(boxIntersections); +} + +#endif diff --git a/Source/Shaders/ColorGrading.shader b/Source/Shaders/ColorGrading.shader new file mode 100644 index 000000000..d86004a31 --- /dev/null +++ b/Source/Shaders/ColorGrading.shader @@ -0,0 +1,359 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/GammaCorrectionCommon.hlsl" +#include "./Flax/ACES.hlsl" + +#ifdef _PS_Lut3D +#define USE_VOLUME_LUT 1 +#else +#define USE_VOLUME_LUT 0 +#endif +static const float LUTSize = 32; + +META_CB_BEGIN(0, Data) +float4 ColorSaturationShadows; +float4 ColorContrastShadows; +float4 ColorGammaShadows; +float4 ColorGainShadows; +float4 ColorOffsetShadows; + +float4 ColorSaturationMidtones; +float4 ColorContrastMidtones; +float4 ColorGammaMidtones; +float4 ColorGainMidtones; +float4 ColorOffsetMidtones; + +float4 ColorSaturationHighlights; +float4 ColorContrastHighlights; +float4 ColorGammaHighlights; +float4 ColorGainHighlights; +float4 ColorOffsetHighlights; + +float ColorCorrectionShadowsMax; +float ColorCorrectionHighlightsMin; +float WhiteTemp; +float WhiteTint; + +float3 Dummy; +float LutWeight; +META_CB_END + +Texture2D LutTexture : register(t0); + +// Accurate for 1000K < temp < 15000K +// [Krystek 1985, "An algorithm to calculate correlated colour temperature"] +float2 PlanckianLocusChromaticity(float temp) +{ + float u = ( 0.860117757f + 1.54118254e-4f * temp + 1.28641212e-7f * temp*temp ) / ( 1.0f + 8.42420235e-4f * temp + 7.08145163e-7f * temp*temp ); + float v = ( 0.317398726f + 4.22806245e-5f * temp + 4.20481691e-8f * temp*temp ) / ( 1.0f - 2.89741816e-5f * temp + 1.61456053e-7f * temp*temp ); + + float x = 3*u / ( 2*u - 8*v + 4 ); + float y = 2*v / ( 2*u - 8*v + 4 ); + + return float2(x,y); +} + +// Accurate for 4000K < temp < 25000K +// in: correlated color temperature +// out: CIE 1931 chromaticity +float2 D_IlluminantChromaticity(float temp) +{ + // Correct for revision of Plank's law + // This makes 6500 == D65 + temp *= 1.4388 / 1.438; + + float x = temp <= 7000 ? + 0.244063 + ( 0.09911e3 + ( 2.9678e6 - 4.6070e9 / temp ) / temp ) / temp : + 0.237040 + ( 0.24748e3 + ( 1.9018e6 - 2.0064e9 / temp ) / temp ) / temp; + + float y = -3 * x*x + 2.87 * x - 0.275; + + return float2(x,y); +} + +// Find closest color temperature to chromaticity +// [McCamy 1992, "Correlated color temperature as an explicit function of chromaticity coordinates"] +float CorrelatedColortemperature(float x, float y) +{ + float n = (x - 0.3320) / (0.1858 - y); + return -449 * n*n*n + 3525 * n*n - 6823.3 * n + 5520.33; +} + +float2 PlanckianIsothermal(float temp, float tint) +{ + float u = ( 0.860117757f + 1.54118254e-4f * temp + 1.28641212e-7f * temp*temp ) / ( 1.0f + 8.42420235e-4f * temp + 7.08145163e-7f * temp*temp ); + float v = ( 0.317398726f + 4.22806245e-5f * temp + 4.20481691e-8f * temp*temp ) / ( 1.0f - 2.89741816e-5f * temp + 1.61456053e-7f * temp*temp ); + + float ud = ( -1.13758118e9f - 1.91615621e6f * temp - 1.53177f * temp*temp ) / Square( 1.41213984e6f + 1189.62f * temp + temp*temp ); + float vd = ( 1.97471536e9f - 705674.0f * temp - 308.607f * temp*temp ) / Square( 6.19363586e6f - 179.456f * temp + temp*temp ); + + float2 uvd = normalize( float2( u, v ) ); + + // Correlated color temperature is meaningful within +/- 0.05 + u += -uvd.y * tint * 0.05; + v += uvd.x * tint * 0.05; + + float x = 3*u / ( 2*u - 8*v + 4 ); + float y = 2*v / ( 2*u - 8*v + 4 ); + + return float2(x,y); +} + +float3 WhiteBalance(float3 linearColor) +{ + float2 srcWhiteDaylight = D_IlluminantChromaticity(WhiteTemp); + float2 srcWhitePlankian = PlanckianLocusChromaticity(WhiteTemp); + + float2 srcWhite = WhiteTemp < 4000 ? srcWhitePlankian : srcWhiteDaylight; + float2 d65White = float2(0.31270, 0.32900); + + // Offset along isotherm + float2 isothermal = PlanckianIsothermal(WhiteTemp, WhiteTint) - srcWhitePlankian; + srcWhite += isothermal; + + float3x3 whiteBalance = ChromaticAdaptation(srcWhite, d65White); + whiteBalance = mul(XYZ_2_sRGB_MAT, mul(whiteBalance, sRGB_2_XYZ_MAT)); + + return mul(whiteBalance, linearColor); +} + +float3 ColorCorrect(float3 color, float luma, float4 saturation, float4 contrast, float4 gamma, float4 gain, float4 offset) +{ + color = max(0, lerp(luma.xxx, color, saturation.xyz * saturation.w)); + color = pow(color * (1.0 / 0.18), contrast.xyz * contrast.w) * 0.18; + color = pow(color, 1.0 / (gamma.xyz * gamma.w)); + color = color * (gain.xyz * gain.w) + (offset.xyz + offset.w); + return color; +} + +float3 ColorCorrectAll(float3 color) +{ + float luma = dot(color, AP1_RGB2Y); + + // Shadow CC + float3 ccColorShadows = ColorCorrect(color, luma, + ColorSaturationShadows, + ColorContrastShadows, + ColorGammaShadows, + ColorGainShadows, + ColorOffsetShadows); + float ccWeightShadows = 1 - smoothstep(0, ColorCorrectionShadowsMax, luma); + + // Highlight CC + float3 ccColorHighlights = ColorCorrect(color, luma, + ColorSaturationHighlights, + ColorContrastHighlights, + ColorGammaHighlights, + ColorGainHighlights, + ColorOffsetHighlights); + float ccWeightHighlights = smoothstep(ColorCorrectionHighlightsMin, 1, luma); + + // Midtone CC + float3 ccColorMidtones = ColorCorrect(color, luma, + ColorSaturationMidtones, + ColorContrastMidtones, + ColorGammaMidtones, + ColorGainMidtones, + ColorOffsetMidtones); + float ccWeightMidtones = 1 - ccWeightShadows - ccWeightHighlights; + + // Blend shadow, midtone and highlight CCs + return ccColorShadows * ccWeightShadows + ccColorMidtones * ccWeightMidtones + ccColorHighlights * ccWeightHighlights; +} + +float3 ColorGrade(float3 linearColor) +{ + // ACEScg working space + const float3x3 sRGB_2_AP1 = mul(XYZ_2_AP1_MAT, mul(D65_2_D60_CAT, sRGB_2_XYZ_MAT)); + const float3x3 AP1_2_sRGB = mul(XYZ_2_sRGB_MAT, mul(D60_2_D65_CAT, AP1_2_XYZ_MAT)); + float3 color = mul(sRGB_2_AP1, linearColor); + + // Nuke-style color correct + color = ColorCorrectAll(color); + + // Convert back to linear color + return mul(AP1_2_sRGB, color); +} + +#ifdef TONE_MAPPING_MODE_NEUTRAL + +// Neutral tonemapping (Hable/Hejl/Frostbite) +float3 NeutralCurve(float3 linearColor, float a, float b, float c, float d, float e, float f) +{ + return ((linearColor * (a * linearColor + c * b) + d * e) / (linearColor * (a * linearColor + b) + d * f)) - e / f; +} + +float3 TonemapNeutral(float3 linearColor) +{ + // Neutral tonemapping + const float a = 0.2; + const float b = 0.29; + const float c = 0.24; + const float d = 0.272; + const float e = 0.02; + const float f = 0.3; + const float whiteLevel = 5.3; + const float whiteClip = 1.0; + float3 whiteScale = (1.0).xxx / NeutralCurve(whiteLevel, a, b, c, d, e, f); + linearColor = NeutralCurve(linearColor * whiteScale, a, b, c, d, e, f); + linearColor *= whiteScale; + return linearColor / whiteClip.xxx; +} + +#endif + +#ifdef TONE_MAPPING_MODE_ACES + +float3 TonemapACES(float3 linearColor) +{ + // The code in this file was originally written by Stephen Hill (@self_shadow), who deserves all + // credit for coming up with this fit and implementing it. Buy him a beer next time you see him. :) + + // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT + static const float3x3 ACESInputMat = + { + {0.59719, 0.35458, 0.04823}, + {0.07600, 0.90834, 0.01566}, + {0.02840, 0.13383, 0.83777} + }; + + // ODT_SAT => XYZ => D60_2_D65 => sRGB + static const float3x3 ACESOutputMat = + { + { 1.60475, -0.53108, -0.07367}, + {-0.10208, 1.10813, -0.00605}, + {-0.00327, -0.07276, 1.07602} + }; + + float3 color = linearColor; + color = mul(ACESInputMat, color); + + // Apply RRT and ODT + float3 a = color * (color + 0.0245786f) - 0.000090537f; + float3 b = color * (0.983729f * color + 0.4329510f) + 0.238081f; + color = a / b; + + color = mul(ACESOutputMat, color); + return saturate(color); +} + +#endif + +// Perfoms the tonemapping on the input linear color +float3 Tonemap(float3 linearColor) +{ +#if defined(TONE_MAPPING_MODE_NONE) + return linearColor; +#elif defined(TONE_MAPPING_MODE_NEUTRAL) + return TonemapNeutral(linearColor); +#elif defined(TONE_MAPPING_MODE_ACES) + return TonemapACES(linearColor); +#else + return float3(0, 0, 0); +#endif +} + +float4 CombineLUTs(float2 uv, uint layerIndex) +{ + float3 encodedColor; +#if USE_VOLUME_LUT + // Construct the neutral color from a 3d position volume texture + { + uv = uv - float2(0.5f / LUTSize, 0.5f / LUTSize); + encodedColor = float3(uv * LUTSize / (LUTSize - 1), layerIndex / (LUTSize - 1)); + } +#else + // Construct the neutral color from a 2d position in 256x16 + { + uv -= float2(0.49999f / (LUTSize * LUTSize), 0.49999f / LUTSize); + + float3 rgb; + rgb.r = frac(uv.x * LUTSize); + rgb.b = uv.x - rgb.r / LUTSize; + rgb.g = uv.y; + + float scale = LUTSize / (LUTSize - 1); + encodedColor = rgb * scale; + } +#endif + + // Move from encoded LUT color space to linear color + //float3 linearColor = encodedColor.rgb; // Default + //float3 linearColor = LogCToLinear(encodedColor.rgb); // LogC + float3 linearColor = LogToLinear(encodedColor.rgb) - LogToLinear(0); // Log + + // Apply white balance + linearColor = WhiteBalance(linearColor); + + // Apply color grading + linearColor = ColorGrade(linearColor); + + // Apply tone mapping + float3 color = Tonemap(linearColor); + + // Apply LDR LUT color grading + { + float3 uvw = color * (15.0 / 16.0) + (0.5f / 16.0); + float3 lutColor = SampleUnwrappedTexture3D(LutTexture, SamplerLinearClamp, uvw, 16).rgb; + color = lerp(color, lutColor, LutWeight); + } + + return float4(color, 1); +} + +// Vertex shader that writes to a range of slices of a volume texture +META_VS(true, FEATURE_LEVEL_SM4) +META_FLAG(VertexToGeometryShader) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +Quad_VS2GS VS_WriteToSlice(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0, uint LayerIndex : SV_InstanceID) +{ + Quad_VS2GS output; + + output.Vertex.Position = float4(Position, 0, 1); + output.Vertex.TexCoord = TexCoord; + output.LayerIndex = LayerIndex; + + return output; +} + +// Geometry shader that writes to a range of slices of a volume texture +META_GS(true, FEATURE_LEVEL_SM4) +[maxvertexcount(3)] +void GS_WriteToSlice(triangle Quad_VS2GS input[3], inout TriangleStream OutStream) +{ + Quad_GS2PS vertex0; + vertex0.Vertex = input[0].Vertex; + vertex0.LayerIndex = input[0].LayerIndex; + + Quad_GS2PS vertex1; + vertex1.Vertex = input[1].Vertex; + vertex1.LayerIndex = input[1].LayerIndex; + + Quad_GS2PS vertex2; + vertex2.Vertex = input[2].Vertex; + vertex2.LayerIndex = input[2].LayerIndex; + + OutStream.Append(vertex0); + OutStream.Append(vertex1); + OutStream.Append(vertex2); +} + +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(TONE_MAPPING_MODE_NONE=1) +META_PERMUTATION_1(TONE_MAPPING_MODE_NEUTRAL=1) +META_PERMUTATION_1(TONE_MAPPING_MODE_ACES=1) +float4 PS_Lut2D(Quad_VS2PS input) : SV_Target +{ + return CombineLUTs(input.TexCoord, 0); +} + +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(TONE_MAPPING_MODE_NONE=1) +META_PERMUTATION_1(TONE_MAPPING_MODE_NEUTRAL=1) +META_PERMUTATION_1(TONE_MAPPING_MODE_ACES=1) +float4 PS_Lut3D(Quad_GS2PS input) : SV_Target +{ + return CombineLUTs(input.Vertex.TexCoord, input.LayerIndex); +} diff --git a/Source/Shaders/Common.hlsl b/Source/Shaders/Common.hlsl new file mode 100644 index 000000000..79692d1ac --- /dev/null +++ b/Source/Shaders/Common.hlsl @@ -0,0 +1,235 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __COMMON__ +#define __COMMON__ + +// Platform macros +#if !defined(DIRECTX) +#define DIRECTX 0 +#endif +#if !defined(OPENGL) +#define OPENGL 0 +#endif +#if !defined(VULKAN) +#define VULKAN 0 +#endif +#if defined(PLATFORM_PS4) +#include "./FlaxPlatforms/PS4/Shaders/PS4Common.hlsl" +#endif + +// Feature levels +#define FEATURE_LEVEL_ES2 0 +#define FEATURE_LEVEL_ES3 1 +#define FEATURE_LEVEL_ES3_1 2 +#define FEATURE_LEVEL_SM4 3 +#define FEATURE_LEVEL_SM5 4 +#if !defined(FEATURE_LEVEL) +#error "Invalid platform defines" +#endif + +// Meta macros used by shaders parser +#define META_VS(isVisible, minFeatureLevel) +#define META_VS_IN_ELEMENT(type, index, format, slot, offset, slotClass, stepRate, isVisible) +#define META_HS(isVisible, minFeatureLevel) +#define META_HS_PATCH(inControlPoints) +#define META_DS(isVisible, minFeatureLevel) +#define META_GS(isVisible, minFeatureLevel) +#define META_PS(isVisible, minFeatureLevel) +#define META_CS(isVisible, minFeatureLevel) +#define META_FLAG(flag) +#define META_PERMUTATION_1(param0) +#define META_PERMUTATION_2(param0, param1) +#define META_PERMUTATION_3(param0, param1, param2) +#define META_PERMUTATION_4(param0, param1, param2, param3) +#define META_CB_BEGIN(index, name) cbuffer name : register(b##index) { +#define META_CB_END }; + +#define SHADING_MODEL_UNLIT 0 +#define SHADING_MODEL_LIT 1 +#define SHADING_MODEL_SUBSURFACE 2 +#define SHADING_MODEL_FOLIAGE 3 + +// Detect feature level support +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 +#define CAN_USE_GATHER 1 +#else +#define CAN_USE_GATHER 0 +#endif +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 +#define CAN_USE_COMPUTE_SHADER 1 +#else +#define CAN_USE_COMPUTE_SHADER 0 +#endif +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM4 +#define CAN_USE_GEOMETRY_SHADER 1 +#else +#define CAN_USE_GEOMETRY_SHADER 0 +#endif +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 +#define CAN_USE_TESSELLATION 1 +#else +#define CAN_USE_TESSELLATION 0 +#endif + +// Compiler attributes + +#if DIRECTX || VULKAN + +// Avoids flow control constructs. +#define UNROLL [unroll] + +// Gives preference to flow control constructs. +#define LOOP [loop] + +// Performs branching by using control flow instructions like jmp and label. +#define BRANCH [branch] + +/// Performs branching by using the cnd instructions. +#define FLATTEN [flatten] + +#endif + +// Compiler attribute fallback + +#ifndef UNROLL +#define UNROLL +#endif + +#ifndef LOOP +#define LOOP +#endif + +#ifndef BRANCH +#define BRANCH +#endif + +#ifndef FLATTEN +#define FLATTEN +#endif + +// TODO: cleanup global samplers with per-platform customization support +#ifndef SamplerLinearClamp + +// Static samplers +sampler SamplerLinearClamp : register(s0); +sampler SamplerPointClamp : register(s1); +sampler SamplerLinearWrap : register(s2); +sampler SamplerPointWrap : register(s3); + +// TODO: use custom pipeline layouts and bind different sampler during shadows rendering +SamplerComparisonState ShadowSampler : register(s4); +SamplerComparisonState ShadowSamplerPCF : register(s5); + +#endif + +// General purpose macros +#define SAMPLE_RT(rt, texCoord) rt.SampleLevel(SamplerPointClamp, texCoord, 0) +#define SAMPLE_RT_LINEAR(rt, texCoord) rt.SampleLevel(SamplerLinearClamp, texCoord, 0) +#define HDR_CLAMP_MAX 65472.0 +#define PI 3.1415926535897932 + +// Structure that contains information about GBuffer +struct GBufferData +{ + float4 ViewInfo; // x-1/Projection[0,0] y-1/Projection[1,1] z-(Far / (Far - Near) w-(-Far * Near) / (Far - Near) / Far) + float4 ScreenSize; // x-Width y-Height z-1/Width w-1/Height + float3 ViewPos; // view position (in world space) + float ViewFar; // view far plane distance (in world space) + float4x4 InvViewMatrix; // inverse view matrix (4 rows by 4 columns) + float4x4 InvProjectionMatrix; // inverse projection matrix (4 rows by 4 columns) +}; + +#ifdef PLATFORM_ANDROID +// #AdrenoVK_CB_STRUCT_MEMBER_ACCESS_BUG +#define DECLARE_GBUFFERDATA_ACCESS(uniformName) GBufferData Get##uniformName##Data() { GBufferData tmp; tmp.ViewInfo = uniformName.ViewInfo; tmp.ScreenSize = uniformName.ScreenSize; tmp.ViewPos = uniformName.ViewPos; tmp.ViewFar = uniformName.ViewFar; tmp.InvViewMatrix = uniformName.InvViewMatrix; tmp.InvProjectionMatrix = uniformName.InvProjectionMatrix; return tmp; } +#else +#define DECLARE_GBUFFERDATA_ACCESS(uniformName) GBufferData Get##uniformName##Data() { return uniformName; } +#endif + +// Structure that contains information about atmosphere fog +struct AtmosphericFogData +{ + float AtmosphericFogDensityScale; + float AtmosphericFogSunDiscScale; + float AtmosphericFogDistanceScale; + float AtmosphericFogGroundOffset; + + float AtmosphericFogAltitudeScale; + float AtmosphericFogStartDistance; + float AtmosphericFogPower; + float AtmosphericFogDistanceOffset; + + float3 AtmosphericFogSunDirection; + float AtmosphericFogSunPower; + + float3 AtmosphericFogSunColor; + float AtmosphericFogDensityOffset; +}; + +// Packed env probe data +struct ProbeData +{ + float4 Data0; // x - Position.x, y - Position.y, z - Position.z, w - unused + float4 Data1; // x - Radius , y - 1 / Radius, z - Brightness, w - unused +}; + +#define ProbePos Data0.xyz +#define ProbeRadius Data1.x +#define ProbeInvRadius Data1.y +#define ProbeBrightness Data1.z + +struct Quad_VS2PS +{ + float4 Position : SV_Position; + noperspective float2 TexCoord : TEXCOORD0; +}; + +struct Quad_VS2GS +{ + Quad_VS2PS Vertex; + uint LayerIndex : TEXCOORD1; +}; + +struct Quad_GS2PS +{ + Quad_VS2PS Vertex; + uint LayerIndex : SV_RenderTargetArrayIndex; +}; + +float VisualizeTextureGrid(float2 texCoord, float2 textureSize, float gridSize) +{ + if (gridSize > 0) + { + float2 t = frac(texCoord * textureSize); + return (t.x < gridSize || t.x > 1 - gridSize) || (t.y < gridSize || t.y > 1 - gridSize); + } + else + { + int2 t = int2(texCoord * textureSize); + return (t.x % 2 == 0 && t.y % 2 == 0) || (t.x % 2 == 1 && t.y % 2 == 1); + } +} + +float BiasedNDotL(float NoL) +{ + return saturate(NoL * 1.08f - 0.08f); +} + +float Luminance(float3 color) +{ + return dot(color, float3(0.299f, 0.587f, 0.114f)); +} + +// Samples the unwrapped 3D texture (eg. volume texture of size 16x16x16 would be unwrapped to 256x16) +half4 SampleUnwrappedTexture3D(Texture2D tex, SamplerState s, float3 uvw, float size) +{ + float intW = floor(uvw.z * size - 0.5); + half fracW = uvw.z * size - 0.5 - intW; + float u = (uvw.x + intW) / size; + float v = uvw.y; + half4 rg0 = tex.Sample(s, float2(u, v)); + half4 rg1 = tex.Sample(s, float2(u + 1.0f / size, v)); + return lerp(rg0, rg1, fracW); +} + +#endif diff --git a/Source/Shaders/DebugDraw.shader b/Source/Shaders/DebugDraw.shader new file mode 100644 index 000000000..455fa69a8 --- /dev/null +++ b/Source/Shaders/DebugDraw.shader @@ -0,0 +1,53 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +META_CB_BEGIN(0, Data) +float4x4 ViewProjection; +float3 Padding; +bool EnableDepthTest; +META_CB_END + +struct VS2PS +{ + float4 Position : SV_Position; + float4 Color : TEXCOORD0; +}; + +Texture2D SceneDepthTexture : register(t0); + +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R8G8B8A8_UNORM, 0, ALIGN, PER_VERTEX, 0, true) +VS2PS VS(float3 Position : POSITION, float4 Color : COLOR) +{ + VS2PS output; + output.Position = mul(float4(Position, 1), ViewProjection); + output.Color = Color; + return output; +} + +void PerformDepthTest(float4 svPosition) +{ + // Depth test manually if compositing editor primitives + FLATTEN + if (EnableDepthTest) + { + float sceneDepthDeviceZ = SceneDepthTexture.Load(int3(svPosition.xy, 0)).r; + float interpolatedDeviceZ = svPosition.z; + clip(sceneDepthDeviceZ - interpolatedDeviceZ); + } +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS(VS2PS input) : SV_Target +{ + return input.Color; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_DepthTest(VS2PS input) : SV_Target +{ + PerformDepthTest(input.Position); + return input.Color; +} diff --git a/Source/Shaders/DepthOfField.shader b/Source/Shaders/DepthOfField.shader new file mode 100644 index 000000000..1855e728c --- /dev/null +++ b/Source/Shaders/DepthOfField.shader @@ -0,0 +1,651 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +// Implementation based on: +// Bokeh Sample by MJP +// http://mynameismjp.wordpress.com/ +// Licensed under Microsoft Public License (Ms-PL) + +#include "./Flax/Common.hlsl" + +// This must match C++ defines +#define DOF_MAX_SAMPLE_RADIUS 10 +#define DOF_GRID_SIZE 450 +#define DOF_APRON_SIZE DOF_MAX_SAMPLE_RADIUS +#define DOF_THREAD_GROUP_SIZE (DOF_GRID_SIZE + (DOF_APRON_SIZE * 2)) + +// Some configuration +#define USE_CS_HALF_PIXEL_OFFSET 1 +#define USE_CS_LINEAR_SAMPLING 0 + +META_CB_BEGIN(0, DofData) + +float2 ProjectionAB; +float BokehDepthCullThreshold; +float BokehDepthCutoff; + +float4 DOFDepths; + +float MaxBokehSize; +float BokehBrightnessThreshold; +float BokehBlurThreshold; +float BokehFalloff; + +float2 BokehTargetSize; +float2 DOFTargetSize; + +float2 InputSize; +float DepthLimit; +float BlurStrength; + +float3 Dummy; +float BokehBrightness; +META_CB_END + +static const float2 Offsets[4] = +{ + float2(-1, 1), + float2(1, 1), + float2(-1, -1), + float2(1, -1) +}; + +static const float2 TexCoords[4] = +{ + float2(0, 0), + float2(1, 0), + float2(0, 1), + float2(1, 1) +}; + +struct BokehVSOutput +{ + float2 Position : POSITION; + float2 Size : SIZE; + float3 Color : COLOR; + float Depth : DEPTH; +}; + +struct BokehGSOutput +{ + float4 PositionCS : SV_Position; + float2 TexCoord : TEXCOORD; + float3 Color : COLOR; + float Depth : DEPTH; +}; + +struct BokehPSInput +{ + float4 PositionSS : SV_Position; + float2 TexCoord : TEXCOORD; + float3 Color : COLOR; + float Depth : DEPTH; +}; + +// Structure used for outputing bokeh points to an AppendStructuredBuffer +struct BokehPoint +{ + float3 Position; + float Blur; + float3 Color; +}; + +Texture2D Input0 : register(t0); +Texture2D Input1 : register(t1); + +// Converts z-buffer depth to linear view-space depth +float LinearDepth(in float zBufferDepth) +{ + return ProjectionAB.y / (zBufferDepth - ProjectionAB.x); +} + +// Computes the depth of field blur factor +float BlurFactor(float depth) +{ + float f0 = 1.0f - saturate((depth - DOFDepths.x) / max(DOFDepths.y - DOFDepths.x, 0.01f)); + float f1 = saturate((depth - DOFDepths.z) / max(DOFDepths.w - DOFDepths.z, 0.01f)); + float blur = saturate(f0 + f1); + float fade = 1 - saturate((depth - DepthLimit) * 100); + return blur * fade * BlurStrength; +} + +// Depth of Field depth blur generation (outputs linear depth + blur factor to R16G16 target) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_DofDepthBlurGeneration(Quad_VS2PS input) : SV_Target +{ + float depth = LinearDepth(Input0.SampleLevel(SamplerPointClamp, input.TexCoord, 0).r); + float blur = BlurFactor(depth); + return float4(depth, blur, 1.0f, 1.0f); +} + +#if defined(_CS_DepthOfFieldH) || defined(_CS_DepthOfFieldV) + +RWTexture2D OutputTexture : register(u0); + +struct DOFSample +{ + float3 Color; + float Depth; + float Blur; +}; + +// Shared memory for actial depth of field pass +groupshared DOFSample Samples[DOF_THREAD_GROUP_SIZE]; + +// Performs the horizontal pass for the DOF blur +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(DOF_THREAD_GROUP_SIZE, 1, 1)] +void CS_DepthOfFieldH(uint3 groupID : SV_GroupID, uint3 groupThreadID : SV_GroupThreadID) +{ + // These positions are relative to the "grid", AKA the horizontal group of pixels that this thread group is writing to + const int gridStartX = groupID.x * DOF_GRID_SIZE; + const int gridX = groupThreadID.x - DOF_APRON_SIZE; + + // These positions are relative to the pixel coordinates + const int sampleX = gridStartX + gridX; + const int sampleY = groupID.y; + + uint2 textureSize; + Input0.GetDimensions(textureSize.x, textureSize.y); + + const int2 samplePos = int2(sampleX, sampleY); + + // Sample the textures +#if USE_CS_HALF_PIXEL_OFFSET + float2 sampleCoord = saturate(((float2)samplePos + 0.5f) / float2(textureSize)); +#else + float2 sampleCoord = saturate(samplePos / float2(textureSize)); +#endif +#if USE_CS_LINEAR_SAMPLING + float3 color = Input0.SampleLevel(SamplerLinearClamp, sampleCoord, 0.0f).xyz; + float2 depthBlur = Input1.SampleLevel(SamplerLinearClamp, sampleCoord, 0.0f).xy; +#else + float3 color = Input0.SampleLevel(SamplerPointClamp, sampleCoord, 0.0f).xyz; + float2 depthBlur = Input1.SampleLevel(SamplerPointClamp, sampleCoord, 0.0f).xy; +#endif + float depth = depthBlur.x; + float blur = depthBlur.y; + float cocSize = blur * DOF_MAX_SAMPLE_RADIUS; + + // Store in shared memory + Samples[groupThreadID.x].Color = color; + Samples[groupThreadID.x].Depth = depth; + Samples[groupThreadID.x].Blur = blur; + + GroupMemoryBarrierWithGroupSync(); + + // Don't continue for threads in the apron, and threads outside the render target size + if (gridX >= 0 && gridX < DOF_GRID_SIZE && sampleX < textureSize.x) + { + BRANCH + if (cocSize > 0.0f) + { + float3 outputColor = 0.0f; + float totalContribution = 0.0f; + + // Gather sample taps inside the radius + for (int x = -DOF_MAX_SAMPLE_RADIUS; x <= DOF_MAX_SAMPLE_RADIUS; x++) + { + // Grab the sample from shared memory + int groupTapX = groupThreadID.x + x; + DOFSample tap = Samples[groupTapX]; + + // Reject the sample if it's outside the CoC radius + float cocWeight = saturate(cocSize + 1.0f - abs(float(x))); + + // Reject foreground samples, unless they're blurred as well + float depthWeight = tap.Depth >= depth; + float blurWeight = tap.Blur; + float tapWeight = cocWeight * saturate(depthWeight + blurWeight); + + outputColor += tap.Color * tapWeight; + totalContribution += tapWeight; + } + + // Write out the result + outputColor /= totalContribution; + OutputTexture[samplePos] = float4(max(outputColor, 0), 1.0f); + } + else + { + OutputTexture[samplePos] = float4(color, 1.0f); + } + } +} + +// Performs the vertical DOF pass +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1, DOF_THREAD_GROUP_SIZE, 1)] +void CS_DepthOfFieldV(uint3 groupID : SV_GroupID, uint3 groupThreadID : SV_GroupThreadID) +{ + // These positions are relative to the "grid", AKA the vertical group of pixels that this thread group is writing to + const int gridStartY = groupID.y * DOF_GRID_SIZE; + const int gridY = groupThreadID.y - DOF_APRON_SIZE; + + // These positions are relative to the pixel coordinates + const int sampleX = groupID.x; + const int sampleY = gridStartY + gridY; + + uint2 textureSize; + Input0.GetDimensions(textureSize.x, textureSize.y); + + const int2 samplePos = int2(sampleX, sampleY); + + // Sample the textures +#if USE_CS_HALF_PIXEL_OFFSET + float2 sampleCoord = saturate(((float2)samplePos + 0.5f) / float2(textureSize)); +#else + float2 sampleCoord = saturate(samplePos / float2(textureSize)); +#endif +#if USE_CS_LINEAR_SAMPLING + float3 color = Input0.SampleLevel(SamplerLinearClamp, sampleCoord, 0.0f).xyz; + float2 depthBlur = Input1.SampleLevel(SamplerLinearClamp, sampleCoord, 0.0f).xy; +#else + float3 color = Input0.SampleLevel(SamplerPointClamp, sampleCoord, 0.0f).xyz; + float2 depthBlur = Input1.SampleLevel(SamplerPointClamp, sampleCoord, 0.0f).xy; +#endif + float depth = depthBlur.x; + float blur = depthBlur.y; + float cocSize = blur * DOF_MAX_SAMPLE_RADIUS; + + // Store in shared memory + Samples[groupThreadID.y].Color = color; + Samples[groupThreadID.y].Depth = depth; + Samples[groupThreadID.y].Blur = blur; + + GroupMemoryBarrierWithGroupSync(); + + // Don't continue for threads in the apron, and threads outside the render target size + if (gridY >= 0 && gridY < DOF_GRID_SIZE && sampleY < textureSize.y) + { + BRANCH + if (cocSize > 0.0f) + { + float3 outputColor = 0.0f; + float totalContribution = 0.0f; + + // Gather sample taps inside the radius + for (int y = -DOF_MAX_SAMPLE_RADIUS; y <= DOF_MAX_SAMPLE_RADIUS; y++) + { + // Grab the sample from shared memory + int groupTapY = groupThreadID.y + y; + DOFSample tap = Samples[groupTapY]; + + // Reject the sample if it's outside the CoC radius + float cocWeight = saturate(cocSize + 1.0f - abs(float(y))); + + // Reject foreground samples, unless they're blurred as well + float depthWeight = tap.Depth >= depth; + float blurWeight = tap.Blur; + float tapWeight = cocWeight * saturate(depthWeight + blurWeight); + + outputColor += tap.Color * tapWeight; + totalContribution += tapWeight; + } + + // Write out the result + outputColor /= totalContribution; + OutputTexture[samplePos] = float4(max(outputColor, 0), 1.0f); + } + else + { + OutputTexture[samplePos] = float4(color, 1.0f); + } + } +} + +#elif defined(_CS_CoCSpreadH) || defined(_CS_CoCSpreadV) + +struct CoCSample +{ + float Depth; + float Blur; +}; + +RWTexture2D OutputTexture : register(u0); + +groupshared CoCSample Samples[DOF_THREAD_GROUP_SIZE]; + +// Performs the horizontal CoC spread +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(DOF_THREAD_GROUP_SIZE, 1, 1)] +void CS_CoCSpreadH(uint3 groupID : SV_GroupID, uint3 groupThreadID : SV_GroupThreadID) +{ + // These positions are relative to the "grid", AKA the horizontal group of pixels that this thread group is writing to + const int gridStartX = groupID.x * DOF_GRID_SIZE; + const int gridX = groupThreadID.x - DOF_APRON_SIZE; + + // These positions are relative to the pixel coordinates + const int sampleX = gridStartX + gridX; + const int sampleY = groupID.y; + + uint2 textureSize; + Input0.GetDimensions(textureSize.x, textureSize.y); + + const int2 samplePos = int2(sampleX, sampleY); + + // Sample the textures +#if USE_CS_HALF_PIXEL_OFFSET + float2 sampleCoord = saturate(((float2)samplePos + 0.5f) / float2(textureSize)); +#else + float2 sampleCoord = saturate(samplePos / float2(textureSize)); +#endif +#if USE_CS_LINEAR_SAMPLING + float2 depthBlur = Input0.SampleLevel(SamplerLinearClamp, sampleCoord, 0.0f).xy; +#else + float2 depthBlur = Input0.SampleLevel(SamplerPointClamp, sampleCoord, 0.0f).xy; +#endif + + float depth = depthBlur.x; + float blur = depthBlur.y; + float cocSize = blur * DOF_MAX_SAMPLE_RADIUS; + + // Store in shared memory + Samples[groupThreadID.x].Depth = depth; + Samples[groupThreadID.x].Blur = blur; + + GroupMemoryBarrierWithGroupSync(); + + // Don't continue for threads in the apron, and threads outside the render target size + if (gridX >= 0 && gridX < DOF_GRID_SIZE && sampleX < textureSize.x) + { + float outputBlur = 0.0f; + float totalContribution = 0.0f; + + // Gather sample taps inside the radius + for (int x = -DOF_MAX_SAMPLE_RADIUS; x <= DOF_MAX_SAMPLE_RADIUS; x++) + { + // Grab the sample from shared memory + int groupTapX = groupThreadID.x + x; + CoCSample tap = Samples[groupTapX]; + + // Only accept samples if they're from the foreground, and have a higher blur amount + float depthWeight = tap.Depth <= depth; + float blurWeight = saturate(tap.Blur - blur); + float tapWeight = depthWeight * blurWeight; + + // If it's the center tap, set the weight to 1 so and don't reject it + float centerWeight = x == 0 ? 1.0 : 0.0f; + tapWeight = saturate(tapWeight + centerWeight); + + outputBlur += tap.Blur * tapWeight; + totalContribution += tapWeight; + } + + // Write out the result + OutputTexture[samplePos] = float2(depth, outputBlur / totalContribution); + } +} + +// Performs the vertical CoC spread +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(1, DOF_THREAD_GROUP_SIZE, 1)] +void CS_CoCSpreadV(uint3 groupID : SV_GroupID, uint3 groupThreadID : SV_GroupThreadID) +{ + // These positions are relative to the "grid", AKA the vertical group of pixels that this thread group is writing to + const int gridStartY = groupID.y * DOF_GRID_SIZE; + const int gridY = groupThreadID.y - DOF_APRON_SIZE; + + // These positions are relative to the pixel coordinates + const int sampleX = groupID.x; + const int sampleY = gridStartY + gridY; + + uint2 textureSize; + Input0.GetDimensions(textureSize.x, textureSize.y); + + const int2 samplePos = int2(sampleX, sampleY); + + // Sample the textures +#if USE_CS_HALF_PIXEL_OFFSET + float2 sampleCoord = saturate(((float2)samplePos + 0.5f) / float2(textureSize)); +#else + float2 sampleCoord = saturate(samplePos / float2(textureSize)); +#endif +#if USE_CS_LINEAR_SAMPLING + float2 depthBlur = Input0.SampleLevel(SamplerLinearClamp, sampleCoord, 0.0f).xy; +#else + float2 depthBlur = Input0.SampleLevel(SamplerPointClamp, sampleCoord, 0.0f).xy; +#endif + float depth = depthBlur.x; + float blur = depthBlur.y; + float cocSize = blur * DOF_MAX_SAMPLE_RADIUS; + + // Store in shared memory + Samples[groupThreadID.y].Depth = depth; + Samples[groupThreadID.y].Blur = blur; + + GroupMemoryBarrierWithGroupSync(); + + // Don't continue for threads in the apron, and threads outside the render target size + if (gridY >= 0 && gridY < DOF_GRID_SIZE && sampleY < textureSize.y) + { + float outputBlur = 0.0f; + float totalContribution = 0.0f; + + // Gather sample taps inside the radius + for (int y = -DOF_MAX_SAMPLE_RADIUS; y <= DOF_MAX_SAMPLE_RADIUS; y++) + { + // Grab the sample from shared memory + int groupTapY = groupThreadID.y + y; + CoCSample tap = Samples[groupTapY]; + + // Only accept samples if they're from the foreground, and have a higher blur amount + float depthWeight = tap.Depth <= depth; + float blurWeight = saturate(tap.Blur - blur); + float tapWeight = depthWeight * blurWeight; + + // If it's the center tap, set the weight to 1 and don't reject it + float centerWeight = y == 0 ? 1.0 : 0.0f; + tapWeight = saturate(tapWeight + centerWeight); + + outputBlur += tap.Blur * tapWeight; + totalContribution += tapWeight; + } + + // Write out the result + OutputTexture[samplePos] = float2(depth, outputBlur / totalContribution); + } +} + +#elif defined(_PS_GenerateBokeh) + +// Here we output bokeh points for DoF +AppendStructuredBuffer OutputBokehPointBuffer : register(u1); + +// Extracts pixels for bokeh point generation +META_PS(true, FEATURE_LEVEL_SM5) +float4 PS_GenerateBokeh(Quad_VS2PS input) : SV_Target +{ +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 + + float2 centerCoord = input.TexCoord; + + // Start with center sample color + float3 centerColor = Input0.Sample(SamplerPointClamp, centerCoord).rgb; + float3 colorSum = centerColor; + float totalContribution = 1.0f; + + // Sample the depth and blur at the center + float2 centerDepthBlur = Input1.Sample(SamplerPointClamp, centerCoord).xy; + float centerDepth = centerDepthBlur.x; + float centerBlur = centerDepthBlur.y; + + // Calculate the average of the current 5x5 block of texels by taking 9 bilinear samples + const uint NumSamples = 9; + static const float2 SamplePoints[NumSamples] = + { + float2(-1.5f, -1.5f), float2(0.5f, -1.5f), float2(1.5f, -1.5f), + float2(-1.5f, 0.5f), float2(0.5f, 0.5f), float2(1.5f, 0.5f), + float2(-1.5f, 1.5f), float2(0.5f, 1.5f), float2(1.5f, 1.5f) + }; + float3 averageColor = 0.0f; + for (uint i = 0; i < NumSamples; i++) + { + float2 sampleCoord = centerCoord + SamplePoints[i] / InputSize; + float3 color = Input0.Sample(SamplerPointClamp, sampleCoord).rgb; + averageColor += color; + } + averageColor /= NumSamples; + + // Calculate the difference between the current texel and the average + float averageBrightness = dot(averageColor, 1.0f); + float centerBrightness = dot(centerColor, 1.0f); + float brightnessDiff = max(centerBrightness - averageBrightness, 0.0f); + + // If the texel is brighter than its neighbors and the blur amount is above our threshold, then push the pixel position/color/blur amount into our AppendStructuredBuffer containing bokeh points + BRANCH + if (brightnessDiff >= BokehBrightnessThreshold && centerBlur > BokehBlurThreshold) + { + BokehPoint bPoint; + bPoint.Position = float3(input.Position.xy, centerDepth); + bPoint.Blur = centerBlur; + bPoint.Color = centerColor; + + OutputBokehPointBuffer.Append(bPoint); + + centerColor = 0.0f; + } + + return float4(centerColor, 1.0f); + +#else + + return float4(0, 0, 0, 1.0f); + +#endif +} + +#elif defined(_PS_DoNotGenerateBokeh) + +// Extracts pixels for bokeh point generation +META_PS(true, FEATURE_LEVEL_SM5) +float4 PS_DoNotGenerateBokeh(Quad_VS2PS input) : SV_Target +{ + float2 centerCoord = input.TexCoord; + + // Start with center sample color + float3 centerColor = Input0.Sample(SamplerPointClamp, centerCoord).rgb; + float3 colorSum = centerColor; + float totalContribution = 1.0f; + + // Sample the depth and blur at the center + float2 centerDepthBlur = Input1.Sample(SamplerPointClamp, centerCoord).xy; + float centerDepth = centerDepthBlur.x; + float centerBlur = centerDepthBlur.y; + + // Calculate the average of the current 5x5 block of texels by taking 9 bilinear samples + const uint NumSamples = 9; + static const float2 SamplePoints[NumSamples] = + { + float2(-1.5f, -1.5f), float2(0.5f, -1.5f), float2(1.5f, -1.5f), + float2(-1.5f, 0.5f), float2(0.5f, 0.5f), float2(1.5f, 0.5f), + float2(-1.5f, 1.5f), float2(0.5f, 1.5f), float2(1.5f, 1.5f) + }; + float3 averageColor = 0.0f; + for (uint i = 0; i < NumSamples; i++) + { + float2 sampleCoord = centerCoord + SamplePoints[i] / InputSize; + float3 color = Input0.Sample(SamplerPointClamp, sampleCoord).rgb; + averageColor += color; + } + averageColor /= NumSamples; + + // Calculate the difference between the current texel and the average + float averageBrightness = dot(averageColor, 1.0f); + float centerBrightness = dot(centerColor, 1.0f); + float brightnessDiff = max(centerBrightness - averageBrightness, 0.0f); + + // If the texel is brighter than its neighbors and the blur amount is above our threshold + BRANCH + if (brightnessDiff >= BokehBrightnessThreshold && centerBlur > BokehBlurThreshold) + { + centerColor = 0.0f; + } + + return float4(centerColor, 1.0f); +} + +#else + +StructuredBuffer BokehPointBuffer : register(t2); + +// Vertex Shader, positions and scales the bokeh point +META_VS(true, FEATURE_LEVEL_SM5) +META_FLAG(VertexToGeometryShader) +BokehVSOutput VS_Bokeh(in uint VertexID : SV_VertexID) +{ + BokehPoint bPoint = BokehPointBuffer[VertexID]; + BokehVSOutput output; + + // Position the vertex in normalized device coordinate space [-1, 1] + output.Position.xy = bPoint.Position.xy; + output.Position.xy /= DOFTargetSize; + output.Position.xy = output.Position.xy * 2.0f - 1.0f; + output.Position.y *= -1.0f; + + // Scale the size based on the CoC size, and max bokeh sprite size + output.Size = bPoint.Blur * (1.0f / DOFTargetSize) * MaxBokehSize; + + output.Depth = bPoint.Position.z; + + // Scale the color to conserve energy, by comparing new area vs. old area + float cocRadius = bPoint.Blur * MaxBokehSize * 0.45f; + float cocArea = cocRadius * cocRadius * 3.14159f; + float falloff = pow(saturate(1.0f / cocArea), BokehFalloff); + output.Color = bPoint.Color * (falloff * BokehBrightness); + + return output; +} + +// Geometry Shader, expands a vertex into a quad with two triangles +META_GS(true, FEATURE_LEVEL_SM5) +[maxvertexcount(4)] +void GS_Bokeh(point BokehVSOutput input[1], inout TriangleStream SpriteStream) +{ + BokehGSOutput output; + + // Emit 4 new verts, and 2 new triangles + UNROLL + for (int i = 0; i < 4; i++) + { + output.PositionCS = float4(input[0].Position.xy, 1.0f, 1.0f); + output.PositionCS.xy += Offsets[i] * input[0].Size; + output.TexCoord = TexCoords[i]; + output.Color = input[0].Color; + output.Depth = input[0].Depth; + + SpriteStream.Append(output); + } + SpriteStream.RestartStrip(); +} + +// Pixel Shader, applies the bokeh shape texture +META_PS(true, FEATURE_LEVEL_SM5) +float4 PS_Bokeh(in BokehPSInput input) : SV_Target0 +{ + // Sample the bokeh texture + float textureSample = Input0.Sample(SamplerLinearClamp, input.TexCoord).x; + //float textureSample = 1; + + float2 screenTexCoord = input.PositionSS.xy / BokehTargetSize; + float2 depthBlurSample = Input1.Sample(SamplerLinearClamp, screenTexCoord).xy; + + // Reject pixels based on a depth test, but only if the occluder isn't blurred + float attenutation = saturate(depthBlurSample.x - input.Depth + BokehDepthCutoff); + attenutation = saturate(attenutation + depthBlurSample.y); + + return float4(input.Color * textureSample * attenutation, 1.0f); +} + +// Composites the bokeh results with the previous DOF results +META_PS(true, FEATURE_LEVEL_SM5) +float4 PS_BokehComposite(in Quad_VS2PS input) : SV_Target +{ + float4 bokehSample = Input0.Sample(SamplerLinearClamp, input.TexCoord); + float4 dofSample = Input1.Sample(SamplerPointClamp, input.TexCoord); + + float3 composite = bokehSample.rgb + dofSample.rgb; + + return float4(composite, 1.0f); +} + +#endif diff --git a/Source/Shaders/Editor/LightmapUVsDensity.shader b/Source/Shaders/Editor/LightmapUVsDensity.shader new file mode 100644 index 000000000..4b7956f28 --- /dev/null +++ b/Source/Shaders/Editor/LightmapUVsDensity.shader @@ -0,0 +1,118 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define MATERIAL 1 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" + +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +float4 LightmapArea; +float3 WorldInvScale; +float LightmapTexelsPerWorldUnit; +float3 Dummy0; +float LightmapSize; +META_CB_END + +Texture2D GridTexture : register(t0); + +struct VertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; +}; + +struct PixelInput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + float2 LightmapUV : TEXCOORD2; + float3 WorldNormal : TEXCOORD3; +}; + +float3x3 RemoveScaleFromLocalToWorld(float3x3 localToWorld) +{ + localToWorld[0] *= WorldInvScale.x; + localToWorld[1] *= WorldInvScale.y; + localToWorld[2] *= WorldInvScale.z; + return localToWorld; +} + +float3x3 CalcTangentToWorld(float4x4 world, float3x3 tangentToLocal) +{ + float3x3 localToWorld = RemoveScaleFromLocalToWorld((float3x3)world); + return mul(tangentToLocal, localToWorld); +} + +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 1, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R16G16_FLOAT, 1, ALIGN, PER_VERTEX, 0, true) +VertexOutput VS(ModelInput input) +{ + float bitangentSign = input.Tangent.w ? -1.0f : +1.0f; + float3 normal = input.Normal.xyz * 2.0 - 1.0; + float3 tangent = input.Tangent.xyz * 2.0 - 1.0; + float3 bitangent = cross(normal, tangent) * bitangentSign; + float3x3 tangentToLocal = float3x3(tangent, bitangent, normal); + float3x3 tangentToWorld = CalcTangentToWorld(WorldMatrix, tangentToLocal); + + VertexOutput output; + output.WorldPosition = mul(float4(input.Position.xyz, 1), WorldMatrix).xyz; + output.Position = mul(float4(output.WorldPosition.xyz, 1), ViewProjectionMatrix); + output.TexCoord = input.TexCoord; + output.LightmapUV = input.LightmapUV * LightmapArea.zw + LightmapArea.xy; + output.WorldNormal = tangentToWorld[2]; + return output; +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS(in PixelInput input, out float4 Light : SV_Target0, out float4 RT0 : SV_Target1, out float4 RT1 : SV_Target2, out float4 RT2 : SV_Target3) +{ + // Inputs + float3 worldPosition = input.WorldPosition; + float minDensity = 0.0; + float bestDensity = 0.21; + float maxDensity = 0.82; + float texelScale = 1; + float2 lightmapUVs = input.LightmapUV * LightmapSize / LightmapTexelsPerWorldUnit; + + // Calculate lightmap texels density + float worldArea = max(length(cross(ddx(worldPosition), ddy(worldPosition))), 0.0000001); + float2 a = ddx(lightmapUVs); + float2 b = ddy(lightmapUVs); + float2 c = a.xy * b.yx; + float lightmapArea = abs(c.x - c.y); + float density = lightmapArea / worldArea; + density = clamp(density, minDensity, maxDensity); + + // Color based on lightmap texels density + float3 color; + float3 minColor = float3(235/255.0, 52/255.0, 67/255.0); + float3 bestColor = float3(51/255.0, 235/255.0, 70/255.0); + float3 maxColor = float3(52/255.0, 149/255.0, 235/255.0); + if (density < bestDensity) + { + color = lerp(minColor, bestColor, (density - minDensity) / (bestDensity - minDensity)); + } + else + { + color = lerp(bestColor, maxColor, (density - bestDensity) / (maxDensity - bestDensity)); + } + + // Apply grid color + color *= GridTexture.Sample(SamplerLinearWrap, input.LightmapUV / LightmapArea.zw * 10).g; + + // Outputs + Light = float4(color, 0); + RT0 = float4(0, 0, 0, 0); + RT1 = float4(input.WorldNormal * 0.5 + 0.5, SHADING_MODEL_LIT * (1.0 / 3.0)); + RT2 = float4(0.4, 0, 0.5, 0); +} diff --git a/Source/Shaders/Editor/VertexColors.shader b/Source/Shaders/Editor/VertexColors.shader new file mode 100644 index 000000000..744c6f136 --- /dev/null +++ b/Source/Shaders/Editor/VertexColors.shader @@ -0,0 +1,49 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define MATERIAL 1 +#define USE_VERTEX_COLOR 1 + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" + +META_CB_BEGIN(0, Data) +float4x4 ViewProjectionMatrix; +float4x4 WorldMatrix; +META_CB_END + +struct VertexOutput +{ + float4 Position : SV_Position; + float4 VertexColor : COLOR; +}; + +struct PixelInput +{ + float4 Position : SV_Position; + float4 VertexColor : COLOR; +}; + +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 1, 0, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(NORMAL, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TANGENT, 0, R10G10B10A2_UNORM, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R16G16_FLOAT, 1, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R8G8B8A8_UNORM, 2, 0, PER_VERTEX, 0, true) +VertexOutput VS(ModelInput input) +{ + VertexOutput output; + float3 worldPosition = mul(float4(input.Position.xyz, 1), WorldMatrix).xyz; + output.Position = mul(float4(worldPosition, 1), ViewProjectionMatrix); + output.VertexColor = input.Color; + return output; +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS(in PixelInput input, out float4 Light : SV_Target0, out float4 RT0 : SV_Target1, out float4 RT1 : SV_Target2, out float4 RT2 : SV_Target3) +{ + Light = float4(input.VertexColor.rgb, 0); + RT0 = float4(0, 0, 0, 0); + RT1 = float4(float3(0, 0, 1) * 0.5 + 0.5, SHADING_MODEL_LIT * (1.0 / 3.0)); + RT2 = float4(0.4, 0, 0.5, 0); +} diff --git a/Source/Shaders/ExponentialHeightFog.hlsl b/Source/Shaders/ExponentialHeightFog.hlsl new file mode 100644 index 000000000..cf085d7fe --- /dev/null +++ b/Source/Shaders/ExponentialHeightFog.hlsl @@ -0,0 +1,102 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __EXPONENTIAL_HEIGHT_FOG__ +#define __EXPONENTIAL_HEIGHT_FOG__ + +#include "./Flax/Common.hlsl" +#include "./Flax/Math.hlsl" + +// Structure that contains information about exponential height fog +struct ExponentialHeightFogData +{ + float3 FogInscatteringColor; + float FogMinOpacity; + + float FogDensity; + float FogHeight; + float FogHeightFalloff; + float FogAtViewPosition; + + float3 InscatteringLightDirection; + float ApplyDirectionalInscattering; + + float3 DirectionalInscatteringColor; + float DirectionalInscatteringExponent; + + float FogCutoffDistance; + float VolumetricFogMaxDistance; + float DirectionalInscatteringStartDistance; + float StartDistance; +}; + +half4 GetExponentialHeightFog(ExponentialHeightFogData exponentialHeightFog, float3 worldPosition, float3 cameraPosition, float excludeDistance) +{ + float3 cameraToReceiver = worldPosition - cameraPosition; + float cameraToReceiverLengthSqr = dot(cameraToReceiver, cameraToReceiver); + float cameraToReceiverLengthInv = rsqrt(cameraToReceiverLengthSqr); + float cameraToReceiverLength = cameraToReceiverLengthSqr * cameraToReceiverLengthInv; + half3 cameraToReceiverNormalized = cameraToReceiver * cameraToReceiverLengthInv; + + float rayOriginTerms = exponentialHeightFog.FogAtViewPosition; + float rayLength = cameraToReceiverLength; + float rayDirectionY = cameraToReceiver.y; + + // Apply start distance offset + excludeDistance = max(excludeDistance, exponentialHeightFog.StartDistance); + if (excludeDistance > 0) + { + float excludeIntersectionTime = excludeDistance * cameraToReceiverLengthInv; + float cameraToExclusionIntersectionY = excludeIntersectionTime * cameraToReceiver.y; + float exclusionIntersectionY = cameraPosition.y + cameraToExclusionIntersectionY; + float exclusionIntersectionToReceiverY = cameraToReceiver.y - cameraToExclusionIntersectionY; + + // Calculate fog off of the ray starting from the exclusion distance, instead of starting from the camera + rayLength = (1.0f - excludeIntersectionTime) * cameraToReceiverLength; + rayDirectionY = exclusionIntersectionToReceiverY; + + // Move off the viewer + float exponent = exponentialHeightFog.FogHeightFalloff * (exclusionIntersectionY - exponentialHeightFog.FogHeight); + rayOriginTerms = exponentialHeightFog.FogDensity * exp2(-exponent); + } + + // Calculate the line integral of the ray from the camera to the receiver position through the fog density function + float falloff = max(-127.0f, exponentialHeightFog.FogHeightFalloff * rayDirectionY); + float lineIntegral = (1.0f - exp2(-falloff)) / falloff; + float lineIntegralTaylor = log(2.0) - (0.5 * Pow2(log(2.0))) * falloff; + float exponentialHeightLineIntegralCalc = rayOriginTerms * (abs(falloff) > 0.01f ? lineIntegral : lineIntegralTaylor); + float exponentialHeightLineIntegral = exponentialHeightLineIntegralCalc * rayLength; + + // Calculate the amount of light that made it through the fog using the transmission equation + half expFogFactor = max(saturate(exp2(-exponentialHeightLineIntegral)), exponentialHeightFog.FogMinOpacity); + + // Calculate the directional light inscattering + half3 inscatteringColor = exponentialHeightFog.FogInscatteringColor; + half3 directionalInscattering = 0; + BRANCH + if (exponentialHeightFog.ApplyDirectionalInscattering > 0) + { + // Setup a cosine lobe around the light direction to approximate inscattering from the directional light off of the ambient haze + half3 directionalLightInscattering = exponentialHeightFog.DirectionalInscatteringColor * pow(saturate(dot(cameraToReceiverNormalized, exponentialHeightFog.InscatteringLightDirection)), exponentialHeightFog.DirectionalInscatteringExponent); + + // Calculate the line integral of the eye ray through the haze, using a special starting distance to limit the inscattering to the distance + float dirExponentialHeightLineIntegral = exponentialHeightLineIntegralCalc * max(rayLength - exponentialHeightFog.DirectionalInscatteringStartDistance, 0.0f); + + // Calculate the amount of light that made it through the fog using the transmission equation + half directionalInscatteringFogFactor = saturate(exp2(-dirExponentialHeightLineIntegral)); + + // Final inscattering from the light + directionalInscattering = directionalLightInscattering * (1 - directionalInscatteringFogFactor); + } + + // Disable fog after a certain distance + FLATTEN + if (exponentialHeightFog.FogCutoffDistance > 0 && cameraToReceiverLength > exponentialHeightFog.FogCutoffDistance) + { + expFogFactor = 1; + directionalInscattering = 0; + } + + return half4((inscatteringColor) * (1 - expFogFactor) + directionalInscattering, expFogFactor); +} + +#endif diff --git a/Source/Shaders/EyeAdaptation.shader b/Source/Shaders/EyeAdaptation.shader new file mode 100644 index 000000000..e83e5d452 --- /dev/null +++ b/Source/Shaders/EyeAdaptation.shader @@ -0,0 +1,157 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +META_CB_BEGIN(0, Data) + +float MinBrightness; +float MaxBrightness; +float SpeedUp; +float SpeedDown; + +float PreExposure; // exp2 done on CPU for PreExposure +float DeltaTime; +float HistogramMul; +float HistogramAdd; + +float HistogramLowPercent; +float HistogramHighPercent; +float DropHistory; +float Dummy1; + +META_CB_END + +float AdaptLuminance(float currentLum, Texture2D previousLuminance) +{ + float previousLum = previousLuminance.Load(int3(0, 0, 0)).x; + + // Adapt the luminance using Pattanaik's technique + float delta = currentLum - previousLum; + float adaptionSpeed = delta > 0 ? SpeedUp : SpeedDown; + float luminance = previousLum + delta * (1.0f - exp2(-DeltaTime * adaptionSpeed)); + luminance = lerp(luminance, currentLum, DropHistory); + + return clamp(luminance, MinBrightness, MaxBrightness).xxxx; +} + +#ifdef _PS_Manual + +// Applies the exposure scale to the scene color (using multiply blending mode) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Manual(Quad_VS2PS input) : SV_Target +{ + return PreExposure.xxxx; +} + +#endif + +#ifdef _PS_LuminanceMap + +Texture2D SceneColor : register(t0); + +// Creates the luminance map for the scene +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_LuminanceMap(Quad_VS2PS input) : SV_Target +{ + // Sample the input + float3 color = SceneColor.Sample(SamplerLinearClamp, input.TexCoord).rgb; + + // Calculate the luminance + float luminance = Luminance(color); + + // Clamp to avoid artifacts from exceeding fp16 + return clamp(luminance, 1e-4, 60000.0f).xxxx; +} + +#endif + +#ifdef _PS_BlendLuminance + +Texture2D CurrentLuminance : register(t0); +Texture2D PreviousLuminance : register(t1); + +// Slowly adjusts the scene luminance based on the previous scene luminance +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_BlendLuminance(Quad_VS2PS input) : SV_Target +{ + float currentLum = CurrentLuminance.Load(int3(0, 0, 0)).x; + return AdaptLuminance(currentLum, PreviousLuminance).xxxx; +} + +#endif + +#ifdef _PS_ApplyLuminance + +Texture2D AverageLuminance : register(t0); + +// Applies the luminance to the scene color (using multiply blending mode) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_ApplyLuminance(Quad_VS2PS input) : SV_Target +{ + float averageLuminance = AverageLuminance.Load(int3(0, 0, 0)).x; + float exposure = 1.0f / averageLuminance; + return (PreExposure * exposure).xxxx; +} + +#endif + +#ifdef _PS_Histogram + +// This define must match the C++ +#define HISTOGRAM_SIZE 64 + +StructuredBuffer HistogramBuffer : register(t0); +Texture2D PreviousLuminance : register(t1); + +float ComputeLuminanceFromHistogramPosition(float histogramPosition) +{ + return exp2((histogramPosition - HistogramAdd) / HistogramMul); +} + +float GetAverageLuminance() +{ + // Find maximum and sum of all histogram values + float maxValue = 0.0f; + float totalSum = 0.0f; + UNROLL + for (uint i = 0; i < HISTOGRAM_SIZE; i++) + { + float value = (float)HistogramBuffer[i]; + maxValue = max(maxValue, value); + totalSum += value; + } + + // Compute average luminance within the given percentage of the histogram + float2 fractionSum = float2(HistogramLowPercent, HistogramHighPercent) * totalSum; + float2 runningSum = 0; + UNROLL + for (uint i = 0; i < HISTOGRAM_SIZE; i++) + { + float value = (float)HistogramBuffer[i]; + + // Remove values at lower end + float tmp = min(value, fractionSum.x); + value -= tmp; + fractionSum -= tmp; + + // Remove values at upper end + value = min(value, fractionSum.y); + fractionSum.y -= value; + + // Accumulate luminance at the histogram position + float luminance = ComputeLuminanceFromHistogramPosition(i / (float)HISTOGRAM_SIZE); + runningSum += float2(luminance, 1) * value; + } + + return runningSum.x / max(runningSum.y, 0.0001f); +} + +// Samples evaluates the scene color luminance based on the histogram +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Histogram(Quad_VS2PS input) : SV_Target +{ + float currentLum = GetAverageLuminance(); + return AdaptLuminance(currentLum, PreviousLuminance).xxxx; +} + +#endif diff --git a/Source/Shaders/FXAA.shader b/Source/Shaders/FXAA.shader new file mode 100644 index 000000000..5d9e5deb9 --- /dev/null +++ b/Source/Shaders/FXAA.shader @@ -0,0 +1,645 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +// This software contains source code provided by NVIDIA Corporation. +// Copyright (c) 2011 NVIDIA Corporation. All rights reserved. +// +// TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, THIS SOFTWARE IS PROVIDED +// *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES, EITHER EXPRESS +// OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, NONINFRINGEMENT,IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA +// OR ITS SUPPLIERS BE LIABLE FOR ANY DIRECT, SPECIAL INCIDENTAL, INDIRECT, OR +// CONSEQUENTIAL DAMAGES WHATSOEVER (INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS +// OF BUSINESS PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR ANY +// OTHER PECUNIARY LOSS) ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, +// EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +// +// Please direct any bugs or questions to SDKFeedback@nvidia.com +// Enhanced and ported to the Flax Engine by Wojciech Figat + +#include "./Flax/Common.hlsl" + +Texture2D Source : register(t0); + +#define SAMPLE_TEXTURE_LEVEL(texture, uv, level) texture.SampleLevel(SamplerLinearClamp, uv, level) +#define SAMPLE_TEXTURE_OFFSET(texture, uv, level, offset) texture.SampleLevel(SamplerLinearClamp, uv, level, offset) +#define SAMPLE_TEXTURE_GRAD(texture, uv, ddX, ddY) texture.SampleGrad(SamplerLinearClamp, uv, ddX, ddY) + +/*============================================================================ + SRGB KNOBS +FXAA_SRGB_ROP - Set to 1 when applying FXAA to an sRGB back buffer (DX10/11). + This will do the sRGB to linear transform, + as ROP will expect linear color from this shader, + and this shader works in non-linear color. +============================================================================*/ +#define FXAA_SRGB_ROP 0 + +// Debugging Modes +//#define FXAA_DEBUG_PASSTHROUGH 1 +//#define FXAA_DEBUG_HORZVERT 1 +//#define FXAA_DEBUG_PAIR 1 +//#define FXAA_DEBUG_NEGPOS 1 +//#define FXAA_DEBUG_OFFSET 1 + +/*============================================================================ + DEBUG KNOBS + +All debug knobs draw FXAA-untouched pixels in FXAA computed luma (monochrome). + +FXAA_DEBUG_PASSTHROUGH - Red for pixels which are filtered by FXAA with a + yellow tint on sub-pixel aliasing filtered by FXAA. +FXAA_DEBUG_HORZVERT - Blue for horizontal edges, gold for vertical edges. +FXAA_DEBUG_PAIR - Blue/green for the 2 pixel pair choice. +FXAA_DEBUG_NEGPOS - Red/blue for which side of center of span. +FXAA_DEBUG_OFFSET - Red/blue for -/+ x, gold/skyblue for -/+ y. +============================================================================*/ +#ifndef FXAA_DEBUG_PASSTHROUGH + #define FXAA_DEBUG_PASSTHROUGH 0 +#endif +#ifndef FXAA_DEBUG_HORZVERT + #define FXAA_DEBUG_HORZVERT 0 +#endif +#ifndef FXAA_DEBUG_PAIR + #define FXAA_DEBUG_PAIR 0 +#endif +#ifndef FXAA_DEBUG_NEGPOS + #define FXAA_DEBUG_NEGPOS 0 +#endif +#ifndef FXAA_DEBUG_OFFSET + #define FXAA_DEBUG_OFFSET 0 +#endif + +#if FXAA_DEBUG_PASSTHROUGH || FXAA_DEBUG_HORZVERT || FXAA_DEBUG_PAIR + #define FXAA_DEBUG 1 +#endif +#if FXAA_DEBUG_NEGPOS || FXAA_DEBUG_OFFSET + #define FXAA_DEBUG 1 +#endif +#ifndef FXAA_DEBUG + #define FXAA_DEBUG 0 +#endif + +/*============================================================================ + COMPILE-IN KNOBS + +FXAA_PRESET - Choose compile-in knob preset 0-5. + +FXAA_EDGE_THRESHOLD - The minimum amount of local contrast required + to apply algorithm. + 1.0/3.0 - too little + 1.0/4.0 - good start + 1.0/8.0 - applies to more edges + 1.0/16.0 - overkill + +FXAA_EDGE_THRESHOLD_MIN - Trims the algorithm from processing darks. + Perf optimization. + 1.0/32.0 - visible limit (smaller isn't visible) + 1.0/16.0 - good compromise + 1.0/12.0 - upper limit (seeing artifacts) + +FXAA_SEARCH_STEPS - Maximum number of search steps for end of span. + +FXAA_SEARCH_ACCELERATION - How much to accelerate search, + 1 - no acceleration + 2 - skip by 2 pixels + 3 - skip by 3 pixels + 4 - skip by 4 pixels + +FXAA_SEARCH_THRESHOLD - Controls when to stop searching. + 1.0/4.0 - seems to be the best quality wise + +FXAA_SUBPIX_FASTER - Turn on lower quality but faster subpix path. + Not recomended, but used in preset 0. + +FXAA_SUBPIX - Toggle subpix filtering. + 0 - turn off + 1 - turn on + 2 - turn on full (ignores FXAA_SUBPIX_TRIM and CAP) + +FXAA_SUBPIX_TRIM - Controls sub-pixel aliasing removal. + 1.0/2.0 - low removal + 1.0/3.0 - medium removal + 1.0/4.0 - default removal + 1.0/8.0 - high removal + 0.0 - complete removal + +FXAA_SUBPIX_CAP - Insures fine detail is not completely removed. + This is important for the transition of sub-pixel detail, + like fences and wires. + 3.0/4.0 - default (medium amount of filtering) + 7.0/8.0 - high amount of filtering + 1.0 - no capping of sub-pixel aliasing removal +============================================================================*/ +#ifndef QUALITY + #define QUALITY 1 +#endif + +// Select FXAA Preset based on Quality +#if QUALITY == 0 + #define FXAA_PRESET 1 +#elif QUALITY == 1 + #define FXAA_PRESET 3 +#elif QUALITY == 2 + #define FXAA_PRESET 4 +#else + #define FXAA_PRESET 5 +#endif + +#if (FXAA_PRESET == 0) + #define FXAA_EDGE_THRESHOLD (1.0/4.0) + #define FXAA_EDGE_THRESHOLD_MIN (1.0/12.0) + #define FXAA_SEARCH_STEPS 2 + #define FXAA_SEARCH_ACCELERATION 4 + #define FXAA_SEARCH_THRESHOLD (1.0/4.0) + #define FXAA_SUBPIX 1 + #define FXAA_SUBPIX_FASTER 1 + #define FXAA_SUBPIX_CAP (2.0/3.0) + #define FXAA_SUBPIX_TRIM (1.0/4.0) +#endif + +#if (FXAA_PRESET == 1) + #define FXAA_EDGE_THRESHOLD (1.0/8.0) + #define FXAA_EDGE_THRESHOLD_MIN (1.0/16.0) + #define FXAA_SEARCH_STEPS 4 + #define FXAA_SEARCH_ACCELERATION 3 + #define FXAA_SEARCH_THRESHOLD (1.0/4.0) + #define FXAA_SUBPIX 1 + #define FXAA_SUBPIX_FASTER 0 + #define FXAA_SUBPIX_CAP (3.0/4.0) + #define FXAA_SUBPIX_TRIM (1.0/4.0) +#endif + +#if (FXAA_PRESET == 2) + #define FXAA_EDGE_THRESHOLD (1.0/8.0) + #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) + #define FXAA_SEARCH_STEPS 8 + #define FXAA_SEARCH_ACCELERATION 2 + #define FXAA_SEARCH_THRESHOLD (1.0/4.0) + #define FXAA_SUBPIX 1 + #define FXAA_SUBPIX_FASTER 0 + #define FXAA_SUBPIX_CAP (3.0/4.0) + #define FXAA_SUBPIX_TRIM (1.0/4.0) +#endif + +#if (FXAA_PRESET == 3) + #define FXAA_EDGE_THRESHOLD (1.0/8.0) + #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) + #define FXAA_SEARCH_STEPS 16 + #define FXAA_SEARCH_ACCELERATION 1 + #define FXAA_SEARCH_THRESHOLD (1.0/4.0) + #define FXAA_SUBPIX 1 + #define FXAA_SUBPIX_FASTER 0 + #define FXAA_SUBPIX_CAP (3.0/4.0) + #define FXAA_SUBPIX_TRIM (1.0/4.0) +#endif + +#if (FXAA_PRESET == 4) + #define FXAA_EDGE_THRESHOLD (1.0/8.0) + #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) + #define FXAA_SEARCH_STEPS 24 + #define FXAA_SEARCH_ACCELERATION 1 + #define FXAA_SEARCH_THRESHOLD (1.0/4.0) + #define FXAA_SUBPIX 1 + #define FXAA_SUBPIX_FASTER 0 + #define FXAA_SUBPIX_CAP (3.0/4.0) + #define FXAA_SUBPIX_TRIM (1.0/4.0) +#endif + +#if (FXAA_PRESET == 5) + #define FXAA_EDGE_THRESHOLD (1.0/8.0) + #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0) + #define FXAA_SEARCH_STEPS 32 + #define FXAA_SEARCH_ACCELERATION 1 + #define FXAA_SEARCH_THRESHOLD (1.0/4.0) + #define FXAA_SUBPIX 1 + #define FXAA_SUBPIX_FASTER 0 + #define FXAA_SUBPIX_CAP (3.0/4.0) + #define FXAA_SUBPIX_TRIM (1.0/4.0) +#endif + +#define FXAA_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_SUBPIX_TRIM)) +#define FxaaToFloat3(a) float3((a), (a), (a)) + +/*============================================================================ + HELPERS +============================================================================*/ +// Return the luma, the estimation of luminance from rgb inputs. +// This approximates luma using one FMA instruction, +// skipping normalization and tossing out blue. +// FxaaLuma() will range 0.0 to 2.963210702. +float FxaaLuma(float3 rgb) +{ + return rgb.y * (0.587 / 0.299) + rgb.x; +} + +// Support any extra filtering before returning color +float4 FxaaFilterReturn(float3 rgb) +{ + #if FXAA_SRGB_ROP + // Do sRGB encoded value to linear conversion + float3 b = rgb > FxaaToFloat3(0.04045); + rgb = rgb * FxaaToFloat3(1.0/12.92) * !b + pow(rgb * FxaaToFloat3(1.0/1.055) + FxaaToFloat3(0.055/1.055), FxaaToFloat3(2.4)) * b; + #endif + return float4(rgb, 1); +} + +META_CB_BEGIN(0, Data) +float4 ScreenSize;// x-width, y-height, z-1/width, w-1/height +META_CB_END + +#define ScreenWidth ScreenSize.x +#define ScreenHeight ScreenSize.y +#define ScreenWidthInv ScreenSize.z +#define ScreenHeightInv ScreenSize.w + +// Pixel Shader for Fast-Approximate Anti-Aliasing +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(QUALITY=0) +META_PERMUTATION_1(QUALITY=1) +META_PERMUTATION_1(QUALITY=2) +META_PERMUTATION_1(QUALITY=3) +float4 PS(Quad_VS2PS input) : SV_Target +{ +/* + EARLY EXIT IF LOCAL CONTRAST BELOW EDGE DETECT LIMIT + +Majority of pixels of a typical image do not require filtering, +often pixels are grouped into blocks which could benefit from early exit +right at the beginning of the algorithm. +Given the following neighborhood, + + N + W M E + S + +If the difference in local maximum and minimum luma (contrast "range") +is lower than a threshold proportional to the maximum local luma ("rangeMax"), +then the shader early exits (no visible aliasing). +This threshold is clamped at a minimum value ("FXAA_EDGE_THRESHOLD_MIN") +to avoid processing in really dark areas. +*/ + float3 rgbN = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2( 0,-1)).xyz; + float3 rgbW = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2(-1, 0)).xyz; + float3 rgbM = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2( 0, 0)).xyz; + float3 rgbE = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2( 1, 0)).xyz; + float3 rgbS = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2( 0, 1)).xyz; + float lumaN = FxaaLuma(rgbN); + float lumaW = FxaaLuma(rgbW); + float lumaM = FxaaLuma(rgbM); + float lumaE = FxaaLuma(rgbE); + float lumaS = FxaaLuma(rgbS); + float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE))); + float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE))); + float range = rangeMax - rangeMin; + #if FXAA_DEBUG + float lumaO = lumaM / (1.0 + (0.587/0.299)); + #endif + if(range < max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * FXAA_EDGE_THRESHOLD)) { + #if FXAA_DEBUG + return FxaaFilterReturn(FxaaToFloat3(lumaO)); + #endif + return FxaaFilterReturn(rgbM); } + #if FXAA_SUBPIX > 0 + #if FXAA_SUBPIX_FASTER + float3 rgbL = (rgbN + rgbW + rgbE + rgbS + rgbM) * FxaaToFloat3(1.0/5.0); + #else + float3 rgbL = rgbN + rgbW + rgbM + rgbE + rgbS; + #endif + #endif +/* + COMPUTE LOWPASS + +FXAA computes a local neighborhood lowpass value as follows, + + (N + W + E + S)/4 + +Then uses the ratio of the contrast range of the lowpass +and the range found in the early exit check, +as a sub-pixel aliasing detection filter. +When FXAA detects sub-pixel aliasing (such as single pixel dots), +it later blends in "blendL" amount +of a lowpass value (computed in the next section) to the final result. +*/ + #if FXAA_SUBPIX != 0 + float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25; + float rangeL = abs(lumaL - lumaM); + #endif + #if FXAA_SUBPIX == 1 + float blendL = max(0.0, (rangeL / range) - FXAA_SUBPIX_TRIM) * FXAA_SUBPIX_TRIM_SCALE; + blendL = min(FXAA_SUBPIX_CAP, blendL); + #endif + #if FXAA_SUBPIX == 2 + float blendL = rangeL / range; + #endif + #if FXAA_DEBUG_PASSTHROUGH + #if FXAA_SUBPIX == 0 + float blendL = 0.0; + #endif + return FxaaFilterReturn(float3(1.0, blendL/FXAA_SUBPIX_CAP, 0.0)); + #endif +/* + CHOOSE VERTICAL OR HORIZONTAL SEARCH + +FXAA uses the following local neighborhood, + + NW N NE + W M E + SW S SE + +To compute an edge amount for both vertical and horizontal directions. +Note edge detect filters like Sobel fail on single pixel lines through M. +FXAA takes the weighted average magnitude of the high-pass values +for rows and columns as an indication of local edge amount. + +A lowpass value for anti-sub-pixel-aliasing is computed as + (N+W+E+S+M+NW+NE+SW+SE)/9. +This full box pattern has higher quality than other options. + +Note following this block, both vertical and horizontal cases +flow in parallel (reusing the horizontal variables). +*/ + float3 rgbNW = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2(-1,-1)).xyz; + float3 rgbNE = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2( 1,-1)).xyz; + float3 rgbSW = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2(-1, 1)).xyz; + float3 rgbSE = SAMPLE_TEXTURE_OFFSET(Source, input.TexCoord, 0.0, int2( 1, 1)).xyz; + #if (FXAA_SUBPIX_FASTER == 0) && (FXAA_SUBPIX > 0) + rgbL += (rgbNW + rgbNE + rgbSW + rgbSE); + rgbL *= FxaaToFloat3(1.0/9.0); + #endif + float lumaNW = FxaaLuma(rgbNW); + float lumaNE = FxaaLuma(rgbNE); + float lumaSW = FxaaLuma(rgbSW); + float lumaSE = FxaaLuma(rgbSE); + float edgeVert = + abs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) + + abs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) + + abs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE)); + float edgeHorz = + abs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) + + abs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) + + abs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE)); + bool horzSpan = edgeHorz >= edgeVert; + #if FXAA_DEBUG_HORZVERT + if(horzSpan) return FxaaFilterReturn(float3(1.0, 0.75, 0.0)); + else return FxaaFilterReturn(float3(0.0, 0.50, 1.0)); + #endif + float lengthSign = horzSpan ? -ScreenHeightInv : -ScreenWidthInv; + if(!horzSpan) lumaN = lumaW; + if(!horzSpan) lumaS = lumaE; + float gradientN = abs(lumaN - lumaM); + float gradientS = abs(lumaS - lumaM); + lumaN = (lumaN + lumaM) * 0.5; + lumaS = (lumaS + lumaM) * 0.5; + +/* + CHOOSE SIDE OF PIXEL WHERE GRADIENT IS HIGHEST + +This chooses a pixel pair. +For "horzSpan == true" this will be a vertical pair, + + [N] N + [M] or [M] + S [S] + +Note following this block, both {N,M} and {S,M} cases +flow in parallel (reusing the {N,M} variables). + +This pair of image rows or columns is searched below +in the positive and negative direction +until edge status changes +(or the maximum number of search steps is reached). +*/ + bool pairN = gradientN >= gradientS; + #if FXAA_DEBUG_PAIR + if(pairN) return FxaaFilterReturn(float3(0.0, 0.0, 1.0)); + else return FxaaFilterReturn(float3(0.0, 1.0, 0.0)); + #endif + if(!pairN) lumaN = lumaS; + if(!pairN) gradientN = gradientS; + if(!pairN) lengthSign *= -1.0; + float2 posN; + posN.x = input.TexCoord.x + (horzSpan ? 0.0 : lengthSign * 0.5); + posN.y = input.TexCoord.y + (horzSpan ? lengthSign * 0.5 : 0.0); + +/* + CHOOSE SEARCH LIMITING VALUES + +Search limit (+/- gradientN) is a function of local gradient. */ + gradientN *= FXAA_SEARCH_THRESHOLD; + +/* + SEARCH IN BOTH DIRECTIONS UNTIL FIND LUMA PAIR AVERAGE IS OUT OF RANGE + +This loop searches either in vertical or horizontal directions, +and in both the negative and positive direction in parallel. +This loop fusion is faster than searching separately. + +The search is accelerated using FXAA_SEARCH_ACCELERATION length box filter +via anisotropic filtering with specified texture gradients. +*/ + float2 posP = posN; + float2 offNP = horzSpan ? float2(ScreenWidthInv, 0.0) : float2(0.0f, ScreenHeightInv); + float lumaEndN = lumaN; + float lumaEndP = lumaN; + bool doneN = false; + bool doneP = false; + #if FXAA_SEARCH_ACCELERATION == 1 + posN += offNP * float2(-1.0, -1.0); + posP += offNP * float2( 1.0, 1.0); + #endif + #if FXAA_SEARCH_ACCELERATION == 2 + posN += offNP * float2(-1.5, -1.5); + posP += offNP * float2( 1.5, 1.5); + offNP *= float2(2.0, 2.0); + #endif + #if FXAA_SEARCH_ACCELERATION == 3 + posN += offNP * float2(-2.0, -2.0); + posP += offNP * float2( 2.0, 2.0); + offNP *= float2(3.0, 3.0); + #endif + #if FXAA_SEARCH_ACCELERATION == 4 + posN += offNP * float2(-2.5, -2.5); + posP += offNP * float2( 2.5, 2.5); + offNP *= float2(4.0, 4.0); + #endif + [loop] + for(int i = 0; i < FXAA_SEARCH_STEPS; i++) + { + #if FXAA_SEARCH_ACCELERATION == 1 + if(!doneN) lumaEndN = FxaaLuma(SAMPLE_TEXTURE_LEVEL(Source, posN.xy, 0.0).xyz); + if(!doneP) lumaEndP = FxaaLuma(SAMPLE_TEXTURE_LEVEL(Source, posP.xy, 0.0).xyz); + #else + if(!doneN) lumaEndN = FxaaLuma(SAMPLE_TEXTURE_GRAD(Source, posN.xy, offNP, offNP).xyz); + if(!doneP) lumaEndP = FxaaLuma(SAMPLE_TEXTURE_GRAD(Source, posP.xy, offNP, offNP).xyz); + #endif + doneN = doneN || (abs(lumaEndN - lumaN) >= gradientN); + doneP = doneP || (abs(lumaEndP - lumaN) >= gradientN); + if(doneN && doneP) break; + if(!doneN) posN -= offNP; + if(!doneP) posP += offNP; + } +/* + HANDLE IF CENTER IS ON POSITIVE OR NEGATIVE SIDE + +FXAA uses the pixel's position in the span +in combination with the values (lumaEnd*) at the ends of the span, +to determine filtering. + +This step computes which side of the span the pixel is on. +On negative side if dstN < dstP, + + posN pos posP + |--||| + | | | | + |<--dstN>|| + | + span center +*/ + float dstN = horzSpan ? input.TexCoord.x - posN.x : input.TexCoord.y - posN.y; + float dstP = horzSpan ? posP.x - input.TexCoord.x : posP.y - input.TexCoord.y; + bool directionN = dstN < dstP; + #if FXAA_DEBUG_NEGPOS + if(directionN) return FxaaFilterReturn(float3(1.0, 0.0, 0.0)); + else return FxaaFilterReturn(float3(0.0, 0.0, 1.0)); + #endif + lumaEndN = directionN ? lumaEndN : lumaEndP; + +/* + CHECK IF PIXEL IS IN SECTION OF SPAN WHICH GETS NO FILTERING + +If both the pair luma at the end of the span (lumaEndN) +and middle pixel luma (lumaM) +are on the same side of the middle pair average luma (lumaN), +then don't filter. + +Cases, + +(1.) "L", + + lumaM + | + V XXXXXXXX <- other line averaged + XXXXXXX[X]XXXXXXXXXXX <- source pixel line + | . | + -- + [ ]xxxxxx[x]xx[X]XXXXXX <- pair average + -- + ^ ^ ^ ^ + | | | | + . |<->|<- no filter region + . | | | + . center | | + . | lumaEndN + . | . + . lumaN . + . . + |< span -->| + + +(2.) "^" and "-", + + <- other line averaged + XXXXX[X]XXX <- source pixel line + | | | + -- + [ ]xxxx[x]xx[ ] <- pair average + -- + | | | + |<>|<>|<- filter both sides + + +(3.) "v" and inverse of "-", + + XXXXXX XXXXXXXXX <- other line averaged + XXXXXXXXXXX[X]XXXXXXXXXXXX <- source pixel line + | | | + -- + XXXX[X]xxxx[x]xx[X]XXXXXXX <- pair average + -- + | | | + |<>|<>|<- don't filter both! + + +Note the "v" case for FXAA requires no filtering. +This is because the inverse of the "-" case is the "v". +Filtering "v" case turns open spans like this, + + XXXXXXXXX + +Into this (which is not desired), + + x+. .+x + XXXXXXXXX + */ + if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0)) + lengthSign = 0.0; + +/* + COMPUTE SUB-PIXEL OFFSET AND FILTER SPAN + +FXAA filters using a bilinear texture fetch offset +from the middle pixel M towards the center of the pair (NM below). +Maximum filtering will be half way between pair. +Reminder, at this point in the code, +the {N,M} pair is also reused for all cases: {S,M}, {W,M}, and {E,M}. + + +-+ + | | 0.5 offset + | N | | + | | V + +-+.... + | | + | M...|.... + | | ^ + +-+ | + . . 0.0 offset + . S . + . . + ......... + +Position on span is used to compute sub-pixel filter offset using simple ramp, + + posN posP + |\ |<- 0.5 pixel offset into pair pixel + | \ | + | \ | + .......|...\..........|<- 0.25 pixel offset into pair pixel + ^ | ^\ | + | | | \ | + V | | \ | + .......|===|==========|<- 0.0 pixel offset (ie M pixel) + ^ . | ^ . + | . pos | . + | . . | . + | . . center . + | . . . + | |<->|<.-- dstN + | . . . + | . |<-->|<- dstP + | . . + | |<>|<- spanLength + | + subPixelOffset + */ + float spanLength = (dstP + dstN); + dstN = directionN ? dstN : dstP; + float subPixelOffset = (0.5 + (dstN * (-1.0 / spanLength))) * lengthSign; + #if FXAA_DEBUG_OFFSET + float ox = horzSpan ? 0.0 : subPixelOffset * 2.0 / ScreenWidthInv; + float oy = horzSpan ? subPixelOffset * 2.0 / ScreenHeightInv : 0.0; + if(ox < 0.0) + return FxaaFilterReturn(lerp(float3(1.0, 0.0, 0.0), FxaaToFloat3(lumaO), -ox)); + if(ox > 0.0) + return FxaaFilterReturn(lerp(float3(0.0, 0.0, 1.0), FxaaToFloat3(lumaO), ox)); + if(oy < 0.0) + return FxaaFilterReturn(lerp(float3(1.0, 0.6, 0.2), FxaaToFloat3(lumaO), -oy)); + if(oy > 0.0) + return FxaaFilterReturn(lerp(float3(0.2, 0.6, 1.0), FxaaToFloat3(lumaO), oy)); + return FxaaFilterReturn(float3(lumaO, lumaO, lumaO)); + #endif + float3 rgbF = SAMPLE_TEXTURE_LEVEL(Source, input.TexCoord + float2(horzSpan ? 0.0 : subPixelOffset, horzSpan ? subPixelOffset : 0.0), 0.0).xyz; + #if FXAA_SUBPIX == 0 + return FxaaFilterReturn(rgbF); + #else + return FxaaFilterReturn(lerp(rgbF, rgbL, blendL)); + #endif +} diff --git a/Source/Shaders/Fog.shader b/Source/Shaders/Fog.shader new file mode 100644 index 000000000..254fa9c69 --- /dev/null +++ b/Source/Shaders/Fog.shader @@ -0,0 +1,91 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define NO_GBUFFER_SAMPLING + +#include "./Flax/Common.hlsl" +#include "./Flax/GBufferCommon.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/ExponentialHeightFog.hlsl" + +// Disable Volumetric Fog if is not supported +#if VOLUMETRIC_FOG && !CAN_USE_COMPUTE_SHADER +#define VOLUMETRIC_FOG 0 +#endif + +META_CB_BEGIN(0, Data) +GBufferData GBuffer; +ExponentialHeightFogData ExponentialHeightFog; +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +Texture2D Depth : register(t0); +#if VOLUMETRIC_FOG +Texture3D IntegratedLightScattering : register(t1); +#endif + +// Get world space position at given pixel coordinate +float3 GetWorldPos(float2 uv) +{ + float depth = SAMPLE_RT(Depth, uv).r; + GBufferData gBufferData = GetGBufferData(); + float3 viewPos = GetViewPos(gBufferData, uv, depth); + return mul(float4(viewPos, 1), gBufferData.InvViewMatrix).xyz; +} + +float4 CalculateCombinedFog(float3 worldPosition, float sceneDepth, float3 volumeUV) +{ + float excludeDistance = 0; + +#if VOLUMETRIC_FOG + + // Volumetric fog covers up to MaxDistance along ViewZ, exclude analytical fog from this range + excludeDistance = max(ExponentialHeightFog.VolumetricFogMaxDistance - 100, 0); + +#endif + + float4 fog = GetExponentialHeightFog(ExponentialHeightFog, worldPosition, GBuffer.ViewPos, excludeDistance); + +#if VOLUMETRIC_FOG + + // Sample volumetric fog lookup table + float4 volumetricFog = IntegratedLightScattering.SampleLevel(SamplerLinearClamp, volumeUV, 0); + + // Mix volumetric and analytical fog + fog = float4(volumetricFog.rgb + fog.rgb * volumetricFog.a, volumetricFog.a * fog.a); + +#endif + + return fog; +} + +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(VOLUMETRIC_FOG=0) +META_PERMUTATION_1(VOLUMETRIC_FOG=1) +float4 PS_Fog(Quad_VS2PS input) : SV_Target0 +{ + // Calculate pixel world space position + float3 worldPosition = GetWorldPos(input.TexCoord); + float3 viewVector = worldPosition - GBuffer.ViewPos; + float sceneDepth = length(viewVector); + + // Calculate volumetric fog coordinates + float depthSlice = sceneDepth / ExponentialHeightFog.VolumetricFogMaxDistance; + float3 volumeUV = float3(input.TexCoord, depthSlice); + + // Debug code +#if VOLUMETRIC_FOG && 0 + volumeUV = worldPosition / 1000; + if (!all(volumeUV >= 0 && volumeUV <= 1)) + return 0; + + return float4(IntegratedLightScattering.SampleLevel(SamplerLinearClamp, volumeUV, 0).rgb, 1); + //return float4(volumeUV, 1); + //return float4(worldPosition / 100, 1); +#endif + + // Calculate fog color + float4 fog = CalculateCombinedFog(worldPosition, sceneDepth, volumeUV); + + return fog; +} diff --git a/Source/Shaders/Forward.shader b/Source/Shaders/Forward.shader new file mode 100644 index 000000000..fbd91b7f3 --- /dev/null +++ b/Source/Shaders/Forward.shader @@ -0,0 +1,32 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +Texture2D Input : register(t0); +Texture2D Distortion : register(t1); + +// Pixel shader for applying distortion pass results to the combined frame +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_ApplyDistortion(Quad_VS2PS input) : SV_Target +{ + // Sample accumulated distortion offset + half4 accumDist = Distortion.Sample(SamplerPointClamp, input.TexCoord); + + // Offset = [R-B,G-A] + half2 distOffset = (accumDist.rg - accumDist.ba); + + static const half InvDistortionScaleBias = 1 / 4.0f; + distOffset *= InvDistortionScaleBias; + + float2 newTexCoord = input.TexCoord + distOffset; + + // If we're about to sample outside the valid area, set to 0 distortion + FLATTEN + if (newTexCoord.x < 0 || newTexCoord.x > 1 || newTexCoord.y < 0 || newTexCoord.y > 1) + { + newTexCoord = input.TexCoord; + } + + // Sample screen using offset coords + return Input.SampleLevel(SamplerPointClamp, newTexCoord, 0); +} diff --git a/Source/Shaders/GBuffer.hlsl b/Source/Shaders/GBuffer.hlsl new file mode 100644 index 000000000..0c6851a74 --- /dev/null +++ b/Source/Shaders/GBuffer.hlsl @@ -0,0 +1,177 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __GBUFFER__ +#define __GBUFFER__ + +#include "./Flax/GBufferCommon.hlsl" + +#if !defined(NO_GBUFFER_SAMPLING) + +// GBuffer +Texture2D GBuffer0 : register(t0); +Texture2D GBuffer1 : register(t1); +Texture2D GBuffer2 : register(t2); +Texture2D Depth : register(t3); +#if defined(USE_GBUFFER_CUSTOM_DATA) +Texture2D GBuffer3 : register(t4); +#endif + +// GBuffer Layout: +// GBuffer0 = [RGB] Color, [A] AO +// GBuffer1 = [RGB] Normal, [A] ShadingModel +// GBuffer2 = [R] Roughness, [G] Metalness, [B] Specular, [A] UNUSED +// GBuffer3 = [RGBA] Custom Data (per shading mode) + +#endif + +// Linearize raw device depth +float LinearizeZ(GBufferData gBuffer, float depth) +{ + return gBuffer.ViewInfo.w / (depth - gBuffer.ViewInfo.z); +} + +// Convert linear depth to device depth +float LinearZ2DeviceDepth(GBufferData gBuffer, float linearDepth) +{ + return (gBuffer.ViewInfo.w / linearDepth) + gBuffer.ViewInfo.z; +} + +// Get view space position at given pixel coordinate with given device depth +float3 GetViewPos(GBufferData gBuffer, float2 uv, float deviceDepth) +{ + float4 clipPos = float4(uv * float2(2.0, -2.0) + float2(-1.0, 1.0), deviceDepth, 1.0); + float4 viewPos = mul(clipPos, gBuffer.InvProjectionMatrix); + return viewPos.xyz / viewPos.w; +} + +// Get world space position at given pixel coordinate with given device depth +float3 GetWorldPos(GBufferData gBuffer, float2 uv, float deviceDepth) +{ + float3 viewPos = GetViewPos(gBuffer, uv, deviceDepth); + return mul(float4(viewPos, 1), gBuffer.InvViewMatrix).xyz; +} + +#if !defined(NO_GBUFFER_SAMPLING) + +// Sample raw device depth buffer +float SampleZ(float2 uv) +{ + return SAMPLE_RT(Depth, uv).r; +} + +// Sample linear depth +float SampleDepth(GBufferData gBuffer, float2 uv) +{ + float deviceDepth = SampleZ(uv); + return LinearizeZ(gBuffer, deviceDepth); +} + +// Get view space position at given pixel coordinate +float3 GetViewPos(GBufferData gBuffer, float2 uv) +{ + float deviceDepth = SampleZ(uv); + return GetViewPos(gBuffer, uv, deviceDepth); +} + +// Get world space position at given pixel coordinate +float3 GetWorldPos(GBufferData gBuffer, float2 uv) +{ + float deviceDepth = SampleZ(uv); + return GetWorldPos(gBuffer, uv, deviceDepth); +} + +// Sample normal vector with pixel shading model +float3 SampleNormal(float2 uv, out int shadingModel) +{ + // Sample GBuffer + float4 gBuffer1 = SAMPLE_RT(GBuffer1, uv); + + // Decode normal and shading model + shadingModel = (int)(gBuffer1.a * 3.999); + return DecodeNormal(gBuffer1.rgb); +} + +// Sample GBuffer +GBufferSample SampleGBuffer(GBufferData gBuffer, float2 uv) +{ + GBufferSample result; + + // Sample GBuffer + float4 gBuffer0 = SAMPLE_RT(GBuffer0, uv); + float4 gBuffer1 = SAMPLE_RT(GBuffer1, uv); + float4 gBuffer2 = SAMPLE_RT(GBuffer2, uv); +#if defined(USE_GBUFFER_CUSTOM_DATA) + float4 gBuffer3 = SAMPLE_RT(GBuffer3, uv); +#endif + + // Decode normal and shading model + result.Normal = DecodeNormal(gBuffer1.rgb); + result.ShadingModel = (int)(gBuffer1.a * 3.999); + + // Calculate view space and world space positions + result.ViewPos = GetViewPos(gBuffer, uv); + result.WorldPos = mul(float4(result.ViewPos, 1), gBuffer.InvViewMatrix).xyz; + + // Decode GBuffer data + result.Color = gBuffer0.rgb; + result.AO = gBuffer0.a; + result.Roughness = gBuffer2.r; + result.Metalness = gBuffer2.g; + result.Specular = gBuffer2.b; +#if defined(USE_GBUFFER_CUSTOM_DATA) + result.CustomData = gBuffer3; +#endif + + return result; +} + +// Sample GBuffer (fast - only few parameters are being sampled) +GBufferSample SampleGBufferFast(GBufferData gBuffer, float2 uv) +{ + GBufferSample result; + + // Sample GBuffer + float4 gBuffer1 = SAMPLE_RT(GBuffer1, uv); + + // Decode normal and shading model + result.Normal = DecodeNormal(gBuffer1.rgb); + result.ShadingModel = (int)(gBuffer1.a * 3.999); + + // Calculate view space position + result.ViewPos = GetViewPos(gBuffer, uv); + result.WorldPos = mul(float4(result.ViewPos, 1), gBuffer.InvViewMatrix).xyz; + + return result; +} + +// Sample GBuffer normal vector, shading model and view space position +GBufferSample SampleGBufferNormalVPos(GBufferData gBuffer, float2 uv) +{ + GBufferSample result; + + // Sample GBuffer + float4 gBuffer1 = SAMPLE_RT(GBuffer1, uv); + + // Decode normal and shading model + result.Normal = DecodeNormal(gBuffer1.rgb); + result.ShadingModel = (int)(gBuffer1.a * 3.999); + + // Calculate view space position + result.ViewPos = GetViewPos(gBuffer, uv); + + return result; +} + +#if defined(USE_GBUFFER_CUSTOM_DATA) + +// Sample GBuffer custom data only +float4 SampleGBufferCustomData(float2 uv) +{ + return SAMPLE_RT(GBuffer3, uv); +} + +#endif + +#endif + +#endif diff --git a/Source/Shaders/GBuffer.shader b/Source/Shaders/GBuffer.shader new file mode 100644 index 000000000..f97182ef7 --- /dev/null +++ b/Source/Shaders/GBuffer.shader @@ -0,0 +1,71 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define USE_GBUFFER_CUSTOM_DATA + +#include "./Flax/Common.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/BRDF.hlsl" + +META_CB_BEGIN(0, Data) +GBufferData GBuffer; +float3 Dummy0; +int ViewMode; +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +// View modes +#define View_Mode_Default 0 +#define View_Mode_Fast 1 +#define View_Mode_Diffuse 2 +#define View_Mode_Normals 3 +#define View_Mode_Emissive 4 +#define View_Mode_Depth 5 +#define View_Mode_AmbientOcclusion 6 +#define View_Mode_Metalness 7 +#define View_Mode_Rougness 8 +#define View_Mode_Specular 9 +#define View_Mode_SpecularColor 10 +#define View_Mode_ShadingModel 11 +#define View_Mode_LightsBuffer 12 +#define View_Mode_Reflections 13 +#define View_Mode_Wireframe 14 +#define View_Mode_MotionVectors 15 +#define View_Mode_SubsurfaceColor 16 +#define View_Mode_Unlit 17 + +float3 GetShadingModelColor(GBufferSample gBuffer) +{ + switch (gBuffer.ShadingModel) + { + case SHADING_MODEL_UNLIT: return float3(1.0f, 0.44f, 0.929f); + case SHADING_MODEL_LIT: return float3(0.768f, 0.988f, 0.388f); + case SHADING_MODEL_SUBSURFACE: return float3(0.478f, 0.086, 0.098); + case SHADING_MODEL_FOLIAGE: return float3(0.182f, 0.711, 0.235); + } + return 1; +} + +// Pixel shader for debug view +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_DebugView(Quad_VS2PS input) : SV_Target +{ + float3 result = float3(0, 0, 0); + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, input.TexCoord); + switch (ViewMode) + { + case View_Mode_Diffuse: result = gBuffer.Color; break; + case View_Mode_Normals: result = gBuffer.Normal * 0.5 + 0.5; break; + case View_Mode_Depth: result = gBuffer.ViewPos.z / GBuffer.ViewFar; break; + case View_Mode_AmbientOcclusion: result = gBuffer.AO; break; + case View_Mode_Metalness: result = gBuffer.Metalness; break; + case View_Mode_Rougness: result = gBuffer.Roughness; break; + case View_Mode_Specular: result = gBuffer.Specular; break; + case View_Mode_SpecularColor: result = GetSpecularColor(gBuffer); break; + case View_Mode_ShadingModel: result = GetShadingModelColor(gBuffer); break; + case View_Mode_SubsurfaceColor: result = gBuffer.CustomData.rgb; break; + case View_Mode_Unlit: result = gBuffer.Color * gBuffer.AO; break; + } + return float4(result, 1); +} diff --git a/Source/Shaders/GBufferCommon.hlsl b/Source/Shaders/GBufferCommon.hlsl new file mode 100644 index 000000000..7e9171460 --- /dev/null +++ b/Source/Shaders/GBufferCommon.hlsl @@ -0,0 +1,68 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __GBUFFER_COMMON__ +#define __GBUFFER_COMMON__ + +#include "./Flax/Common.hlsl" + +// GBuffer sample data structure +struct GBufferSample +{ + float3 Normal; + float Roughness; + float3 WorldPos; + float Metalness; + float3 Color; + float Specular; + float3 ViewPos; + float AO; + int ShadingModel; +#if defined(USE_GBUFFER_CUSTOM_DATA) + float4 CustomData; +#endif +}; + +bool IsSubsurfaceMode(int shadingModel) +{ + return shadingModel == SHADING_MODEL_SUBSURFACE || shadingModel == SHADING_MODEL_FOLIAGE; +} + +float3 GetDiffuseColor(in float3 color, in float metalness) +{ + return color - color * metalness; +} + +float3 GetSpecularColor(in float3 color, in float specular, in float metalness) +{ + return lerp(0.08 * specular.xxx, color.rgb, metalness.xxx); +} + +// Calculate material diffuse color +float3 GetDiffuseColor(in GBufferSample gBuffer) +{ + return gBuffer.Color - gBuffer.Color * gBuffer.Metalness; +} + +// Calculate material specular color +float3 GetSpecularColor(in GBufferSample gBuffer) +{ + return lerp(0.08 * gBuffer.Specular.xxx, gBuffer.Color.rgb, gBuffer.Metalness.xxx); +} + +// Compact Normal Storage for Small G-Buffers +// [Aras Pranckevièius 2010, http://aras-p.info/texts/CompactNormalStorage.html] +float3 EncodeNormal(float3 n) +{ + // Pack to [0;1] range + return n * 0.5 + 0.5; +} + +// Compact Normal Storage for Small G-Buffers +// [Aras Pranckevièius 2010, http://aras-p.info/texts/CompactNormalStorage.html] +float3 DecodeNormal(float3 enc) +{ + // Unpack from [0;1] range + return normalize(enc * 2 - 1); +} + +#endif diff --git a/Source/Shaders/GPUParticlesSorting.shader b/Source/Shaders/GPUParticlesSorting.shader new file mode 100644 index 000000000..d705e3679 --- /dev/null +++ b/Source/Shaders/GPUParticlesSorting.shader @@ -0,0 +1,87 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +#ifndef SORT_MODE +#define SORT_MODE 0 +#endif + +// Primary constant buffer +META_CB_BEGIN(0, Data) +float3 ViewPosition; +uint ParticleCounterOffset; +uint ParticleStride; +uint ParticleCapacity; +uint PositionOffset; +uint CustomOffset; +float4x4 PositionTransform; +META_CB_END + +// Particles data buffer +ByteAddressBuffer ParticlesData : register(t0); + +// Output sorting keys buffer (index + key) +struct Item +{ + float Key; + uint Value; +}; +RWStructuredBuffer SortingKeys : register(u0); + +float GetParticleFloat(uint particleIndex, int offset) +{ + return asfloat(ParticlesData.Load(particleIndex * ParticleStride + offset)); +} + +float3 GetParticleVec3(uint particleIndex, int offset) +{ + return asfloat(ParticlesData.Load3(particleIndex * ParticleStride + offset)); +} + +// Sorting keys generation shader +META_CS(true, FEATURE_LEVEL_SM5) +META_PERMUTATION_1(SORT_MODE=0) +META_PERMUTATION_1(SORT_MODE=1) +META_PERMUTATION_1(SORT_MODE=2) +[numthreads(1024, 1, 1)] +void CS_Sort(uint3 dispatchThreadId : SV_DispatchThreadID) +{ + uint index = dispatchThreadId.x; + uint particlesCount = min(ParticlesData.Load(ParticleCounterOffset), ParticleCapacity); + if (index >= particlesCount) + return; + + // TODO: maybe process more than 1 particle at once and pre-sort them? + +#if SORT_MODE == 0 + + // Sort particles by depth to the view's near plane + float3 particlePosition = GetParticleVec3(index, PositionOffset); + float4 position = mul(float4(particlePosition, 1.0f), PositionTransform); + float sortKey = position.w; + +#elif SORT_MODE == 1 + + // Sort particles by distance to the view's origin + float3 particlePosition = GetParticleVec3(index, PositionOffset); + float4 position = mul(float4(particlePosition, 1.0f), PositionTransform); + float3 direction = ViewPosition - position.xyz; + float sortKey = dot(direction, direction); + +#elif SORT_MODE == 2 + + // Sort particles by the custom attribute + float sortKey = GetParticleFloat(index, CustomOffset); + +#else + +#error Unknown sorting mode! + +#endif + + // Write sorting index-key pair + Item item; + item.Key = sortKey; + item.Value = index; + SortingKeys[index] = item; +} diff --git a/Source/Shaders/GUI.shader b/Source/Shaders/GUI.shader new file mode 100644 index 000000000..35825ffb6 --- /dev/null +++ b/Source/Shaders/GUI.shader @@ -0,0 +1,168 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/GUICommon.hlsl" + +#ifndef BLUR_V +#define BLUR_V 0 +#endif + +META_CB_BEGIN(0, Data) +float4x4 ViewProjection; +META_CB_END + +#define MAX_SAMPLES 64 + +META_CB_BEGIN(1, BlurData) +float2 InvBufferSize; +int SampleCount; +float Dummy0; +float4 Bounds; +float4 WeightAndOffsets[MAX_SAMPLES / 2]; +META_CB_END + +Texture2D Image : register(t0); + +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R16G16_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(COLOR, 0, R32G32B32A32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 1, R32G32B32A32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 2, R32G32B32A32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +VS2PS VS(Render2DVertex input) +{ + VS2PS output; + + // Render2D::RenderingFeatures::VertexSnapping + if ((int)input.CustomDataAndClipOrigin.y & 1) + input.Position = (int2)input.Position; + + output.Position = mul(float4(input.Position, 0, 1), ViewProjection); + output.Color = input.Color; + output.TexCoord = input.TexCoord; + output.ClipOriginAndPos = float4(input.CustomDataAndClipOrigin.zw, input.Position); + output.ClipExtents = input.ClipExtents; + output.CustomData = input.CustomDataAndClipOrigin.xy; + + return output; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Image(VS2PS input) : SV_Target0 +{ + PerformClipping(input); + + return Image.Sample(SamplerLinearClamp, input.TexCoord) * input.Color; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_ImagePoint(VS2PS input) : SV_Target0 +{ + PerformClipping(input); + + return Image.Sample(SamplerPointClamp, input.TexCoord) * input.Color; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Color(VS2PS input) : SV_Target0 +{ + PerformClipping(input); + + return input.Color; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_LineAA(VS2PS input) : SV_Target0 +{ + PerformClipping(input); + + float lineWidth = input.CustomData.x; // Set per-vertex + float filterWidthScale = 1; // Must match C++ code + float gradient = input.TexCoord.x; + float2 gradientDerivative = float2(abs(ddx(gradient)), abs(ddy(gradient))); + float pixelSizeInUV = sqrt(dot(gradientDerivative, gradientDerivative)); + float halfLineWidthUV = 0.5f * pixelSizeInUV * lineWidth; + float halfFilterWidthUV = filterWidthScale * pixelSizeInUV; + float distanceToLineCenter = abs(0.5f - gradient); + float lineCoverage = smoothstep(halfLineWidthUV + halfFilterWidthUV, halfLineWidthUV - halfFilterWidthUV, distanceToLineCenter); + if (lineCoverage <= 0.0f) + discard; + input.Color.a *= lineCoverage; + + return input.Color; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Font(VS2PS input) : SV_Target0 +{ + PerformClipping(input); + + float4 color = input.Color; + color.a *= Image.Sample(SamplerLinearClamp, input.TexCoord).r; + return color; +} + +float4 GetSample(float weight, float offset, float2 uv) +{ +#if BLUR_V + const float2 uvOffset = float2(offset * InvBufferSize.x, 0); +#else + const float2 uvOffset = float2(0, offset * InvBufferSize.y); +#endif + + return Image.Sample(SamplerLinearClamp, uv + uvOffset) * weight + + Image.Sample(SamplerLinearClamp, uv - uvOffset) * weight; +} + +// 1:-1 to 0:1 +float2 ClipToUv(float2 clipPos) +{ + return clipPos * float2(0.5, -0.5) + float2(0.5, 0.5); +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Downscale(Quad_VS2PS input) : SV_Target0 +{ + float2 boundsPos = input.TexCoord * Bounds.zw + Bounds.xy; + + float4 clipPos = mul(float4(boundsPos, 0, 1), ViewProjection); + clipPos.xy /= clipPos.w; + + float2 uvPos = ClipToUv(clipPos.xy); + + // TODO: use 4-tap box blur to reduce aliasing when downscaling + + return Image.Sample(SamplerLinearClamp, uvPos); +} + +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(BLUR_V=0) +META_PERMUTATION_1(BLUR_V=1) +float4 PS_Blur(Quad_VS2PS input) : SV_Target0 +{ + float2 uv = input.TexCoord; + float4 result = Image.Sample(SamplerLinearClamp, uv) * WeightAndOffsets[0].x; + + { + float weight = WeightAndOffsets[0].z; + float offset = WeightAndOffsets[0].w; + result += GetSample(weight, offset, uv); + } + + for (int i = 2; i < SampleCount; i += 2) + { + int index = i / 2; + { + float weight = WeightAndOffsets[index].x; + float offset = WeightAndOffsets[index].y; + result += GetSample(weight, offset, uv); + } + + { + float weight = WeightAndOffsets[index].z; + float offset = WeightAndOffsets[index].w; + result += GetSample(weight, offset, uv); + } + } + + return float4(result.rgb, 1); +} diff --git a/Source/Shaders/GUICommon.hlsl b/Source/Shaders/GUICommon.hlsl new file mode 100644 index 000000000..6818723ae --- /dev/null +++ b/Source/Shaders/GUICommon.hlsl @@ -0,0 +1,61 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __GUI_COMMON__ +#define __GUI_COMMON__ + +#include "./Flax/Common.hlsl" + +#define CLIPPING_ENABLE 1 + +struct Render2DVertex +{ + float2 Position : POSITION0; + float2 TexCoord : TEXCOORD0; + float4 Color : COLOR0; + float4 CustomDataAndClipOrigin : TEXCOORD1; // x-per-geometry type, y-features mask, zw-clip origin + float4 ClipExtents : TEXCOORD2; +}; + +struct VS2PS +{ + float4 Position : SV_Position; + float4 Color : COLOR0; + float2 TexCoord : TEXCOORD0; + float2 CustomData : TEXCOORD1; + float4 ClipExtents : TEXCOORD2; + float4 ClipOriginAndPos : TEXCOORD3; +}; + +float cross2(float2 a, float2 b) +{ + return a.x * b.y - a.y * b.x; +} + +// Given a point p and a parallelogram defined by point a and vectors b and c, determines in p is inside the parallelogram. Returns a 4-vector that can be used with the clip instruction. +float4 PointInParallelogram(float2 p, float2 a, float4 bc) +{ + float2 o = p - a; + float invD = 1 / cross2(bc.xy, bc.zw); + float2 t = (o.x * bc.yw - o.y * bc.xz) * float2(-invD, invD); + return float4(t, float2(1, 1) - t); +} + +void PerformClipping(float2 clipOrigin, float2 windowPos, float4 clipExtents) +{ +#if CLIPPING_ENABLE + + // Clip pixels which are outside of the clipping rect + float4 clipTest = PointInParallelogram(windowPos, clipOrigin, clipExtents); + + // Clip pixels which are outside of the clipping rect + clip(clipTest); + +#endif +} + +void PerformClipping(VS2PS input) +{ + PerformClipping(input.ClipOriginAndPos.xy, input.ClipOriginAndPos.zw, input.ClipExtents); +} + +#endif diff --git a/Source/Shaders/GammaCorrectionCommon.hlsl b/Source/Shaders/GammaCorrectionCommon.hlsl new file mode 100644 index 000000000..e08e902a1 --- /dev/null +++ b/Source/Shaders/GammaCorrectionCommon.hlsl @@ -0,0 +1,186 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __GAMMA_CORRECTION_COMMON__ +#define __GAMMA_CORRECTION_COMMON__ + +#include "./Flax/Math.hlsl" + +// Fast reversible tonemapper +// http://gpuopen.com/optimized-reversible-tonemapper-for-resolve/ +float3 FastTonemap(float3 c) +{ + return c * rcp(max(max(c.r, c.g), c.b) + 1.0); +} + +float4 FastTonemap(float4 c) +{ + return float4(FastTonemap(c.rgb), c.a); +} + +float3 FastTonemap(float3 c, float w) +{ + return c * (w * rcp(max(max(c.r, c.g), c.b) + 1.0)); +} + +float4 FastTonemap(float4 c, float w) +{ + return float4(FastTonemap(c.rgb, w), c.a); +} + +float3 FastTonemapInvert(float3 c) +{ + return c * rcp(1.0 - max(max(c.r, c.g), c.b)); +} + +float4 FastTonemapInvert(float4 c) +{ + return float4(FastTonemapInvert(c.rgb), c.a); +} + +half3 LinearTo709Branchless(half3 linearColor) +{ + linearColor = max(6.10352e-5, linearColor); + return min(linearColor * 4.5, pow(max(linearColor, 0.018), 0.45) * 1.099 - 0.099); +} + +half3 LinearToSrgbBranchless(half3 linearColor) +{ + linearColor = max(6.10352e-5, linearColor); + return min(linearColor * 12.92, pow(max(linearColor, 0.00313067), 1.0/2.4) * 1.055 - 0.055); +} + +half LinearToSrgbBranchingChannel(half linearColor) +{ + if (linearColor < 0.00313067) + return linearColor * 12.92; + return pow(linearColor, (1.0/2.4)) * 1.055 - 0.055; +} + +half3 LinearToSrgbBranching(half3 linearColor) +{ + return half3( + LinearToSrgbBranchingChannel(linearColor.r), + LinearToSrgbBranchingChannel(linearColor.g), + LinearToSrgbBranchingChannel(linearColor.b)); +} + +half3 LinearToSrgb(half3 linearColor) +{ +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM4 + // Branching is faster than branchless on PC + return LinearToSrgbBranching(linearColor); +#else + // Use branchless on mobile + return LinearToSrgbBranchless(linearColor); +#endif +} + +half3 sRGBToLinear(half3 color) +{ + color = max(6.10352e-5, color); + return color > 0.04045 ? pow(color * (1.0 / 1.055) + 0.0521327, 2.4) : color * (1.0 / 12.92); +} + +float3 LogToLinear(float3 logColor) +{ + const float linearRange = 14; + const float linearGrey = 0.18; + const float exposureGrey = 444; + + // Using stripped down, 'pure log', formula. Parameterized by grey points and dynamic range covered. + float3 linearColor = exp2((logColor - exposureGrey / 1023.0) * linearRange) * linearGrey; + //float3 linearColor = 2 * (pow(10.0, ((logColor - 0.616596 - 0.03) / 0.432699)) - 0.037584); // SLog + //float3 linearColor = (pow( 10, (1023 * logColor - 685) / 300) - 0.0108) / (1 - 0.0108); // Cineon + //linearColor = max(0, linearColor); + + return linearColor; +} + +float3 LinearToLog(float3 linearColor) +{ + const float linearRange = 14; + const float linearGrey = 0.18; + const float exposureGrey = 444; + + // Using stripped down, 'pure log', formula. Parameterized by grey points and dynamic range covered. + float3 logColor = log2(linearColor) / linearRange - log2(linearGrey) / linearRange + exposureGrey / 1023.0; // scalar: 3log2 3mad + //float3 logColor = (log2(linearColor) - log2(linearGrey)) / linearRange + exposureGrey / 1023.0; + //float3 logColor = log2(linearColor / linearGrey) / linearRange + exposureGrey / 1023.0; + //float3 logColor = (0.432699 * log10(0.5 * linearColor + 0.037584) + 0.616596) + 0.03; // SLog + //float3 logColor = (300 * log10(linearColor * (1 - 0.0108) + 0.0108) + 685) / 1023; // Cineon + logColor = saturate(logColor); + + return logColor; +} + +// Alexa LogC converters (El 1000) +// See http://www.vocas.nl/webfm_send/964 +// Max range is ~58.85666 + +struct ParamsLogC +{ + float cut; + float a, b, c, d, e, f; +}; + +static const ParamsLogC LogC = +{ + 0.011361, // cut + 5.555556, // a + 0.047996, // b + 0.244161, // c + 0.386036, // d + 5.301883, // e + 0.092819 // f +}; + +float3 LinearToLogC(float3 linearColor) +{ + return LogC.c * log10(LogC.a * linearColor + LogC.b) + LogC.d; +} + +float3 LogCToLinear(float3 logcColor) +{ + return (pow(10.0, (logcColor - LogC.d) / LogC.c) - LogC.b) / LogC.a; +} + +// Dolby PQ transforms +float3 ST2084ToLinear(float3 pq) +{ + const float m1 = 0.1593017578125; // = 2610. / 4096. * .25; + const float m2 = 78.84375; // = 2523. / 4096. * 128; + const float c1 = 0.8359375; // = 2392. / 4096. * 32 - 2413./4096.*32 + 1; + const float c2 = 18.8515625; // = 2413. / 4096. * 32; + const float c3 = 18.6875; // = 2392. / 4096. * 32; + const float C = 10000.; + + float3 Np = pow(pq, 1.0 / m2); + float3 L = Np - c1; + L = max(0.0, L); + L = L / (c2 - c3 * Np); + L = pow(L, 1.0 / m1); + float3 P = L * C; + + return P; +} + +float3 LinearToST2084(float3 lin) +{ + const float m1 = 0.1593017578125; // = 2610. / 4096. * .25; + const float m2 = 78.84375; // = 2523. / 4096. * 128; + const float c1 = 0.8359375; // = 2392. / 4096. * 32 - 2413./4096.*32 + 1; + const float c2 = 18.8515625; // = 2413. / 4096. * 32; + const float c3 = 18.6875; // = 2392. / 4096. * 32; + const float C = 10000.0; + + float3 L = lin / C; + float3 Lm = pow(L, m1); + float3 N1 = (c1 + c2 * Lm); + float3 N2 = (1.0 + c3 * Lm); + float3 N = N1 * rcp(N2); + float3 P = pow(N, m2); + + return P; +} + +#endif diff --git a/Source/Shaders/Gather.hlsl b/Source/Shaders/Gather.hlsl new file mode 100644 index 000000000..3c37c6923 --- /dev/null +++ b/Source/Shaders/Gather.hlsl @@ -0,0 +1,73 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __GATHER__ +#define __GATHER__ + +#include "./Flax/Common.hlsl" + +float4 TextureGatherRed(Texture2D tex, SamplerState sam, float2 uv) +{ +#if CAN_USE_GATHER + return tex.GatherRed(sam, uv); +#else + float x = tex.Sample(sam, uv, int2(0, 1)).x; + float y = tex.Sample(sam, uv, int2(1, 1)).x; + float z = tex.Sample(sam, uv, int2(1, 0)).x; + float w = tex.Sample(sam, uv, int2(0, 0)).x; + return float4(x, y, z, w); +#endif +} + +float4 TextureGatherRed(Texture2DArray tex, SamplerState sam, float3 uv) +{ +#if CAN_USE_GATHER + return tex.GatherRed(sam, uv); +#else + float x = tex.Sample(sam, uv, int2(0, 1)).x; + float y = tex.Sample(sam, uv, int2(1, 1)).x; + float z = tex.Sample(sam, uv, int2(1, 0)).x; + float w = tex.Sample(sam, uv, int2(0, 0)).x; + return float4(x, y, z, w); +#endif +} + +float4 TextureGatherRed(Texture2D tex, SamplerState sam, float2 uv, int2 offset) +{ +#if CAN_USE_GATHER + return tex.GatherRed(sam, uv, offset); +#else + float x = tex.Sample(sam, uv, offset + int2(0, 1)).x; + float y = tex.Sample(sam, uv, offset + int2(1, 1)).x; + float z = tex.Sample(sam, uv, offset + int2(1, 0)).x; + float w = tex.Sample(sam, uv, offset + int2(0, 0)).x; + return float4(x, y, z, w); +#endif +} + +float4 TextureGatherRed(Texture2D tex, SamplerState sam, float2 uv) +{ +#if CAN_USE_GATHER + return tex.GatherRed(sam, uv); +#else + float x = tex.Sample(sam, uv, int2(0, 1)).x; + float y = tex.Sample(sam, uv, int2(1, 1)).x; + float z = tex.Sample(sam, uv, int2(1, 0)).x; + float w = tex.Sample(sam, uv, int2(0, 0)).x; + return float4(x, y, z, w); +#endif +} + +float4 TextureGatherRed(Texture2D tex, SamplerState sam, float2 uv, int2 offset) +{ +#if CAN_USE_GATHER + return tex.GatherRed(sam, uv, offset); +#else + float x = tex.Sample(sam, uv, offset + int2(0, 1)).x; + float y = tex.Sample(sam, uv, offset + int2(1, 1)).x; + float z = tex.Sample(sam, uv, offset + int2(1, 0)).x; + float w = tex.Sample(sam, uv, offset + int2(0, 0)).x; + return float4(x, y, z, w); +#endif +} + +#endif diff --git a/Source/Shaders/Histogram.shader b/Source/Shaders/Histogram.shader new file mode 100644 index 000000000..32fb8eb1a --- /dev/null +++ b/Source/Shaders/Histogram.shader @@ -0,0 +1,89 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +// Those defines must match the C++ +#define THREADGROUP_SIZE_X 16 +#define THREADGROUP_SIZE_Y 16 +#define HISTOGRAM_SIZE 64 + +META_CB_BEGIN(0, Data) + +uint2 InputSize; +float HistogramMul; +float HistogramAdd; + +META_CB_END + +#ifdef _CS_ClearHistogram + +RWStructuredBuffer HistogramBuffer : register(u0); + +// Clears the histogram +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(THREADGROUP_SIZE_X, 1, 1)] +void CS_ClearHistogram(uint dispatchThreadId : SV_DispatchThreadID) +{ + if (dispatchThreadId < HISTOGRAM_SIZE) + HistogramBuffer[dispatchThreadId] = 0u; +} + +#endif + +#ifdef _CS_GenerateHistogram + +Texture2D Input : register(t0); + +RWStructuredBuffer HistogramBuffer : register(u0); + +float ComputeHistogramPositionFromLuminance(float luminance) +{ + return log2(luminance) * HistogramMul + HistogramAdd; +} + +groupshared uint SharedHistogram[HISTOGRAM_SIZE]; + +// Generates the histogram +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(THREADGROUP_SIZE_X, THREADGROUP_SIZE_Y, 1)] +void CS_GenerateHistogram(uint3 groupId : SV_GroupID, uint3 dispatchThreadId : SV_DispatchThreadID, uint3 groupThreadId : SV_GroupThreadID, uint groupIndex : SV_GroupIndex) +{ + const uint localThreadId = groupThreadId.y * THREADGROUP_SIZE_X + groupThreadId.x; + + // Clear the histogram + if (localThreadId < HISTOGRAM_SIZE) + SharedHistogram[localThreadId] = 0u; + + GroupMemoryBarrierWithGroupSync(); + + // Gather local group histogram + if (dispatchThreadId.x < InputSize.x && dispatchThreadId.y < InputSize.y) + { + uint weight = 1u; + + // Vignette weighting to add more focus on the center of the screen +#if 0 + { + float2 uv = float2(dispatchThreadId.xy) / float2(InputSize.x, InputSize.y); + float2 d = abs(uv - (0.5).xx); + float factor = saturate(1.0 - dot(d, d)); + factor *= factor; + weight = (uint)(64.0 * factor); + } +#endif + + float3 color = Input[dispatchThreadId.xy].xyz; + float luminance = Luminance(color); + float logLuminance = ComputeHistogramPositionFromLuminance(luminance); + uint idx = (uint)(saturate(logLuminance) * (HISTOGRAM_SIZE - 1u)); + InterlockedAdd(SharedHistogram[idx], weight); + } + + GroupMemoryBarrierWithGroupSync(); + + // Merge everything + if (localThreadId < HISTOGRAM_SIZE) + InterlockedAdd(HistogramBuffer[localThreadId], SharedHistogram[localThreadId]); +} + +#endif diff --git a/Source/Shaders/IESProfile.hlsl b/Source/Shaders/IESProfile.hlsl new file mode 100644 index 000000000..f01be6aca --- /dev/null +++ b/Source/Shaders/IESProfile.hlsl @@ -0,0 +1,21 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __IES_PROFILE__ +#define __IES_PROFILE__ + +// Apply 1D IES light profile texture +float ComputeLightProfileMultiplier(Texture2D tex, float3 worldPosition, float3 lightPosition, float3 lightDirection) +{ + float3 negLightDirection = normalize(worldPosition - lightPosition); + + // -1..1 + float dotProd = dot(negLightDirection, lightDirection); + // -PI..PI (this distortion could be put into the texture but not without quality loss or more memory) + float angle = asin(dotProd); + // 0..1 + float normAngle = angle / PI + 0.5f; + + return tex.SampleLevel(SamplerLinearClamp, float2(normAngle, 0), 0).r; +} + +#endif diff --git a/Source/Shaders/Lighting.hlsl b/Source/Shaders/Lighting.hlsl new file mode 100644 index 000000000..bee5b3606 --- /dev/null +++ b/Source/Shaders/Lighting.hlsl @@ -0,0 +1,159 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __LIGHTING__ +#define __LIGHTING__ + +#if !defined(USE_GBUFFER_CUSTOM_DATA) +#error "Canot calculate lighting without custom data in GBuffer. Define USE_GBUFFER_CUSTOM_DATA." +#endif + +#include "./Flax/LightingCommon.hlsl" + +ShadowData GetShadow(LightData lightData, GBufferSample gBuffer, float4 shadowMask) +{ + ShadowData shadow; + shadow.SurfaceShadow = gBuffer.AO * shadowMask.r; + shadow.TransmissionShadow = shadowMask.g; + return shadow; +} + +LightingData StandardShading(GBufferSample gBuffer, float energy, float3 L, float3 V, half3 N) +{ + float3 diffuseColor = GetDiffuseColor(gBuffer); + float3 specularColor = GetSpecularColor(gBuffer); + + float3 H = normalize(V + L); + float NoL = saturate(dot(N, L)); + float NoV = max(dot(N, V), 1e-5); + float NoH = saturate(dot(N, H)); + float VoH = saturate(dot(V, H)); + + // Generalized microfacet specular + float D = D_GGX(gBuffer.Roughness, NoH) * energy; + float Vis = Vis_SmithJointApprox(gBuffer.Roughness, NoV, NoL); + float3 F = F_Schlick(specularColor, VoH); + + LightingData lighting; + lighting.Diffuse = Diffuse_Lambert(diffuseColor); + lighting.Specular = (D * Vis) * F; + lighting.Transmission = 0; + return lighting; +} + +LightingData SubsurfaceShading(GBufferSample gBuffer, float energy, float3 L, float3 V, half3 N) +{ + LightingData lighting = StandardShading(gBuffer, energy, L, V, N); + + // Fake effect of the light going through the material + float3 subsurfaceColor = gBuffer.CustomData.rgb; + float opacity = gBuffer.CustomData.a; + float3 H = normalize(V + L); + float inscatter = pow(saturate(dot(L, -V)), 12.1f) * lerp(3, 0.1f, opacity); + float normalContribution = saturate(dot(N, H) * opacity + 1.0f - opacity); + float backScatter = gBuffer.AO * normalContribution / (PI * 2.0f); + lighting.Transmission = lerp(backScatter, 1, inscatter) * subsurfaceColor; + + return lighting; +} + +LightingData FoliageShading(GBufferSample gBuffer, float energy, float3 L, float3 V, half3 N) +{ + LightingData lighting = StandardShading(gBuffer, energy, L, V, N); + + // Fake effect of the light going through the thin foliage + float3 subsurfaceColor = gBuffer.CustomData.rgb; + float wrapNoL = saturate((-dot(N, L) + 0.5f) / 2.25); + float VoL = dot(V, L); + float scatter = D_GGX(0.36, saturate(-VoL)); + lighting.Transmission = subsurfaceColor * (wrapNoL * scatter); + + return lighting; +} + +LightingData SurfaceShading(GBufferSample gBuffer, float energy, float3 L, float3 V, half3 N) +{ + switch (gBuffer.ShadingModel) + { + case SHADING_MODEL_UNLIT: + case SHADING_MODEL_LIT: + return StandardShading(gBuffer, energy, L, V, N); + case SHADING_MODEL_SUBSURFACE: + return SubsurfaceShading(gBuffer, energy, L, V, N); + case SHADING_MODEL_FOLIAGE: + return FoliageShading(gBuffer, energy, L, V, N); + default: + return (LightingData)0; + } +} + +float4 GetSkyLightLighting(LightData lightData, GBufferSample gBuffer, TextureCube ibl) +{ + // Get material diffuse color + float3 diffuseColor = GetDiffuseColor(gBuffer); + + // Compute the preconvolved incoming lighting with the normal direction (apply ambient color) + // Some data is packed, see C++ RendererSkyLightData::SetupLightData + float mip = lightData.SourceLength; + float3 diffuseLookup = ibl.SampleLevel(SamplerLinearClamp, gBuffer.Normal, mip).rgb * lightData.Color.rgb; + diffuseLookup += float3(lightData.SpotAngles.rg, lightData.SourceRadius); + + // Fade out based on distance to capture + float3 captureVector = gBuffer.WorldPos - lightData.Position; + float captureVectorLength = length(captureVector); + float normalizedDistanceToCapture = saturate(captureVectorLength / lightData.Radius); + float distanceAlpha = 1.0 - smoothstep(0.6, 1, normalizedDistanceToCapture); + + // Calculate final light + float3 color = diffuseLookup * diffuseColor; + float luminance = Luminance(diffuseLookup); + return float4(color, luminance) * (distanceAlpha * gBuffer.AO); +} + +float4 GetLighting(float3 viewPos, LightData lightData, GBufferSample gBuffer, float4 shadowMask, bool isRadial, bool isSpotLight) +{ + float4 result = 0; + float3 V = normalize(viewPos - gBuffer.WorldPos); + float3 ToLight = lightData.Direction; + float3 N = gBuffer.Normal; + float3 L = lightData.Direction; // no need to normalize + float NoL = saturate(dot(N, L)); + float distanceAttenuation = 1; + float lightRadiusMask = 1; + float spotAttenuation = 1; + + // Calculate attenuation + if (isRadial) + { + GetRadialLightAttenuation(lightData, isSpotLight, gBuffer.WorldPos, N, 1, ToLight, L, NoL, distanceAttenuation, lightRadiusMask, spotAttenuation); + } + float attenuation = distanceAttenuation * lightRadiusMask * spotAttenuation; + + // Calculate shadow + ShadowData shadow = GetShadow(lightData, gBuffer, shadowMask); + + // Reduce shadow mapping artifacts + shadow.SurfaceShadow *= saturate(NoL * 6 - 0.2); + + BRANCH + if (shadow.SurfaceShadow + shadow.TransmissionShadow > 0) + { + gBuffer.Roughness = max(gBuffer.Roughness, lightData.MinRoughness); + float energy = AreaLightSpecular(lightData, gBuffer.Roughness, ToLight, L, V, N); + + // Calculate direct lighting + LightingData lighting = SurfaceShading(gBuffer, energy, L, V, N); +#if NO_SPECULAR + lighting.Specular = 0; +#endif + + // Calculate final light color + float3 surfaceLight = (lighting.Diffuse + lighting.Specular) * (NoL * attenuation * shadow.SurfaceShadow); + float3 subsurfaceLight = lighting.Transmission * (attenuation * shadow.TransmissionShadow); + result.rgb = lightData.Color * (surfaceLight + subsurfaceLight); + result.a = 1; + } + + return result; +} + +#endif diff --git a/Source/Shaders/LightingCommon.hlsl b/Source/Shaders/LightingCommon.hlsl new file mode 100644 index 000000000..43303d316 --- /dev/null +++ b/Source/Shaders/LightingCommon.hlsl @@ -0,0 +1,165 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __LIGHTING_COMMON__ +#define __LIGHTING_COMMON__ + +#include "./Flax/BRDF.hlsl" +#include "./Flax/GBufferCommon.hlsl" + +// Structure that contains information about light +struct LightData +{ + float2 SpotAngles; + float SourceRadius; + float SourceLength; + + float3 Color; + float MinRoughness; + + float3 Position; + float CastShadows; + + float3 Direction; + float Radius; + + float FalloffExponent; + float InverseSquared; + float Dummy0; + float RadiusInv; +}; + +// Structure that contains information about shadow +struct ShadowData +{ + float SurfaceShadow; + float TransmissionShadow; +}; + +// Structure that contains information about direct lighting calculations result +struct LightingData +{ + float3 Diffuse; + float3 Specular; + float3 Transmission; +}; + +// Gets a radial attenuation factor for a point light. +// WorldLightVector is the vector from the position being shaded to the light, divided by the radius of the light. +float RadialAttenuation(float3 worldLightVector, half falloffExponent) +{ + float normalizeDistanceSquared = dot(worldLightVector, worldLightVector); + return pow(1.0f - saturate(normalizeDistanceSquared), falloffExponent); +} + +// Calculates attenuation for a spot light. Where L normalize vector to light. +float GetSpotAttenuation(LightData lightData, float3 L) +{ + // SpotAngles.x is CosOuterCone, SpotAngles.y is InvCosConeDifference + return Square(saturate((dot(normalize(-L), lightData.Direction) - lightData.SpotAngles.x) * lightData.SpotAngles.y)); +} + +// Calculates radial light (point or spot) attenuation factors (distance, spot and radius mask) +void GetRadialLightAttenuation( + LightData lightData, + bool isSpotLight, + float3 worldPosition, + float3 N, + float distanceBiasSqr, + inout float3 toLight, + inout float3 L, + inout float NoL, + inout float distanceAttenuation, + inout float lightRadiusMask, + inout float spotAttenuation) +{ + toLight = lightData.Position - worldPosition; + + float distanceSqr = dot(toLight, toLight); + L = toLight * rsqrt(distanceSqr); + + if (lightData.InverseSquared) + { + BRANCH + if (lightData.SourceLength > 0) + { + // Line segment irradiance + float3 L01 = lightData.Direction * lightData.SourceLength; + float3 L0 = toLight - 0.5 * L01; + float3 L1 = toLight + 0.5 * L01; + float LengthL0 = length(L0); + float LengthL1 = length(L1); + + distanceAttenuation = rcp((LengthL0 * LengthL1 + dot(L0, L1)) * 0.5 + distanceBiasSqr); + NoL = saturate(0.5 * (dot(N, L0) / LengthL0 + dot(N, L1) / LengthL1)); + } + else + { + // Sphere irradiance (technically just 1/d^2 but this avoids inf) + distanceAttenuation = rcp(distanceSqr + distanceBiasSqr); + NoL = saturate(dot(N, L)); + } + + lightRadiusMask = Square(saturate(1 - Square(distanceSqr * Square(lightData.RadiusInv)))); + } + else + { + distanceAttenuation = 1; + NoL = saturate(dot(N, L)); + + lightRadiusMask = RadialAttenuation(toLight * lightData.RadiusInv, lightData.FalloffExponent); + } + + if (isSpotLight) + { + spotAttenuation = GetSpotAttenuation(lightData, L); + } +} + +// Find representative incoming light direction and energy modification +float AreaLightSpecular(LightData lightData, float roughness, inout float3 toLight, inout float3 L, float3 V, half3 N) +{ + float energy = 1; + + float m = roughness * roughness; + float3 r = reflect(-V, N); + float invDistToLight = rsqrt(dot(toLight, toLight)); + + BRANCH + if (lightData.SourceLength > 0) + { + // Energy conservation + float lineAngle = saturate(lightData.SourceLength * invDistToLight); + energy *= m / saturate(m + 0.5 * lineAngle); + + // Closest point on line segment to ray + float3 l01 = lightData.Direction * lightData.SourceLength; + float3 l0 = toLight - 0.5 * l01; + float3 l1 = toLight + 0.5 * l01; + + float a = Square(lightData.SourceLength); + float b = dot(r, l01); + float t = saturate(dot(l0, b * r - l01) / (a - b * b)); + + toLight = l0 + t * l01; + } + + BRANCH + if (lightData.SourceRadius > 0) + { + // Energy conservation + float sphereAngle = saturate(lightData.SourceRadius * invDistToLight); + energy *= Square(m / saturate(m + 0.5 * sphereAngle)); + + // Closest point on sphere to ray + float3 closestPointOnRay = dot(toLight, r) * r; + float3 centerToRay = closestPointOnRay - toLight; + float3 closestPointOnSphere = toLight + centerToRay * saturate(lightData.SourceRadius * rsqrt(dot(centerToRay, centerToRay))); + toLight = closestPointOnSphere; + } + + L = normalize(toLight); + + return energy; +} + +#endif diff --git a/Source/Shaders/Lights.shader b/Source/Shaders/Lights.shader new file mode 100644 index 000000000..a0b5a2e0e --- /dev/null +++ b/Source/Shaders/Lights.shader @@ -0,0 +1,177 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define USE_GBUFFER_CUSTOM_DATA + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/LightingCommon.hlsl" +#include "./Flax/IESProfile.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/Lighting.hlsl" + +// Per light data +META_CB_BEGIN(0, PerLight) +LightData Light; +float4x4 WVP; +META_CB_END + +// Per frame data +META_CB_BEGIN(1, PerFrame) +GBufferData GBuffer; +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +// Rendered shadow +Texture2D Shadow : register(t5); +Texture2D IESTexture : register(t6); +TextureCube CubeImage : register(t7); + +// Vertex Shader for models rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +Model_VS2PS VS_Model(ModelInput_PosOnly input) +{ + Model_VS2PS output; + output.Position = mul(float4(input.Position.xyz, 1), WVP); + output.ScreenPos = output.Position; + return output; +} + +// Pixel shader for directional light rendering +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(NO_SPECULAR=0) +META_PERMUTATION_1(NO_SPECULAR=1) +void PS_Directional(Quad_VS2PS input, out float4 output : SV_Target0) +{ + output = 0; + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, input.TexCoord); + + // Check if cannot shadow pixel + BRANCH + if (gBuffer.ShadingModel == SHADING_MODEL_UNLIT) + { + discard; + return; + } + + // Sample shadow mask + float4 shadowMask = 1; + BRANCH + if (Light.CastShadows > 0) + { + shadowMask = SAMPLE_RT(Shadow, input.TexCoord); + } + + // Calculate lighting + output = GetLighting(gBufferData.ViewPos, Light, gBuffer, shadowMask, false, false); +} + +// Pixel shader for point light rendering +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_2(NO_SPECULAR=0, USE_IES_PROFILE=0) +META_PERMUTATION_2(NO_SPECULAR=1, USE_IES_PROFILE=0) +META_PERMUTATION_2(NO_SPECULAR=0, USE_IES_PROFILE=1) +META_PERMUTATION_2(NO_SPECULAR=1, USE_IES_PROFILE=1) +void PS_Point(Model_VS2PS input, out float4 output : SV_Target0) +{ + output = 0; + + // Obtain UVs corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Check if cannot shadow pixel + BRANCH + if (gBuffer.ShadingModel == SHADING_MODEL_UNLIT) + { + discard; + return; + } + + // Sample shadow mask + float4 shadowMask = 1; + BRANCH + if (Light.CastShadows > 0) + { + shadowMask = SAMPLE_RT(Shadow, uv); + } + + // Calculate lighting + output = GetLighting(gBufferData.ViewPos, Light, gBuffer, shadowMask, true, false); + + // Apply IES texture +#if USE_IES_PROFILE + output *= ComputeLightProfileMultiplier(IESTexture, gBuffer.WorldPos, Light.Position, -Light.Direction); +#endif +} + +// Pixel shader for spot light rendering +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_2(NO_SPECULAR=0, USE_IES_PROFILE=0) +META_PERMUTATION_2(NO_SPECULAR=1, USE_IES_PROFILE=0) +META_PERMUTATION_2(NO_SPECULAR=0, USE_IES_PROFILE=1) +META_PERMUTATION_2(NO_SPECULAR=1, USE_IES_PROFILE=1) +void PS_Spot(Model_VS2PS input, out float4 output : SV_Target0) +{ + output = 0; + + // Obtain UVs corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Check if cannot shadow pixel + BRANCH + if (gBuffer.ShadingModel == SHADING_MODEL_UNLIT) + { + discard; + return; + } + + // Sample shadow mask + float4 shadowMask = 1; + BRANCH + if (Light.CastShadows > 0) + { + shadowMask = SAMPLE_RT(Shadow, uv); + } + + // Calculate lighting + output = GetLighting(gBufferData.ViewPos, Light, gBuffer, shadowMask, true, true); + + // Apply IES texture +#if USE_IES_PROFILE + output *= ComputeLightProfileMultiplier(IESTexture, gBuffer.WorldPos, Light.Position, -Light.Direction); +#endif +} + +// Pixel shader for sky light rendering +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Sky(Model_VS2PS input) : SV_Target0 +{ + float4 output = 0; + + // Obtain UVs corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Check if can light pixel + if (gBuffer.ShadingModel != SHADING_MODEL_UNLIT) + { + output = GetSkyLightLighting(Light, gBuffer, CubeImage); + } + + return output; +} diff --git a/Source/Shaders/MaterialCommon.hlsl b/Source/Shaders/MaterialCommon.hlsl new file mode 100644 index 000000000..6273deb4b --- /dev/null +++ b/Source/Shaders/MaterialCommon.hlsl @@ -0,0 +1,196 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __MATERIAL_COMMON__ +#define __MATERIAL_COMMON__ + +// Material input types +#define MATERIAL_DOMAIN_SURFACE 0 +#define MATERIAL_DOMAIN_POSTPROCESS 1 +#define MATERIAL_DOMAIN_DECAL 2 +#define MATERIAL_BLEND_OPAQUE 0 +#define MATERIAL_BLEND_TRANSPARENT 1 +#define MATERIAL_BLEND_ADDITIVE 2 +#define MATERIAL_BLEND_MULTIPLY 3 +#define MATERIAL_TESSELLATION_NONE 0 +#define MATERIAL_TESSELLATION_FLAT 1 +#define MATERIAL_TESSELLATION_PN 2 +#define MATERIAL_TESSELLATION_PHONG 3 + +#define USE_CUSTOM_VERTEX_INTERPOLATORS (CUSTOM_VERTEX_INTERPOLATORS_COUNT > 0) + +// Validate inputs +#ifndef MATERIAL + #define MATERIAL 0 +#endif +#ifndef MATERIAL_DOMAIN + #define MATERIAL_DOMAIN MATERIAL_DOMAIN_SURFACE +#endif +#ifndef MATERIAL_BLEND + #define MATERIAL_BLEND MATERIAL_BLEND_OPAQUE +#endif +#ifndef MATERIAL_SHADING_MODEL + #define MATERIAL_SHADING_MODEL SHADING_MODEL_LIT +#endif +#ifndef USE_INSTANCING + #define USE_INSTANCING 0 +#endif +#ifndef USE_SKINNING + #define USE_SKINNING 0 +#endif +#ifndef USE_LIGHTMAP + #define USE_LIGHTMAP 0 +#endif +#ifndef USE_POSITION_OFFSET + #define USE_POSITION_OFFSET 0 +#endif +#ifndef USE_VERTEX_COLOR + #define USE_VERTEX_COLOR 0 +#endif +#ifndef USE_DISPLACEMENT + #define USE_DISPLACEMENT 0 +#endif +#ifndef USE_TESSELLATION + #define USE_TESSELLATION 0 +#endif +#ifndef USE_DITHERED_LOD_TRANSITION + #define USE_DITHERED_LOD_TRANSITION 0 +#endif +#ifndef MATERIAL_TESSELLATION + #define MATERIAL_TESSELLATION MATERIAL_TESSELLATION_NONE +#endif +#ifndef MAX_TESSELLATION_FACTOR + #define MAX_TESSELLATION_FACTOR 15 +#endif +#ifndef IS_MOTION_VECTORS_PASS + #define IS_MOTION_VECTORS_PASS 0 +#endif +#ifndef PER_BONE_MOTION_BLUR + #define PER_BONE_MOTION_BLUR 0 +#endif + +// Material properties +struct Material +{ + float3 Emissive; + float Roughness; + float3 Color; + float AO; + float3 WorldNormal; + float Metalness; + float3 TangentNormal; + float Specular; + float3 PositionOffset; + float Opacity; + float3 SubsurfaceColor; + float Refraction; + float Mask; + float TessellationMultiplier; + float3 WorldDisplacement; +#if USE_CUSTOM_VERTEX_INTERPOLATORS + float4 CustomVSToPS[CUSTOM_VERTEX_INTERPOLATORS_COUNT]; +#endif +}; + +struct ModelInput +{ + float3 Position : POSITION; + float2 TexCoord : TEXCOORD0; + float4 Normal : NORMAL; + float4 Tangent : TANGENT; + float2 LightmapUV : TEXCOORD1; +#if USE_VERTEX_COLOR + half4 Color : COLOR; +#endif + +#if USE_INSTANCING + float4 InstanceOrigin : ATTRIBUTE0; // .w contains PerInstanceRandom + float4 InstanceTransform1 : ATTRIBUTE1; // .w contains LODDitherFactor + float3 InstanceTransform2 : ATTRIBUTE2; + float3 InstanceTransform3 : ATTRIBUTE3; + half4 InstanceLightmapArea : ATTRIBUTE4; +#endif +}; + +struct ModelInput_PosOnly +{ + float3 Position : POSITION; + +#if USE_INSTANCING + float4 InstanceOrigin : ATTRIBUTE0; // .w contains PerInstanceRandom + float4 InstanceTransform1 : ATTRIBUTE1; // .w contains LODDitherFactor + float3 InstanceTransform2 : ATTRIBUTE2; + float3 InstanceTransform3 : ATTRIBUTE3; + half4 InstanceLightmapArea : ATTRIBUTE4; +#endif +}; + +struct ModelInput_Skinned +{ + float3 Position : POSITION; + float2 TexCoord : TEXCOORD0; + float4 Normal : NORMAL; + float4 Tangent : TANGENT; + uint4 BlendIndices : BLENDINDICES; + float4 BlendWeights : BLENDWEIGHT; + +#if USE_INSTANCING + float4 InstanceOrigin : ATTRIBUTE0; // .w contains PerInstanceRandom + float4 InstanceTransform1 : ATTRIBUTE1; // .w contains LODDitherFactor + float3 InstanceTransform2 : ATTRIBUTE2; + float3 InstanceTransform3 : ATTRIBUTE3; + half4 InstanceLightmapArea : ATTRIBUTE4; +#endif +}; + +struct Model_VS2PS +{ + float4 Position : SV_Position; + float4 ScreenPos : TEXCOORD0; +}; + +struct GBufferOutput +{ + float4 Light : SV_Target0; + float4 RT0 : SV_Target1; + float4 RT1 : SV_Target2; + float4 RT2 : SV_Target3; + float4 RT3 : SV_Target4; +}; + +float3x3 CalcTangentBasisFromWorldNormal(float3 normal) +{ + float3 tangent = cross(normal, float3(1, 0, 0)); + float3 bitangent = cross(normal, tangent); + return float3x3(tangent, bitangent, normal); +} + +// [Jimenez et al. 2016, "Practical Realtime Strategies for Accurate Indirect Occlusion"] +float3 AOMultiBounce(float visibility, float3 albedo) +{ + float3 a = 2.0404 * albedo - 0.3324; + float3 b = -4.7951 * albedo + 0.6417; + float3 c = 2.7552 * albedo + 0.6903; + return max(visibility, ((visibility * a + b) * visibility + c) * visibility); +} + +#if CAN_USE_LIGHTMAP + +// Evaluates the H-Basis coefficients in the tangent space normal direction +float3 GetHBasisIrradiance(in float3 n, in float3 h0, in float3 h1, in float3 h2, in float3 h3) +{ + float3 color = 0.0f; + + // Band 0 + color += h0 * (1.0f / sqrt(2.0f * PI)); + + // Band 1 + color += h1 * -sqrt(1.5f / PI) * n.y; + color += h2 * sqrt(1.5f / PI) * (2 * n.z - 1.0f); + color += h3 * -sqrt(1.5f / PI) * n.x; + + return color; +} + +#endif + +#endif diff --git a/Source/Shaders/Math.hlsl b/Source/Shaders/Math.hlsl new file mode 100644 index 000000000..1287cc4af --- /dev/null +++ b/Source/Shaders/Math.hlsl @@ -0,0 +1,240 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __MATH__ +#define __MATH__ + +uint NextPow2(uint value) +{ + uint mask = (1 << firstbithigh(value)) - 1; + return (value + mask) & ~mask; +} + +float3 SafeNormalize(float3 v) +{ + return v / sqrt(max(dot(v, v), 0.01)); +} + +float3 ExtractLargestComponent(float3 v) +{ + float3 a = abs(v); + + if (a.x > a.y) + { + if (a.x > a.z) + { + return float3(v.x > 0 ? 1 : -1, 0, 0); + } + } + else + { + if (a.y > a.z) + { + return float3(0, v.y > 0 ? 1 : -1, 0); + } + } + + return float3(0, 0, v.z > 0 ? 1 : -1); +} + +float Square(float x) +{ + return x*x; +} + +float2 Square(float2 x) +{ + return x*x; +} + +float3 Square(float3 x) +{ + return x*x; +} + +float4 Square(float4 x) +{ + return x*x; +} + +float Pow2(float x) +{ + return x*x; +} + +float2 Pow2(float2 x) +{ + return x*x; +} + +float3 Pow2(float3 x) +{ + return x*x; +} + +float4 Pow2(float4 x) +{ + return x*x; +} + +float Pow3(float x) +{ + return x*x*x; +} + +float2 Pow3(float2 x) +{ + return x*x*x; +} + +float3 Pow3(float3 x) +{ + return x*x*x; +} + +float4 Pow3(float4 x) +{ + return x*x*x; +} + +float Pow4(float x) +{ + float xx = x*x; + return xx * xx; +} + +float2 Pow4(float2 x) +{ + float2 xx = x*x; + return xx * xx; +} + +float3 Pow4(float3 x) +{ + float3 xx = x*x; + return xx * xx; +} + +float4 Pow4(float4 x) +{ + float4 xx = x*x; + return xx * xx; +} + +float Pow5(float x) +{ + float xx = x*x; + return xx * xx * x; +} + +float2 Pow5(float2 x) +{ + float2 xx = x*x; + return xx * xx * x; +} + +float3 Pow5(float3 x) +{ + float3 xx = x*x; + return xx * xx * x; +} + +float4 Pow5(float4 x) +{ + float4 xx = x*x; + return xx * xx * x; +} + +float Pow6(float x) +{ + float xx = x*x; + return xx * xx * xx; +} + +float2 Pow6(float2 x) +{ + float2 xx = x*x; + return xx * xx * xx; +} + +float3 Pow6(float3 x) +{ + float3 xx = x*x; + return xx * xx * xx; +} + +float4 Pow6(float4 x) +{ + float4 xx = x*x; + return xx * xx * xx; +} + +float ClampedPow(float x,float y) +{ + return pow(max(abs(x), 0.000001f),y); +} + +float2 ClampedPow(float2 x,float2 y) +{ + return pow(max(abs(x), float2(0.000001f, 0.000001f)), y); +} + +float3 ClampedPow(float3 x,float3 y) +{ + return pow(max(abs(x), float3(0.000001f, 0.000001f, 0.000001f)), y); +} + +float4 ClampedPow(float4 x,float4 y) +{ + return pow(max(abs(x), float4(0.000001f, 0.000001f, 0.000001f, 0.000001f)), y); +} + +float4 FindQuatBetween(float3 from, float3 to) +{ + float normAB = 1.0f; + float w = normAB + dot(from, to); + float4 result; + + if (w >= 1e-6f * normAB) + { + result = float4 + ( + from.y * to.z - from.z * to.y, + from.z * to.x - from.x * to.z, + from.x * to.y - from.y * to.x, + w + ); + } + else + { + w = 0.f; + result = abs(from.x) > abs(from.y) + ? float4(-from.z, 0.f, from.x, w) + : float4(0.f, -from.z, from.y, w); + } + + return normalize(result); +} + +// Rotates Position about the given axis by the given angle, in radians, and returns the offset to position +float3 RotateAboutAxis(float4 normalizedRotationAxisAndAngle, float3 positionOnAxis, float3 position) +{ + // Project position onto the rotation axis and find the closest point on the axis to Position + float3 closestPointOnAxis = positionOnAxis + normalizedRotationAxisAndAngle.xyz * dot(normalizedRotationAxisAndAngle.xyz, position - positionOnAxis); + + // Construct orthogonal axes in the plane of the rotation + float3 axisU = position - closestPointOnAxis; + float3 axisV = cross(normalizedRotationAxisAndAngle.xyz, axisU); + float cosAngle, sinAngle; + sincos(normalizedRotationAxisAndAngle.w, sinAngle, cosAngle); + + // Rotate using the orthogonal axes + float3 rotation = axisU * cosAngle + axisV * sinAngle; + + // Reconstruct the rotated world space position + float3 rotatedPosition = closestPointOnAxis + rotation; + + // Convert from position to a position offset + return rotatedPosition - position; +} + +#endif diff --git a/Source/Shaders/Matrix.hlsl b/Source/Shaders/Matrix.hlsl new file mode 100644 index 000000000..e71e1770a --- /dev/null +++ b/Source/Shaders/Matrix.hlsl @@ -0,0 +1,74 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __MATRIX__ +#define __MATRIX__ + +#define MATRIX_IDENTITY float4x4(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1) + +float4x4 Inverse(float4x4 m) +{ + float n11 = m[0][0], n12 = m[1][0], n13 = m[2][0], n14 = m[3][0]; + float n21 = m[0][1], n22 = m[1][1], n23 = m[2][1], n24 = m[3][1]; + float n31 = m[0][2], n32 = m[1][2], n33 = m[2][2], n34 = m[3][2]; + float n41 = m[0][3], n42 = m[1][3], n43 = m[2][3], n44 = m[3][3]; + + float t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44; + float t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44; + float t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44; + float t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34; + + float det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14; + float idet = 1.0f / det; + + float4x4 result; + + result[0][0] = t11 * idet; + result[0][1] = (n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44) * idet; + result[0][2] = (n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44) * idet; + result[0][3] = (n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43) * idet; + + result[1][0] = t12 * idet; + result[1][1] = (n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44) * idet; + result[1][2] = (n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44) * idet; + result[1][3] = (n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43) * idet; + + result[2][0] = t13 * idet; + result[2][1] = (n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44) * idet; + result[2][2] = (n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44) * idet; + result[2][3] = (n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43) * idet; + + result[3][0] = t14 * idet; + result[3][1] = (n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34) * idet; + result[3][2] = (n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34) * idet; + result[3][3] = (n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33) * idet; + + return result; +} + +float3x3 EulerMatrix(float3 angles) +{ + float3 s, c; + sincos(angles, s, c); + return float3x3(c.y * c.z + s.x * s.y * s.z, c.z * s.x * s.y - c.y * s.z, c.x * s.y, + c.x * s.z, c.x * c.z, -s.x, + -c.z * s.y + c.y * s.x * s.z, c.y * c.z * s.x + s.y * s.z, c.x * c.y); +} + +float4x4 QuaternionToMatrix(float4 q) +{ + float x2 = q.x + q.x; float y2 = q.y + q.y; float z2 = q.z + q.z; + float xx = q.x * x2; float xy = q.x * y2; float xz = q.x * z2; + float yy = q.y * y2; float yz = q.y * z2; float zz = q.z * z2; + float wx = q.w * x2; float wy = q.w * y2; float wz = q.w * z2; + + float4x4 result = + { + 1.0f - (yy + zz), xy - wz, xz + wy, 0.0f, + xy + wz, 1.0f - (xx + zz), yz - wx, 0.0f, + xz - wy, yz + wx, 1.0f - (xx + yy), 0.0f, + 0.0f, 0.0f, 0.0f, 1.0f + }; + return result; +} + +#endif diff --git a/Source/Shaders/MonteCarlo.hlsl b/Source/Shaders/MonteCarlo.hlsl new file mode 100644 index 000000000..1faf7742b --- /dev/null +++ b/Source/Shaders/MonteCarlo.hlsl @@ -0,0 +1,143 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __MONTE_CARLO__ +#define __MONTE_CARLO__ + +float3 TangentToWorld(float3 vec, float3 tangentZ) +{ + float3 upVector = abs(tangentZ.z) < 0.999 ? float3(0,0,1) : float3(1,0,0); + float3 tangentX = normalize(cross(upVector, tangentZ)); + float3 tangentY = cross(tangentZ, tangentX); + return tangentX * vec.x + tangentY * vec.y + tangentZ * vec.z; +} + +uint ReverseBits32(uint bits) +{ +#if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 + return reversebits(bits); +#else + bits = ( bits << 16) | ( bits >> 16); + bits = ( (bits & 0x00ff00ff) << 8 ) | ( (bits & 0xff00ff00) >> 8 ); + bits = ( (bits & 0x0f0f0f0f) << 4 ) | ( (bits & 0xf0f0f0f0) >> 4 ); + bits = ( (bits & 0x33333333) << 2 ) | ( (bits & 0xcccccccc) >> 2 ); + bits = ( (bits & 0x55555555) << 1 ) | ( (bits & 0xaaaaaaaa) >> 1 ); + return bits; +#endif +} + +float2 Hammersley(uint index, uint numSamples, uint2 random) +{ + float e1 = frac((float)index / numSamples + float(random.x & 0xffff) / (1 << 16)); + float e2 = float(ReverseBits32(index) ^ random.y) * 2.3283064365386963e-10; + return float2(e1, e2); +} + +float4 UniformSampleSphere(float2 e) +{ + float phi = 2 * PI * e.x; + float cosTheta = 1 - 2 * e.y; + float sinTheta = sqrt(1 - cosTheta * cosTheta); + + float3 h; + h.x = sinTheta * cos(phi); + h.y = sinTheta * sin(phi); + h.z = cosTheta; + + float pdf = 1.0 / (4 * PI); + return float4(h, pdf); +} + +float4 UniformSampleHemisphere(float2 e) +{ + float phi = 2 * PI * e.x; + float cosTheta = e.y; + float sinTheta = sqrt(1 - cosTheta * cosTheta); + + float3 h; + h.x = sinTheta * cos(phi); + h.y = sinTheta * sin(phi); + h.z = cosTheta; + + float pdf = 1.0 / (2 * PI); + return float4(h, pdf); +} + +float4 CosineSampleHemisphere(float2 e) +{ + float phi = 2 * PI * e.x; + float cosTheta = sqrt(e.y); + float sinTheta = sqrt(1 - cosTheta * cosTheta); + + float3 h; + h.x = sinTheta * cos(phi); + h.y = sinTheta * sin(phi); + h.z = cosTheta; + + float pdf = cosTheta / PI; + return float4(h, pdf); +} + +float4 UniformSampleCone(float2 e, float cosThetaMax) +{ + float phi = 2 * PI * e.x; + float cosTheta = lerp(cosThetaMax, 1, e.y); + float sinTheta = sqrt(1 - cosTheta * cosTheta); + + float3 l; + l.x = sinTheta * cos(phi); + l.y = sinTheta * sin(phi); + l.z = cosTheta; + + float pdf = 1.0 / (2 * PI * (1 - cosThetaMax)); + return float4(l, pdf); +} + +float4 ImportanceSampleBlinn(float2 e, float roughness) +{ + float m = roughness * roughness; + float n = 2 / (m * m) - 2; + + float phi = 2 * PI * e.x; + float cosTheta = ClampedPow(e.y, 1 / (n + 1)); + float sinTheta = sqrt(1 - cosTheta * cosTheta); + + float3 h; + h.x = sinTheta * cos(phi); + h.y = sinTheta * sin(phi); + h.z = cosTheta; + + float d = (n + 2)/ (2 * PI) * ClampedPow(cosTheta, n); + float pdf = d * cosTheta; + return float4(h, pdf); +} + +float4 ImportanceSampleGGX(float2 e, float roughness) +{ + float m = roughness * roughness; + float m2 = m * m; + + float phi = 2 * PI * e.x; + float cosTheta = sqrt((1 - e.y) / (1 + (m2 - 1) * e.y)); + float sinTheta = sqrt(1 - cosTheta * cosTheta); + + float3 h; + h.x = sinTheta * cos(phi); + h.y = sinTheta * sin(phi); + h.z = cosTheta; + + float r = (cosTheta * m2 - cosTheta) * cosTheta + 1; + float d = m2 / (PI * r * r); + float pdf = d * cosTheta; + return float4(h, pdf); +} + +// Multiple importance sampling power heuristic of two functions with a power of two. +// [Veach 1997, "Robust Monte Carlo Methods for Light Transport Simulation"] +float MISWeight(uint number, float pdf, uint otherNumber, float otherpdf) +{ + float weight = number * pdf; + float otherWeight = otherNumber * otherpdf; + return weight * weight / (weight * weight + otherWeight * otherWeight); +} + +#endif diff --git a/Source/Shaders/MotionBlur.shader b/Source/Shaders/MotionBlur.shader new file mode 100644 index 000000000..ef37cb15d --- /dev/null +++ b/Source/Shaders/MotionBlur.shader @@ -0,0 +1,430 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define NO_GBUFFER_SAMPLING + +#include "./Flax/Common.hlsl" +#include "./Flax/GBuffer.hlsl" + +META_CB_BEGIN(0, Data) + +GBufferData GBuffer; + +// Camera Motion Vectors +float4x4 CurrentVP; +float4x4 PreviousVP; +float4 TemporalAAJitter; + +// Motion Blur +float2 TileMaxOffs; +float VelocityScale; +int TileMaxLoop; +float MaxBlurRadius; +float RcpMaxBlurRadius; +float2 TexelSize1; +float2 TexelSize2; +float2 TexelSize4; +float2 TexelSizeV; +float2 TexelSizeNM; +float LoopCount; +float Dummy0; +float2 MotionVectorsTexelSize; + +// Motion Vectors Debug Parameters +float DebugBlend; +float DebugAmplitude; +int DebugColumnCount; +int DebugRowCount; + +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +Texture2D Input0 : register(t0); +Texture2D Input1 : register(t1); +Texture2D Input2 : register(t2); + +// Converts a motion vector into RGBA color. +float4 VectorToColor(float2 mv) +{ + float phi = atan2(mv.x, mv.y); + float hue = (phi / PI + 1) * 0.5; + + float r = abs(hue * 6 - 3) - 1; + float g = 2 - abs(hue * 6 - 2); + float b = 2 - abs(hue * 6 - 4); + float a = length(mv); + + return saturate(float4(r, g, b, a)); +} + +// Pixel shader for motion vectors debug view +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_MotionVectorsDebug(Quad_VS2PS input) : SV_Target +{ + float4 src = SAMPLE_RT(Input0, input.TexCoord); + + float2 mv = SAMPLE_RT(Input1, input.TexCoord).rg * (DebugAmplitude * 5.0f); + float4 mc = VectorToColor(mv); + + float3 rgb = mc.rgb; + + float src_ratio = saturate(2 - DebugBlend * 2); + float mc_ratio = saturate(DebugBlend * 2); + rgb = lerp(src.rgb * src_ratio, rgb, mc.a * mc_ratio); + + return float4(rgb, src.a); +} + +// Motion vector arrow data from VS to PS +struct ArrowVaryings +{ + float4 Position : SV_POSITION; + float2 ScreenUV : TEXCOORD; + float4 Color : COLOR; +}; + +META_VS(true, FEATURE_LEVEL_ES2) +ArrowVaryings VS_DebugArrow(uint VertexId : SV_VertexID) +{ + // Screen aspect ratio + float aspect = GBuffer.ScreenSize.x * GBuffer.ScreenSize.w; + float inv_aspect = GBuffer.ScreenSize.y * GBuffer.ScreenSize.z; + + // Vertex IDs + uint arrow_id = VertexId / 6; + uint point_id = VertexId - arrow_id * 6; + + // Column/Row number of the arrow + uint row = arrow_id / DebugColumnCount; + uint col = arrow_id - row * DebugColumnCount; + + // Texture coordinate of the reference point + float2 uv = float2((col + 0.5) / DebugColumnCount, (row + 0.5) / DebugRowCount); + + // Retrieve the motion vector + float2 mv = SAMPLE_RT(Input1, uv).rg * DebugAmplitude; + + // Arrow color + float4 color = VectorToColor(mv); + + // Arrow vertex position parameter (0 = origin, 1 = head) + float arrow_l = point_id > 0; + + // Rotation matrix for the arrow head + float2 head_dir = normalize(mv * float2(aspect, 1)); + float2x2 head_rot = float2x2(head_dir.y, head_dir.x, -head_dir.x, head_dir.y); + + // Offset for arrow head vertices + float head_x = point_id == 3 ? -1 : (point_id == 5 ? 1 : 0); + head_x *= arrow_l * 0.3 * saturate(length(mv) * DebugRowCount); + + float2 head_offs = float2(head_x, -abs(head_x)); + head_offs = mul(head_rot, head_offs) * float2(inv_aspect, 1); + + // Vertex position in the clip space + float2 vp = mv * arrow_l + head_offs * 2 / DebugRowCount + uv * 2 - 1; + + // Convert to the screen coordinates + float2 scoord = (vp + 1) * 0.5 * GBuffer.ScreenSize.xy; + + // Snap to a pixel-perfect position. + scoord = round(scoord); + + // Bring back to the clip space + vp = (scoord + 0.5) * GBuffer.ScreenSize.zw * 2 - 1; + vp.y *= -1; + + // Color tweaks + color.rgb = lerp(color.rgb, 1, 0.5); + color.a = DebugBlend; + + // Output + ArrowVaryings output; + output.Position = float4(vp, 0, 1); + output.ScreenUV = scoord; + output.Color = color; + return output; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_DebugArrow(ArrowVaryings input) : SV_Target +{ + // Pseudo anti-aliasing + float aa = length(frac(input.ScreenUV) - 0.5) / 0.707; + aa *= (aa * (aa * 0.305306011 + 0.682171111) + 0.012522878); // gamma + return float4(input.Color.rgb, input.Color.a * aa); +} + +// Pixel shader for camera motion vectors +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CameraMotionVectors(Quad_VS2PS input) : SV_Target +{ + // Get the pixel world space position + float deviceDepth = SAMPLE_RT(Input0, input.TexCoord).r; + GBufferData gBufferData = GetGBufferData(); + float4 worldPos = float4(GetWorldPos(gBufferData, input.TexCoord, deviceDepth), 1); + + float4 prevClipPos = mul(worldPos, PreviousVP); + float4 curClipPos = mul(worldPos, CurrentVP); + float2 prevHPos = prevClipPos.xy / prevClipPos.w; + float2 curHPos = curClipPos.xy / curClipPos.w; + + // Revert temporal jitter offset + prevHPos -= TemporalAAJitter.zw; + curHPos -= TemporalAAJitter.xy; + + // Clip Space -> UV Space + float2 vPosPrev = prevHPos.xy * 0.5f + 0.5f; + float2 vPosCur = curHPos.xy * 0.5f + 0.5f; + vPosPrev.y = 1.0 - vPosPrev.y; + vPosCur.y = 1.0 - vPosCur.y; + + return float4(vPosCur - vPosPrev, 0, 1); +} + +// Pixel Shader for velocity texture setup +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_VelocitySetup(Quad_VS2PS input) : SV_Target +{ + // Sample the motion vector + float2 v = SAMPLE_RT(Input0, input.TexCoord).rg; + + // Apply the exposure time and convert to the pixel space + v *= (VelocityScale * 0.5) * GBuffer.ScreenSize.xy; + + // Clamp the vector with the maximum blur radius + v /= max(1.0, length(v) * RcpMaxBlurRadius); + + // Sample the depth of the pixel + float depth = SAMPLE_RT(Input1, input.TexCoord).r; + GBufferData gBufferData = GetGBufferData(); + depth = LinearizeZ(gBufferData, depth); + + // Pack into 10/10/10/2 format + return float4((v * RcpMaxBlurRadius + 1.0) * 0.5, depth, 0.0); +} + +float2 MaxV(float2 v1, float2 v2) +{ + return dot(v1, v1) < dot(v2, v2) ? v2 : v1; +} + +// Pixel Shader for TileMax filter (2 pixel width with normalization) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_TileMax1(Quad_VS2PS input) : SV_Target +{ + float4 d = TexelSize1.xyxy * float4(-0.5, -0.5, 0.5, 0.5); + + float2 v1 = SAMPLE_RT(Input0, input.TexCoord + d.xy).rg; + float2 v2 = SAMPLE_RT(Input0, input.TexCoord + d.zy).rg; + float2 v3 = SAMPLE_RT(Input0, input.TexCoord + d.xw).rg; + float2 v4 = SAMPLE_RT(Input0, input.TexCoord + d.zw).rg; + + v1 = (v1 * 2.0 - 1.0) * MaxBlurRadius; + v2 = (v2 * 2.0 - 1.0) * MaxBlurRadius; + v3 = (v3 * 2.0 - 1.0) * MaxBlurRadius; + v4 = (v4 * 2.0 - 1.0) * MaxBlurRadius; + + return float4(MaxV(MaxV(MaxV(v1, v2), v3), v4), 0.0, 0.0); +} + +// Pixel Shader for TileMax filter (2 pixel width) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_TileMax2(Quad_VS2PS input) : SV_Target +{ + float4 d = TexelSize2.xyxy * float4(-0.5, -0.5, 0.5, 0.5); + + float2 v1 = SAMPLE_RT(Input0, input.TexCoord + d.xy).rg; + float2 v2 = SAMPLE_RT(Input0, input.TexCoord + d.zy).rg; + float2 v3 = SAMPLE_RT(Input0, input.TexCoord + d.xw).rg; + float2 v4 = SAMPLE_RT(Input0, input.TexCoord + d.zw).rg; + + return float4(MaxV(MaxV(MaxV(v1, v2), v3), v4), 0.0, 0.0); +} + +// Pixel Shader for TileMax filter (2 pixel width) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_TileMax4(Quad_VS2PS input) : SV_Target +{ + float4 d = TexelSize4.xyxy * float4(-0.5, -0.5, 0.5, 0.5); + + float2 v1 = SAMPLE_RT(Input0, input.TexCoord + d.xy).rg; + float2 v2 = SAMPLE_RT(Input0, input.TexCoord + d.zy).rg; + float2 v3 = SAMPLE_RT(Input0, input.TexCoord + d.xw).rg; + float2 v4 = SAMPLE_RT(Input0, input.TexCoord + d.zw).rg; + + return float4(MaxV(MaxV(MaxV(v1, v2), v3), v4), 0.0, 0.0); +} + +// Pixel Shader for TileMax filter (variable width) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_TileMaxV(Quad_VS2PS input) : SV_Target +{ + float2 uv0 = input.TexCoord + TexelSizeV.xy * TileMaxOffs.xy; + + float2 du = float2(TexelSizeV.x, 0.0); + float2 dv = float2(0.0, TexelSizeV.y); + + float2 vo = 0.0; + + LOOP + for (int x = 0; x < TileMaxLoop; x++) + { + LOOP + for (int y = 0; y < TileMaxLoop; y++) + { + float2 uv = uv0 + du * x + dv * y; + vo = MaxV(vo, SAMPLE_RT(Input0, uv).rg); + } + } + + return float4(vo, 0.0, 0.0); +} + +// Pixel Shader for NeighborMax filter +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_NeighborMax(Quad_VS2PS input) : SV_Target +{ + // Center weight tweak + const float cw = 1.01; + + float4 d = TexelSizeNM.xyxy * float4(1.0, 1.0, -1.0, 0.0); + + float2 v1 = SAMPLE_RT(Input0, input.TexCoord - d.xy).rg; + float2 v2 = SAMPLE_RT(Input0, input.TexCoord - d.wy).rg; + float2 v3 = SAMPLE_RT(Input0, input.TexCoord - d.zy).rg; + + float2 v4 = SAMPLE_RT(Input0, input.TexCoord - d.xw).rg; + float2 v5 = SAMPLE_RT(Input0, input.TexCoord).rg * cw; + float2 v6 = SAMPLE_RT(Input0, input.TexCoord + d.xw).rg; + + float2 v7 = SAMPLE_RT(Input0, input.TexCoord + d.zy).rg; + float2 v8 = SAMPLE_RT(Input0, input.TexCoord + d.wy).rg; + float2 v9 = SAMPLE_RT(Input0, input.TexCoord + d.xy).rg; + + float2 va = MaxV(v1, MaxV(v2, v3)); + float2 vb = MaxV(v4, MaxV(v5, v6)); + float2 vc = MaxV(v7, MaxV(v8, v9)); + + return float4(MaxV(va, MaxV(vb, vc)) * (1.0 / cw), 0.0, 0.0); +} + +// Interleaved gradient function from Jimenez 2014 +// http://www.iryoku.com/next-generation-post-processing-in-call-of-duty-advanced-warfare +float GradientNoise(float2 uv) +{ + uv = floor(uv * GBuffer.ScreenSize.xy); + float f = dot(float2(0.06711056, 0.00583715), uv); + return frac(52.9829189 * frac(f)); +} + +// Returns true or false with a given interval +bool Interval(float phase, float interval) +{ + return frac(phase / interval) > 0.499; +} + +// Jitter function for tile lookup +float2 JitterTile(float2 uv) +{ + float rx, ry; + sincos(GradientNoise(uv + float2(2.0, 0.0)) * (2.0f * PI), ry, rx); + return float2(rx, ry) * TexelSizeNM.xy * 0.25; +} + +// Velocity sampling function +float3 SampleVelocity(float2 uv) +{ + float3 v = SAMPLE_RT(Input1, uv).xyz; + return float3((v.xy * 2.0 - 1.0) * MaxBlurRadius, v.z); +} + +// Pixel Shader for reconstruction filter (applies the motion blur to the frame) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Reconstruction(Quad_VS2PS input) : SV_Target +{ + // Color sample at the center point + const float4 c_p = SAMPLE_RT(Input0, input.TexCoord); + + // Velocity/Depth sample at the center point + const float3 vd_p = SampleVelocity(input.TexCoord); + const float l_v_p = max(length(vd_p.xy), 0.5); + const float rcp_d_p = 1.0 / vd_p.z; + + // NeighborMax vector sample at the center point + const float2 v_max = SAMPLE_RT(Input2, input.TexCoord + JitterTile(input.TexCoord)).xy; + const float l_v_max = length(v_max); + const float rcp_l_v_max = 1.0 / l_v_max; + + // Escape early if the NeighborMax vector is small enough + if (l_v_max < 2.0) + return c_p; + + // Use V_p as a secondary sampling direction except when it's too small + // compared to V_max. This vector is rescaled to be the length of V_max. + const float2 v_alt = (l_v_p * 2.0 > l_v_max) ? vd_p.xy * (l_v_max / l_v_p) : v_max; + + // Determine the sample count. + const float sc = floor(min(LoopCount, l_v_max * 0.5)); + + // Loop variables (starts from the outermost sample) + const float dt = 1.0 / sc; + const float t_offs = (GradientNoise(input.TexCoord) - 0.5) * dt; + float t = 1.0 - dt * 0.5; + float count = 0.0; + + // Background velocity + // This is used for tracking the maximum velocity in the background layer + float l_v_bg = max(l_v_p, 1.0); + + // Color accumlation + float4 acc = 0.0; + LOOP + while (t > dt * 0.25) + { + // Sampling direction (switched per every two samples) + const float2 v_s = Interval(count, 4.0) ? v_alt : v_max; + + // Sample position (inverted per every sample) + const float t_s = (Interval(count, 2.0) ? -t : t) + t_offs; + + // Distance to the sample position + const float l_t = l_v_max * abs(t_s); + + // UVs for the sample position + const float2 uv0 = input.TexCoord + v_s * t_s * GBuffer.ScreenSize.zw; + //const float2 uv1 = input.TexCoord + v_s * t_s * MotionVectorsTexelSize.xy; + const float2 uv1 = uv0; + + // Color sample + const float3 c = SAMPLE_RT(Input0, uv0).rgb; + + // Velocity/Depth sample + const float3 vd = SampleVelocity(uv1); + + // Background/Foreground separation + const float fg = saturate((vd_p.z - vd.z) * 20.0 * rcp_d_p); + + // Length of the velocity vector + const float l_v = lerp(l_v_bg, length(vd.xy), fg); + + // Sample weight + // (Distance test) * (Spreading out by motion) * (Triangular window) + const float w = saturate(l_v - l_t) / l_v * (1.2 - t); + + // Color accumulation + acc += float4(c, 1.0) * w; + + // Update the background velocity. + l_v_bg = max(l_v_bg, l_v); + + // Advance to the next sample. + t = Interval(count, 2.0) ? t - dt : t; + count += 1.0; + } + + // Add the center sample + acc += float4(c_p.rgb, 1.0) * (1.2 / (l_v_bg * sc * 2.0)); + + return float4(acc.rgb / acc.a, c_p.a); +} diff --git a/Source/Shaders/MultiScaler.shader b/Source/Shaders/MultiScaler.shader new file mode 100644 index 000000000..254a8adf3 --- /dev/null +++ b/Source/Shaders/MultiScaler.shader @@ -0,0 +1,140 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +META_CB_BEGIN(0, Data) + +float2 TexelSize; +float2 Padding; + +META_CB_END + +// Use linear sampling (less texture fetches required) +#define SAMPLE(rt, texCoord) SAMPLE_RT_LINEAR(rt, texCoord) + +Texture2D Input : register(t0); + +// Pixel Shader for depth buffer downscale (to half res) +META_PS(true, FEATURE_LEVEL_ES2) +float PS_HalfDepth(Quad_VS2PS input) : SV_Depth +{ +#if CAN_USE_GATHER + float4 depths = Input.GatherRed(SamplerPointClamp, input.TexCoord); +#else + float4 depths; + depths.x = Input.SampleLevel(SamplerPointClamp, input.TexCoord + float2(0, 1) * TexelSize, 0).r; + depths.y = Input.SampleLevel(SamplerPointClamp, input.TexCoord + float2(1, 1) * TexelSize, 0).r; + depths.z = Input.SampleLevel(SamplerPointClamp, input.TexCoord + float2(1, 0) * TexelSize, 0).r; + depths.w = Input.SampleLevel(SamplerPointClamp, input.TexCoord + float2(0, 0) * TexelSize, 0).r; +#endif + + return max(depths.x, max(depths.y, max(depths.z, depths.w))) + 0.0001f; +} + +// Pixel Shader for 5-tap gaussian blur +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(CONVOLVE_VERTICAL=0) +META_PERMUTATION_1(CONVOLVE_VERTICAL=1) +float4 PS_Blur5(Quad_VS2PS input) : SV_Target0 +{ + const float offsets[2] = { + 0.00000000, + 1.33333333 + }; + const float weights[2] = { + 0.29411765, + 0.35294118 + }; + + float4 color = SAMPLE(Input, input.TexCoord) * weights[0]; + + UNROLL + for (int i = 1; i < 2; i++) + { +#if CONVOLVE_VERTICAL + float2 texCoordOffset = float2(offsets[i], 0) * TexelSize; +#else + float2 texCoordOffset = float2(0, offsets[i]) * TexelSize; +#endif + + color += (SAMPLE(Input, input.TexCoord + texCoordOffset) + + SAMPLE(Input, input.TexCoord - texCoordOffset)) + * weights[i]; + } + + return color; +} + +// Pixel Shader for 9-tap Gaussian blur +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(CONVOLVE_VERTICAL=0) +META_PERMUTATION_1(CONVOLVE_VERTICAL=1) +float4 PS_Blur9(Quad_VS2PS input) : SV_Target0 +{ + const float offsets[3] = { + 0.00000000, + 1.38461538, + 3.23076923 + }; + const float weights[3] = { + 0.22702703, + 0.31621622, + 0.07027027 + }; + + float4 color = SAMPLE(Input, input.TexCoord) * weights[0]; + + UNROLL + for (int i = 1; i < 3; i++) + { +#if CONVOLVE_VERTICAL + float2 texCoordOffset = float2(offsets[i], 0) * TexelSize; +#else + float2 texCoordOffset = float2(0, offsets[i]) * TexelSize; +#endif + + color += (SAMPLE(Input, input.TexCoord + texCoordOffset) + + SAMPLE(Input, input.TexCoord - texCoordOffset)) + * weights[i]; + } + + return color; +} + +// Pixel Shader for 13-tap gaussian blur +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(CONVOLVE_VERTICAL=0) +META_PERMUTATION_1(CONVOLVE_VERTICAL=1) +float4 PS_Blur13(Quad_VS2PS input) : SV_Target0 +{ + const float offsets[4] = { + 0.00000000, + 1.41176471, + 3.29411765, + 5.17647059 + }; + const float weights[4] = { + 0.19648255, + 0.29690696, + 0.09447040, + 0.01038136 + }; + + float4 color = SAMPLE(Input, input.TexCoord) * weights[0]; + + UNROLL + for (int i = 1; i < 4; i++) + { +#if CONVOLVE_VERTICAL + float2 texCoordOffset = float2(offsets[i], 0) * TexelSize; +#else + float2 texCoordOffset = float2(0, offsets[i]) * TexelSize; +#endif + + color += (SAMPLE(Input, input.TexCoord + texCoordOffset) + + SAMPLE(Input, input.TexCoord - texCoordOffset)) + * weights[i]; + } + + return color; +} diff --git a/Source/Shaders/PCFKernels.hlsl b/Source/Shaders/PCFKernels.hlsl new file mode 100644 index 000000000..02e97b43a --- /dev/null +++ b/Source/Shaders/PCFKernels.hlsl @@ -0,0 +1,135 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __PCF_KERNELS__ +#define __PCF_KERNELS__ + +// Cascades Shadow Mapping + +#if FilterSizeCSM == 2 + +#elif FilterSizeCSM == 3 + +static const float CSMFilterWeightsSum = 7; +static const float CSMFilterWeights[3][3] = +{ + { 0.5,1.0,0.5 }, + { 1.0,1.0,1.0 }, + { 0.5,1.0,0.5 } +}; + +#elif FilterSizeCSM == 5 + +static const float CSMFilterWeightsSum = 17; +static const float CSMFilterWeights[5][5] = +{ + { 0.0,0.5,1.0,0.5,0.0 }, + { 0.5,1.0,1.0,1.0,0.5 }, + { 1.0,1.0,1.0,1.0,1.0 }, + { 0.5,1.0,1.0,1.0,0.5 }, + { 0.0,0.5,1.0,0.5,0.0 } +}; + +#elif FilterSizeCSM == 7 + +static const float CSMFilterWeightsSum = 33; +static const float CSMFilterWeights[7][7] = +{ + { 0.0,0.0,0.5,1.0,0.5,0.0,0.0 }, + { 0.0,1.0,1.0,1.0,1.0,1.0,0.0 }, + { 0.5,1.0,1.0,1.0,1.0,1.0,0.5 }, + { 1.0,1.0,1.0,1.0,1.0,1.0,1.0 }, + { 0.5,1.0,1.0,1.0,1.0,1.0,0.5 }, + { 0.0,1.0,1.0,1.0,1.0,1.0,0.0 }, + { 0.0,0.0,0.5,1.0,0.5,0.0,0.0 } +}; + +#elif FilterSizeCSM == 9 + +static const float CSMFilterWeightsSum = 53; +static const float CSMFilterWeights[9][9] = +{ + { 0.0,0.0,0.0,0.5,1.0,0.5,0.0,0.0,0.0 }, + { 0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0 }, + { 0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0 }, + { 0.5,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.5 }, + { 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0 }, + { 0.5,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.5 }, + { 0.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,0.0 }, + { 0.0,0.0,1.0,1.0,1.0,1.0,1.0,0.0,0.0 }, + { 0.0,0.0,0.0,0.5,1.0,0.5,0.0,0.0,0.0 } +}; + +#endif + +// Cube Map Shadows + +#if FilterSizeCube == 5 + +// 5 random points in disc with radius 2.5 +static const float2 PCFDiscSamples[5] = +{ + float2(0.000000, 2.500000), + float2(2.377641, 0.772542), + float2(1.469463, -2.022543), + float2(-1.469463, -2.022542), + float2(-2.377641, 0.772543), +}; + +#elif FilterSizeCube == 12 + +// 12 random points in disc with radius 2.5 +static const float2 PCFDiscSamples[12] = +{ + float2(0.000000, 2.500000), + float2(1.767767, 1.767767), + float2(2.500000, -0.000000), + float2(1.767767, -1.767767), + float2(-0.000000, -2.500000), + float2(-1.767767, -1.767767), + float2(-2.500000, 0.000000), + float2(-1.767766, 1.767768), + float2(-1.006119, -0.396207), + float2(1.000015, 0.427335), + float2(0.416807, -1.006577), + float2(-0.408872, 1.024430), +}; + +#elif FilterSizeCube == 29 + +// 29 random points in disc with radius 2.5 +static const float2 PCFDiscSamples[29] = +{ + float2(0.000000, 2.500000), + float2(1.016842, 2.283864), + float2(1.857862, 1.672826), + float2(2.377641, 0.772542), + float2(2.486305, -0.261321), + float2(2.165063, -1.250000), + float2(1.469463, -2.022543), + float2(0.519779, -2.445369), + float2(-0.519779, -2.445369), + float2(-1.469463, -2.022542), + float2(-2.165064, -1.250000), + float2(-2.486305, -0.261321), + float2(-2.377641, 0.772543), + float2(-1.857862, 1.672827), + float2(-1.016841, 2.283864), + float2(0.091021, -0.642186), + float2(0.698035, 0.100940), + float2(0.959731, -1.169393), + float2(-1.053880, 1.180380), + float2(-1.479156, -0.606937), + float2(-0.839488, -1.320002), + float2(1.438566, 0.705359), + float2(0.067064, -1.605197), + float2(0.728706, 1.344722), + float2(1.521424, -0.380184), + float2(-0.199515, 1.590091), + float2(-1.524323, 0.364010), + float2(-0.692694, -0.086749), + float2(-0.082476, 0.654088), +}; + +#endif + +#endif diff --git a/Source/Shaders/PostProcessing.shader b/Source/Shaders/PostProcessing.shader new file mode 100644 index 000000000..7ac812f06 --- /dev/null +++ b/Source/Shaders/PostProcessing.shader @@ -0,0 +1,533 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +// Film Grain post-process shader v1.1 +// Martins Upitis (martinsh) devlog-martinsh.blogspot.com +// 2013 +// +// -------------------------- +// This work is licensed under a Creative Commons Attribution 3.0 Unported License. +// So you are free to share, modify and adapt it for your needs, and even use it for commercial use. +// I would also love to hear about a project you are using it. +// +// Have fun, +// Martins +// -------------------------- +// +// Perlin noise shader by toneburst: +// http://machinesdontcare.wordpress.com/2009/06/25/3d-perlin-noise-sphere-vertex-shader-sourcecode/ + +#include "./Flax/Common.hlsl" +#include "./Flax/Random.hlsl" +#include "./Flax/GammaCorrectionCommon.hlsl" + +#define GB_RADIUS 6 +#define GB_KERNEL_SIZE (GB_RADIUS * 2 + 1) + +#ifndef NO_GRADING_LUT +#define NO_GRADING_LUT 0 +#endif +#ifndef USE_VOLUME_LUT +#define USE_VOLUME_LUT 0 +#endif + +META_CB_BEGIN(0, Data) + +float BloomLimit; +float BloomThreshold; +float BloomMagnitude; +float BloomBlurSigma; + +float3 VignetteColor; +float VignetteShapeFactor; + +float2 InputSize; +float InputAspect; +float GrainAmount; + +float GrainTime; +float GrainParticleSize; +int Ghosts; +float HaloWidth; + +float HaloIntensity; +float Distortion; +float GhostDispersal; +float LensFlareIntensity; + +float2 LensInputDistortion; +float LensScale; +float LensBias; + +float2 InvInputSize; +float ChromaticDistortion; +float Time; + +float Dummy1; +float PostExposure; +float VignetteIntensity; +float LensDirtIntensity; + +float4 ScreenFadeColor; + +float4x4 LensFlareStarMat; + +META_CB_END + +META_CB_BEGIN(1, GaussianBlurData) + +float2 Size; +float Dummy3; +float Dummy4; +float4 GaussianBlurCache[GB_KERNEL_SIZE]; // x-weight, y-offset + +META_CB_END + +// Film Grain +static const float permTexUnit = 1.0 / 256.0; // Perm texture texel-size +static const float permTexUnitHalf = 0.5 / 256.0; // Half perm texture texel-size + +// Input textures +Texture2D Input0 : register(t0); +Texture2D Input1 : register(t1); +Texture2D Input2 : register(t2); +Texture2D Input3 : register(t3); +Texture2D LensDirt : register(t4); +Texture2D LensStar : register(t5); +Texture2D LensColor : register(t6); + +// LUT for color grading +#if USE_VOLUME_LUT +Texture3D ColorGradingLUT : register(t7); +#else +Texture2D ColorGradingLUT : register(t7); +#endif +static const float LUTSize = 32; + +half3 ColorLookupTable(half3 linearColor) +{ + // Move from linear color to encoded LUT color space + //float3 encodedColor = linearColor; // Default + //float3 encodedColor = saturate(LinearToLogC(linearColor)); // LogC + float3 encodedColor = LinearToLog(linearColor + LogToLinear(0)); // Log + + float3 uvw = encodedColor * ((LUTSize - 1) / LUTSize) + (0.5f / LUTSize); + +#if USE_VOLUME_LUT + half3 color = ColorGradingLUT.Sample(SamplerLinearClamp, uvw).rgb; +#else + half3 color = SampleUnwrappedTexture3D(ColorGradingLUT, SamplerLinearClamp, uvw, LUTSize).rgb; +#endif + + return color; +} + +// A random texture generator +float4 rnmRGBA(in float2 tc, in float time) +{ + float noise = sin(dot(tc + float2(time, time), float2(12.9898, 78.233))) * 43758.5453; + float noiseR = frac(noise) * 2.0 - 1.0; + float noiseG = frac(noise * 1.2154) * 2.0 - 1.0; + float noiseB = frac(noise * 1.3453) * 2.0 - 1.0; + float noiseA = frac(noise * 1.3647) * 2.0 - 1.0; + return float4(noiseR, noiseG, noiseB, noiseA); +} + +float3 rnmRGB(in float2 tc, in float time) +{ + float noise = sin(dot(tc + float2(time, time), float2(12.9898, 78.233))) * 43758.5453; + float noiseR = frac(noise) * 2.0 - 1.0; + float noiseG = frac(noise * 1.2154) * 2.0 - 1.0; + float noiseB = frac(noise * 1.3453) * 2.0 - 1.0; + return float3(noiseR, noiseG, noiseB); +} + +float2 rnmRG(in float2 tc, in float time) +{ + float noise = sin(dot(tc + float2(time, time), float2(12.9898, 78.233))) * 43758.5453; + float noiseR = frac(noise) * 2.0 - 1.0; + float noiseG = frac(noise * 1.2154) * 2.0 - 1.0; + return float2(noiseR, noiseG); +} + +float rnmA(in float2 tc, in float time) +{ + float noise = sin(dot(tc + float2(time, time), float2(12.9898, 78.233))) * 43758.5453; + float noiseA = frac(noise * 1.3647) * 2.0 - 1.0; + return noiseA; +} + +float pnoise3D(in float3 p, in float time) +{ + // Integer part, scaled so +1 moves permTexUnit texel + float3 pi = permTexUnit * floor(p) + permTexUnitHalf; + // and offset 1/2 texel to sample texel centers. Fractional part for interpolation + float3 pf = frac(p); + + // Noise contributions from (x=0, y=0), z=0 and z=1 + float perm00 = rnmA(pi.xy, time); + float3 grad000 = rnmRGB(float2(perm00, pi.z), time) * 4.0 - 1.0; + float n000 = dot(grad000, pf); + float3 grad001 = rnmRGB(float2(perm00, pi.z + permTexUnit), time) * 4.0 - 1.0; + float n001 = dot(grad001, pf - float3(0.0, 0.0, 1.0)); + + // Noise contributions from (x=0, y=1), z=0 and z=1 + float perm01 = rnmA(pi.xy + float2(0.0, permTexUnit), time); + float3 grad010 = rnmRGB(float2(perm01, pi.z), time) * 4.0 - 1.0; + float n010 = dot(grad010, pf - float3(0.0, 1.0, 0.0)); + float3 grad011 = rnmRGB(float2(perm01, pi.z + permTexUnit), time) * 4.0 - 1.0; + float n011 = dot(grad011, pf - float3(0.0, 1.0, 1.0)); + + // Noise contributions from (x=1, y=0), z=0 and z=1 + float perm10 = rnmA(pi.xy + float2(permTexUnit, 0.0), time); + float3 grad100 = rnmRGB(float2(perm10, pi.z), time) * 4.0 - 1.0; + float n100 = dot(grad100, pf - float3(1.0, 0.0, 0.0)); + float3 grad101 = rnmRGB(float2(perm10, pi.z + permTexUnit), time) * 4.0 - 1.0; + float n101 = dot(grad101, pf - float3(1.0, 0.0, 1.0)); + + // Noise contributions from (x=1, y=1), z=0 and z=1 + float perm11 = rnmA(pi.xy + float2(permTexUnit, permTexUnit), time); + float3 grad110 = rnmRGB(float2(perm11, pi.z), time) * 4.0 - 1.0; + float n110 = dot(grad110, pf - float3(1.0, 1.0, 0.0)); + float3 grad111 = rnmRGB(float2(perm11, pi.z + permTexUnit), time) * 4.0 - 1.0; + float n111 = dot(grad111, pf - float3(1.0, 1.0, 1.0)); + + // Blend contributions along x + float4 n_x = lerp(float4(n000, n001, n010, n011), float4(n100, n101, n110, n111), PerlinRamp(pf.x)); + + // Blend contributions along y + float2 n_xy = lerp(n_x.xy, n_x.zw, PerlinRamp(pf.y)); + + // Blend contributions along z + float n_xyz = lerp(n_xy.x, n_xy.y, PerlinRamp(pf.z)); + + // We're done, return the final noise value + return n_xyz; +} + +float pnoise2D(in float2 p, in float time) +{ + // Integer part, scaled so +1 moves permTexUnit texel + float2 pi = permTexUnit * floor(p) + permTexUnitHalf; + // and offset 1/2 texel to sample texel centers. Fractional part for interpolation + float2 pf = frac(p); + + // Noise contributions from (x=0, y=0) + float perm00 = rnmA(pi.xy, time); + float2 grad000 = rnmRG(float2(perm00, 0), time) * 4.0 - 1.0; + float n000 = dot(grad000, pf); + + // Noise contributions from (x=0, y=1) + float perm01 = rnmA(pi.xy + float2(0.0, permTexUnit), time); + float2 grad010 = rnmRG(float2(perm01, 0), time) * 4.0 - 1.0; + float n010 = dot(grad010, pf - float2(0.0, 1.0)); + + // Noise contributions from (x=1, y=0) + float perm10 = rnmA(pi.xy + float2(permTexUnit, 0.0), time); + float2 grad100 = rnmRG(float2(perm10, 0), time) * 4.0 - 1.0; + float n100 = dot(grad100, pf - float2(1.0, 0.0)); + + // Noise contributions from (x=1, y=1) + float perm11 = rnmA(pi.xy + float2(permTexUnit, permTexUnit), time); + float2 grad110 = rnmRG(float2(perm11, 0), time) * 4.0 - 1.0; + float n110 = dot(grad110, pf - float2(1.0, 1.0)); + + // Blend contributions along x + float2 n_x = lerp(float2(n000, n010), float2(n100, n110), PerlinRamp(pf.x)); + + // Blend contributions along y + float n_xy = lerp(n_x.x, n_x.y, PerlinRamp(pf.y)); + + // We're done, return the final noise value + return n_xy; +} + +// 2d coordinate orientation thing +float2 coordRot(in float2 tc, in float angle) +{ + float rotX = ((tc.x * 2.0 - 1.0) * InputAspect * cos(angle)) - ((tc.y * 2.0 - 1.0) * sin(angle)); + float rotY = ((tc.y * 2.0 - 1.0) * cos(angle)) + ((tc.x * 2.0 - 1.0) * InputAspect * sin(angle)); + rotX = ((rotX / InputAspect) * 0.5 + 0.5); + rotY = rotY * 0.5 + 0.5; + return float2(rotX, rotY); +} + +// Uses a lower exposure to produce a value suitable for a bloom pass +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Threshold(Quad_VS2PS input) : SV_Target +{ + float4 color = Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0); + return clamp(color - BloomThreshold, 0, BloomLimit); +} + +// Uses hw bilinear filtering for upscaling or downscaling +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Scale(Quad_VS2PS input) : SV_Target +{ + // TODO: we could use quality switch for bloom effect + + return Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0); + /* + float3 color; + // TODO: use gather for dx11 and dx12?? + color = Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0, int2( 0, 0)).rgb; + color += Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0, int2( 0, 1)).rgb; + color += Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0, int2( 0,-1)).rgb; + color += Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0, int2(-1, 0)).rgb; + color += Input0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0, int2( 1, 0)).rgb; + color *= (1.0f / 5.0f); + + return float4(color, 1); + */ +} + +// Horizontal gaussian blur +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_GaussainBlurH(Quad_VS2PS input) : SV_Target +{ + float4 color = 0; + + UNROLL + for (int i = 0; i < GB_KERNEL_SIZE; i++) + { + color += Input0.Sample(SamplerLinearClamp, input.TexCoord + float2(GaussianBlurCache[i].y, 0.0)) * GaussianBlurCache[i].x; + } + + return color; +} + +// Vertical gaussian blur +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_GaussainBlurV(Quad_VS2PS input) : SV_Target +{ + float4 color = 0; + + UNROLL + for (int i = 0; i < GB_KERNEL_SIZE; i++) + { + color += Input0.Sample(SamplerLinearClamp, input.TexCoord + float2(0.0, GaussianBlurCache[i].y)) * GaussianBlurCache[i].x; + } + + return color; +} + +// Generate 'ghosts' for lens flare +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Ghosts(Quad_VS2PS input) : SV_Target +{ + // Temporary data + int i = 0; + float weight; + float2 offset; + float2 haloFrac; + float3 color; + float3 result = 0; + + // Flip texcoordoords + float2 texcoord = input.TexCoord * -1 + float2(1.0, 1.0); + + // Ahost vector to image centre + float2 ghostVec = (float2(0.5, 0.5) - texcoord) * GhostDispersal;// TODO: optimize to MAD instruction + float2 ghostVecnNorm = normalize(ghostVec); + float2 haloVec = ghostVecnNorm * HaloWidth; + + // Calculate distortion vector + float3 distortion = float3(LensInputDistortion.x, 0.0, LensInputDistortion.y); + + // Sample 'ghosts' + // TODO: use uniform amount of ghosts and unroll loop + LOOP + for(; i < Ghosts; i++) + { + // Calculate ghost offset + offset = frac(texcoord + ghostVec * (float)i); + + // Calculate ghost weight + weight = pow(1.0 - length(float2(0.5, 0.5) - offset) / length(float2(0.71, 0.6)), 10.0); + + // Sample distored lens downsampled/threshold texture + color = float3( + Input3.Sample(SamplerLinearClamp, offset + ghostVecnNorm * distortion.r).r, + Input3.Sample(SamplerLinearClamp, offset + ghostVecnNorm * distortion.g).g, + Input3.Sample(SamplerLinearClamp, offset + ghostVecnNorm * distortion.b).b); + color = clamp(color + LensBias, 0, 10) * (LensScale * weight); + + // Accumulate color + result += color; + } + + // Apply lens color + result *= LensColor.Sample(SamplerLinearWrap, float2(length(float2(0.5, 0.5) - texcoord) / length(float2(0.5, 0.5)), 0)).rgb; + + // Add halo + haloFrac = frac(texcoord + haloVec); + weight = length(float2(0.5, 0.5) - haloFrac) / length(float2(0.5, 0.5)); + weight = pow(1.0 - weight, 5.0) * HaloIntensity; + color = float3( + Input3.Sample(SamplerLinearClamp, haloFrac + ghostVecnNorm * distortion.r).r, + Input3.Sample(SamplerLinearClamp, haloFrac + ghostVecnNorm * distortion.g).g, + Input3.Sample(SamplerLinearClamp, haloFrac + ghostVecnNorm * distortion.b).b); + result += clamp((color + LensBias) * (LensScale * weight), 0, 8); + + return float4(result, 1); +} + +float remap(float t, float a, float b) +{ + return clamp((t - a) / (b - a), 0.0, 1.0); +} + +float2 remap(float2 t, float2 a, float2 b) +{ + return clamp((t - a) / (b - a), 0.0, 1.0); +} + +float2 radialdistort(float2 coord, float2 amt) +{ + float2 cc = coord - 0.5; + return coord + 2.0 * cc * amt; +} + +float2 distort(float2 uv, float t, float2 min_distort, float2 max_distort) +{ + float2 dist = lerp(min_distort, max_distort, t); + float2 cc = uv - 0.5; + return uv + 4.0 * cc * dist; +} + +float3 spectrum_offset(float t) +{ + float t0 = 3.0 * t - 1.5; + return clamp(float3( -t0, 1.0 - abs(t0), t0), 0.0, 1.0); +} + +float nrand(float2 n) +{ + return frac(sin(dot(n.xy, float2(12.9898, 78.233)))* 43758.5453); +} + +// Applies exposure, color grading and tone mapping to the input. +// Combines it with the results of the bloom pass and other postFx. +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(NO_GRADING_LUT=1) +META_PERMUTATION_1(USE_VOLUME_LUT=1) +META_PERMUTATION_1(USE_VOLUME_LUT=0) +float4 PS_Composite(Quad_VS2PS input) : SV_Target +{ + float2 uv = input.TexCoord; + float3 lensLight = 0; + float3 color = 0; + + // Chromatic Abberation + if (ChromaticDistortion > 0) + { + const float MAX_DIST_PX = 24.0; + float max_distort_px = MAX_DIST_PX * ChromaticDistortion; + float2 max_distort = InvInputSize * max_distort_px; + float2 min_distort = 0.5 * max_distort; + + float2 oversiz = distort(float2(1.0, 1.0), 1.0, min_distort, max_distort); + uv = remap(uv, 1.0 - oversiz, oversiz); + + int iterations = (int)lerp(3, 10, ChromaticDistortion); + float stepsiz = 1.0 / (float(iterations) - 1.0); + float rnd = nrand(uv + Time); + float t = rnd * stepsiz; + + float3 sumcol = 0; + float3 sumw = 0; + for (int i = 0; i < iterations; i++) + { + float3 w = spectrum_offset(t); + sumw += w; + float2 uvd = distort(uv, t, min_distort, max_distort); + sumcol += Input0.Sample(SamplerLinearClamp, uvd).rgb * w; + t += stepsiz; + } + sumcol.rgb /= sumw; + color = sumcol.rgb + (rnd / 255.0); + } + else + { + color = Input0.Sample(SamplerLinearClamp, uv).rgb; + } + + // Lens Flares + BRANCH + if (LensFlareIntensity > 0) + { + // Get lens flare color + float3 lensFlares = Input3.Sample(SamplerLinearClamp, uv).rgb * LensFlareIntensity; + + // Get lens star color and mix it with lens flares + float2 lensStarTexcoord = uv - 0.5; + lensStarTexcoord = mul(lensStarTexcoord, (float2x2)LensFlareStarMat).xy; + lensStarTexcoord += 0.5; + float3 lensStar = LensStar.Sample(SamplerLinearClamp, lensStarTexcoord).rgb; + lensFlares *= lensStar * 2 + 0.5; + + // Accumulate final lens flares lght + lensLight += lensFlares * 1.5f; + color += lensFlares; + } + + // Bloom + BRANCH + if (BloomMagnitude > 0) + { + // Sample the bloom + float3 bloom = Input2.SampleLevel(SamplerLinearClamp, uv, 0).rgb; + bloom = bloom * BloomMagnitude; + + // Accumulate final bloom lght + lensLight += max(0, bloom * 3.0f + (- 1.0f * 3.0f)); + color += bloom; + } + + // Lens Dirt + float3 lensDirt = LensDirt.SampleLevel(SamplerLinearClamp, uv, 0).rgb; + color += lensDirt * (lensLight * LensDirtIntensity); + + // Eye Adaptation post exposure + color *= PostExposure; + + // Color Grading and Tone Mapping +#if !NO_GRADING_LUT + color = ColorLookupTable(color); +#endif + + // Film Grain + BRANCH + if (GrainAmount > 0) + { + // Calculate noise + float2 rotCoordsR = coordRot(uv, GrainTime); + float noise = pnoise2D(rotCoordsR * (InputSize / GrainParticleSize), GrainTime); + + // Noisiness response curve based on scene luminance + float luminance = Luminance(saturate(color)); + luminance += smoothstep(0.2, 0.0, luminance); + + // Add noise to the final color + noise = lerp(noise, 0, min(pow(luminance, 4.0), 100)); + color += noise * GrainAmount; + } + + // Vignette + BRANCH + if (VignetteIntensity > 0) + { + float2 uvCircle = uv * (1 - uv); + float uvCircleScale = uvCircle.x * uvCircle.y * 16.0f; + float mask = lerp(1, pow(uvCircleScale, VignetteShapeFactor), VignetteIntensity); + color = lerp(VignetteColor, color, mask); + } + + // Screen fade + color = lerp(color, ScreenFadeColor.rgb, ScreenFadeColor.a); + + // Saturate color since it will be rendered to the screen + color = saturate(color); + + // Return final pixel color + return float4(color, 1.0f); +} diff --git a/Source/Shaders/ProbesFilter.shader b/Source/Shaders/ProbesFilter.shader new file mode 100644 index 000000000..112cd9974 --- /dev/null +++ b/Source/Shaders/ProbesFilter.shader @@ -0,0 +1,168 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/BRDF.hlsl" +#include "./Flax/MonteCarlo.hlsl" +#include "./Flax/SH.hlsl" + +META_CB_BEGIN(0, Data) +float2 Dummy0; +int CubeFace; +int SourceMipIndex; +float4 Sample01; +float4 Sample23; +float4 CoefficientMask0; +float4 CoefficientMask1; +float3 Dummy1; +float CoefficientMask2; +META_CB_END + +TextureCube Cube : register(t0); +Texture2D Image : register(t1); + +float4 SampleCubemap(float3 uv) +{ + return Cube.SampleLevel(SamplerLinearClamp, uv, SourceMipIndex); +} + +float3 GetCubemapVector(float2 scaledUVs) +{ + float3 cubeCoordinates; + + if (CubeFace == 0) + { + cubeCoordinates = float3(1, -scaledUVs.y, -scaledUVs.x); + } + else if (CubeFace == 1) + { + cubeCoordinates = float3(-1, -scaledUVs.y, scaledUVs.x); + } + else if (CubeFace == 2) + { + cubeCoordinates = float3(scaledUVs.x, 1, scaledUVs.y); + } + else if (CubeFace == 3) + { + cubeCoordinates = float3(scaledUVs.x, -1, -scaledUVs.y); + } + else if (CubeFace == 4) + { + cubeCoordinates = float3(scaledUVs.x, -scaledUVs.y, 1); + } + else + { + cubeCoordinates = float3(-scaledUVs.x, -scaledUVs.y, -1); + } + + return cubeCoordinates; +} + +// Pixel Shader for filtring probe mip levels +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_FilterFace(Quad_VS2PS input) : SV_Target +{ + float2 scaledUVs = input.TexCoord * 2 - 1; + float3 cubeCoordinates = GetCubemapVector(scaledUVs); + + #define NUM_FILTER_SAMPLES 512 + + float3 N = normalize(cubeCoordinates); + float roughness = ComputeReflectionCaptureRoughnessFromMip(SourceMipIndex); + + float4 filteredColor = 0; + float weight = 0; + + LOOP + for (int i = 0; i < NUM_FILTER_SAMPLES; i++) + { + float2 E = Hammersley(i, NUM_FILTER_SAMPLES, 0); + float3 H = TangentToWorld(ImportanceSampleGGX(E, roughness).xyz, N); + float3 L = 2 * dot(N, H) * H - N; + float NoL = saturate(dot(N, L)); + + BRANCH + if (NoL > 0) + { + filteredColor += SampleCubemap(L) * NoL; + weight += NoL; + } + } + + return filteredColor / max(weight, 0.001); +} + +// Pixel Shader for coping probe face +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CopyFace(Quad_VS2PS input) : SV_Target +{ + return Image.SampleLevel(SamplerLinearClamp, input.TexCoord, 0); +} + +// Pixel Shader for calculating Diffuse Irradiance +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CalcDiffuseIrradiance(Quad_VS2PS input) : SV_Target +{ + float2 scaledUVs = input.TexCoord * 2 - 1; + float3 cubeCoordinates = normalize(GetCubemapVector(scaledUVs)); + + float squaredUVs = 1 + dot(scaledUVs, scaledUVs); + + // Dividing by NumSamples here to keep the sum in the range of fp16, once we get down to the 1x1 mip + float weight = 4 / (sqrt(squaredUVs) * squaredUVs); + + ThreeBandSHVector shCoefficients = SHBasisFunction3(cubeCoordinates); + float currentSHCoefficient = dot(shCoefficients.V0, CoefficientMask0) + dot(shCoefficients.V1, CoefficientMask1) + shCoefficients.V2 * CoefficientMask2; + + float3 radiance = SampleCubemap(cubeCoordinates).rgb; + + return float4(radiance * currentSHCoefficient * weight, weight); +} + +// Pixel Shader for accumulating Diffuse Irradiance +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_AccDiffuseIrradiance(Quad_VS2PS input) : SV_Target +{ + float4 result = 0; + { + float2 scaledUVs = saturate(input.TexCoord + Sample01.xy) * 2 - 1; + float3 cubeCoordinates = GetCubemapVector(scaledUVs); + result += SampleCubemap(cubeCoordinates); + } + { + float2 scaledUVs = saturate(input.TexCoord + Sample01.zw) * 2 - 1; + float3 cubeCoordinates = GetCubemapVector(scaledUVs); + result += SampleCubemap(cubeCoordinates); + } + { + float2 scaledUVs = saturate(input.TexCoord + Sample23.xy) * 2 - 1; + float3 cubeCoordinates = GetCubemapVector(scaledUVs); + result += SampleCubemap(cubeCoordinates); + } + { + float2 scaledUVs = saturate(input.TexCoord + Sample23.zw) * 2 - 1; + float3 cubeCoordinates = GetCubemapVector(scaledUVs); + result += SampleCubemap(cubeCoordinates); + } + return result / 4.0f; +} + +// Pixel Shader for accumulating cube faces into one pixel +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_AccumulateCubeFaces(Quad_VS2PS input) : SV_Target +{ + float4 result = SampleCubemap(float3(1, 0, 0)); + result += SampleCubemap(float3(-1, 0, 0)); + result += SampleCubemap(float3(0, 1, 0)); + result += SampleCubemap(float3(0, -1, 0)); + result += SampleCubemap(float3(0, 0, 1)); + result += SampleCubemap(float3(0, 0, -1)); + return float4((4 * PI) * result.rgb / max(result.a, 0.00001f), 0); +} + +// Pixel Shader for copying frame to cube face with setting lower hemisphere to black +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CopyFrameLHB(Quad_VS2PS input) : SV_Target +{ + float mask = input.TexCoord.y < 0.5;// TODO: make is smooth (and branchless using function) + return float4(Image.SampleLevel(SamplerLinearClamp, input.TexCoord, 0).xyz * mask * CoefficientMask2, 1); +} diff --git a/Source/Shaders/Quad.shader b/Source/Shaders/Quad.shader new file mode 100644 index 000000000..e925a456f --- /dev/null +++ b/Source/Shaders/Quad.shader @@ -0,0 +1,68 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" + +// Interpolants passed from the vertex shader to the PostFx material pixel shader +struct MaterialVertexOutput +{ + float4 Position : SV_Position; + float3 WorldPosition : TEXCOORD0; + float2 TexCoord : TEXCOORD1; +}; + +META_CB_BEGIN(0, Data) +float4 Color; +META_CB_END + +// Vertex Shader for screen space quad rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +Quad_VS2PS VS(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0) +{ + Quad_VS2PS output; + + output.Position = float4(Position, 0, 1); + output.TexCoord = TexCoord; + + return output; +} + +// Vertex Shader function for postFx materials rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +MaterialVertexOutput VS_PostFx(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0) +{ + MaterialVertexOutput output; + + output.Position = float4(Position, 0, 1); + output.WorldPosition = output.Position.xyz; + output.TexCoord = TexCoord; + + return output; +} + +#ifdef _PS_CopyLinear + +Texture2D Source : register(t0); + +// Pixel Shader for screen space quad rendering for image copy (linear sampling) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CopyLinear(Quad_VS2PS input) : SV_Target +{ + return Source.SampleLevel(SamplerLinearClamp, input.TexCoord, 0); +} + +#endif + +#ifdef _PS_Clear + +// Pixel Shader for clearing a render target with a solid color +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Clear(Quad_VS2PS input) : SV_Target +{ + return Color; +} + +#endif diff --git a/Source/Shaders/Random.hlsl b/Source/Shaders/Random.hlsl new file mode 100644 index 000000000..ca5335458 --- /dev/null +++ b/Source/Shaders/Random.hlsl @@ -0,0 +1,109 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __RANDOM__ +#define __RANDOM__ + +// @param xy should be a integer position (e.g. pixel position on the screen), repeats each 128x128 pixels similar to a texture lookup but is only ALU +float PseudoRandom(float2 xy) +{ + float2 pos = frac(xy / 128.0f) * 128.0f + float2(-64.340622f, -72.465622f); + return frac(dot(pos.xyx * pos.xyy, float3(20.390625f, 60.703125f, 2.4281209f))); +} + +// Find good arbitrary axis vectors to represent U and V axes of a plane, given just the normal +void FindBestAxisVectors(float3 input, out float3 axis1, out float3 axis2) +{ + const float3 N = abs(input); + + // Find best basis vectors + if( N.z > N.x && N.z > N.y ) + { + axis1 = float3(1, 0, 0); + } + else + { + axis1 = float3(0, 0, 1); + } + + axis1 = normalize(axis1 - input * dot(axis1, input)); + axis2 = cross(axis1, input); +} + +// References for noise: +// +// Improved Perlin noise +// http://mrl.nyu.edu/~perlin/noise/ +// http://http.developer.nvidia.com/GPUGems/gpugems_ch05.html +// Modified Noise for Evaluation on Graphics Hardware +// http://www.csee.umbc.edu/~olano/papers/mNoise.pdf +// Perlin Noise +// http://mrl.nyu.edu/~perlin/doc/oscar.html +// Fast Gradient Noise +// http://prettyprocs.wordpress.com/2012/10/20/fast-perlin-noise + + +// -------- ALU based method --------- + +/* + * Pseudo random number generator, based on "TEA, a tiny Encrytion Algorithm" + * http://citeseer.ist.psu.edu/viewdoc/download?doi=10.1.1.45.281&rep=rep1&type=pdf + * @param v - old seed (full 32bit range) + * @param iterationCount - >=1, bigger numbers cost more performance but improve quality + * @return new seed + */ +uint2 ScrambleTEA(uint2 v, uint iterationCount = 3) +{ + // Start with some random data (numbers can be arbitrary but those have been used by others and seem to work well) + uint k[4] ={ 0xA341316Cu , 0xC8013EA4u , 0xAD90777Du , 0x7E95761Eu }; + + uint y = v[0]; + uint z = v[1]; + uint sum = 0; + + UNROLL + for (uint i = 0; i < iterationCount; i++) + { + sum += 0x9e3779b9; + y += (z << 4u) + k[0] ^ z + sum ^ (z >> 5u) + k[1]; + z += (y << 4u) + k[2] ^ y + sum ^ (y >> 5u) + k[3]; + } + + return uint2(y, z); +} + +// Computes a pseudo random number for a given integer 2D position +// @param v - old seed (full 32bit range) +// @return random number in the range -1 .. 1 +float ComputeRandomFrom2DPosition(uint2 v) +{ + return (ScrambleTEA(v).x & 0xffff ) / (float)(0xffff) * 2 - 1; +} + +// Computes a pseudo random number for a given integer 2D position +// @param v - old seed (full 32bit range) +// @return random number in the range -1 .. 1 +float ComputeRandomFrom3DPosition(int3 v) +{ + // numbers found by experimentation + return ComputeRandomFrom2DPosition(v.xy ^ (uint2(0x123456, 0x23446) * v.zx) ); +} + +// Evaluate polynomial to get smooth transitions for Perlin noise (2 add, 5 mul) +float PerlinRamp(in float t) +{ + return t * t * t * (t * (t * 6 - 15) + 10); +} +float2 PerlinRamp(in float2 t) +{ + return t * t * t * (t * (t * 6 - 15) + 10); +} +float3 PerlinRamp(in float3 t) +{ + return t * t * t * (t * (t * 6 - 15) + 10); +} +float4 PerlinRamp(in float4 t) +{ + return t * t * t * (t * (t * 6 - 15) + 10); +} + +#endif diff --git a/Source/Shaders/Reflections.shader b/Source/Shaders/Reflections.shader new file mode 100644 index 000000000..e1d7a2884 --- /dev/null +++ b/Source/Shaders/Reflections.shader @@ -0,0 +1,95 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/BRDF.hlsl" +#include "./Flax/Random.hlsl" +#include "./Flax/MonteCarlo.hlsl" +#include "./Flax/LightingCommon.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/ReflectionsCommon.hlsl" +#include "./Flax/BRDF.hlsl" + +META_CB_BEGIN(0, Data) + +ProbeData PData; +float4x4 WVP; +GBufferData GBuffer; + +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +TextureCube Probe : register(t4); +Texture2D Reflections : register(t5); +Texture2D PreIntegratedGF : register(t6); + +// Vertex Shader for models rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +Model_VS2PS VS_Model(ModelInput_PosOnly input) +{ + Model_VS2PS output; + output.Position = mul(float4(input.Position.xyz, 1), WVP); + output.ScreenPos = output.Position; + return output; +} + +// Pixel Shader for enviroment probes rendering +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_EnvProbe(Model_VS2PS input) : SV_Target0 +{ + // Obtain UVs corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Check if cannot light a pixel + BRANCH + if (gBuffer.ShadingModel == SHADING_MODEL_UNLIT) + { + discard; + return 0; + } + + // Sample probe + return SampleReflectionProbe(gBufferData.ViewPos, Probe, PData, gBuffer.WorldPos, gBuffer.Normal, gBuffer.Roughness); +} + +// Pixel Shader for reflections combine pass (additive rendering to the light buffer) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CombinePass(Quad_VS2PS input) : SV_Target0 +{ + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, input.TexCoord); + + // Check if cannot light pixel + BRANCH + if (gBuffer.ShadingModel == SHADING_MODEL_UNLIT) + { + return 0; + } + + // Sample reflections buffer + float3 reflections = SAMPLE_RT(Reflections, input.TexCoord).rgb; + + // Calculate specular color + float3 specularColor = GetSpecularColor(gBuffer); + if (gBuffer.Metalness < 0.001) + specularColor = 0.04f * gBuffer.Specular; + + // Calculate reflecion color + float3 V = normalize(gBufferData.ViewPos - gBuffer.WorldPos); + float NoV = saturate(dot(gBuffer.Normal, V)); + reflections *= EnvBRDF(PreIntegratedGF, specularColor, gBuffer.Roughness, NoV); + + // Apply specular occlusion + float roughnessSq = gBuffer.Roughness * gBuffer.Roughness; + float specularOcclusion = GetSpecularOcclusion(NoV, roughnessSq, gBuffer.AO); + reflections *= specularOcclusion; + + return float4(reflections, 0); +} diff --git a/Source/Shaders/ReflectionsCommon.hlsl b/Source/Shaders/ReflectionsCommon.hlsl new file mode 100644 index 000000000..3f6634100 --- /dev/null +++ b/Source/Shaders/ReflectionsCommon.hlsl @@ -0,0 +1,59 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __REFLECTIONS_COMMON__ +#define __REFLECTIONS_COMMON__ + +#include "./Flax/GBufferCommon.hlsl" + +float GetSpecularOcclusion(float NoV, float roughnessSq, float ao) +{ + return saturate(pow(NoV + ao, roughnessSq) - 1 + ao); +} + +float4 SampleReflectionProbe(float3 viewPos, TextureCube probe, ProbeData data, float3 positionWS, float3 normal, float roughness) +{ + // Calculate distance from probe to the pixel + float3 captureVector = positionWS - data.ProbePos; + float captureVectorLength = length(captureVector); + + // Check if cannot light pixel + // TODO: maybe remove this check?? - test it out with dozens of probes + BRANCH + if (captureVectorLength >= data.ProbeRadius) + { + // End + return 0; + } + + // Fade out based on distance to capture + float normalizedDistanceToCapture = saturate(captureVectorLength * data.ProbeInvRadius); + float distanceAlpha = 1.0 - smoothstep(0.7, 1, normalizedDistanceToCapture); + float fade = distanceAlpha * data.ProbeBrightness; + + // Calculate reflection vector + float3 V = normalize(positionWS - viewPos); + float3 R = reflect(V, normal); + float3 D = data.ProbeInvRadius * captureVector + R; + + // Sample probe at valid mip level based on surface roughness value + half mip = ProbeMipFromRoughness(roughness); + float4 probeSample = probe.SampleLevel(SamplerLinearClamp, D, mip); + + return probeSample * fade; +} + +float3 GetEnvProbeLighting(float3 viewPos, TextureCube probe, ProbeData data, GBufferSample gBuffer) +{ + // Calculate reflections + float3 reflections = SampleReflectionProbe(viewPos, probe, data, gBuffer.WorldPos, gBuffer.Normal, gBuffer.Roughness).rgb; + + // Calculate specular color + float3 specularColor = GetSpecularColor(gBuffer); + + // Calculate reflecion color + float3 V = normalize(viewPos - gBuffer.WorldPos); + float NoV = saturate(dot(gBuffer.Normal, V)); + return reflections * EnvBRDFApprox(specularColor, gBuffer.Roughness, NoV); +} + +#endif diff --git a/Source/Shaders/SH.hlsl b/Source/Shaders/SH.hlsl new file mode 100644 index 000000000..c845c5a5d --- /dev/null +++ b/Source/Shaders/SH.hlsl @@ -0,0 +1,84 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __SH__ +#define __SH__ + +// The SH coefficients for the projection of a function that maps directions to scalar values +struct ThreeBandSHVector +{ + half4 V0; + half4 V1; + half V2; +}; + +ThreeBandSHVector SHBasisFunction3(half3 inputVector) +{ + ThreeBandSHVector result; + + result.V0.x = 0.282095f; + result.V0.y = -0.488603f * inputVector.y; + result.V0.z = 0.488603f * inputVector.z; + result.V0.w = -0.488603f * inputVector.x; + + half3 vectorSquared = inputVector * inputVector; + result.V1.x = 1.092548f * inputVector.x * inputVector.y; + result.V1.y = -1.092548f * inputVector.y * inputVector.z; + result.V1.z = 0.315392f * (3.0f * inputVector.z - 1.0f); + result.V1.w = -1.092548f * inputVector.x * inputVector.z; + result.V2 = 0.546274f * (inputVector.x - inputVector.y); + + return result; +} + +// Projects a direction onto SH and convolves with a cosine kernel to compute irradiance +void ProjectOntoSH3(in float3 n, in float3 color, out float3 sh[9]) +{ + // Cosine kernel + const float A0 = 3.141593f; + const float A1 = 2.095395f; + const float A2 = 0.785398f; + + // Band 0 + sh[0] = 0.282095f * A0 * color; + + // Band 1 + sh[1] = 0.488603f * n.y * A1 * color; + sh[2] = 0.488603f * n.z * A1 * color; + sh[3] = 0.488603f * n.x * A1 * color; + + // Band 2 + sh[4] = 1.092548f * n.x * n.y * A2 * color; + sh[5] = 1.092548f * n.y * n.z * A2 * color; + sh[6] = 0.315392f * (3.0f * n.z * n.z - 1.0f) * A2 * color; + sh[7] = 1.092548f * n.x * n.z * A2 * color; + sh[8] = 0.546274f * (n.x * n.x - n.y * n.y) * A2 * color; +} + +// Converts from 3-band SH to 2-band H-Basis +// [Ralf Habel and Michael Wimmer, "Efficient Irradiance Normal Mapping"] +void ConvertSH3ToHBasis(in float3 sh[9], out float3 hBasis[4]) +{ + const float rt2 = sqrt(2.0f); + const float rt32 = sqrt(3.0f / 2.0f); + const float rt52 = sqrt(5.0f / 2.0f); + const float rt152 = sqrt(15.0f / 2.0f); + const float convMatrix[4*9] = + { + 1.0f / rt2, 0, 0.5f * rt32, 0, 0, 0, 0, 0, 0, + 0, 1.0f / rt2, 0, 0, 0, (3.0f / 8.0f) * rt52, 0, 0, 0, + 0, 0, 1.0f / (2.0f * rt2), 0, 0, 0, 0.25f * rt152, 0, 0, + 0, 0, 0, 1.0f / rt2, 0, 0, 0, (3.0f / 8.0f) * rt52, 0 + }; + + UNROLL + for (uint row = 0; row < 4; row++) + { + hBasis[row] = 0.0f; + + UNROLL + for (uint col = 0; col < 9; col++) + hBasis[row] += convMatrix[row * 9 + col] * sh[col]; + } +} + +#endif diff --git a/Source/Shaders/SMAA.shader b/Source/Shaders/SMAA.shader new file mode 100644 index 000000000..ea82f999c --- /dev/null +++ b/Source/Shaders/SMAA.shader @@ -0,0 +1,1224 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +// Implementation is based on: +// SMAA: Enhanced Subpixel Morphological Antialiasing +// http://www.iryoku.com/smaa +/* +Copyright (C) 2013 Jorge Jimenez (jorge@iryoku.com) +Copyright (C) 2013 Jose I. Echevarria (joseignacioechevarria@gmail.com) +Copyright (C) 2013 Belen Masia (bmasia@unizar.es) +Copyright (C) 2013 Fernando Navarro (fernandn@microsoft.com) +Copyright (C) 2013 Diego Gutierrez (diegog@unizar.es) + +Permission is hereby granted, free of charge, to any person obtaining a copy +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. As clarification, there is no +requirement that the copyright notice and permission be included in binary +distributions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +*/ + +#include "./Flax/Common.hlsl" + +META_CB_BEGIN(0, Data) +float4 RtSize;// x-1/width, y-1/height, z-width, w-height +META_CB_END + +Texture2D Input : register(t0); + +// SMAA configuration + +#if SM5 +#define SMAA_HLSL_4_1 +#else +#define SMAA_HLSL_4 +#endif +#define SMAA_RT_METRICS RtSize +#define SMAA_AREATEX_SELECT(s) s.rg +#define SMAA_SEARCHTEX_SELECT(s) s.r +#define LinearSampler SamplerLinearClamp +#define PointSampler SamplerPointClamp + +// Quality presets + +#if defined(SMAA_PRESET_LOW) +#define SMAA_THRESHOLD 0.15 +#define SMAA_MAX_SEARCH_STEPS 4 +#define SMAA_DISABLE_DIAG_DETECTION +#define SMAA_DISABLE_CORNER_DETECTION +#elif defined(SMAA_PRESET_MEDIUM) +#define SMAA_THRESHOLD 0.1 +#define SMAA_MAX_SEARCH_STEPS 8 +#define SMAA_DISABLE_DIAG_DETECTION +#define SMAA_DISABLE_CORNER_DETECTION +#elif defined(SMAA_PRESET_HIGH) +#define SMAA_THRESHOLD 0.1 +#define SMAA_MAX_SEARCH_STEPS 16 +#define SMAA_MAX_SEARCH_STEPS_DIAG 8 +#define SMAA_CORNER_ROUNDING 25 +#elif defined(SMAA_PRESET_ULTRA) +#define SMAA_THRESHOLD 0.05 +#define SMAA_MAX_SEARCH_STEPS 32 +#define SMAA_MAX_SEARCH_STEPS_DIAG 16 +#define SMAA_CORNER_ROUNDING 25 +#endif + +//----------------------------------------------------------------------------- +// Configurable Defines + +/** + * SMAA_THRESHOLD specifies the threshold or sensitivity to edges. + * Lowering this value you will be able to detect more edges at the expense of + * performance. + * + * Range: [0, 0.5] + * 0.1 is a reasonable value, and allows to catch most visible edges. + * 0.05 is a rather overkill value, that allows to catch 'em all. + * + * If temporal supersampling is used, 0.2 could be a reasonable value, as low + * contrast edges are properly filtered by just 2x. + */ +#ifndef SMAA_THRESHOLD +#define SMAA_THRESHOLD 0.1 +#endif + +/** + * SMAA_DEPTH_THRESHOLD specifies the threshold for depth edge detection. + * + * Range: depends on the depth range of the scene. + */ +#ifndef SMAA_DEPTH_THRESHOLD +#define SMAA_DEPTH_THRESHOLD (0.1 * SMAA_THRESHOLD) +#endif + +/** + * SMAA_MAX_SEARCH_STEPS specifies the maximum steps performed in the + * horizontal/vertical pattern searches, at each side of the pixel. + * + * In number of pixels, it's actually the double. So the maximum line length + * perfectly handled by, for example 16, is 64 (by perfectly, we meant that + * longer lines won't look as good, but still antialiased). + * + * Range: [0, 112] + */ +#ifndef SMAA_MAX_SEARCH_STEPS +#define SMAA_MAX_SEARCH_STEPS 16 +#endif + +/** + * SMAA_MAX_SEARCH_STEPS_DIAG specifies the maximum steps performed in the + * diagonal pattern searches, at each side of the pixel. In this case we jump + * one pixel at time, instead of two. + * + * Range: [0, 20] + * + * On high-end machines it is cheap (between a 0.8x and 0.9x slower for 16 + * steps), but it can have a significant impact on older machines. + * + * Define SMAA_DISABLE_DIAG_DETECTION to disable diagonal processing. + */ +#ifndef SMAA_MAX_SEARCH_STEPS_DIAG +#define SMAA_MAX_SEARCH_STEPS_DIAG 8 +#endif + +/** + * SMAA_CORNER_ROUNDING specifies how much sharp corners will be rounded. + * + * Range: [0, 100] + * + * Define SMAA_DISABLE_CORNER_DETECTION to disable corner processing. + */ +#ifndef SMAA_CORNER_ROUNDING +#define SMAA_CORNER_ROUNDING 25 +#endif + +/** + * If there is an neighbor edge that has SMAA_LOCAL_CONTRAST_FACTOR times + * bigger contrast than current edge, current edge will be discarded. + * + * This allows to eliminate spurious crossing edges, and is based on the fact + * that, if there is too much contrast in a direction, that will hide + * perceptually contrast in the other neighbors. + */ +#ifndef SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR +#define SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR 2.0 +#endif + +/** + * Predicated thresholding allows to better preserve texture details and to + * improve performance, by decreasing the number of detected edges using an + * additional buffer like the light accumulation buffer, object ids or even the + * depth buffer (the depth buffer usage may be limited to indoor or short range + * scenes). + * + * It locally decreases the luma or color threshold if an edge is found in an + * additional buffer (so the global threshold can be higher). + * + * This method was developed by Playstation EDGE MLAA team, and used in + * Killzone 3, by using the light accumulation buffer. More information here: + * http://iryoku.com/aacourse/downloads/06-MLAA-on-PS3.pptx + */ +#ifndef SMAA_PREDICATION +#define SMAA_PREDICATION 0 +#endif + +/** + * Threshold to be used in the additional predication buffer. + * + * Range: depends on the input, so you'll have to find the magic number that + * works for you. + */ +#ifndef SMAA_PREDICATION_THRESHOLD +#define SMAA_PREDICATION_THRESHOLD 0.01 +#endif + +/** + * How much to scale the global threshold used for luma or color edge + * detection when using predication. + * + * Range: [1, 5] + */ +#ifndef SMAA_PREDICATION_SCALE +#define SMAA_PREDICATION_SCALE 2.0 +#endif + +/** + * How much to locally decrease the threshold. + * + * Range: [0, 1] + */ +#ifndef SMAA_PREDICATION_STRENGTH +#define SMAA_PREDICATION_STRENGTH 0.4 +#endif + +/** + * Temporal reprojection allows to remove ghosting artifacts when using + * temporal supersampling. We use the CryEngine 3 method which also introduces + * velocity weighting. This feature is of extreme importance for totally + * removing ghosting. More information here: + * http://iryoku.com/aacourse/downloads/13-Anti-Aliasing-Methods-in-CryENGINE-3.pdf + * + * Note that you'll need to setup a velocity buffer for enabling reprojection. + * For static geometry, saving the previous depth buffer is a viable + * alternative. + */ +#ifndef SMAA_REPROJECTION +#define SMAA_REPROJECTION 0 +#endif + +/** + * SMAA_REPROJECTION_WEIGHT_SCALE controls the velocity weighting. It allows to + * remove ghosting trails behind the moving object, which are not removed by + * just using reprojection. Using low values will exhibit ghosting, while using + * high values will disable temporal supersampling under motion. + * + * Behind the scenes, velocity weighting removes temporal supersampling when + * the velocity of the subsamples differs (meaning they are different objects). + * + * Range: [0, 80] + */ +#ifndef SMAA_REPROJECTION_WEIGHT_SCALE +#define SMAA_REPROJECTION_WEIGHT_SCALE 30.0 +#endif + +/** + * On some compilers, discard cannot be used in vertex shaders. Thus, they need + * to be compiled separately. + */ +#ifndef SMAA_INCLUDE_VS +#define SMAA_INCLUDE_VS 1 +#endif +#ifndef SMAA_INCLUDE_PS +#define SMAA_INCLUDE_PS 1 +#endif + +//----------------------------------------------------------------------------- +// Texture Access Defines + +#ifndef SMAA_AREATEX_SELECT +#if defined(SMAA_HLSL_3) +#define SMAA_AREATEX_SELECT(sample) sample.ra +#else +#define SMAA_AREATEX_SELECT(sample) sample.rg +#endif +#endif + +#ifndef SMAA_SEARCHTEX_SELECT +#define SMAA_SEARCHTEX_SELECT(sample) sample.r +#endif + +#ifndef SMAA_DECODE_VELOCITY +#define SMAA_DECODE_VELOCITY(sample) sample.rg +#endif + +//----------------------------------------------------------------------------- +// Non-Configurable Defines + +#define SMAA_AREATEX_MAX_DISTANCE 16 +#define SMAA_AREATEX_MAX_DISTANCE_DIAG 20 +#define SMAA_AREATEX_PIXEL_SIZE (1.0 / float2(160.0, 560.0)) +#define SMAA_AREATEX_SUBTEX_SIZE (1.0 / 7.0) +#define SMAA_SEARCHTEX_SIZE float2(66.0, 33.0) +#define SMAA_SEARCHTEX_PACKED_SIZE float2(64.0, 16.0) +#define SMAA_CORNER_ROUNDING_NORM (float(SMAA_CORNER_ROUNDING) / 100.0) + +//----------------------------------------------------------------------------- +// Porting Functions + +#if defined(SMAA_HLSL_3) +#define SMAATexture2D(tex) sampler2D tex +#define SMAATexturePass2D(tex) tex +#define SMAASampleLevelZero(tex, coord) tex2Dlod(tex, float4(coord, 0.0, 0.0)) +#define SMAASampleLevelZeroPoint(tex, coord) tex2Dlod(tex, float4(coord, 0.0, 0.0)) +#define SMAASampleLevelZeroOffset(tex, coord, offset) tex2Dlod(tex, float4(coord + offset * SMAA_RT_METRICS.xy, 0.0, 0.0)) +#define SMAASample(tex, coord) tex2D(tex, coord) +#define SMAASamplePoint(tex, coord) tex2D(tex, coord) +#define SMAASampleOffset(tex, coord, offset) tex2D(tex, coord + offset * SMAA_RT_METRICS.xy) +#define SMAA_FLATTEN [flatten] +#define SMAA_BRANCH [branch] +#endif +#if defined(SMAA_HLSL_4) || defined(SMAA_HLSL_4_1) +#define SMAATexture2D(tex) Texture2D tex +#define SMAATexturePass2D(tex) tex +#define SMAASampleLevelZero(tex, coord) tex.SampleLevel(LinearSampler, coord, 0) +#define SMAASampleLevelZeroPoint(tex, coord) tex.SampleLevel(PointSampler, coord, 0) +#define SMAASampleLevelZeroOffset(tex, coord, offset) tex.SampleLevel(LinearSampler, coord, 0, offset) +#define SMAASample(tex, coord) tex.Sample(LinearSampler, coord) +#define SMAASamplePoint(tex, coord) tex.Sample(PointSampler, coord) +#define SMAASampleOffset(tex, coord, offset) tex.Sample(LinearSampler, coord, offset) +#define SMAA_FLATTEN [flatten] +#define SMAA_BRANCH [branch] +#define SMAATexture2DMS2(tex) Texture2DMS tex +#define SMAALoad(tex, pos, sample) tex.Load(pos, sample) +#if defined(SMAA_HLSL_4_1) +#define SMAAGather(tex, coord) tex.Gather(LinearSampler, coord, 0) +#endif +#endif +#if defined(SMAA_GLSL_3) || defined(SMAA_GLSL_4) +#define SMAATexture2D(tex) sampler2D tex +#define SMAATexturePass2D(tex) tex +#define SMAASampleLevelZero(tex, coord) textureLod(tex, coord, 0.0) +#define SMAASampleLevelZeroPoint(tex, coord) textureLod(tex, coord, 0.0) +#define SMAASampleLevelZeroOffset(tex, coord, offset) textureLodOffset(tex, coord, 0.0, offset) +#define SMAASample(tex, coord) texture(tex, coord) +#define SMAASamplePoint(tex, coord) texture(tex, coord) +#define SMAASampleOffset(tex, coord, offset) texture(tex, coord, offset) +#define SMAA_FLATTEN +#define SMAA_BRANCH +#define lerp(a, b, t) mix(a, b, t) +#define saturate(a) clamp(a, 0.0, 1.0) +#if defined(SMAA_GLSL_4) +#define mad(a, b, c) fma(a, b, c) +#define SMAAGather(tex, coord) textureGather(tex, coord) +#else +#define mad(a, b, c) (a * b + c) +#endif +#define float2 vec2 +#define float3 vec3 +#define float4 vec4 +#define int2 ivec2 +#define int3 ivec3 +#define int4 ivec4 +#define bool2 bvec2 +#define bool3 bvec3 +#define bool4 bvec4 +#endif + +#if !defined(SMAA_HLSL_3) && !defined(SMAA_HLSL_4) && !defined(SMAA_HLSL_4_1) && !defined(SMAA_GLSL_3) && !defined(SMAA_GLSL_4) && !defined(SMAA_CUSTOM_SL) +#error you must define the shading language: SMAA_HLSL_*, SMAA_GLSL_* or SMAA_CUSTOM_SL +#endif + +//----------------------------------------------------------------------------- +// Misc functions + +/** + * Gathers current pixel, and the top-left neighbors. + */ +float3 SMAAGatherNeighbours(float2 texcoord, + float4 offset[3], + SMAATexture2D(tex)) { + #ifdef SMAAGather + return SMAAGather(tex, texcoord + SMAA_RT_METRICS.xy * float2(-0.5, -0.5)).grb; + #else + float P = SMAASamplePoint(tex, texcoord).r; + float Pleft = SMAASamplePoint(tex, offset[0].xy).r; + float Ptop = SMAASamplePoint(tex, offset[0].zw).r; + return float3(P, Pleft, Ptop); + #endif +} + +/** + * Adjusts the threshold by means of predication. + */ +float2 SMAACalculatePredicatedThreshold(float2 texcoord, + float4 offset[3], + SMAATexture2D(predicationTex)) { + float3 neighbours = SMAAGatherNeighbours(texcoord, offset, SMAATexturePass2D(predicationTex)); + float2 delta = abs(neighbours.xx - neighbours.yz); + float2 edges = step(SMAA_PREDICATION_THRESHOLD, delta); + return SMAA_PREDICATION_SCALE * SMAA_THRESHOLD * (1.0 - SMAA_PREDICATION_STRENGTH * edges); +} + +/** + * Conditional move: + */ +void SMAAMovc(bool2 cond, inout float2 variable, float2 value) { + SMAA_FLATTEN if (cond.x) variable.x = value.x; + SMAA_FLATTEN if (cond.y) variable.y = value.y; +} + +void SMAAMovc(bool4 cond, inout float4 variable, float4 value) { + SMAAMovc(cond.xy, variable.xy, value.xy); + SMAAMovc(cond.zw, variable.zw, value.zw); +} + + +#if SMAA_INCLUDE_VS +//----------------------------------------------------------------------------- +// Vertex Shaders + +/** + * Edge Detection Vertex Shader + */ +void SMAAEdgeDetectionVS(float2 texcoord, + out float4 offset[3]) { + offset[0] = mad(SMAA_RT_METRICS.xyxy, float4(-1.0, 0.0, 0.0, -1.0), texcoord.xyxy); + offset[1] = mad(SMAA_RT_METRICS.xyxy, float4( 1.0, 0.0, 0.0, 1.0), texcoord.xyxy); + offset[2] = mad(SMAA_RT_METRICS.xyxy, float4(-2.0, 0.0, 0.0, -2.0), texcoord.xyxy); +} + +/** + * Blend Weight Calculation Vertex Shader + */ +void SMAABlendingWeightCalculationVS(float2 texcoord, + out float2 pixcoord, + out float4 offset[3]) { + pixcoord = texcoord * SMAA_RT_METRICS.zw; + + // We will use these offsets for the searches later on (see @PSEUDO_GATHER4): + offset[0] = mad(SMAA_RT_METRICS.xyxy, float4(-0.25, -0.125, 1.25, -0.125), texcoord.xyxy); + offset[1] = mad(SMAA_RT_METRICS.xyxy, float4(-0.125, -0.25, -0.125, 1.25), texcoord.xyxy); + + // And these for the searches, they indicate the ends of the loops: + offset[2] = mad(SMAA_RT_METRICS.xxyy, + float4(-2.0, 2.0, -2.0, 2.0) * float(SMAA_MAX_SEARCH_STEPS), + float4(offset[0].xz, offset[1].yw)); +} + +/** + * Neighborhood Blending Vertex Shader + */ +void SMAANeighborhoodBlendingVS(float2 texcoord, + out float4 offset) { + offset = mad(SMAA_RT_METRICS.xyxy, float4( 1.0, 0.0, 0.0, 1.0), texcoord.xyxy); +} +#endif // SMAA_INCLUDE_VS + +#if SMAA_INCLUDE_PS +//----------------------------------------------------------------------------- +// Edge Detection Pixel Shaders (First Pass) + +/** + * Luma Edge Detection + * + * IMPORTANT NOTICE: luma edge detection requires gamma-corrected colors, and + * thus 'colorTex' should be a non-sRGB texture. + */ +float2 SMAALumaEdgeDetectionPS(float2 texcoord, + float4 offset[3], + SMAATexture2D(colorTex) + #if SMAA_PREDICATION + , SMAATexture2D(predicationTex) + #endif + ) { + // Calculate the threshold: + #if SMAA_PREDICATION + float2 threshold = SMAACalculatePredicatedThreshold(texcoord, offset, SMAATexturePass2D(predicationTex)); + #else + float2 threshold = float2(SMAA_THRESHOLD, SMAA_THRESHOLD); + #endif + + // Calculate lumas: + float3 weights = float3(0.2126, 0.7152, 0.0722); + float L = dot(SMAASamplePoint(colorTex, texcoord).rgb, weights); + + float Lleft = dot(SMAASamplePoint(colorTex, offset[0].xy).rgb, weights); + float Ltop = dot(SMAASamplePoint(colorTex, offset[0].zw).rgb, weights); + + // We do the usual threshold: + float4 delta; + delta.xy = abs(L - float2(Lleft, Ltop)); + float2 edges = step(threshold, delta.xy); + + // Then discard if there is no edge: + if (dot(edges, float2(1.0, 1.0)) == 0.0) + discard; + + // Calculate right and bottom deltas: + float Lright = dot(SMAASamplePoint(colorTex, offset[1].xy).rgb, weights); + float Lbottom = dot(SMAASamplePoint(colorTex, offset[1].zw).rgb, weights); + delta.zw = abs(L - float2(Lright, Lbottom)); + + // Calculate the maximum delta in the direct neighborhood: + float2 maxDelta = max(delta.xy, delta.zw); + + // Calculate left-left and top-top deltas: + float Lleftleft = dot(SMAASamplePoint(colorTex, offset[2].xy).rgb, weights); + float Ltoptop = dot(SMAASamplePoint(colorTex, offset[2].zw).rgb, weights); + delta.zw = abs(float2(Lleft, Ltop) - float2(Lleftleft, Ltoptop)); + + // Calculate the final maximum delta: + maxDelta = max(maxDelta.xy, delta.zw); + float finalDelta = max(maxDelta.x, maxDelta.y); + + // Local contrast adaptation: + edges.xy *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); + + return edges; +} + +/** + * Color Edge Detection + * + * IMPORTANT NOTICE: color edge detection requires gamma-corrected colors, and + * thus 'colorTex' should be a non-sRGB texture. + */ +float2 SMAAColorEdgeDetectionPS(float2 texcoord, + float4 offset[3], + SMAATexture2D(colorTex) + #if SMAA_PREDICATION + , SMAATexture2D(predicationTex) + #endif + ) { + // Calculate the threshold: + #if SMAA_PREDICATION + float2 threshold = SMAACalculatePredicatedThreshold(texcoord, offset, predicationTex); + #else + float2 threshold = float2(SMAA_THRESHOLD, SMAA_THRESHOLD); + #endif + + // Calculate color deltas: + float4 delta; + float3 C = SMAASamplePoint(colorTex, texcoord).rgb; + + float3 Cleft = SMAASamplePoint(colorTex, offset[0].xy).rgb; + float3 t = abs(C - Cleft); + delta.x = max(max(t.r, t.g), t.b); + + float3 Ctop = SMAASamplePoint(colorTex, offset[0].zw).rgb; + t = abs(C - Ctop); + delta.y = max(max(t.r, t.g), t.b); + + // We do the usual threshold: + float2 edges = step(threshold, delta.xy); + + // Then discard if there is no edge: + if (dot(edges, float2(1.0, 1.0)) == 0.0) + discard; + + // Calculate right and bottom deltas: + float3 Cright = SMAASamplePoint(colorTex, offset[1].xy).rgb; + t = abs(C - Cright); + delta.z = max(max(t.r, t.g), t.b); + + float3 Cbottom = SMAASamplePoint(colorTex, offset[1].zw).rgb; + t = abs(C - Cbottom); + delta.w = max(max(t.r, t.g), t.b); + + // Calculate the maximum delta in the direct neighborhood: + float2 maxDelta = max(delta.xy, delta.zw); + + // Calculate left-left and top-top deltas: + float3 Cleftleft = SMAASamplePoint(colorTex, offset[2].xy).rgb; + t = abs(C - Cleftleft); + delta.z = max(max(t.r, t.g), t.b); + + float3 Ctoptop = SMAASamplePoint(colorTex, offset[2].zw).rgb; + t = abs(C - Ctoptop); + delta.w = max(max(t.r, t.g), t.b); + + // Calculate the final maximum delta: + maxDelta = max(maxDelta.xy, delta.zw); + float finalDelta = max(maxDelta.x, maxDelta.y); + + // Local contrast adaptation: + edges.xy *= step(finalDelta, SMAA_LOCAL_CONTRAST_ADAPTATION_FACTOR * delta.xy); + + return edges; +} + +/** + * Depth Edge Detection + */ +float2 SMAADepthEdgeDetectionPS(float2 texcoord, + float4 offset[3], + SMAATexture2D(depthTex)) { + float3 neighbours = SMAAGatherNeighbours(texcoord, offset, SMAATexturePass2D(depthTex)); + float2 delta = abs(neighbours.xx - float2(neighbours.y, neighbours.z)); + float2 edges = step(SMAA_DEPTH_THRESHOLD, delta); + + if (dot(edges, float2(1.0, 1.0)) == 0.0) + discard; + + return edges; +} + +//----------------------------------------------------------------------------- +// Diagonal Search Functions + +#if !defined(SMAA_DISABLE_DIAG_DETECTION) + +/** + * Allows to decode two binary values from a bilinear-filtered access. + */ +float2 SMAADecodeDiagBilinearAccess(float2 e) { + // Bilinear access for fetching 'e' have a 0.25 offset, and we are + // interested in the R and G edges: + // + // +---G---+-------+ + // | x o R x | + // +-------+-------+ + // + // Then, if one of these edge is enabled: + // Red: (0.75 * X + 0.25 * 1) => 0.25 or 1.0 + // Green: (0.75 * 1 + 0.25 * X) => 0.75 or 1.0 + // + // This function will unpack the values (mad + mul + round): + // wolframalpha.com: round(x * abs(5 * x - 5 * 0.75)) plot 0 to 1 + e.r = e.r * abs(5.0 * e.r - 5.0 * 0.75); + return round(e); +} + +float4 SMAADecodeDiagBilinearAccess(float4 e) { + e.rb = e.rb * abs(5.0 * e.rb - 5.0 * 0.75); + return round(e); +} + +/** + * These functions allows to perform diagonal pattern searches. + */ +float2 SMAASearchDiag1(SMAATexture2D(edgesTex), float2 texcoord, float2 dir, out float2 e) { + float4 coord = float4(texcoord, -1.0, 1.0); + float3 t = float3(SMAA_RT_METRICS.xy, 1.0); + while (coord.z < float(SMAA_MAX_SEARCH_STEPS_DIAG - 1) && + coord.w > 0.9) { + coord.xyz = mad(t, float3(dir, 1.0), coord.xyz); + e = SMAASampleLevelZero(edgesTex, coord.xy).rg; + coord.w = dot(e, float2(0.5, 0.5)); + } + return coord.zw; +} + +float2 SMAASearchDiag2(SMAATexture2D(edgesTex), float2 texcoord, float2 dir, out float2 e) { + float4 coord = float4(texcoord, -1.0, 1.0); + coord.x += 0.25 * SMAA_RT_METRICS.x; // See @SearchDiag2Optimization + float3 t = float3(SMAA_RT_METRICS.xy, 1.0); + while (coord.z < float(SMAA_MAX_SEARCH_STEPS_DIAG - 1) && + coord.w > 0.9) { + coord.xyz = mad(t, float3(dir, 1.0), coord.xyz); + + // @SearchDiag2Optimization + // Fetch both edges at once using bilinear filtering: + e = SMAASampleLevelZero(edgesTex, coord.xy).rg; + e = SMAADecodeDiagBilinearAccess(e); + + // Non-optimized version: + // e.g = SMAASampleLevelZero(edgesTex, coord.xy).g; + // e.r = SMAASampleLevelZeroOffset(edgesTex, coord.xy, int2(1, 0)).r; + + coord.w = dot(e, float2(0.5, 0.5)); + } + return coord.zw; +} + +/** + * Similar to SMAAArea, this calculates the area corresponding to a certain + * diagonal distance and crossing edges 'e'. + */ +float2 SMAAAreaDiag(SMAATexture2D(areaTex), float2 dist, float2 e, float offset) { + float2 texcoord = mad(float2(SMAA_AREATEX_MAX_DISTANCE_DIAG, SMAA_AREATEX_MAX_DISTANCE_DIAG), e, dist); + + // We do a scale and bias for mapping to texel space: + texcoord = mad(SMAA_AREATEX_PIXEL_SIZE, texcoord, 0.5 * SMAA_AREATEX_PIXEL_SIZE); + + // Diagonal areas are on the second half of the texture: + texcoord.x += 0.5; + + // Move to proper place, according to the subpixel offset: + texcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset; + + // Do it! + return SMAA_AREATEX_SELECT(SMAASampleLevelZero(areaTex, texcoord)); +} + +/** + * This searches for diagonal patterns and returns the corresponding weights. + */ +float2 SMAACalculateDiagWeights(SMAATexture2D(edgesTex), SMAATexture2D(areaTex), float2 texcoord, float2 e, float4 subsampleIndices) { + float2 weights = float2(0.0, 0.0); + + // Search for the line ends: + float4 d; + float2 end; + if (e.r > 0.0) { + d.xz = SMAASearchDiag1(SMAATexturePass2D(edgesTex), texcoord, float2(-1.0, 1.0), end); + d.x += float(end.y > 0.9); + } else + d.xz = float2(0.0, 0.0); + d.yw = SMAASearchDiag1(SMAATexturePass2D(edgesTex), texcoord, float2(1.0, -1.0), end); + + SMAA_BRANCH + if (d.x + d.y > 2.0) { // d.x + d.y + 1 > 3 + // Fetch the crossing edges: + float4 coords = mad(float4(-d.x + 0.25, d.x, d.y, -d.y - 0.25), SMAA_RT_METRICS.xyxy, texcoord.xyxy); + float4 c; + c.xy = SMAASampleLevelZeroOffset(edgesTex, coords.xy, int2(-1, 0)).rg; + c.zw = SMAASampleLevelZeroOffset(edgesTex, coords.zw, int2( 1, 0)).rg; + c.yxwz = SMAADecodeDiagBilinearAccess(c.xyzw); + + // Non-optimized version: + // float4 coords = mad(float4(-d.x, d.x, d.y, -d.y), SMAA_RT_METRICS.xyxy, texcoord.xyxy); + // float4 c; + // c.x = SMAASampleLevelZeroOffset(edgesTex, coords.xy, int2(-1, 0)).g; + // c.y = SMAASampleLevelZeroOffset(edgesTex, coords.xy, int2( 0, 0)).r; + // c.z = SMAASampleLevelZeroOffset(edgesTex, coords.zw, int2( 1, 0)).g; + // c.w = SMAASampleLevelZeroOffset(edgesTex, coords.zw, int2( 1, -1)).r; + + // Merge crossing edges at each side into a single value: + float2 cc = mad(float2(2.0, 2.0), c.xz, c.yw); + + // Remove the crossing edge if we didn't found the end of the line: + SMAAMovc(bool2(step(0.9, d.zw)), cc, float2(0.0, 0.0)); + + // Fetch the areas for this line: + weights += SMAAAreaDiag(SMAATexturePass2D(areaTex), d.xy, cc, subsampleIndices.z); + } + + // Search for the line ends: + d.xz = SMAASearchDiag2(SMAATexturePass2D(edgesTex), texcoord, float2(-1.0, -1.0), end); + if (SMAASampleLevelZeroOffset(edgesTex, texcoord, int2(1, 0)).r > 0.0) { + d.yw = SMAASearchDiag2(SMAATexturePass2D(edgesTex), texcoord, float2(1.0, 1.0), end); + d.y += float(end.y > 0.9); + } else + d.yw = float2(0.0, 0.0); + + SMAA_BRANCH + if (d.x + d.y > 2.0) { // d.x + d.y + 1 > 3 + // Fetch the crossing edges: + float4 coords = mad(float4(-d.x, -d.x, d.y, d.y), SMAA_RT_METRICS.xyxy, texcoord.xyxy); + float4 c; + c.x = SMAASampleLevelZeroOffset(edgesTex, coords.xy, int2(-1, 0)).g; + c.y = SMAASampleLevelZeroOffset(edgesTex, coords.xy, int2( 0, -1)).r; + c.zw = SMAASampleLevelZeroOffset(edgesTex, coords.zw, int2( 1, 0)).gr; + float2 cc = mad(float2(2.0, 2.0), c.xz, c.yw); + + // Remove the crossing edge if we didn't found the end of the line: + SMAAMovc(bool2(step(0.9, d.zw)), cc, float2(0.0, 0.0)); + + // Fetch the areas for this line: + weights += SMAAAreaDiag(SMAATexturePass2D(areaTex), d.xy, cc, subsampleIndices.w).gr; + } + + return weights; +} +#endif + +//----------------------------------------------------------------------------- +// Horizontal/Vertical Search Functions + +/** + * This allows to determine how much length should we add in the last step + * of the searches. It takes the bilinearly interpolated edge (see + * @PSEUDO_GATHER4), and adds 0, 1 or 2, depending on which edges and + * crossing edges are active. + */ +float SMAASearchLength(SMAATexture2D(searchTex), float2 e, float offset) { + // The texture is flipped vertically, with left and right cases taking half + // of the space horizontally: + float2 scale = SMAA_SEARCHTEX_SIZE * float2(0.5, -1.0); + float2 bias = SMAA_SEARCHTEX_SIZE * float2(offset, 1.0); + + // Scale and bias to access texel centers: + scale += float2(-1.0, 1.0); + bias += float2( 0.5, -0.5); + + // Convert from pixel coordinates to texcoords: + // (We use SMAA_SEARCHTEX_PACKED_SIZE because the texture is cropped) + scale *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; + bias *= 1.0 / SMAA_SEARCHTEX_PACKED_SIZE; + + // Lookup the search texture: + return SMAA_SEARCHTEX_SELECT(SMAASampleLevelZero(searchTex, mad(scale, e, bias))); +} + +/** + * Horizontal/vertical search functions for the 2nd pass. + */ +float SMAASearchXLeft(SMAATexture2D(edgesTex), SMAATexture2D(searchTex), float2 texcoord, float end) { + /** + * @PSEUDO_GATHER4 + * This texcoord has been offset by (-0.25, -0.125) in the vertex shader to + * sample between edge, thus fetching four edges in a row. + * Sampling with different offsets in each direction allows to disambiguate + * which edges are active from the four fetched ones. + */ + float2 e = float2(0.0, 1.0); + while (texcoord.x > end && + e.g > 0.8281 && // Is there some edge not activated? + e.r == 0.0) { // Or is there a crossing edge that breaks the line? + e = SMAASampleLevelZero(edgesTex, texcoord).rg; + texcoord = mad(-float2(2.0, 0.0), SMAA_RT_METRICS.xy, texcoord); + } + + float offset = mad(-(255.0 / 127.0), SMAASearchLength(SMAATexturePass2D(searchTex), e, 0.0), 3.25); + return mad(SMAA_RT_METRICS.x, offset, texcoord.x); + + // Non-optimized version: + // We correct the previous (-0.25, -0.125) offset we applied: + // texcoord.x += 0.25 * SMAA_RT_METRICS.x; + + // The searches are bias by 1, so adjust the coords accordingly: + // texcoord.x += SMAA_RT_METRICS.x; + + // Disambiguate the length added by the last step: + // texcoord.x += 2.0 * SMAA_RT_METRICS.x; // Undo last step + // texcoord.x -= SMAA_RT_METRICS.x * (255.0 / 127.0) * SMAASearchLength(SMAATexturePass2D(searchTex), e, 0.0); + // return mad(SMAA_RT_METRICS.x, offset, texcoord.x); +} + +float SMAASearchXRight(SMAATexture2D(edgesTex), SMAATexture2D(searchTex), float2 texcoord, float end) { + float2 e = float2(0.0, 1.0); + while (texcoord.x < end && + e.g > 0.8281 && // Is there some edge not activated? + e.r == 0.0) { // Or is there a crossing edge that breaks the line? + e = SMAASampleLevelZero(edgesTex, texcoord).rg; + texcoord = mad(float2(2.0, 0.0), SMAA_RT_METRICS.xy, texcoord); + } + float offset = mad(-(255.0 / 127.0), SMAASearchLength(SMAATexturePass2D(searchTex), e, 0.5), 3.25); + return mad(-SMAA_RT_METRICS.x, offset, texcoord.x); +} + +float SMAASearchYUp(SMAATexture2D(edgesTex), SMAATexture2D(searchTex), float2 texcoord, float end) { + float2 e = float2(1.0, 0.0); + while (texcoord.y > end && + e.r > 0.8281 && // Is there some edge not activated? + e.g == 0.0) { // Or is there a crossing edge that breaks the line? + e = SMAASampleLevelZero(edgesTex, texcoord).rg; + texcoord = mad(-float2(0.0, 2.0), SMAA_RT_METRICS.xy, texcoord); + } + float offset = mad(-(255.0 / 127.0), SMAASearchLength(SMAATexturePass2D(searchTex), e.gr, 0.0), 3.25); + return mad(SMAA_RT_METRICS.y, offset, texcoord.y); +} + +float SMAASearchYDown(SMAATexture2D(edgesTex), SMAATexture2D(searchTex), float2 texcoord, float end) { + float2 e = float2(1.0, 0.0); + while (texcoord.y < end && + e.r > 0.8281 && // Is there some edge not activated? + e.g == 0.0) { // Or is there a crossing edge that breaks the line? + e = SMAASampleLevelZero(edgesTex, texcoord).rg; + texcoord = mad(float2(0.0, 2.0), SMAA_RT_METRICS.xy, texcoord); + } + float offset = mad(-(255.0 / 127.0), SMAASearchLength(SMAATexturePass2D(searchTex), e.gr, 0.5), 3.25); + return mad(-SMAA_RT_METRICS.y, offset, texcoord.y); +} + +/** + * Ok, we have the distance and both crossing edges. So, what are the areas + * at each side of current edge? + */ +float2 SMAAArea(SMAATexture2D(areaTex), float2 dist, float e1, float e2, float offset) { + // Rounding prevents precision errors of bilinear filtering: + float2 texcoord = mad(float2(SMAA_AREATEX_MAX_DISTANCE, SMAA_AREATEX_MAX_DISTANCE), round(4.0 * float2(e1, e2)), dist); + + // We do a scale and bias for mapping to texel space: + texcoord = mad(SMAA_AREATEX_PIXEL_SIZE, texcoord, 0.5 * SMAA_AREATEX_PIXEL_SIZE); + + // Move to proper place, according to the subpixel offset: + texcoord.y = mad(SMAA_AREATEX_SUBTEX_SIZE, offset, texcoord.y); + + // Do it! + return SMAA_AREATEX_SELECT(SMAASampleLevelZero(areaTex, texcoord)); +} + +//----------------------------------------------------------------------------- +// Corner Detection Functions + +void SMAADetectHorizontalCornerPattern(SMAATexture2D(edgesTex), inout float2 weights, float4 texcoord, float2 d) { + #if !defined(SMAA_DISABLE_CORNER_DETECTION) + float2 leftRight = step(d.xy, d.yx); + float2 rounding = (1.0 - SMAA_CORNER_ROUNDING_NORM) * leftRight; + + rounding /= leftRight.x + leftRight.y; // Reduce blending for pixels in the center of a line. + + float2 factor = float2(1.0, 1.0); + factor.x -= rounding.x * SMAASampleLevelZeroOffset(edgesTex, texcoord.xy, int2(0, 1)).r; + factor.x -= rounding.y * SMAASampleLevelZeroOffset(edgesTex, texcoord.zw, int2(1, 1)).r; + factor.y -= rounding.x * SMAASampleLevelZeroOffset(edgesTex, texcoord.xy, int2(0, -2)).r; + factor.y -= rounding.y * SMAASampleLevelZeroOffset(edgesTex, texcoord.zw, int2(1, -2)).r; + + weights *= saturate(factor); + #endif +} + +void SMAADetectVerticalCornerPattern(SMAATexture2D(edgesTex), inout float2 weights, float4 texcoord, float2 d) { + #if !defined(SMAA_DISABLE_CORNER_DETECTION) + float2 leftRight = step(d.xy, d.yx); + float2 rounding = (1.0 - SMAA_CORNER_ROUNDING_NORM) * leftRight; + + rounding /= leftRight.x + leftRight.y; + + float2 factor = float2(1.0, 1.0); + factor.x -= rounding.x * SMAASampleLevelZeroOffset(edgesTex, texcoord.xy, int2( 1, 0)).g; + factor.x -= rounding.y * SMAASampleLevelZeroOffset(edgesTex, texcoord.zw, int2( 1, 1)).g; + factor.y -= rounding.x * SMAASampleLevelZeroOffset(edgesTex, texcoord.xy, int2(-2, 0)).g; + factor.y -= rounding.y * SMAASampleLevelZeroOffset(edgesTex, texcoord.zw, int2(-2, 1)).g; + + weights *= saturate(factor); + #endif +} + +//----------------------------------------------------------------------------- +// Blending Weight Calculation Pixel Shader (Second Pass) + +float4 SMAABlendingWeightCalculationPS(float2 texcoord, + float2 pixcoord, + float4 offset[3], + SMAATexture2D(edgesTex), + SMAATexture2D(areaTex), + SMAATexture2D(searchTex), + float4 subsampleIndices) { // Just pass zero for SMAA 1x, see @SUBSAMPLE_INDICES. + float4 weights = float4(0.0, 0.0, 0.0, 0.0); + + float2 e = SMAASample(edgesTex, texcoord).rg; + + SMAA_BRANCH + if (e.g > 0.0) { // Edge at north + #if !defined(SMAA_DISABLE_DIAG_DETECTION) + // Diagonals have both north and west edges, so searching for them in + // one of the boundaries is enough. + weights.rg = SMAACalculateDiagWeights(SMAATexturePass2D(edgesTex), SMAATexturePass2D(areaTex), texcoord, e, subsampleIndices); + + // We give priority to diagonals, so if we find a diagonal we skip + // horizontal/vertical processing. + SMAA_BRANCH + if (weights.r == -weights.g) { // weights.r + weights.g == 0.0 + #endif + + float2 d; + + // Find the distance to the left: + float3 coords; + coords.x = SMAASearchXLeft(SMAATexturePass2D(edgesTex), SMAATexturePass2D(searchTex), offset[0].xy, offset[2].x); + coords.y = offset[1].y; // offset[1].y = texcoord.y - 0.25 * SMAA_RT_METRICS.y (@CROSSING_OFFSET) + d.x = coords.x; + + // Now fetch the left crossing edges, two at a time using bilinear + // filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to + // discern what value each edge has: + float e1 = SMAASampleLevelZero(edgesTex, coords.xy).r; + + // Find the distance to the right: + coords.z = SMAASearchXRight(SMAATexturePass2D(edgesTex), SMAATexturePass2D(searchTex), offset[0].zw, offset[2].y); + d.y = coords.z; + + // We want the distances to be in pixel units (doing this here allow to + // better interleave arithmetic and memory accesses): + d = abs(round(mad(SMAA_RT_METRICS.zz, d, -pixcoord.xx))); + + // SMAAArea below needs a sqrt, as the areas texture is compressed + // quadratically: + float2 sqrt_d = sqrt(d); + + // Fetch the right crossing edges: + float e2 = SMAASampleLevelZeroOffset(edgesTex, coords.zy, int2(1, 0)).r; + + // Ok, we know how this pattern looks like, now it is time for getting + // the actual area: + weights.rg = SMAAArea(SMAATexturePass2D(areaTex), sqrt_d, e1, e2, subsampleIndices.y); + + // Fix corners: + coords.y = texcoord.y; + SMAADetectHorizontalCornerPattern(SMAATexturePass2D(edgesTex), weights.rg, coords.xyzy, d); + + #if !defined(SMAA_DISABLE_DIAG_DETECTION) + } else + e.r = 0.0; // Skip vertical processing. + #endif + } + + SMAA_BRANCH + if (e.r > 0.0) { // Edge at west + float2 d; + + // Find the distance to the top: + float3 coords; + coords.y = SMAASearchYUp(SMAATexturePass2D(edgesTex), SMAATexturePass2D(searchTex), offset[1].xy, offset[2].z); + coords.x = offset[0].x; // offset[1].x = texcoord.x - 0.25 * SMAA_RT_METRICS.x; + d.x = coords.y; + + // Fetch the top crossing edges: + float e1 = SMAASampleLevelZero(edgesTex, coords.xy).g; + + // Find the distance to the bottom: + coords.z = SMAASearchYDown(SMAATexturePass2D(edgesTex), SMAATexturePass2D(searchTex), offset[1].zw, offset[2].w); + d.y = coords.z; + + // We want the distances to be in pixel units: + d = abs(round(mad(SMAA_RT_METRICS.ww, d, -pixcoord.yy))); + + // SMAAArea below needs a sqrt, as the areas texture is compressed + // quadratically: + float2 sqrt_d = sqrt(d); + + // Fetch the bottom crossing edges: + float e2 = SMAASampleLevelZeroOffset(edgesTex, coords.xz, int2(0, 1)).g; + + // Get the area for this direction: + weights.ba = SMAAArea(SMAATexturePass2D(areaTex), sqrt_d, e1, e2, subsampleIndices.x); + + // Fix corners: + coords.x = texcoord.x; + SMAADetectVerticalCornerPattern(SMAATexturePass2D(edgesTex), weights.ba, coords.xyxz, d); + } + + return weights; +} + +//----------------------------------------------------------------------------- +// Neighborhood Blending Pixel Shader (Third Pass) + +float4 SMAANeighborhoodBlendingPS(float2 texcoord, + float4 offset, + SMAATexture2D(colorTex), + SMAATexture2D(blendTex) + #if SMAA_REPROJECTION + , SMAATexture2D(velocityTex) + #endif + ) { + // Fetch the blending weights for current pixel: + float4 a; + a.x = SMAASample(blendTex, offset.xy).a; // Right + a.y = SMAASample(blendTex, offset.zw).g; // Top + a.wz = SMAASample(blendTex, texcoord).xz; // Bottom / Left + + // Is there any blending weight with a value greater than 0.0? + SMAA_BRANCH + if (dot(a, float4(1.0, 1.0, 1.0, 1.0)) < 1e-5) { + float4 color = SMAASampleLevelZero(colorTex, texcoord); + + #if SMAA_REPROJECTION + float2 velocity = SMAA_DECODE_VELOCITY(SMAASampleLevelZero(velocityTex, texcoord)); + + // Pack velocity into the alpha channel: + color.a = sqrt(5.0 * length(velocity)); + #endif + + return color; + } else { + bool h = max(a.x, a.z) > max(a.y, a.w); // max(horizontal) > max(vertical) + + // Calculate the blending offsets: + float4 blendingOffset = float4(0.0, a.y, 0.0, a.w); + float2 blendingWeight = a.yw; + SMAAMovc(bool4(h, h, h, h), blendingOffset, float4(a.x, 0.0, a.z, 0.0)); + SMAAMovc(bool2(h, h), blendingWeight, a.xz); + blendingWeight /= dot(blendingWeight, float2(1.0, 1.0)); + + // Calculate the texture coordinates: + float4 blendingCoord = mad(blendingOffset, float4(SMAA_RT_METRICS.xy, -SMAA_RT_METRICS.xy), texcoord.xyxy); + + // We exploit bilinear filtering to mix current pixel with the chosen + // neighbor: + float4 color = blendingWeight.x * SMAASampleLevelZero(colorTex, blendingCoord.xy); + color += blendingWeight.y * SMAASampleLevelZero(colorTex, blendingCoord.zw); + + #if SMAA_REPROJECTION + // Antialias velocity for proper reprojection in a later stage: + float2 velocity = blendingWeight.x * SMAA_DECODE_VELOCITY(SMAASampleLevelZero(velocityTex, blendingCoord.xy)); + velocity += blendingWeight.y * SMAA_DECODE_VELOCITY(SMAASampleLevelZero(velocityTex, blendingCoord.zw)); + + // Pack velocity into the alpha channel: + color.a = sqrt(5.0 * length(velocity)); + #endif + + return color; + } +} + +//----------------------------------------------------------------------------- +// Temporal Resolve Pixel Shader (Optional Pass) + +float4 SMAAResolvePS(float2 texcoord, + SMAATexture2D(currentColorTex), + SMAATexture2D(previousColorTex) + #if SMAA_REPROJECTION + , SMAATexture2D(velocityTex) + #endif + ) { + #if SMAA_REPROJECTION + // Velocity is assumed to be calculated for motion blur, so we need to + // inverse it for reprojection: + float2 velocity = -SMAA_DECODE_VELOCITY(SMAASamplePoint(velocityTex, texcoord).rg); + + // Fetch current pixel: + float4 current = SMAASamplePoint(currentColorTex, texcoord); + + // Reproject current coordinates and fetch previous pixel: + float4 previous = SMAASamplePoint(previousColorTex, texcoord + velocity); + + // Attenuate the previous pixel if the velocity is different: + float delta = abs(current.a * current.a - previous.a * previous.a) / 5.0; + float weight = 0.5 * saturate(1.0 - sqrt(delta) * SMAA_REPROJECTION_WEIGHT_SCALE); + + // Blend the pixels according to the calculated weight: + return lerp(current, previous, weight); + #else + // Just blend the pixels: + float4 current = SMAASamplePoint(currentColorTex, texcoord); + float4 previous = SMAASamplePoint(previousColorTex, texcoord); + return lerp(current, previous, 0.5); + #endif +} + +//----------------------------------------------------------------------------- +// Separate Multisamples Pixel Shader (Optional Pass) + +#ifdef SMAALoad +void SMAASeparatePS(float4 position, + float2 texcoord, + out float4 target0, + out float4 target1, + SMAATexture2DMS2(colorTexMS)) { + int2 pos = int2(position.xy); + target0 = SMAALoad(colorTexMS, pos, 0); + target1 = SMAALoad(colorTexMS, pos, 1); +} +#endif + +//----------------------------------------------------------------------------- +#endif // SMAA_INCLUDE_PS + +// ---------------------------------------------------------------------------------------- +// Edge Detection + +struct VaryingsEdge +{ + float4 Position : SV_POSITION; + float2 TexCoord : TEXCOORD0; + float4 Offsets[3] : TEXCOORD1; +}; + +// Vertex Shader for edge detection +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +VaryingsEdge VS_Edge(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0) +{ + VaryingsEdge output; + output.Position = float4(Position, 0, 1); + output.TexCoord = TexCoord; + SMAAEdgeDetectionVS(TexCoord, output.Offsets); + return output; +} + +// Pixel Shader for edge detection +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(SMAA_PRESET_LOW=0) +META_PERMUTATION_1(SMAA_PRESET_MEDIUM=1) +META_PERMUTATION_1(SMAA_PRESET_HIGH=2) +META_PERMUTATION_1(SMAA_PRESET_ULTRA=3) +float4 PS_Edge(VaryingsEdge input) : SV_Target +{ + return float4(SMAAColorEdgeDetectionPS(input.TexCoord, input.Offsets, Input), 0.0, 0.0); +} + +// ---------------------------------------------------------------------------------------- +// Blend Weights Calculation + +struct VaryingsBlend +{ + float4 Position : SV_POSITION; + float2 TexCoord : TEXCOORD0; + float2 PixCoord : TEXCOORD1; + float4 Offsets[3] : TEXCOORD2; +}; + +// Vertex Shader for blend weights calculation +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +VaryingsBlend VS_Blend(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0) +{ + VaryingsBlend output; + output.Position = float4(Position.xy, 0, 1); + output.TexCoord = TexCoord; + output.PixCoord = output.TexCoord * SMAA_RT_METRICS.zw; + SMAABlendingWeightCalculationVS(TexCoord, output.PixCoord, output.Offsets); + return output; +} + +#if _PS_Blend + +Texture2D AreaTexture : register(t1); +Texture2D SearchTexure : register(t2); + +// Pixel Shader for blend weights calculation +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(SMAA_PRESET_LOW=0) +META_PERMUTATION_1(SMAA_PRESET_MEDIUM=1) +META_PERMUTATION_1(SMAA_PRESET_HIGH=2) +META_PERMUTATION_1(SMAA_PRESET_ULTRA=3) +float4 PS_Blend(VaryingsBlend input) : SV_Target +{ + return SMAABlendingWeightCalculationPS(input.TexCoord, input.PixCoord, input.Offsets, Input, AreaTexture, SearchTexure, 0); +} + +#endif + +// ---------------------------------------------------------------------------------------- +// Neighborhood Blending + +struct VaryingsNeighbor +{ + float4 Position : SV_POSITION; + float2 TexCoord : TEXCOORD0; + float4 Offset : TEXCOORD1; +}; + +// Vertex Shader for neighborhood blending +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +VaryingsNeighbor VS_Neighbor(float2 Position : POSITION0, float2 TexCoord : TEXCOORD0) +{ + VaryingsNeighbor output; + output.Position = float4(Position, 0, 1); + output.TexCoord = TexCoord; + SMAANeighborhoodBlendingVS(TexCoord, output.Offset); + return output; +} + +#if _PS_Neighbor + +Texture2D BlendTexture : register(t1); + +// Pixel Shader for neighborhood blending +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Neighbor(VaryingsNeighbor input) : SV_Target +{ + return SMAANeighborhoodBlendingPS(input.TexCoord, input.Offset, Input, BlendTexture); +} + +#endif diff --git a/Source/Shaders/SSAO.shader b/Source/Shaders/SSAO.shader new file mode 100644 index 000000000..2e39233b2 --- /dev/null +++ b/Source/Shaders/SSAO.shader @@ -0,0 +1,773 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +// Adaptive Screen Space Ambient Occlusion +// https://github.com/GameTechDev/ASSAO +// +// Copyright (c) 2016, Intel Corporation +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated +// documentation files (the "Software"), to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to the following conditions: +// The above copyright notice and this permission notice shall be included in all copies or substantial portions of +// the Software. +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO +// THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +#define NO_GBUFFER_SAMPLING + +#include "./Flax/Common.hlsl" +#include "./Flax/Gather.hlsl" +#include "./Flax/GBuffer.hlsl" + +#define SSAO_DEPTH_MIP_LEVELS 4 // <- must match C++ define + +// Progressive poisson-like pattern; x, y are in [-1, 1] range, .z is length(float2(x,y)), .w is log2(z) +#define INTELSSAO_MAIN_DISK_SAMPLE_COUNT (32) +static const float4 g_samplePatternMain[INTELSSAO_MAIN_DISK_SAMPLE_COUNT] = +{ + float4( 0.78488064, 0.56661671, 1.500000, -0.126083), float4( 0.26022232, -0.29575172, 1.500000, -1.064030), float4( 0.10459357, 0.08372527, 1.110000, -2.730563), float4(-0.68286800, 0.04963045, 1.090000, -0.498827), + float4(-0.13570161, -0.64190155, 1.250000, -0.532765), float4(-0.26193795, -0.08205118, 0.670000, -1.783245), float4(-0.61177456, 0.66664219, 0.710000, -0.044234), float4( 0.43675563, 0.25119025, 0.610000, -1.167283), + float4( 0.07884444, 0.86618668, 0.640000, -0.459002), float4(-0.12790935, -0.29869005, 0.600000, -1.729424), float4(-0.04031125, 0.02413622, 0.600000, -4.792042), float4( 0.16201244, -0.52851415, 0.790000, -1.067055), + float4(-0.70991218, 0.47301072, 0.640000, -0.335236), float4( 0.03277707, -0.22349690, 0.600000, -1.982384), float4( 0.68921727, 0.36800742, 0.630000, -0.266718), float4( 0.29251814, 0.37775412, 0.610000, -1.422520), + float4(-0.12224089, 0.96582592, 0.600000, -0.426142), float4( 0.11071457, -0.16131058, 0.600000, -2.165947), float4( 0.46562141, -0.59747696, 0.600000, -0.189760), float4(-0.51548797, 0.11804193, 0.600000, -1.246800), + float4( 0.89141309, -0.42090443, 0.600000, 0.028192), float4(-0.32402530, -0.01591529, 0.600000, -1.543018), float4( 0.60771245, 0.41635221, 0.600000, -0.605411), float4( 0.02379565, -0.08239821, 0.600000, -3.809046), + float4( 0.48951152, -0.23657045, 0.600000, -1.189011), float4(-0.17611565, -0.81696892, 0.600000, -0.513724), float4(-0.33930185, -0.20732205, 0.600000, -1.698047), float4(-0.91974425, 0.05403209, 0.600000, 0.062246), + float4(-0.15064627, -0.14949332, 0.600000, -1.896062), float4( 0.53180975, -0.35210401, 0.600000, -0.758838), float4( 0.41487166, 0.81442589, 0.600000, -0.505648), float4(-0.24106961, -0.32721516, 0.600000, -1.665244) +}; + +// These values can be changed with no changes required elsewhere; +// The actual number of texture samples is two times this value (each "tap" has two symmetrical depth texture samples) +static const uint g_numTaps[4] = { 3, 5, 8, 12 }; + +// +// Optional parts that can be enabled for a required quality preset level and above (0 == Low, 1 == Medium, 2 == High, 3 == Highest) +// Each has its own cost. To disable just set to 5 or above. +// +// (experimental) tilts the disk (although only half of the samples!) towards surface normal; this helps with effect uniformity between objects but reduces effect distance and has other side-effects +#define SSAO_TILT_SAMPLES_ENABLE_AT_QUALITY_PRESET (99) // to disable simply set to 99 or similar +#define SSAO_TILT_SAMPLES_AMOUNT (0.4) +// +#define SSAO_HALOING_REDUCTION_ENABLE_AT_QUALITY_PRESET (1) // to disable simply set to 99 or similar +#define SSAO_HALOING_REDUCTION_AMOUNT (0.6) // values from 0.0 - 1.0, 1.0 means max weighting (will cause artifacts, 0.8 is more reasonable) +// +#define SSAO_NORMAL_BASED_EDGES_ENABLE_AT_QUALITY_PRESET (2) // to disable simply set to 99 or similar +#define SSAO_NORMAL_BASED_EDGES_DOT_THRESHOLD (0.5) // use 0-0.1 for super-sharp normal-based edges +// +#define SSAO_DETAIL_AO_ENABLE_AT_QUALITY_PRESET (1) // whether to use DetailAOStrength; to disable simply set to 99 or similar +// +#define SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET (2) // !!warning!! the MIP generation on the C++ side will be enabled on quality preset 2 regardless of this value, so if changing here, change the C++ side too +#define SSAO_DEPTH_MIPS_GLOBAL_OFFSET (-4.3) // best noise/quality/performance tradeoff, found empirically +// +// !!warning!! the edge handling is hard-coded to 'disabled' on quality level 0, and enabled above, on the C++ side; while toggling it here will work for +// testing purposes, it will not yield performance gains (or correct results) +#define SSAO_DEPTH_BASED_EDGES_ENABLE_AT_QUALITY_PRESET (1) +// +#define SSAO_REDUCE_RADIUS_NEAR_SCREEN_BORDER_ENABLE_AT_QUALITY_PRESET (99) // 99 means disabled; only helpful if artifacts at the edges caused by lack of out of screen depth data are not acceptable with the depth sampler in either clamp or mirror modes +// + +// Constant Buffer + +META_CB_BEGIN(0, Data) + +GBufferData GBuffer; + +float2 ViewportPixelSize; // .zw == 1.0 / ViewportSize.xy +float2 HalfViewportPixelSize; // .zw == 1.0 / ViewportHalfSize.xy + +int2 PerPassFullResCoordOffset; +int PassIndex; +float EffectMaxDistance; + +float2 Viewport2xPixelSize; +float2 Viewport2xPixelSize_x_025; // Viewport2xPixelSize * 0.25 (for fusing add+mul into mad) + +float EffectRadius; // world (viewspace) maximum size of the shadow +float EffectShadowStrength; // global strength of the effect (0 - 5) +float EffectShadowPow; +float EffectNearFadeMul; + +float EffectFadeOutMul; // fade out from distance (ex. 25) +float EffectFadeOutAdd; // fade out to distance (ex. 100) +float EffectHorizonAngleThreshold; // limit errors on slopes and caused by insufficient geometry tessellation (0.05 to 0.5) +float EffectSamplingRadiusNearLimitRec; // if viewspace pixel closer than this, don't enlarge shadow sampling radius anymore (makes no sense to grow beyond some distance, not enough samples to cover everything, so just limit the shadow growth; could be SSAOSettingsFadeOutFrom * 0.1 or less) + +float DepthPrecisionOffsetMod; +float NegRecEffectRadius; // -1.0 / EffectRadius +float InvSharpness; +float DetailAOStrength; + +float4 PatternRotScaleMatrices[5]; + +float4x4 ViewMatrix; + +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +// Shader Resources + +Texture2D g_DepthSource : register(t0); // corresponds to SSAO_TEXTURE_SLOT0 +Texture2D g_NormalmapSource : register(t1); // corresponds to SSAO_TEXTURE_SLOT1 + +Texture2D g_ViewspaceDepthSource : register(t0); // corresponds to SSAO_TEXTURE_SLOT0 +Texture2D g_ViewspaceDepthSource1 : register(t1); // corresponds to SSAO_TEXTURE_SLOT1 +Texture2D g_ViewspaceDepthSource2 : register(t2); // corresponds to SSAO_TEXTURE_SLOT2 +Texture2D g_ViewspaceDepthSource3 : register(t3); // corresponds to SSAO_TEXTURE_SLOT3 + +Texture2D g_BlurInput : register(t0); // corresponds to SSAO_TEXTURE_SLOT0 + +Texture2DArray g_FinalSSAO : register(t0); // corresponds to SSAO_TEXTURE_SLOT0 + +// Packing/unpacking for edges; 2 bits per edge mean 4 gradient values (0, 0.33, 0.66, 1) for smoother transitions +float PackEdges(float4 edgesLRTB) +{ + //int4 edgesLRTBi = int4(saturate(edgesLRTB) * 3.0 + 0.5); + //return ((edgesLRTBi.x << 6) + (edgesLRTBi.y << 4) + (edgesLRTBi.z << 2) + (edgesLRTBi.w << 0)) / 255.0; + + // Optimized, should be same as above + edgesLRTB = round(saturate(edgesLRTB) * 3.05); + return dot(edgesLRTB, float4(64.0 / 255.0, 16.0 / 255.0, 4.0 / 255.0, 1.0 / 255.0)); +} + +float4 UnpackEdges(float _packedVal) +{ + uint packedVal = (uint)(_packedVal * 255.5); + float4 edgesLRTB; + + // There's really no need for mask (as it's an 8 bit input) but maybe in future it will be needed +#define SSAO_UNPACK_EDGES_WITH_MASK 0 +#if SSAO_UNPACK_EDGES_WITH_MASK + edgesLRTB.x = float((packedVal >> 6) & 0x03) / 3.0; + edgesLRTB.y = float((packedVal >> 4) & 0x03) / 3.0; + edgesLRTB.z = float((packedVal >> 2) & 0x03) / 3.0; + edgesLRTB.w = float((packedVal >> 0) & 0x03) / 3.0; +#else + edgesLRTB.x = float(packedVal >> 6) * 0.33; + edgesLRTB.y = float(packedVal >> 4) * 0.33; + edgesLRTB.z = float(packedVal >> 2) * 0.33; + edgesLRTB.w = float(packedVal >> 0) * 0.33; +#endif + + return saturate(edgesLRTB + InvSharpness); +} + +// From [0, width], [0, height] to [-1, 1], [-1, 1] +float2 ScreenSpaceToClipSpacePositionXY(float2 screenPos) +{ + return screenPos * Viewport2xPixelSize.xy - float2(1.0f, 1.0f); +} + +float3 NDCToViewspace(float2 pos, float viewspaceDepth) +{ + GBufferData gBufferData = GetGBufferData(); + float deviceDepth = LinearZ2DeviceDepth(gBufferData, viewspaceDepth / gBufferData.ViewFar); + float4 clipPos = float4(pos * float2(2.0, -2.0) + float2(-1.0, 1.0), deviceDepth, 1.0); + float4 viewPos = mul(clipPos, gBufferData.InvProjectionMatrix); + return viewPos.xyz / viewPos.w; +} + +// Calculate effect radius and fit our screen sampling pattern inside it +void CalculateRadiusParameters(const float pixCenterLength, const float2 pixelDirRBViewspaceSizeAtCenterZ, out float pixLookupRadiusMod, out float effectRadius, out float falloffCalcMulSq) +{ + effectRadius = EffectRadius; + + // Leaving this out for performance reasons: use something similar if radius needs to scale based on distance + //effectRadius *= pow(pixCenterLength, RadiusDistanceScalingFunctionPow); + + // When too close, on-screen sampling disk will grow beyond screen size; limit this to avoid closeup temporal artifacts + const float tooCloseLimitMod = saturate(pixCenterLength * EffectSamplingRadiusNearLimitRec) * 0.8 + 0.2; + + effectRadius *= tooCloseLimitMod; + + // Value 0.85 is to reduce the radius to allow for more samples on a slope to still stay within influence + pixLookupRadiusMod = (0.85 * effectRadius) / pixelDirRBViewspaceSizeAtCenterZ.x; + + // Used to calculate falloff (both for AO samples and per-sample weights) + falloffCalcMulSq = -1.0f / (effectRadius * effectRadius); +} + +float4 CalculateEdges(const float centerZ, const float leftZ, const float rightZ, const float topZ, const float bottomZ) +{ + // Slope-sensitive depth-based edge detection + float4 edgesLRTB = float4(leftZ, rightZ, topZ, bottomZ) - centerZ; + float4 edgesLRTBSlopeAdjusted = edgesLRTB + edgesLRTB.yxwz; + edgesLRTB = min(abs(edgesLRTB), abs(edgesLRTBSlopeAdjusted)); + return saturate((1.3 - edgesLRTB / (centerZ * 0.040))); + + // Cheaper version but has artifacts + //edgesLRTB = abs(float4(leftZ, rightZ, topZ, bottomZ) - centerZ); + //return saturate((1.3 - edgesLRTB / (pixZ * 0.06 + 0.1))); +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_PrepareDepths(in float4 inPos : SV_POSITION, out float out0 : SV_Target0, out float out1 : SV_Target1, out float out2 : SV_Target2, out float out3 : SV_Target3) +{ +#if CAN_USE_GATHER + float2 gatherUV = inPos.xy * Viewport2xPixelSize; + float4 depths = g_DepthSource.GatherRed(SamplerPointClamp, gatherUV); + float c = depths.x; + float d = depths.y; + float b = depths.z; + float a = depths.w; +#else + int3 baseCoord = int3(int2(inPos.xy) * 2, 0); + float c = g_DepthSource.Load(baseCoord, int2(0, 1)).x; + float d = g_DepthSource.Load(baseCoord, int2(1, 1)).x; + float b = g_DepthSource.Load(baseCoord, int2(1, 0)).x; + float a = g_DepthSource.Load(baseCoord, int2(0, 0)).x; +#endif + + GBufferData gBufferData = GetGBufferData(); + out0 = LinearizeZ(gBufferData, a); + out1 = LinearizeZ(gBufferData, b); + out2 = LinearizeZ(gBufferData, c); + out3 = LinearizeZ(gBufferData, d); +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_PrepareDepthsHalf(in float4 inPos : SV_POSITION, out float out0 : SV_Target0, out float out1 : SV_Target1) +{ + int3 baseCoord = int3(int2(inPos.xy) * 2, 0); + float a = g_DepthSource.Load(baseCoord, int2(0, 0)).x; + float d = g_DepthSource.Load(baseCoord, int2(1, 1)).x; + + GBufferData gBufferData = GetGBufferData(); + out0 = LinearizeZ(gBufferData, a); + out1 = LinearizeZ(gBufferData, d); +} + +void PrepareDepthMip(const float4 inPos, int mipLevel, out float outD0, out float outD1, out float outD2, out float outD3) +{ + int2 baseCoords = int2(inPos.xy) * 2; + + float4 depthsArr[4]; + float depthsOutArr[4]; + + // How to Gather a specific mip level? + depthsArr[0].x = g_ViewspaceDepthSource[baseCoords + int2(0, 0)].x; + depthsArr[0].y = g_ViewspaceDepthSource[baseCoords + int2(1, 0)].x; + depthsArr[0].z = g_ViewspaceDepthSource[baseCoords + int2(0, 1)].x; + depthsArr[0].w = g_ViewspaceDepthSource[baseCoords + int2(1, 1)].x; + depthsArr[1].x = g_ViewspaceDepthSource1[baseCoords + int2(0, 0)].x; + depthsArr[1].y = g_ViewspaceDepthSource1[baseCoords + int2(1, 0)].x; + depthsArr[1].z = g_ViewspaceDepthSource1[baseCoords + int2(0, 1)].x; + depthsArr[1].w = g_ViewspaceDepthSource1[baseCoords + int2(1, 1)].x; + depthsArr[2].x = g_ViewspaceDepthSource2[baseCoords + int2(0, 0)].x; + depthsArr[2].y = g_ViewspaceDepthSource2[baseCoords + int2(1, 0)].x; + depthsArr[2].z = g_ViewspaceDepthSource2[baseCoords + int2(0, 1)].x; + depthsArr[2].w = g_ViewspaceDepthSource2[baseCoords + int2(1, 1)].x; + depthsArr[3].x = g_ViewspaceDepthSource3[baseCoords + int2(0, 0)].x; + depthsArr[3].y = g_ViewspaceDepthSource3[baseCoords + int2(1, 0)].x; + depthsArr[3].z = g_ViewspaceDepthSource3[baseCoords + int2(0, 1)].x; + depthsArr[3].w = g_ViewspaceDepthSource3[baseCoords + int2(1, 1)].x; + + const uint2 SVPosui = uint2(inPos.xy); + //const uint pseudoRandomA = (SVPosui.x) + 2 * (SVPosui.y); + + float dummyUnused1; + float dummyUnused2; + float falloffCalcMulSq, falloffCalcAdd; + + for (int i = 0; i < 4; i++) + { + float4 depths = depthsArr[i]; + + float closest = min(min(depths.x, depths.y), min(depths.z, depths.w)); + + CalculateRadiusParameters(abs(closest), 1.0, dummyUnused1, dummyUnused2, falloffCalcMulSq); + + float4 dists = depths - closest.xxxx; + + float4 weights = saturate(dists * dists * falloffCalcMulSq + 1.0); + + float smartAvg = dot(weights, depths) / dot(weights, float4(1.0, 1.0, 1.0, 1.0)); + + //const uint pseudoRandomIndex = (pseudoRandomA + i) % 4; + + //depthsOutArr[i] = closest; + //depthsOutArr[i] = depths[pseudoRandomIndex]; + depthsOutArr[i] = smartAvg; + } + + outD0 = depthsOutArr[0]; + outD1 = depthsOutArr[1]; + outD2 = depthsOutArr[2]; + outD3 = depthsOutArr[3]; +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_PrepareDepthMip1(in float4 inPos : SV_POSITION, out float out0 : SV_Target0, out float out1 : SV_Target1, out float out2 : SV_Target2, out float out3 : SV_Target3) +{ + PrepareDepthMip(inPos, 1, out0, out1, out2, out3); +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_PrepareDepthMip2(in float4 inPos : SV_POSITION, out float out0 : SV_Target0, out float out1 : SV_Target1, out float out2 : SV_Target2, out float out3 : SV_Target3) +{ + PrepareDepthMip(inPos, 2, out0, out1, out2, out3); +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_PrepareDepthMip3(in float4 inPos : SV_POSITION, out float out0 : SV_Target0, out float out1 : SV_Target1, out float out2 : SV_Target2, out float out3 : SV_Target3) +{ + PrepareDepthMip(inPos, 3, out0, out1, out2, out3); +} + +// AO generation + +float3 LoadNormal(int2 pos) +{ + float3 normalEncoded = g_NormalmapSource.Load(int3(pos, 0)).xyz; + float3 normalWS = DecodeNormal(normalEncoded); + float3 normalVS = mul(normalWS, (float3x3)ViewMatrix); + return normalVS; +} + +float3 LoadNormal(int2 pos, int2 offset) +{ + float3 normalEncoded = g_NormalmapSource.Load(int3(pos, 0), offset).xyz; + float3 normalWS = DecodeNormal(normalEncoded); + float3 normalVS = mul(normalWS, (float3x3)ViewMatrix); + return normalVS; +} + +float CalculatePixelObscurance(float3 pixelNormal, float3 hitDelta, float falloffCalcMulSq) +{ + // All vectors are in viewspace + + float lengthSq = dot(hitDelta, hitDelta); + float NdotD = dot(pixelNormal, hitDelta) / sqrt(lengthSq); + float falloffMult = max(0.0, lengthSq * falloffCalcMulSq + 1.0); + return max(0, NdotD - EffectHorizonAngleThreshold) * falloffMult; +} + +void SSAOTapInner(const int qualityLevel, inout float obscuranceSum, inout float weightSum, const float2 samplingUV, const float mipLevel, const float3 pixCenterPos, const float3 negViewspaceDir, float3 pixelNormal, const float falloffCalcMulSq, const float weightMod, const int dbgTapIndex) +{ + // Get depth at sample + float viewspaceSampleZ = g_ViewspaceDepthSource.SampleLevel(SamplerPointClamp, samplingUV.xy, mipLevel).x; + + // Convert to viewspace + float3 hitPos = NDCToViewspace(samplingUV.xy, viewspaceSampleZ).xyz; + float3 hitDelta = hitPos - pixCenterPos; + + float obscurance = CalculatePixelObscurance(pixelNormal, hitDelta, falloffCalcMulSq); + float weight = 1.0; + + if (qualityLevel >= SSAO_HALOING_REDUCTION_ENABLE_AT_QUALITY_PRESET) + { + //float reduct = max(0, dot(hitDelta, negViewspaceDir)); + float reduct = max(0, -hitDelta.z); // Cheaper, less correct version + reduct = saturate(reduct * NegRecEffectRadius + 2.0); // saturate(2.0 - reduct / EffectRadius); + weight = SSAO_HALOING_REDUCTION_AMOUNT * reduct + (1.0 - SSAO_HALOING_REDUCTION_AMOUNT); + } + + weight *= weightMod; + obscuranceSum += obscurance * weight; + weightSum += weight; +} + +void SSAOTap(const int qualityLevel, inout float obscuranceSum, inout float weightSum, const int tapIndex, const float2x2 rotScale, const float3 pixCenterPos, const float3 negViewspaceDir, float3 pixelNormal, const float2 normalizedScreenPos, const float mipOffset, const float falloffCalcMulSq, float weightMod, float2 normXY, float normXYLength) +{ + float2 sampleOffset; + float samplePow2Len; + + // Patterns + { + float4 newSample = g_samplePatternMain[tapIndex]; + sampleOffset = mul(rotScale, newSample.xy); + samplePow2Len = newSample.w; // Precalculated, same as: samplePow2Len = log2(length(newSample.xy)); + weightMod *= newSample.z; + } + + // Snap to pixel center (more correct obscurance math, avoids artifacts) + sampleOffset = round(sampleOffset); + + // Calculate MIP based on the sample distance from the centre, similar to as described + // in http://graphics.cs.williams.edu/papers/SAOHPG12/. + float mipLevel = (qualityLevel < SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET) ? (0) : (samplePow2Len + mipOffset); + + float2 samplingUV = sampleOffset * Viewport2xPixelSize + normalizedScreenPos; + + SSAOTapInner(qualityLevel, obscuranceSum, weightSum, samplingUV, mipLevel, pixCenterPos, negViewspaceDir, pixelNormal, falloffCalcMulSq, weightMod, tapIndex * 2); + + // For the second tap, just use the mirrored offset + float2 sampleOffsetMirroredUV = -sampleOffset; + + // Tilt the second set of samples so that the disk is effectively rotated by the normal + // Effective at removing one set of artifacts, but too expensive for lower quality settings + if (qualityLevel >= SSAO_TILT_SAMPLES_ENABLE_AT_QUALITY_PRESET) + { + float dotNorm = dot(sampleOffsetMirroredUV, normXY); + sampleOffsetMirroredUV -= dotNorm * normXYLength * normXY; + sampleOffsetMirroredUV = round(sampleOffsetMirroredUV); + } + + // Snap to pixel center (more correct obscurance math, avoids artifacts) + float2 samplingMirroredUV = sampleOffsetMirroredUV * Viewport2xPixelSize + normalizedScreenPos; + + SSAOTapInner(qualityLevel, obscuranceSum, weightSum, samplingMirroredUV, mipLevel, pixCenterPos, negViewspaceDir, pixelNormal, falloffCalcMulSq, weightMod, tapIndex * 2 + 1); +} + +// This function is designed to only work with half/half depth at the moment - there's a couple of hardcoded paths that expect pixel/texel size, so it will not work for full res +void GenerateSSAOShadowsInternal(out float outShadowTerm, out float4 outEdges, out float outWeight, const float2 SVPos/*, const float2 normalizedScreenPos*/, int qualityLevel) +{ + float2 SVPosRounded = trunc(SVPos); + uint2 SVPosui = uint2(SVPosRounded); // same as uint2(SVPos) + + const int numberOfTaps = g_numTaps[qualityLevel]; + float pixZ, pixLZ, pixTZ, pixRZ, pixBZ; + + float4 valuesUL = TextureGatherRed(g_ViewspaceDepthSource, SamplerPointWrap, SVPosRounded * HalfViewportPixelSize); + float4 valuesBR = TextureGatherRed(g_ViewspaceDepthSource, SamplerPointWrap, SVPosRounded * HalfViewportPixelSize, int2(1, 1)); + + // Get this pixel's viewspace depth + pixZ = valuesUL.y; + + // Skip too far pixels + if (pixZ > EffectMaxDistance) + { + outShadowTerm = 1; + outEdges = 1; + outWeight = 0; + return; + } + + // Get left right top bottom neighbouring pixels for edge detection (gets compiled out on qualityLevel == 0) + pixLZ = valuesUL.x; + pixTZ = valuesUL.z; + pixRZ = valuesBR.z; + pixBZ = valuesBR.x; + + float2 normalizedScreenPos = SVPosRounded * Viewport2xPixelSize + Viewport2xPixelSize_x_025; + float3 pixCenterPos = NDCToViewspace(normalizedScreenPos, pixZ); // g + + // Load this pixel's viewspace normal + uint2 fullResCoord = SVPosui * 2 + PerPassFullResCoordOffset.xy; + float3 pixelNormal = LoadNormal(fullResCoord); + + float2 pixelDirRBViewspaceSizeAtCenterZ = NDCToViewspace(normalizedScreenPos.xy + ViewportPixelSize.xy, pixCenterPos.z).xy - pixCenterPos.xy; + + float pixLookupRadiusMod; + float falloffCalcMulSq; + + // Calculate effect radius and fit our screen sampling pattern inside it + float effectViewspaceRadius; + CalculateRadiusParameters(length(pixCenterPos), pixelDirRBViewspaceSizeAtCenterZ, pixLookupRadiusMod, effectViewspaceRadius, falloffCalcMulSq); + + // Calculate samples rotation/scaling + float2x2 rotScale; + { + // Reduce effect radius near the screen edges slightly; ideally, one would render a larger depth buffer (5% on each side) instead + if (qualityLevel >= SSAO_REDUCE_RADIUS_NEAR_SCREEN_BORDER_ENABLE_AT_QUALITY_PRESET) + { + float nearScreenBorder = min(min(normalizedScreenPos.x, 1.0 - normalizedScreenPos.x), min(normalizedScreenPos.y, 1.0 - normalizedScreenPos.y)); + nearScreenBorder = saturate(10.0 * nearScreenBorder + 0.6); + pixLookupRadiusMod *= nearScreenBorder; + } + + // Load & update pseudo-random rotation matrix + uint pseudoRandomIndex = uint(SVPosRounded.y * 2 + SVPosRounded.x) % 5; + float4 rs = PatternRotScaleMatrices[pseudoRandomIndex]; + rotScale = float2x2(rs.x * pixLookupRadiusMod, rs.y * pixLookupRadiusMod, rs.z * pixLookupRadiusMod, rs.w * pixLookupRadiusMod); + } + + // The main obscurance & sample weight storage + float obscuranceSum = 0.0; + float weightSum = 0.0; + + // Edge mask for between this and left/right/top/bottom neighbour pixels - not used in quality level 0 so initialize to "no edge" (1 is no edge, 0 is edge) + float4 edgesLRTB = float4(1.0, 1.0, 1.0, 1.0); + + // Move center pixel slightly towards camera to avoid imprecision artifacts due to using of 16bit depth buffer; a lot smaller offsets needed when using 32bit floats + pixCenterPos *= DepthPrecisionOffsetMod; + + if (qualityLevel >= SSAO_DEPTH_BASED_EDGES_ENABLE_AT_QUALITY_PRESET) + { + edgesLRTB = CalculateEdges(pixZ, pixLZ, pixRZ, pixTZ, pixBZ); + } + + // Adds a more high definition sharp effect, which gets blurred out (reuses left/right/top/bottom samples that we used for edge detection) + if (qualityLevel >= SSAO_DETAIL_AO_ENABLE_AT_QUALITY_PRESET) + { + // Approximate neighbouring pixels positions (actually just deltas or "positions - pixCenterPos") + float3 viewspaceDirZNormalized = float3(pixCenterPos.xy / pixCenterPos.zz, 1.0); + float3 pixLDelta = float3(-pixelDirRBViewspaceSizeAtCenterZ.x, 0.0, 0.0) + viewspaceDirZNormalized * (pixLZ - pixCenterPos.z); // very close approximation of: float3 pixLPos = NDCToViewspace(normalizedScreenPos + float2(-HalfViewportPixelSize.x, 0.0), pixLZ).xyz - pixCenterPos.xyz; + float3 pixRDelta = float3(+pixelDirRBViewspaceSizeAtCenterZ.x, 0.0, 0.0) + viewspaceDirZNormalized * (pixRZ - pixCenterPos.z); // very close approximation of: float3 pixRPos = NDCToViewspace(normalizedScreenPos + float2(+HalfViewportPixelSize.x, 0.0), pixRZ).xyz - pixCenterPos.xyz; + float3 pixTDelta = float3(0.0, -pixelDirRBViewspaceSizeAtCenterZ.y, 0.0) + viewspaceDirZNormalized * (pixTZ - pixCenterPos.z); // very close approximation of: float3 pixTPos = NDCToViewspace(normalizedScreenPos + float2(0.0, -HalfViewportPixelSize.y), pixTZ).xyz - pixCenterPos.xyz; + float3 pixBDelta = float3(0.0, +pixelDirRBViewspaceSizeAtCenterZ.y, 0.0) + viewspaceDirZNormalized * (pixBZ - pixCenterPos.z); // very close approximation of: float3 pixBPos = NDCToViewspace(normalizedScreenPos + float2(0.0, +HalfViewportPixelSize.y), pixBZ).xyz - pixCenterPos.xyz; + + // This is to avoid various artifacts + const float rangeReductionConst = 4.0f; + const float modifiedFalloffCalcMulSq = rangeReductionConst * falloffCalcMulSq; + + float4 additionalObscurance; + additionalObscurance.x = CalculatePixelObscurance(pixelNormal, pixLDelta, modifiedFalloffCalcMulSq); + additionalObscurance.y = CalculatePixelObscurance(pixelNormal, pixRDelta, modifiedFalloffCalcMulSq); + additionalObscurance.z = CalculatePixelObscurance(pixelNormal, pixTDelta, modifiedFalloffCalcMulSq); + additionalObscurance.w = CalculatePixelObscurance(pixelNormal, pixBDelta, modifiedFalloffCalcMulSq); + + obscuranceSum += DetailAOStrength * dot(additionalObscurance, edgesLRTB); + } + + // Sharp normals also create edges - but this adds to the cost as well + if (qualityLevel >= SSAO_NORMAL_BASED_EDGES_ENABLE_AT_QUALITY_PRESET) + { + float3 neighbourNormalL = LoadNormal(fullResCoord, int2(-2, 0)); + float3 neighbourNormalR = LoadNormal(fullResCoord, int2(2, 0)); + float3 neighbourNormalT = LoadNormal(fullResCoord, int2(0, -2)); + float3 neighbourNormalB = LoadNormal(fullResCoord, int2(0, 2)); + + const float dotThreshold = SSAO_NORMAL_BASED_EDGES_DOT_THRESHOLD; + + float4 normalEdgesLRTB; + normalEdgesLRTB.x = saturate((dot(pixelNormal, neighbourNormalL) + dotThreshold)); + normalEdgesLRTB.y = saturate((dot(pixelNormal, neighbourNormalR) + dotThreshold)); + normalEdgesLRTB.z = saturate((dot(pixelNormal, neighbourNormalT) + dotThreshold)); + normalEdgesLRTB.w = saturate((dot(pixelNormal, neighbourNormalB) + dotThreshold)); + + edgesLRTB *= normalEdgesLRTB; + } + + const float globalMipOffset = SSAO_DEPTH_MIPS_GLOBAL_OFFSET; + float mipOffset = (qualityLevel < SSAO_DEPTH_MIPS_ENABLE_AT_QUALITY_PRESET) ? (0) : (log2(pixLookupRadiusMod) + globalMipOffset); + + // Used to tilt the second set of samples so that the disk is effectively rotated by the normal + // effective at removing one set of artifacts, but too expensive for lower quality settings + float2 normXY = float2(pixelNormal.x, pixelNormal.y); + float normXYLength = length(normXY); + normXY /= float2(normXYLength, -normXYLength); + normXYLength *= SSAO_TILT_SAMPLES_AMOUNT; + + const float3 negViewspaceDir = -normalize(pixCenterPos); + + // UNROLL // <- doesn't seem to help on any platform, although the compilers seem to unroll anyway if const number of tap used! + for (int i = 0; i < numberOfTaps; i++) + { + SSAOTap(qualityLevel, obscuranceSum, weightSum, i, rotScale, pixCenterPos, negViewspaceDir, pixelNormal, normalizedScreenPos, mipOffset, falloffCalcMulSq, 1.0, normXY, normXYLength); + } + + // Calculate weighted average + float obscurance = obscuranceSum / weightSum; + + // Calculate fadeout (1 close, gradient, 0 far) + float fadeOut = 1 - saturate(pixCenterPos.z * EffectFadeOutMul + EffectFadeOutAdd); + + // Calculate near cam fade (pixels near camera has some artifacts) + fadeOut *= saturate(pixZ * EffectNearFadeMul + (-10.0f / 24.0f)); + + // Reduce the SSAO shadowing if we're on the edge to remove artifacts on edges (we don't care for the lower quality one) + if (qualityLevel >= SSAO_DEPTH_BASED_EDGES_ENABLE_AT_QUALITY_PRESET) + { + //float edgeCount = dot(1.0-edgesLRTB, float4(1.0, 1.0, 1.0, 1.0)); + + // when there's more than 2 opposite edges, start fading out the occlusion to reduce aliasing artifacts + float edgeFadeoutFactor = saturate((1.0 - edgesLRTB.x - edgesLRTB.y) * 0.35) + saturate((1.0 - edgesLRTB.z - edgesLRTB.w) * 0.35); + + // (experimental) if you want to reduce the effect next to any edge + //edgeFadeoutFactor += 0.1 * saturate(dot(1 - edgesLRTB, float4(1, 1, 1, 1))); + + fadeOut *= saturate(1.0 - edgeFadeoutFactor); + } + + // Same as a bove, but a lot more conservative version + //fadeOut *= saturate(dot(edgesLRTB, float4(0.9, 0.9, 0.9, 0.9)) - 2.6); + + // Strength + obscurance *= EffectShadowStrength; + + // Clamp + obscurance = min(obscurance, 0.98f); + + // Apply fadeout + obscurance *= fadeOut; + + // Conceptually switch to occlusion with the meaning being visibility (grows with visibility, occlusion == 1 implies full visibility), to be in line with what is more commonly used. + float occlusion = 1.0 - obscurance; + + // Modify the gradient + // Note: this cannot be moved to a later pass because of loss of precision after storing in the render target + occlusion = pow(saturate(occlusion), EffectShadowPow); + + // Set outputs + outShadowTerm = occlusion; // Our final 'occlusion' term (0 means fully occluded, 1 means fully lit) + outEdges = edgesLRTB; // These are used to prevent blurring across edges, 1 means no edge, 0 means edge, 0.5 means half way there, etc. + outWeight = weightSum; +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_GenerateQ0(in float4 inPos : SV_POSITION/*, in float2 inUV : TEXCOORD0*/, out float2 out0 : SV_Target0) +{ + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy/*, inUV*/, 0); + out0.x = outShadowTerm; + out0.y = PackEdges(float4(1, 1, 1, 1)); // No edges in low quality +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_GenerateQ1(in float4 inPos : SV_POSITION/*, in float2 inUV : TEXCOORD0*/, out float2 out0 : SV_Target0) +{ + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy/*, inUV*/, 1); + out0.x = outShadowTerm; + out0.y = PackEdges(outEdges); +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_GenerateQ2(in float4 inPos : SV_POSITION/*, in float2 inUV : TEXCOORD0*/, out float2 out0 : SV_Target0) +{ + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy/*, inUV*/, 2); + out0.x = outShadowTerm; + out0.y = PackEdges(outEdges); +} + +META_PS(true, FEATURE_LEVEL_ES2) +void PS_GenerateQ3(in float4 inPos : SV_POSITION/*, in float2 inUV : TEXCOORD0*/, out float2 out0 : SV_Target0) +{ + float outShadowTerm; + float outWeight; + float4 outEdges; + GenerateSSAOShadowsInternal(outShadowTerm, outEdges, outWeight, inPos.xy/*, inUV*/, 3); + out0.x = outShadowTerm; + out0.y = PackEdges(outEdges); +} + +// Pixel shader that does smart blurring (to avoid bleeding) + +void AddSample(float ssaoValue, float edgeValue, inout float sum, inout float sumWeight) +{ + float weight = edgeValue; + sum += (weight * ssaoValue); + sumWeight += weight; +} + +float2 SampleBlurredWide(float4 inPos, float2 coord) +{ + float2 vC = g_BlurInput.SampleLevel(SamplerPointWrap, coord, 0.0, int2(0, 0)).xy; + float2 vL = g_BlurInput.SampleLevel(SamplerPointWrap, coord, 0.0, int2(-2, 0)).xy; + float2 vT = g_BlurInput.SampleLevel(SamplerPointWrap, coord, 0.0, int2(0, -2)).xy; + float2 vR = g_BlurInput.SampleLevel(SamplerPointWrap, coord, 0.0, int2(2, 0)).xy; + float2 vB = g_BlurInput.SampleLevel(SamplerPointWrap, coord, 0.0, int2(0, 2)).xy; + + float packedEdges = vC.y; + float4 edgesLRTB = UnpackEdges(packedEdges); + edgesLRTB.x *= UnpackEdges(vL.y).y; + edgesLRTB.z *= UnpackEdges(vT.y).w; + edgesLRTB.y *= UnpackEdges(vR.y).x; + edgesLRTB.w *= UnpackEdges(vB.y).z; + + float ssaoValue = vC.x; + float ssaoValueL = vL.x; + float ssaoValueT = vT.x; + float ssaoValueR = vR.x; + float ssaoValueB = vB.x; + + float sumWeight = 0.8f; + float sum = ssaoValue * sumWeight; + + AddSample(ssaoValueL, edgesLRTB.x, sum, sumWeight); + AddSample(ssaoValueR, edgesLRTB.y, sum, sumWeight); + AddSample(ssaoValueT, edgesLRTB.z, sum, sumWeight); + AddSample(ssaoValueB, edgesLRTB.w, sum, sumWeight); + + float ssaoAvg = sum / sumWeight; + + ssaoValue = ssaoAvg; //min(ssaoValue, ssaoAvg) * 0.2 + ssaoAvg * 0.8; + + return float2(ssaoValue, packedEdges); +} + +float2 SampleBlurred(float4 inPos, float2 coord) +{ + float packedEdges = g_BlurInput.Load(int3(inPos.xy, 0)).y; + float4 edgesLRTB = UnpackEdges(packedEdges); + + float4 valuesUL = TextureGatherRed(g_BlurInput, SamplerPointWrap, coord - HalfViewportPixelSize * 0.5); + float4 valuesBR = TextureGatherRed(g_BlurInput, SamplerPointWrap, coord + HalfViewportPixelSize * 0.5); + + float ssaoValue = valuesUL.y; + float ssaoValueL = valuesUL.x; + float ssaoValueT = valuesUL.z; + float ssaoValueR = valuesBR.z; + float ssaoValueB = valuesBR.x; + + float sumWeight = 0.5f; + float sum = ssaoValue * sumWeight; + + AddSample(ssaoValueL, edgesLRTB.x, sum, sumWeight); + AddSample(ssaoValueR, edgesLRTB.y, sum, sumWeight); + AddSample(ssaoValueT, edgesLRTB.z, sum, sumWeight); + AddSample(ssaoValueB, edgesLRTB.w, sum, sumWeight); + + float ssaoAvg = sum / sumWeight; + + ssaoValue = ssaoAvg; //min(ssaoValue, ssaoAvg) * 0.2 + ssaoAvg * 0.8; + + return float2(ssaoValue, packedEdges); +} + +// Edge-sensitive blur +META_PS(true, FEATURE_LEVEL_ES2) +float2 PS_SmartBlur(in float4 inPos : SV_POSITION, in float2 inUV : TEXCOORD0) : SV_Target +{ + return SampleBlurred(inPos, inUV); +} + +// Edge-sensitive blur (wider kernel) +META_PS(true, FEATURE_LEVEL_ES2) +float2 PS_SmartBlurWide(in float4 inPos : SV_POSITION, in float2 inUV : TEXCOORD0) : SV_Target +{ + return SampleBlurredWide(inPos, inUV); +} + +// Edge-ignorant blur in x and y directions, 9 pixels touched (for the lowest quality level 0) +META_PS(true, FEATURE_LEVEL_ES2) +float2 PS_NonSmartBlur(in float4 inPos : SV_POSITION, in float2 inUV : TEXCOORD0) : SV_Target +{ + float2 halfPixel = HalfViewportPixelSize * 0.5f; + + float2 centre = g_BlurInput.SampleLevel(SamplerLinearClamp, inUV, 0.0).xy; + + float4 vals; + vals.x = g_BlurInput.SampleLevel(SamplerLinearClamp, inUV + float2(-halfPixel.x * 3, -halfPixel.y), 0.0).x; + vals.y = g_BlurInput.SampleLevel(SamplerLinearClamp, inUV + float2(+halfPixel.x, -halfPixel.y * 3), 0.0).x; + vals.z = g_BlurInput.SampleLevel(SamplerLinearClamp, inUV + float2(-halfPixel.x, +halfPixel.y * 3), 0.0).x; + vals.w = g_BlurInput.SampleLevel(SamplerLinearClamp, inUV + float2(+halfPixel.x * 3, +halfPixel.y), 0.0).x; + + return float2(dot(vals, 0.2.xxxx) + centre.x * 0.2, centre.y); +} + +// Edge-ignorant blur & apply (for the lowest quality level 0) +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Apply(in float4 inPos : SV_POSITION, in float2 inUV : TEXCOORD0) : SV_Target +{ + float a = g_FinalSSAO.SampleLevel(SamplerLinearClamp, float3(inUV.xy, 0), 0.0).x; + float b = g_FinalSSAO.SampleLevel(SamplerLinearClamp, float3(inUV.xy, 1), 0.0).x; + float c = g_FinalSSAO.SampleLevel(SamplerLinearClamp, float3(inUV.xy, 2), 0.0).x; + float d = g_FinalSSAO.SampleLevel(SamplerLinearClamp, float3(inUV.xy, 3), 0.0).x; + float avg = (a + b + c + d) * 0.25; + + // This must match GBuffer layout (material AO is in GBuffer0.a) + return float4(1.0, 1.0, 1.0, avg); +} + +// Edge-ignorant blur & apply, skipping half pixels in checkerboard pattern +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_ApplyHalf(in float4 inPos : SV_POSITION, in float2 inUV : TEXCOORD0) : SV_Target +{ + float a = g_FinalSSAO.SampleLevel(SamplerLinearClamp, float3(inUV.xy, 0), 0.0).x; + float d = g_FinalSSAO.SampleLevel(SamplerLinearClamp, float3(inUV.xy, 3), 0.0).x; + float avg = (a + d) * 0.5; + + // This must match GBuffer layout (material AO is in GBuffer0.a) + return float4(1.0, 1.0, 1.0, avg); +} diff --git a/Source/Shaders/SSR.shader b/Source/Shaders/SSR.shader new file mode 100644 index 000000000..21e2763c7 --- /dev/null +++ b/Source/Shaders/SSR.shader @@ -0,0 +1,403 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/BRDF.hlsl" +#include "./Flax/Random.hlsl" +#include "./Flax/MonteCarlo.hlsl" +#include "./Flax/LightingCommon.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/ReflectionsCommon.hlsl" +#include "./Flax/BRDF.hlsl" + +// Enable/disable luminance filter to reduce reflections highlights +#define SSR_REDUCE_HIGHLIGHTS 1 + +// Enable/disable blurring SSR during sampling results and mixing with reflections buffer +#define SSR_MIX_BLUR 1 + +META_CB_BEGIN(0, Data) + +GBufferData GBuffer; + +float MaxColorMiplevel; +float TraceSizeMax; +float MaxTraceSamples; +float RoughnessFade; + +float2 SSRtexelSize; +float TemporalTime; +float BRDFBias; + +float WorldAntiSelfOcclusionBias; +float EdgeFadeFactor; +float TemporalResponse; +float TemporalScale; + +float RayTraceStep; +float NoTemporalEffect; +float Intensity; +float FadeOutDistance; + +float3 Dummy0; +float InvFadeDistance; + +float4x4 ViewMatrix; +float4x4 ViewProjectionMatrix; + +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +Texture2D Texture0 : register(t4); +Texture2D Texture1 : register(t5); +Texture2D Texture2 : register(t6); + +float max2(float2 v) +{ + return max(v.x, v.y); +} + +float2 RandN2(float2 pos, float2 random) +{ + return frac(sin(dot(pos.xy + random, float2(12.9898, 78.233))) * float2(43758.5453, 28001.8384)); +} + +// 1:-1 to 0:1 +float2 ClipToUv(float2 clipPos) +{ + return clipPos * float2(0.5, -0.5) + float2(0.5, 0.5); +} + +// go into clip space (-1:1 from bottom/left to up/right) +float3 ProjectWorldToClip(float3 wsPos) +{ + float4 clipPos = mul(float4(wsPos, 1), ViewProjectionMatrix); + return clipPos.xyz / clipPos.w; +} + +// go into UV space. (0:1 from top/left to bottom/right) +float3 ProjectWorldToUv(float3 wsPos) +{ + float3 clipPos = ProjectWorldToClip(wsPos); + return float3(ClipToUv(clipPos.xy), clipPos.z); +} + +float4 TangentToWorld(float3 N, float4 H) +{ + float3 upVector = abs(N.z) < 0.999 ? float3(0.0, 0.0, 1.0) : float3(1.0, 0.0, 0.0); + float3 T = normalize(cross(upVector, N)); + float3 B = cross(N, T); + return float4((T * H.x) + (B * H.y) + (N * H.z), H.w); +} + +float RayAttenBorder(float2 pos, float value) +{ + float borderDist = min(1.0 - max(pos.x, pos.y), min(pos.x, pos.y)); + return saturate(borderDist > value ? 1.0 : borderDist / value); +} + +// Pixel Shader for screen space reflections rendering - combine pass +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_CombinePass(Quad_VS2PS input) : SV_Target0 +{ + // Inputs: + // Texture0 - light buffer + // Texture1 - reflections buffer + // Texture2 - PreIntegratedGF + + // Sample GBuffer and light buffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, input.TexCoord); + float4 light = SAMPLE_RT(Texture0, input.TexCoord); + + // Check if can light pixel + BRANCH + if (gBuffer.ShadingModel != SHADING_MODEL_UNLIT) + { + // Sample reflections buffer + float3 reflections = SAMPLE_RT(Texture1, input.TexCoord).rgb; + + // Calculate specular color + float3 specularColor = GetSpecularColor(gBuffer); + if (gBuffer.Metalness < 0.001) + specularColor = 0.04f * gBuffer.Specular; + + // Calculate reflection color + float3 V = normalize(gBufferData.ViewPos - gBuffer.WorldPos); + float NoV = saturate(dot(gBuffer.Normal, V)); + light.rgb += reflections * EnvBRDF(Texture2, specularColor, gBuffer.Roughness, NoV) * gBuffer.AO; + } + + return light; +} + +// Pixel Shader for screen space reflections rendering - ray trace pass +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_RayTracePass(Quad_VS2PS input) : SV_Target0 +{ + float2 uv = input.TexCoord; + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Reject invalid pixels + if (gBuffer.ShadingModel == SHADING_MODEL_UNLIT || gBuffer.Roughness > RoughnessFade || gBuffer.ViewPos.z > FadeOutDistance) + return 0; + + // Calculate view space normal vector + float3 normalVS = mul(gBuffer.Normal, (float3x3)ViewMatrix); + + // Randomize it a little + float2 jitter = RandN2(uv, TemporalTime); + float2 Xi = jitter; + Xi.y = lerp(Xi.y, 0.0, BRDFBias); + + float4 H = TangentToWorld(gBuffer.Normal, ImportanceSampleGGX(Xi, gBuffer.Roughness)); + if (NoTemporalEffect) + H.xyz = gBuffer.Normal; + + // Calculate normalized view space reflection vector + float3 reflectVS = normalize(reflect(gBuffer.ViewPos, normalVS)); + if (gBuffer.ViewPos.z < 1.0 && reflectVS.z < 0.4) + return 0; + + float3 viewWS = normalize(gBuffer.WorldPos - GBuffer.ViewPos); + float3 reflectWS = reflect(viewWS, H.xyz); + + float3 startWS = gBuffer.WorldPos + gBuffer.Normal * WorldAntiSelfOcclusionBias; + float3 startUV = ProjectWorldToUv(startWS); + float3 endUV = ProjectWorldToUv(startWS + reflectWS); + + float3 rayUV = endUV - startUV; + rayUV *= RayTraceStep / max2(abs(rayUV.xy)); + float3 startUv = startUV + rayUV * 2; + + float3 currOffset = startUv; + float3 rayStep = rayUV * 2; + + // Calculate number of samples + float3 samplesToEdge = ((sign(rayStep.xyz) * 0.5 + 0.5) - currOffset.xyz) / rayStep.xyz; + samplesToEdge.x = min(samplesToEdge.x, min(samplesToEdge.y, samplesToEdge.z)) * 1.05f; + float numSamples = min(MaxTraceSamples, samplesToEdge.x); + rayStep *= samplesToEdge.x / numSamples; + + // Calculate depth difference error + float depthDiffError = 1.3f * abs(rayStep.z); + + // Ray trace + float currSampleIndex = 0; + float currSample, depthDiff; + LOOP + while (currSampleIndex < numSamples) + { + // Sample depth buffer and calculate depth difference + currSample = SampleZ(currOffset.xy); + depthDiff = currOffset.z - currSample; + + // Check intersection + if (depthDiff >= 0) + { + if (depthDiff < depthDiffError) + { + break; + } + else + { + currOffset -= rayStep; + rayStep *= 0.5; + } + } + + // Move forward + currOffset += rayStep; + currSampleIndex++; + } + + // Check if has valid result after ray tracing + if (currSampleIndex >= numSamples) + { + // All samples done but no result + return 0; + } + + float2 hitUV = currOffset.xy; + + // Fade rays close to screen edge + const float fadeStart = 0.9f; + const float fadeEnd = 1.0f; + const float fadeDiffRcp = 1.0f / (fadeEnd - fadeStart); + float2 boundary = abs(hitUV - float2(0.5f, 0.5f)) * 2.0f; + float fadeOnBorder = 1.0f - saturate((boundary.x - fadeStart) * fadeDiffRcp); + fadeOnBorder *= 1.0f - saturate((boundary.y - fadeStart) * fadeDiffRcp); + fadeOnBorder = smoothstep(0.0f, 1.0f, fadeOnBorder); + fadeOnBorder *= RayAttenBorder(hitUV, EdgeFadeFactor); + + // Fade rays on high roughness + float roughnessFade = saturate((RoughnessFade - gBuffer.Roughness) * 20); + + // Fade on distance + float distanceFade = saturate((FadeOutDistance - gBuffer.ViewPos.z) * InvFadeDistance); + + // Output: xy: hitUV, z: hitMask, w: unused + return float4(hitUV, fadeOnBorder * roughnessFade * distanceFade * Intensity, 0); +} + +#ifndef RESOLVE_SAMPLES +#define RESOLVE_SAMPLES 1 +#endif + +// Pixel Shader for screen space reflections rendering - resolve pass +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(RESOLVE_SAMPLES=1) +META_PERMUTATION_1(RESOLVE_SAMPLES=2) +META_PERMUTATION_1(RESOLVE_SAMPLES=4) +META_PERMUTATION_1(RESOLVE_SAMPLES=8) +float4 PS_ResolvePass(Quad_VS2PS input) : SV_Target0 +{ + static const float2 Offsets[8] = + { + float2( 0, 0), + float2( 2, -2), + float2(-2, -2), + float2( 0, 2), + float2(-2, 0), + float2( 0, -2), + float2( 2, 0), + float2( 2, 2), + }; + + float2 uv = input.TexCoord; + + // Inputs: + // Texture0 - color buffer (rgb color, with mip maps chain or without) + // Texture1 - ray trace buffer (xy: hitUV, z: hitMask) + + // Early out for pixels with no hit result + if (Texture1.SampleLevel(SamplerLinearClamp, uv, 0).z <= 0.001) + return 0; + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Calculate view vector + float3 viewVector = normalize(gBufferData.ViewPos - gBuffer.WorldPos); + + // Randomize it a little + float2 random = RandN2(uv, TemporalTime); + float2 blueNoise = random.xy * 2.0 - 1.0; + float2x2 offsetRotationMatrix = float2x2(blueNoise.x, blueNoise.y, -blueNoise.y, blueNoise.x); + + float NdotV = saturate(dot(gBuffer.Normal, viewVector)); + float coneTangent = lerp(0.0, gBuffer.Roughness * 5 * (1.0 - BRDFBias), pow(NdotV, 1.5) * sqrt(gBuffer.Roughness)); + + // Resolve samples + float4 result = 0.0; + UNROLL + for (int i = 0; i < RESOLVE_SAMPLES; i++) + { + float2 offsetUV = Offsets[i] * SSRtexelSize; + offsetUV = mul(offsetRotationMatrix, offsetUV); + + // "uv" is the location of the current (or "local") pixel. We want to resolve the local pixel using + // intersections spawned from neighbouring pixels. The neighbouring pixel is this one: + float2 neighborUv = uv + offsetUV; + + // Now we fetch the intersection point + float4 hitPacked = Texture1.SampleLevel(SamplerLinearClamp, neighborUv, 0); + float2 hitUv = hitPacked.xy; + float hitMask = hitPacked.z; + + float intersectionCircleRadius = coneTangent * length(hitUv - uv); + float mip = clamp(log2(intersectionCircleRadius * TraceSizeMax), 0.0, MaxColorMiplevel); + + float3 sampleColor = Texture0.SampleLevel(SamplerLinearClamp, hitUv, mip).rgb; +#if SSR_REDUCE_HIGHLIGHTS + sampleColor /= 1 + Luminance(sampleColor); +#endif + + result.rgb += sampleColor; + result.a += hitMask; + } + + // Calculate final result value + result /= RESOLVE_SAMPLES; +#if SSR_REDUCE_HIGHLIGHTS + result.rgb /= 1 - Luminance(result.rgb); +#endif + + //return float4(abs(Luminance(result) - Luminance(saturate(result))).xxx, 1); + //return saturate(result); + return result; +} + +// Pixel Shader for screen space reflections rendering - temporal pass +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_TemporalPass(Quad_VS2PS input) : SV_Target0 +{ + // Inputs: + // Texture0 - resolved SSR reflections buffer + // Texture1 - prev frame temporal SSR buffer + // Texture2 - motion vectors + + float2 uv = input.TexCoord; + + // Sample velocity + float2 velocity = Texture2.SampleLevel(SamplerLinearClamp, uv, 0).xy; + + // Prepare + float2 prevUV = uv - velocity; + float4 current = Texture0.SampleLevel(SamplerLinearClamp, uv, 0); + float4 previous = Texture1.SampleLevel(SamplerLinearClamp, prevUV, 0); + float2 du = float2(SSRtexelSize.x, 0.0); + float2 dv = float2(0.0, SSRtexelSize.y); + + // Sample pixels around + float4 currentTopLeft = Texture0.SampleLevel(SamplerLinearClamp, uv.xy - dv - du, 0); + float4 currentTopCenter = Texture0.SampleLevel(SamplerLinearClamp, uv.xy - dv, 0); + float4 currentTopRight = Texture0.SampleLevel(SamplerLinearClamp, uv.xy - dv + du, 0); + float4 currentMiddleLeft = Texture0.SampleLevel(SamplerLinearClamp, uv.xy - du, 0); + float4 currentMiddleCenter = Texture0.SampleLevel(SamplerLinearClamp, uv.xy, 0); + float4 currentMiddleRight = Texture0.SampleLevel(SamplerLinearClamp, uv.xy + du, 0); + float4 currentBottomLeft = Texture0.SampleLevel(SamplerLinearClamp, uv.xy + dv - du, 0); + float4 currentBottomCenter = Texture0.SampleLevel(SamplerLinearClamp, uv.xy + dv, 0); + float4 currentBottomRight = Texture0.SampleLevel(SamplerLinearClamp, uv.xy + dv + du, 0); + + float4 currentMin = min(currentTopLeft, min(currentTopCenter, min(currentTopRight, min(currentMiddleLeft, min(currentMiddleCenter, min(currentMiddleRight, min(currentBottomLeft, min(currentBottomCenter, currentBottomRight)))))))); + float4 currentMax = max(currentTopLeft, max(currentTopCenter, max(currentTopRight, max(currentMiddleLeft, max(currentMiddleCenter, max(currentMiddleRight, max(currentBottomLeft, max(currentBottomCenter, currentBottomRight)))))))); + + float scale = TemporalScale; + + float4 center = (currentMin + currentMax) * 0.5f; + currentMin = (currentMin - center) * scale + center; + currentMax = (currentMax - center) * scale + center; + + previous = clamp(previous, currentMin, currentMax); + current = clamp(current, 0, HDR_CLAMP_MAX); + + float response = TemporalResponse * (1 - length(velocity) * 8); + return lerp(current, previous, saturate(response)); +} + +// Pixel Shader for screen space reflections rendering - mix pass +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_MixPass(Quad_VS2PS input) : SV_Target0 +{ + // Inputs: + // Texture0 - final SSR reflections buffer + + float4 ssr = Texture0.SampleLevel(SamplerLinearClamp, input.TexCoord, 0); + +#if SSR_MIX_BLUR + + ssr += Texture0.SampleLevel(SamplerLinearClamp, input.TexCoord + float2(0, SSRtexelSize.y), 0); + ssr += Texture0.SampleLevel(SamplerLinearClamp, input.TexCoord - float2(0, SSRtexelSize.y), 0); + ssr += Texture0.SampleLevel(SamplerLinearClamp, input.TexCoord + float2(SSRtexelSize.x, 0), 0); + ssr += Texture0.SampleLevel(SamplerLinearClamp, input.TexCoord - float2(SSRtexelSize.x, 0), 0); + ssr *= (1.0f / 5.0f); + +#endif + + return ssr; +} diff --git a/Source/Shaders/Shadows.shader b/Source/Shaders/Shadows.shader new file mode 100644 index 000000000..af4282caa --- /dev/null +++ b/Source/Shaders/Shadows.shader @@ -0,0 +1,193 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#define USE_GBUFFER_CUSTOM_DATA + +#include "./Flax/Common.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/ShadowsSampling.hlsl" + +META_CB_BEGIN(0, PerLight) +GBufferData GBuffer; +LightData Light; +LightShadowData LightShadow; +float4x4 WVP; +float4x4 ViewProjectionMatrix; +float2 Dummy0; +float ContactShadowsDistance; +float ContactShadowsLength; +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) +DECLARE_LIGHTSHADOWDATA_ACCESS(LightShadow); + +#if CONTACT_SHADOWS + +float RayCastScreenSpaceShadow(GBufferData gBufferData, GBufferSample gBuffer, float3 rayStartWS, float3 rayDirWS, float rayLength) +{ +#if SHADOWS_QUALITY == 3 + const uint maxSteps = 16; +#elif SHADOWS_QUALITY == 3 + const uint maxSteps = 12; +#else + const uint maxSteps = 8; +#endif + float distanceFade = 1 - saturate(pow(length(gBuffer.WorldPos - gBufferData.ViewPos) / ContactShadowsDistance, 2)); + float maxShadowLength = gBufferData.InvProjectionMatrix[1][1] * gBuffer.ViewPos.z * rayLength * distanceFade; + float4 rayStartCS = mul(float4(rayStartWS, 1), ViewProjectionMatrix); + float4 rayEndCS = mul(float4(rayStartWS + rayDirWS * maxShadowLength, 1), ViewProjectionMatrix); + float4 rayStepCS = (rayEndCS - rayStartCS) / maxSteps; + float4 rayCS = rayStartCS + rayStepCS; + float lightAmountMax = 0; + for (uint step = 0; step < maxSteps; step++) + { + float3 rayUV = rayCS.xyz / rayCS.w; + rayUV.xy = rayUV.xy * float2(0.5, -0.5) + float2(0.5, 0.5); + float sceneDepth = SampleDepth(gBufferData, rayUV.xy) * gBufferData.ViewFar; + float rayDepth = (gBufferData.ViewInfo.w / (rayUV.z - gBufferData.ViewInfo.z)) * gBufferData.ViewFar * 0.998; + float surfaceThickness = 0.035f + rayDepth * rayLength; + float depthTestHardness = 0.005f; + float lightAmount = saturate((rayDepth - sceneDepth) / depthTestHardness) * saturate((sceneDepth + surfaceThickness - rayDepth) / depthTestHardness); + lightAmountMax = max(lightAmountMax, lightAmount); + rayCS += rayStepCS; + } + return 1 - lightAmountMax; +} + +#endif + +// Vertex Shader for shadow volume model rendering +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +Model_VS2PS VS_Model(ModelInput_PosOnly input) +{ + Model_VS2PS output; + output.Position = mul(float4(input.Position.xyz, 1), WVP); + output.ScreenPos = output.Position; + return output; +} + +#ifdef _PS_PointLight + +TextureCube ShadowMapPoint : register(t5); + +// Pixel shader for point light shadow rendering +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_2(SHADOWS_QUALITY=0,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=1,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=2,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=3,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=0,CONTACT_SHADOWS=1) +META_PERMUTATION_2(SHADOWS_QUALITY=1,CONTACT_SHADOWS=1) +META_PERMUTATION_2(SHADOWS_QUALITY=2,CONTACT_SHADOWS=1) +META_PERMUTATION_2(SHADOWS_QUALITY=3,CONTACT_SHADOWS=1) +float4 PS_PointLight(Model_VS2PS input) : SV_Target0 +{ + float shadow = 1; + float subsurfaceShadow = 1; + + // Obtain texture coordinates corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Sample shadow + LightShadowData lightShadowData = GetLightShadowData(); + shadow = SampleShadow(Light, lightShadowData, ShadowMapPoint, gBuffer, subsurfaceShadow); + +#if CONTACT_SHADOWS + // Calculate screen-space contact shadow + shadow *= RayCastScreenSpaceShadow(gBufferData, gBuffer, gBuffer.WorldPos, normalize(Light.Position - gBuffer.WorldPos), ContactShadowsLength); +#endif + + return float4(shadow, subsurfaceShadow, 1, 1); +} + +#endif + +#ifdef _PS_DirLight + +Texture2DArray ShadowMapDir : register(t5); + +// Pixel shader for directional light shadow rendering +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_3(SHADOWS_QUALITY=0,CSM_BLENDING=0,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=1,CSM_BLENDING=0,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=2,CSM_BLENDING=0,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=3,CSM_BLENDING=0,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=0,CSM_BLENDING=1,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=1,CSM_BLENDING=1,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=2,CSM_BLENDING=1,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=3,CSM_BLENDING=1,CONTACT_SHADOWS=0) +META_PERMUTATION_3(SHADOWS_QUALITY=0,CSM_BLENDING=0,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=1,CSM_BLENDING=0,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=2,CSM_BLENDING=0,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=3,CSM_BLENDING=0,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=0,CSM_BLENDING=1,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=1,CSM_BLENDING=1,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=2,CSM_BLENDING=1,CONTACT_SHADOWS=1) +META_PERMUTATION_3(SHADOWS_QUALITY=3,CSM_BLENDING=1,CONTACT_SHADOWS=1) +float4 PS_DirLight(Quad_VS2PS input) : SV_Target0 +{ + float shadow = 1; + float subsurfaceShadow = 1; + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, input.TexCoord); + + // Sample shadow + LightShadowData lightShadowData = GetLightShadowData(); + shadow = SampleShadow(Light, lightShadowData, ShadowMapDir, gBuffer, subsurfaceShadow); + +#if CONTACT_SHADOWS + // Calculate screen-space contact shadow + shadow *= RayCastScreenSpaceShadow(gBufferData, gBuffer, gBuffer.WorldPos, Light.Direction, ContactShadowsLength); +#endif + + return float4(shadow, subsurfaceShadow, 1, 1); +} + +#endif + +#ifdef _PS_SpotLight + +Texture2D ShadowMapSpot : register(t5); + +// Pixel shader for spot light shadow rendering +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_2(SHADOWS_QUALITY=0,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=1,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=2,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=3,CONTACT_SHADOWS=0) +META_PERMUTATION_2(SHADOWS_QUALITY=0,CONTACT_SHADOWS=1) +META_PERMUTATION_2(SHADOWS_QUALITY=1,CONTACT_SHADOWS=1) +META_PERMUTATION_2(SHADOWS_QUALITY=2,CONTACT_SHADOWS=1) +META_PERMUTATION_2(SHADOWS_QUALITY=3,CONTACT_SHADOWS=1) +float4 PS_SpotLight(Model_VS2PS input) : SV_Target0 +{ + float shadow = 1; + float subsurfaceShadow = 1; + + // Obtain texture coordinates corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample GBuffer + GBufferData gBufferData = GetGBufferData(); + GBufferSample gBuffer = SampleGBuffer(gBufferData, uv); + + // Sample shadow + LightShadowData lightShadowData = GetLightShadowData(); + shadow = SampleShadow(Light, lightShadowData, ShadowMapSpot, gBuffer, subsurfaceShadow); + +#if CONTACT_SHADOWS + // Calculate screen-space contact shadow + shadow *= RayCastScreenSpaceShadow(gBufferData, gBuffer, gBuffer.WorldPos, normalize(Light.Position - gBuffer.WorldPos), ContactShadowsLength); +#endif + + return float4(shadow, subsurfaceShadow, 1, 1); +} + +#endif diff --git a/Source/Shaders/ShadowsCommon.hlsl b/Source/Shaders/ShadowsCommon.hlsl new file mode 100644 index 000000000..ad83fb7e5 --- /dev/null +++ b/Source/Shaders/ShadowsCommon.hlsl @@ -0,0 +1,74 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __SHADOWS_COMMON__ +#define __SHADOWS_COMMON__ + +#include "./Flax/Common.hlsl" + +// Maximum number of directional light shadows cascaded splits +#define MaxNumCascades 4 + +// Set default macros if not provided +#ifndef SHADOWS_QUALITY + #define SHADOWS_QUALITY 0 +#endif +#ifndef CSM_BLENDING + #define CSM_BLENDING 0 +#endif + +// Structure that contains information about light +struct LightShadowData +{ + float2 ShadowMapSize; + float Sharpness; + float Fade; + + float NormalOffsetScale; + float Bias; + float FadeDistance; + uint NumCascades; + + float4 CascadeSplits; + float4x4 ShadowVP[6]; +}; + +#ifdef PLATFORM_ANDROID +// #AdrenoVK_CB_STRUCT_MEMBER_ACCESS_BUG +#define DECLARE_LIGHTSHADOWDATA_ACCESS(uniformName) LightShadowData Get##uniformName##Data() { LightShadowData tmp; tmp.ShadowMapSize = uniformName.ShadowMapSize; tmp.Sharpness = uniformName.Sharpness; tmp.Fade = uniformName.Fade; tmp.NormalOffsetScale = uniformName.NormalOffsetScale; tmp.Bias = uniformName.Bias; tmp.FadeDistance = uniformName.FadeDistance; tmp.NumCascades = uniformName.NumCascades; tmp.CascadeSplits = uniformName.CascadeSplits; tmp.ShadowVP[0] = uniformName.ShadowVP[0]; tmp.ShadowVP[1] = uniformName.ShadowVP[1]; tmp.ShadowVP[2] = uniformName.ShadowVP[2]; tmp.ShadowVP[3] = uniformName.ShadowVP[3]; tmp.ShadowVP[4] = uniformName.ShadowVP[4]; tmp.ShadowVP[5] = uniformName.ShadowVP[5]; return tmp; } +#else +#define DECLARE_LIGHTSHADOWDATA_ACCESS(uniformName) LightShadowData Get##uniformName##Data() { return uniformName; } +#endif + +// Gets the cube texture face index to use for shadow map sampling for the given view-to-light direction vector +// Where: direction = normalize(worldPosition - lightPosition) +int GetCubeFaceIndex(float3 direction) +{ + int cubeFaceIndex; + float3 absDirection = abs(direction); + float maxDirection = max(absDirection.x, max(absDirection.y, absDirection.z)); + if (maxDirection == absDirection.x) + cubeFaceIndex = absDirection.x == direction.x ? 0 : 1; + else if (maxDirection == absDirection.y) + cubeFaceIndex = absDirection.y == direction.y ? 2 : 3; + else + cubeFaceIndex = absDirection.z == direction.z ? 4 : 5; + return cubeFaceIndex; +} + +float3 GetShadowPositionOffset(float offsetScale, float NoL, float3 normal) +{ + // Note: offsetScale should be multiplied by 2*ShadowMapTextureTexelSize on CPU + float normalOffsetScale = saturate(1.0f - NoL); + return normal * (offsetScale * normalOffsetScale); +} + +float CalculateSubsurfaceOcclusion(float opacity, float sceneDepth, float shadowMapDepth) +{ + float thickness = max(sceneDepth - shadowMapDepth, 0); + //float density = -0.05f * log(1 - min(opacity, 0.999f)); + //float occlusion = saturate(exp(-thickness * density)); + float occlusion = 1 - thickness * lerp(1.0f, 100.0f, opacity); + return shadowMapDepth > 0.99f ? 1 : occlusion; +} + +#endif diff --git a/Source/Shaders/ShadowsSampling.hlsl b/Source/Shaders/ShadowsSampling.hlsl new file mode 100644 index 000000000..694f24f72 --- /dev/null +++ b/Source/Shaders/ShadowsSampling.hlsl @@ -0,0 +1,690 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#ifndef __SHADOWS_SAMPLING__ +#define __SHADOWS_SAMPLING__ + +#include "./Flax/ShadowsCommon.hlsl" +#include "./Flax/GBufferCommon.hlsl" +#include "./Flax/LightingCommon.hlsl" + +// Select shadows filter based on quality +// Supported sampling kernel sizes fo each shadowing technique: +// CSM: 2, 3, 5, 7, 9 +// Cube: 2, 5, 12, 29 +// Spot: 2, 5, 12, 29 +#if SHADOWS_QUALITY == 0 + + #define FilterSizeCSM 2 + #define FilterSizeCube 2 + #define FilterSizeSpot 2 + +#elif SHADOWS_QUALITY == 1 + + #define FilterSizeCSM 3 + #define FilterSizeCube 5 + #define FilterSizeSpot 5 + +#elif SHADOWS_QUALITY == 2 + + #define FilterSizeCSM 5 + #define FilterSizeCube 12 + #define FilterSizeSpot 12 + +#else // SHADOWS_QUALITY == 3 + + #define FilterSizeCSM 7 + #define FilterSizeCube 12 + #define FilterSizeSpot 12 + +#endif + +#if SHADOWS_QUALITY != 0 +#include "./Flax/PCFKernels.hlsl" +#endif + +// Samples the shadow map with a fixed-size PCF kernel optimized with GatherCmpRed. +// Uses code from "Fast Conventional Shadow Filtering" by Holger Gruen, in GPU Pro. +float SampleShadowMapFixedSizePCF(Texture2DArray shadowMap, float2 shadowMapSize, float sceneDepth, float2 shadowPos, uint cascadeIndex) +{ +#if FilterSizeCSM == 2 + + #if FEATURE_LEVEL >= FEATURE_LEVEL_SM5 + + return shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, float3(shadowPos.xy, cascadeIndex), sceneDepth); + + #else + + return sceneDepth < shadowMap.SampleLevel(SamplerLinearClamp, float3(shadowPos.xy, cascadeIndex), 0).r; + + #endif + +#else + + const int FS_2 = FilterSizeCSM / 2; + float2 tc = shadowPos.xy; + float4 s = 0.0f; + float2 stc = (shadowMapSize * tc.xy) + float2(0.5f, 0.5f); + float2 tcs = floor(stc); + float2 fc; + int row; + int col; + float4 v1[FS_2 + 1]; + float2 v0[FS_2 + 1]; + float3 baseUV = float3(tc.xy, cascadeIndex); + float2 shadowMapSizeInv = 1.0f / shadowMapSize; + + fc.xy = stc - tcs; + tc.xy = tcs * shadowMapSizeInv; + + // Loop over the rows + UNROLL + for (row = -FS_2; row <= FS_2; row += 2) + { + UNROLL + for (col = -FS_2; col <= FS_2; col += 2) + { + float value = CSMFilterWeights[row + FS_2][col + FS_2]; + + if (col > -FS_2) + value += CSMFilterWeights[row + FS_2][col + FS_2 - 1]; + + if (col < FS_2) + value += CSMFilterWeights[row + FS_2][col + FS_2 + 1]; + + if (row > -FS_2) { + value += CSMFilterWeights[row + FS_2 - 1][col + FS_2]; + + if (col < FS_2) + value += CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1]; + + if (col > -FS_2) + value += CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 1]; + } + + if (value != 0.0f) + { + // Using Gather: xyzw in counter clockwise order starting with the sample to the lower left of the queried location + #if CAN_USE_GATHER + + v1[(col + FS_2) / 2] = shadowMap.GatherCmp(ShadowSampler, baseUV, sceneDepth, int2(col, row)); + + #else + + float4 gather; + + gather.x = sceneDepth < shadowMap.SampleLevel(SamplerPointClamp, float3(tc.xy + float2(0, 1) * shadowMapSizeInv, cascadeIndex), 0, int2(col, row)).r; + gather.y = sceneDepth < shadowMap.SampleLevel(SamplerPointClamp, float3(tc.xy + float2(1, 1) * shadowMapSizeInv, cascadeIndex), 0, int2(col, row)).r; + gather.z = sceneDepth < shadowMap.SampleLevel(SamplerPointClamp, float3(tc.xy + float2(1, 0) * shadowMapSizeInv, cascadeIndex), 0, int2(col, row)).r; + gather.w = sceneDepth < shadowMap.SampleLevel(SamplerPointClamp, float3(tc.xy + float2(0, 0) * shadowMapSizeInv, cascadeIndex), 0, int2(col, row)).r; + + v1[(col + FS_2) / 2] = gather; + + #endif + } + else + v1[(col + FS_2) / 2] = 0.0f; + + if (col == -FS_2) + { + s.x += (1.0f - fc.y) * (v1[0].w * (CSMFilterWeights[row + FS_2][col + FS_2] + - CSMFilterWeights[row + FS_2][col + FS_2] * fc.x) + + v1[0].z * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2] + - CSMFilterWeights[row + FS_2][col + FS_2 + 1.0f]) + + CSMFilterWeights[row + FS_2][col + FS_2 + 1])); + s.y += fc.y * (v1[0].x * (CSMFilterWeights[row + FS_2][col + FS_2] + - CSMFilterWeights[row + FS_2][col + FS_2] * fc.x) + + v1[0].y * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2] + - CSMFilterWeights[row + FS_2][col + FS_2 + 1]) + + CSMFilterWeights[row + FS_2][col + FS_2 + 1])); + if(row > -FS_2) + { + s.z += (1.0f - fc.y) * (v0[0].x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2] * fc.x) + + v0[0].y * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1]) + + CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1])); + s.w += fc.y * (v1[0].w * (CSMFilterWeights[row + FS_2 - 1][col + FS_2] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2] * fc.x) + + v1[0].z * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1]) + + CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1])); + } + } + else if (col == FS_2) + { + s.x += (1 - fc.y) * (v1[FS_2].w * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2][col + FS_2]) + CSMFilterWeights[row + FS_2][col + FS_2]) + + v1[FS_2].z * fc.x * CSMFilterWeights[row + FS_2][col + FS_2]); + s.y += fc.y * (v1[FS_2].x * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2][col + FS_2] ) + CSMFilterWeights[row + FS_2][col + FS_2]) + + v1[FS_2].y * fc.x * CSMFilterWeights[row + FS_2][col + FS_2]); + if(row > -FS_2) { + s.z += (1 - fc.y) * (v0[FS_2].x * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2]) + + CSMFilterWeights[row + FS_2 - 1][col + FS_2]) + + v0[FS_2].y * fc.x * CSMFilterWeights[row + FS_2 - 1][col + FS_2]); + s.w += fc.y * (v1[FS_2].w * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2]) + + CSMFilterWeights[row + FS_2 - 1][col + FS_2]) + + v1[FS_2].z * fc.x * CSMFilterWeights[row + FS_2 - 1][col + FS_2]); + } + } + else + { + s.x += (1 - fc.y) * (v1[(col + FS_2) / 2].w * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2][col + FS_2 + 0] ) + CSMFilterWeights[row + FS_2][col + FS_2 + 0]) + + v1[(col + FS_2) / 2].z * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2 - 0] + - CSMFilterWeights[row + FS_2][col + FS_2 + 1]) + CSMFilterWeights[row + FS_2][col + FS_2 + 1])); + s.y += fc.y * (v1[(col + FS_2) / 2].x * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2-1] + - CSMFilterWeights[row + FS_2][col + FS_2 + 0]) + CSMFilterWeights[row + FS_2][col + FS_2 + 0]) + + v1[(col + FS_2) / 2].y * (fc.x * (CSMFilterWeights[row + FS_2][col + FS_2 - 0] + - CSMFilterWeights[row + FS_2][col + FS_2 + 1]) + CSMFilterWeights[row + FS_2][col + FS_2 + 1])); + if(row > -FS_2) { + s.z += (1 - fc.y) * (v0[(col + FS_2) / 2].x * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 0]) + CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 0]) + + v0[(col + FS_2) / 2].y * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 0] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1]) + CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1])); + s.w += fc.y * (v1[(col + FS_2) / 2].w * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 1] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 0]) + CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 0]) + + v1[(col + FS_2) / 2].z * (fc.x * (CSMFilterWeights[row + FS_2 - 1][col + FS_2 - 0] + - CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1]) + CSMFilterWeights[row + FS_2 - 1][col + FS_2 + 1])); + } + } + + if (row != FS_2) + v0[(col + FS_2) / 2] = v1[(col + FS_2) / 2].xy; + } + } + + return dot(s, 1.0f) / CSMFilterWeightsSum; + +#endif +} + +// Helper function for SampleShadowMapOptimizedPCF +float SampleShadowMap(Texture2DArray shadowMap, float2 baseUv, float u, float v, float2 shadowMapSizeInv, uint cascadeIndex, float depth) +{ + float2 uv = baseUv + float2(u, v) * shadowMapSizeInv; + return shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, float3(uv, cascadeIndex), depth); +} + +// The method used in The Witness +float SampleShadowMapOptimizedPCF(Texture2DArray shadowMap, float2 shadowMapSize, float sceneDepth, float2 shadowPos, uint cascadeIndex) +{ + float2 uv = shadowPos.xy * shadowMapSize; // 1 unit - 1 texel + float2 shadowMapSizeInv = 1.0f / shadowMapSize; + + float2 baseUv; + baseUv.x = floor(uv.x + 0.5); + baseUv.y = floor(uv.y + 0.5); + float s = (uv.x + 0.5 - baseUv.x); + float t = (uv.y + 0.5 - baseUv.y); + baseUv -= float2(0.5, 0.5); + baseUv *= shadowMapSizeInv; + + float sum = 0; + +#if FilterSizeCSM == 2 + + return shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, float3(shadowPos.xy, cascadeIndex), sceneDepth); + +#elif FilterSizeCSM == 3 + + float uw0 = (3 - 2 * s); + float uw1 = (1 + 2 * s); + + float u0 = (2 - s) / uw0 - 1; + float u1 = s / uw1 + 1; + + float vw0 = (3 - 2 * t); + float vw1 = (1 + 2 * t); + + float v0 = (2 - t) / vw0 - 1; + float v1 = t / vw1 + 1; + + sum += uw0 * vw0 * SampleShadowMap(shadowMap, baseUv, u0, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw0 * SampleShadowMap(shadowMap, baseUv, u1, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw0 * vw1 * SampleShadowMap(shadowMap, baseUv, u0, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw1 * SampleShadowMap(shadowMap, baseUv, u1, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + + return sum * 1.0f / 16; + + #elif FilterSizeCSM == 5 + + float uw0 = (4 - 3 * s); + float uw1 = 7; + float uw2 = (1 + 3 * s); + + float u0 = (3 - 2 * s) / uw0 - 2; + float u1 = (3 + s) / uw1; + float u2 = s / uw2 + 2; + + float vw0 = (4 - 3 * t); + float vw1 = 7; + float vw2 = (1 + 3 * t); + + float v0 = (3 - 2 * t) / vw0 - 2; + float v1 = (3 + t) / vw1; + float v2 = t / vw2 + 2; + + sum += uw0 * vw0 * SampleShadowMap(shadowMap, baseUv, u0, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw0 * SampleShadowMap(shadowMap, baseUv, u1, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw0 * SampleShadowMap(shadowMap, baseUv, u2, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + + sum += uw0 * vw1 * SampleShadowMap(shadowMap, baseUv, u0, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw1 * SampleShadowMap(shadowMap, baseUv, u1, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw1 * SampleShadowMap(shadowMap, baseUv, u2, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + + sum += uw0 * vw2 * SampleShadowMap(shadowMap, baseUv, u0, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw2 * SampleShadowMap(shadowMap, baseUv, u1, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw2 * SampleShadowMap(shadowMap, baseUv, u2, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + + return sum * 1.0f / 144; + +#else // FilterSizeCSM == 7 + + float uw0 = (5 * s - 6); + float uw1 = (11 * s - 28); + float uw2 = -(11 * s + 17); + float uw3 = -(5 * s + 1); + + float u0 = (4 * s - 5) / uw0 - 3; + float u1 = (4 * s - 16) / uw1 - 1; + float u2 = -(7 * s + 5) / uw2 + 1; + float u3 = -s / uw3 + 3; + + float vw0 = (5 * t - 6); + float vw1 = (11 * t - 28); + float vw2 = -(11 * t + 17); + float vw3 = -(5 * t + 1); + + float v0 = (4 * t - 5) / vw0 - 3; + float v1 = (4 * t - 16) / vw1 - 1; + float v2 = -(7 * t + 5) / vw2 + 1; + float v3 = -t / vw3 + 3; + + sum += uw0 * vw0 * SampleShadowMap(shadowMap, baseUv, u0, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw0 * SampleShadowMap(shadowMap, baseUv, u1, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw0 * SampleShadowMap(shadowMap, baseUv, u2, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw3 * vw0 * SampleShadowMap(shadowMap, baseUv, u3, v0, shadowMapSizeInv, cascadeIndex, sceneDepth); + + sum += uw0 * vw1 * SampleShadowMap(shadowMap, baseUv, u0, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw1 * SampleShadowMap(shadowMap, baseUv, u1, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw1 * SampleShadowMap(shadowMap, baseUv, u2, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw3 * vw1 * SampleShadowMap(shadowMap, baseUv, u3, v1, shadowMapSizeInv, cascadeIndex, sceneDepth); + + sum += uw0 * vw2 * SampleShadowMap(shadowMap, baseUv, u0, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw2 * SampleShadowMap(shadowMap, baseUv, u1, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw2 * SampleShadowMap(shadowMap, baseUv, u2, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw3 * vw2 * SampleShadowMap(shadowMap, baseUv, u3, v2, shadowMapSizeInv, cascadeIndex, sceneDepth); + + sum += uw0 * vw3 * SampleShadowMap(shadowMap, baseUv, u0, v3, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw1 * vw3 * SampleShadowMap(shadowMap, baseUv, u1, v3, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw2 * vw3 * SampleShadowMap(shadowMap, baseUv, u2, v3, shadowMapSizeInv, cascadeIndex, sceneDepth); + sum += uw3 * vw3 * SampleShadowMap(shadowMap, baseUv, u3, v3, shadowMapSizeInv, cascadeIndex, sceneDepth); + + return sum * (1.0f / 2704); + +#endif +} + +// Samples the shadow from the shadow map cascade +float SampleShadowCascade(Texture2DArray shadowMap, float2 shadowMapSize, float sceneDepth, float2 shadowPosition, uint cascadeIndex) +{ + float shadow = SampleShadowMapFixedSizePCF(shadowMap, shadowMapSize, sceneDepth, shadowPosition, cascadeIndex); + //float shadow = SampleShadowMapOptimizedPCF(shadowMap, shadowMapSize, sceneDepth, shadowPosition, cascadeIndex); + return shadow; +} + +// Samples the shadow for the given directional light (cascaded shadow map sampling) +float SampleShadow(LightData light, LightShadowData shadow, Texture2DArray shadowMap, float3 worldPosition, float viewDepth) +{ + // Create a blend factor which is one before and at the fade plane + float fade = saturate((viewDepth - shadow.CascadeSplits[shadow.NumCascades - 1] + shadow.FadeDistance) / shadow.FadeDistance); + BRANCH + if (fade >= 1.0) + { + return 1; + } + + // Figure out which cascade to sample from + uint cascadeIndex = 0; + for (uint i = 0; i < shadow.NumCascades - 1; i++) + { + if (viewDepth > shadow.CascadeSplits[i]) + cascadeIndex = i + 1; + } + + // Project into shadow space + float4 shadowPosition = mul(float4(worldPosition, 1.0f), shadow.ShadowVP[cascadeIndex]); + shadowPosition.xy /= shadowPosition.w; + shadowPosition.z -= shadow.Bias; + + // Sample shadow + float result = SampleShadowCascade(shadowMap, shadow.ShadowMapSize, shadowPosition.z, shadowPosition.xy, cascadeIndex); + + // Increase the sharpness for higher cascades to match the filter radius + const float SharpnessScale[MaxNumCascades] = { 1.0f, 1.5f, 3.0f, 3.5f }; + float sharpness = shadow.Sharpness * SharpnessScale[cascadeIndex]; + +#if CSM_BLENDING + // Sample the next cascade, and blend between the two results to smooth the transition + const float BlendThreshold = 0.1f; + float nextSplit = shadow.CascadeSplits[cascadeIndex]; + float splitSize = cascadeIndex == 0 ? nextSplit : nextSplit - shadow.CascadeSplits[cascadeIndex - 1]; + float splitDist = (nextSplit - viewDepth) / splitSize; + BRANCH + if (splitDist <= BlendThreshold && cascadeIndex != shadow.NumCascades - 1) + { + // Find the position of this pixel in light space of next cascade + shadowPosition = mul(float4(worldPosition, 1.0f), shadow.ShadowVP[cascadeIndex + 1]); + shadowPosition.xy /= shadowPosition.w; + shadowPosition.z -= shadow.Bias; + + // Sample next cascade and blur result + float nextSplitShadow = SampleShadowCascade(shadowMap, shadow.ShadowMapSize, shadowPosition.z, shadowPosition.xy, cascadeIndex + 1); + float lerpAmount = smoothstep(0.0f, BlendThreshold, splitDist); + lerpAmount = splitDist / BlendThreshold; + result = lerp(nextSplitShadow, result, lerpAmount); + + // Blur sharpness as well + sharpness = lerp(shadow.Sharpness * SharpnessScale[cascadeIndex + 1], sharpness, lerpAmount); + } +#endif + + // Apply shadow fade and sharpness + result = saturate((result - 0.5) * sharpness + 0.5); + result = lerp(1.0f, result, (1 - fade) * shadow.Fade); + return result; +} + +// Samples the shadow for the given directional light (cascaded shadow map sampling) for the material surface (supports subsurface shadowing) +float SampleShadow(LightData light, LightShadowData shadow, Texture2DArray shadowMap, GBufferSample gBuffer, out float subsurfaceShadow) +{ + subsurfaceShadow = 1; + + // Create a blend factor which is one before and at the fade plane + float viewDepth = gBuffer.ViewPos.z; + float fade = saturate((viewDepth - shadow.CascadeSplits[shadow.NumCascades - 1] + shadow.FadeDistance) / shadow.FadeDistance); + BRANCH + if (fade >= 1.0) + { + return 1; + } + + // Figure out which cascade to sample from + uint cascadeIndex = 0; + for (uint i = 0; i < shadow.NumCascades - 1; i++) + { + if (viewDepth > shadow.CascadeSplits[i]) + cascadeIndex = i + 1; + } + +#if defined(USE_GBUFFER_CUSTOM_DATA) + // Subsurface shadowing + BRANCH + if (IsSubsurfaceMode(gBuffer.ShadingModel)) + { + // Get subsurface material info + float opacity = gBuffer.CustomData.a; + + // Project into shadow space + float4 shadowPosition = mul(float4(gBuffer.WorldPos, 1.0f), shadow.ShadowVP[cascadeIndex]); + shadowPosition.xy /= shadowPosition.w; + shadowPosition.z -= shadow.Bias; + + // Sample shadow map (single hardware sample with hardware filtering) + float shadowMapDepth = shadowMap.SampleLevel(SamplerLinearClamp, float3(shadowPosition.xy, cascadeIndex), 0).r; + subsurfaceShadow = CalculateSubsurfaceOcclusion(opacity, shadowPosition.z, shadowMapDepth); + + // Apply shadow fade + subsurfaceShadow = lerp(1.0f, subsurfaceShadow, (1 - fade) * shadow.Fade); + } +#endif + + // Skip if surface is in a full shadow + float NoL = dot(gBuffer.Normal, light.Direction); + BRANCH + if (NoL <= 0) + { + return 0; + } + + // Apply normal offset bias + float3 samplePosWS = gBuffer.WorldPos; + samplePosWS += GetShadowPositionOffset(shadow.NormalOffsetScale, NoL, gBuffer.Normal); + + // Sample shadow + return SampleShadow(light, shadow, shadowMap, samplePosWS, viewDepth); +} + +// Samples the shadow for the given spot light (PCF shadow map sampling) +float SampleShadow(LightData light, LightShadowData shadow, Texture2D shadowMap, float3 worldPosition) +{ + float3 toLight = light.Position - worldPosition; + float toLightLength = length(toLight); + float3 L = toLight / toLightLength; + float dirCheck = dot(-light.Direction, L); + + // Skip pixels outside of the light influence + BRANCH + if (toLightLength > light.Radius || dirCheck < 0) + { + return 1; + } + + // Negate direction and use normalized value + toLight = -L; + + // Project into shadow space + float4 shadowPosition = mul(float4(worldPosition, 1.0f), shadow.ShadowVP[0]); + shadowPosition.z -= shadow.Bias; + shadowPosition.xyz /= shadowPosition.w; + + float2 shadowMapUVs = shadowPosition.xy * float2(0.5f, -0.5f) + float2(0.5f, 0.5f); + +#if FilterSizeSpot == 2 + + // Use single hardware sample with filtering + float result = shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, shadowMapUVs, shadowPosition.z); + +#else + + float3 sideVector = normalize(cross(toLight, float3(0, 0, 1))); + float3 upVector = cross(sideVector, toLight); + + float shadowMapSizeInv = 1.0f / shadow.ShadowMapSize.x; + sideVector *= shadowMapSizeInv; + upVector *= shadowMapSizeInv; + + // Use PCF filter + float result = 0; + UNROLL + for(int i = 0; i < FilterSizeCube; i++) + { + float2 samplePos = shadowMapUVs + sideVector * PCFDiscSamples[i].x + upVector * PCFDiscSamples[i].y; + result += shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, samplePos, shadowPosition.z); + } + result *= (1.0f / FilterSizeCube); + +#endif + + // Apply shadow fade and sharpness + result = saturate((result - 0.5) * shadow.Sharpness + 0.5); + result = lerp(1.0f, result, shadow.Fade); + + return result; +} + +// Samples the shadow for the given spot light (PCF shadow map sampling) for the material surface (supports subsurface shadowing) +float SampleShadow(LightData light, LightShadowData shadow, Texture2D shadowMap, GBufferSample gBuffer, out float subsurfaceShadow) +{ + subsurfaceShadow = 1; + float3 toLight = light.Position - gBuffer.WorldPos; + float toLightLength = length(toLight); + float3 L = toLight / toLightLength; + float dirCheck = dot(-light.Direction, L); + + // Skip pixels outside of the light influence + BRANCH + if (toLightLength > light.Radius || dirCheck < 0) + { + return 1; + } + +#if defined(USE_GBUFFER_CUSTOM_DATA) + // Subsurface shadowing + BRANCH + if (IsSubsurfaceMode(gBuffer.ShadingModel)) + { + // Get subsurface material info + float opacity = gBuffer.CustomData.a; + + // Project into shadow space + float4 shadowPosition = mul(float4(gBuffer.WorldPos, 1.0f), shadow.ShadowVP[0]); + shadowPosition.z -= shadow.Bias; + shadowPosition.xyz /= shadowPosition.w; + + // Sample shadow map (use single hardware sample with filtering) + float shadowMapDepth = shadowMap.SampleLevel(SamplerLinearClamp, shadowPosition.xy * float2(0.5f, -0.5f) + float2(0.5f, 0.5f), 0).r; + subsurfaceShadow = CalculateSubsurfaceOcclusion(opacity, shadowPosition.z, shadowMapDepth); + + // Apply shadow fade + subsurfaceShadow = lerp(1.0f, subsurfaceShadow, shadow.Fade); + } +#endif + + // Skip if surface is in a full shadow + float NoL = dot(gBuffer.Normal, L); + BRANCH + if (NoL <= 0) + { + return 0; + } + + // Apply normal offset bias + float3 samplePosWS = gBuffer.WorldPos; + samplePosWS += GetShadowPositionOffset(shadow.NormalOffsetScale, NoL, gBuffer.Normal); + + // Sample shadow + return SampleShadow(light, shadow, shadowMap, samplePosWS); +} + +// Samples the shadow for the given point light (PCF shadow map sampling) +float SampleShadow(LightData light, LightShadowData shadow, TextureCube shadowMap, float3 worldPosition) +{ + float3 toLight = light.Position - worldPosition; + float toLightLength = length(toLight); + float3 L = toLight / toLightLength; + + // Skip pixels outside of the light influence + BRANCH + if (toLightLength > light.Radius) + { + return 1; + } + + // Negate direction and use normalized value + toLight = -L; + + // Figure out which cube face we're sampling from + int cubeFaceIndex = GetCubeFaceIndex(toLight); + + // Project into shadow space + float4 shadowPosition = mul(float4(worldPosition, 1.0f), shadow.ShadowVP[cubeFaceIndex]); + shadowPosition.z -= shadow.Bias; + shadowPosition.xyz /= shadowPosition.w; + +#if FilterSizeCube == 2 + + // Use single hardware sample with filtering + float result = shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, toLight, shadowPosition.z); + +#else + + float3 sideVector = normalize(cross(toLight, float3(0, 0, 1))); + float3 upVector = cross(sideVector, toLight); + + float shadowMapSizeInv = 1.0f / shadow.ShadowMapSize.x; + sideVector *= shadowMapSizeInv; + upVector *= shadowMapSizeInv; + + // Use PCF filter + float result = 0; + UNROLL + for (int i = 0; i < FilterSizeCube; i++) + { + float3 cubeSamplePos = toLight + sideVector * PCFDiscSamples[i].x + upVector * PCFDiscSamples[i].y; + result += shadowMap.SampleCmpLevelZero(ShadowSamplerPCF, cubeSamplePos, shadowPosition.z); + } + result *= (1.0f / FilterSizeCube); + +#endif + + // Apply shadow fade and sharpness + result = saturate((result - 0.5) * shadow.Sharpness + 0.5); + result = lerp(1.0f, result, shadow.Fade); + + return result; +} + +// Samples the shadow for the given point light (PCF shadow map sampling) for the material surface (supports subsurface shadowing) +float SampleShadow(LightData light, LightShadowData shadow, TextureCube shadowMap, GBufferSample gBuffer, out float subsurfaceShadow) +{ + subsurfaceShadow = 1; + float3 toLight = light.Position - gBuffer.WorldPos; + float toLightLength = length(toLight); + float3 L = toLight / toLightLength; + + // Skip pixels outside of the light influence + BRANCH + if (toLightLength > light.Radius) + { + return 1; + } + + // Negate direction and use normalized value + toLight = -L; + + // Figure out which cube face we're sampling from + int cubeFaceIndex = GetCubeFaceIndex(toLight); + +#if defined(USE_GBUFFER_CUSTOM_DATA) + // Subsurface shadowing + BRANCH + if (IsSubsurfaceMode(gBuffer.ShadingModel)) + { + // Get subsurface material info + float opacity = gBuffer.CustomData.a; + + // Project into shadow space + float4 shadowPosition = mul(float4(gBuffer.WorldPos, 1.0f), shadow.ShadowVP[cubeFaceIndex]); + shadowPosition.z -= shadow.Bias; + shadowPosition.xyz /= shadowPosition.w; + + // Sample shadow map (use single hardware sample with filtering) + float shadowMapDepth = shadowMap.SampleLevel(SamplerLinearClamp, toLight, 0).r; + subsurfaceShadow = CalculateSubsurfaceOcclusion(opacity, shadowPosition.z, shadowMapDepth); + + // Apply shadow fade + subsurfaceShadow = lerp(1.0f, subsurfaceShadow, shadow.Fade); + } +#endif + + // Skip if surface is in a full shadow + float NoL = dot(gBuffer.Normal, L); + BRANCH + if (NoL <= 0) + { + return 0; + } + + // Apply normal offset bias + float3 samplePosWS = gBuffer.WorldPos; + samplePosWS += GetShadowPositionOffset(shadow.NormalOffsetScale, NoL, gBuffer.Normal); + + // Sample shadow + return SampleShadow(light, shadow, shadowMap, samplePosWS); +} + +#endif diff --git a/Source/Shaders/Sky.shader b/Source/Shaders/Sky.shader new file mode 100644 index 000000000..0991e6076 --- /dev/null +++ b/Source/Shaders/Sky.shader @@ -0,0 +1,98 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/MaterialCommon.hlsl" +#include "./Flax/GBuffer.hlsl" +#include "./Flax/Common.hlsl" +#include "./Flax/AtmosphereFog.hlsl" + +META_CB_BEGIN(0, Data) +float4x4 WVP; +GBufferData GBuffer; +AtmosphericFogData AtmosphericFog; +META_CB_END + +DECLARE_GBUFFERDATA_ACCESS(GBuffer) + +struct MaterialInput +{ + float4 Position : SV_Position; + float4 ScreenPos : TEXCOORD0; +}; + +// Vertex Shader function for GBuffer Pass +META_VS(true, FEATURE_LEVEL_ES2) +META_VS_IN_ELEMENT(POSITION, 0, R32G32B32_FLOAT, 0, 0, PER_VERTEX, 0, true) +MaterialInput VS(ModelInput_PosOnly input) +{ + MaterialInput output; + + // Compute vertex position + output.Position = mul(float4(input.Position.xyz, 1), WVP); + output.ScreenPos = output.Position; + + // Place pixels on the far plane + output.Position = output.Position.xyzz; + + return output; +} + +// Pixel Shader function for GBuffer Pass +META_PS(true, FEATURE_LEVEL_ES2) +GBufferOutput PS_Sky(MaterialInput input) +{ + GBufferOutput output; + + // Obtain UVs corresponding to the current pixel + float2 uv = (input.ScreenPos.xy / input.ScreenPos.w) * float2(0.5, -0.5) + float2(0.5, 0.5); + + // Sample atmosphere color + GBufferData gBufferData = GetGBufferData(); + float3 vsPos = GetViewPos(gBufferData, uv, LinearZ2DeviceDepth(gBufferData, 1)); + float3 wsPos = mul(float4(vsPos, 1), gBufferData.InvViewMatrix).xyz; + float3 viewVector = wsPos - gBufferData.ViewPos; + float sceneDepth = length(viewVector); + float4 color = GetAtmosphericFog(AtmosphericFog, gBufferData.ViewFar, gBufferData.ViewPos, viewVector, sceneDepth, float3(0, 0, 0)); + + // Pack GBuffer + output.Light = color; + output.RT0 = float4(0, 0, 0, 0); + output.RT1 = float4(1, 0, 0, SHADING_MODEL_UNLIT); + output.RT2 = float4(0, 0, 0, 0); + output.RT3 = float4(0, 0, 0, 0); + + return output; +} + +META_PS(true, FEATURE_LEVEL_ES2) +float4 PS_Fog(Quad_VS2PS input) : SV_Target0 +{ + float4 result; + /* + // Sample GBuffer + GBufferSample gBuffer = SampleGBuffer(GBuffer, input.TexCoord); + + // TODO: set valid scene color for better inscatter reflectance + //float3 sceneColor = gBuffer.Color * AtmosphericFogDensityOffset; + float3 sceneColor = float3(0, 0, 0); + + // Sample atmosphere color + float3 viewVector = gBuffer.WorldPos - GBuffer.ViewPos; + float SceneDepth = length(ViewVector); + result = GetAtmosphericFog(AtmosphericFog, GBuffer.ViewFar, GBuffer.ViewPos, viewVector, SceneDepth, sceneColor); + + //result.rgb = normalize(ViewVector); + //result.rgb = ViewVector; + //result.rgb = SceneDepth.xxx / GBuffer.ViewFar * 0.5f; + + //result = float4(input.TexCoord, 0, 1); + //result = AtmosphereTransmittanceTexture.Sample(SamplerLinearClamp, input.TexCoord); + //result = float4(AtmosphereIrradianceTexture.Sample(SamplerLinearClamp, input.TexCoord).rgb*5.0, 1.0); + //result = AtmosphereInscatterTexture.Sample(SamplerLinearClamp, float3(input.TexCoord.xy, (AtmosphericFogSunDirection.x+1.0)/2.0)); + */ + + // TODO: finish fog + result = float4(1, 0, 0, 1); + + return result; +} diff --git a/Source/Shaders/TAA.shader b/Source/Shaders/TAA.shader new file mode 100644 index 000000000..436c68186 --- /dev/null +++ b/Source/Shaders/TAA.shader @@ -0,0 +1,151 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +#include "./Flax/Common.hlsl" +#include "./Flax/GammaCorrectionCommon.hlsl" + +#define USE_TONEMAP 0 + +META_CB_BEGIN(0, Data) +float4 ScreenSize;// x-width, y-height, z-1/width, w-1/height +float4 TaaJitterStrength; // x, y, x/width, y/height +float4 FinalBlendParameters; // x: static, y: dynamic, z: motion amplification, w; sharpness +META_CB_END + +Texture2D Input : register(t0); +Texture2D InputHistory : register(t1); +Texture2D MotionVectors : register(t2); +Texture2D Depth : register(t3); + +float3 Fetch(Texture2D tex, float2 coords) +{ + return tex.SampleLevel(SamplerLinearClamp, coords, 0).rgb; +} + +float3 Map(float3 x) +{ +#if USE_TONEMAP + return FastTonemap(x); +#else + return x; +#endif +} + +float3 Unmap(float3 x) +{ +#if USE_TONEMAP + return FastTonemapInvert(x); +#else + return x; +#endif +} + +float3 ClipToAABB(float3 color, float3 minimum, float3 maximum) +{ + // Note: only clips towards aabb center (but fast!) + float3 center = 0.5 * (maximum + minimum); + float3 extents = 0.5 * (maximum - minimum); + + // This is actually `distance`, however the keyword is reserved + float3 offset = color - center; + + float3 ts = abs(extents / max(offset, 0.0001)); + float t = saturate(min(min(ts.x, ts.y), ts.z)); + return center + offset * t; +} + +float2 GetClosestFragment(float2 uv) +{ + const float2 k = ScreenSize.zw; + + const float4 neighborhood = float4( + SAMPLE_RT(Depth, uv - k).r, + SAMPLE_RT(Depth, uv + float2(k.x, -k.y)).r, + SAMPLE_RT(Depth, uv + float2(-k.x, k.y)).r, + SAMPLE_RT(Depth, uv + k).r + ); + +#if defined(REVERSED_Z) + #define COMPARE_DEPTH(a, b) step(b, a) +#else + #define COMPARE_DEPTH(a, b) step(a, b) +#endif + + float3 result = float3(0.0, 0.0, SAMPLE_RT(Depth, uv).r); + result = lerp(result, float3(-1.0, -1.0, neighborhood.x), COMPARE_DEPTH(neighborhood.x, result.z)); + result = lerp(result, float3( 1.0, -1.0, neighborhood.y), COMPARE_DEPTH(neighborhood.y, result.z)); + result = lerp(result, float3(-1.0, 1.0, neighborhood.z), COMPARE_DEPTH(neighborhood.z, result.z)); + result = lerp(result, float3( 1.0, 1.0, neighborhood.w), COMPARE_DEPTH(neighborhood.w, result.z)); + + return (uv + result.xy * k); +} + +// Pixel Shader for Temporal Anti-Aliasing +META_PS(true, FEATURE_LEVEL_ES2) +META_PERMUTATION_1(IS_ORTHO=0) +META_PERMUTATION_1(IS_ORTHO=1) +void PS(Quad_VS2PS input, out float4 output : SV_Target0, out float4 outputHistory : SV_Target1) +{ + float2 jitter = TaaJitterStrength.zw; + float2 texcoord = input.TexCoord; + const float2 k = ScreenSize.zw; + +#if IS_ORTHO + float2 closest = texcoord; +#else + float2 closest = GetClosestFragment(texcoord); +#endif + + // Sample velocity + float2 velocity = MotionVectors.SampleLevel(SamplerLinearClamp, closest, 0).xy; + + // Sample color and surround + float2 uv = texcoord - jitter; + float3 color = Fetch(Input, uv); + float3 topLeft = Fetch(Input, uv - k); + float3 bottomRight = Fetch(Input, uv + k); + float3 topRight = Fetch(Input, uv + float2(k.x, -k.y)); + float3 bottomLeft = Fetch(Input, uv + float2(-k.x, k.y)); + + float3 corners = 4.0 * (topLeft + bottomRight) - 2.0 * color; + + // Sharpen output + float sharpness = FinalBlendParameters.w; + float3 blur = (topLeft + topRight + bottomLeft + bottomRight) * 0.25; + color += (color - blur) * sharpness; + color = clamp(color, 0.0, HDR_CLAMP_MAX); + + // Tonemap color + float3 average = Map((corners + color) / 7.0); + topLeft = Map(topLeft); + bottomRight = Map(bottomRight); + color = Map(color); + + // Sample history + float3 history = Fetch(InputHistory, texcoord - velocity); + history = Map(history); + + float colorLuma = Luminance(color); + float averageLuma = Luminance(average); + float velocityLength = length(velocity); + float nudge = lerp(4.0, 0.25, velocityLength * 100.0) * abs(averageLuma - colorLuma); + + float3 minimum = min(bottomRight, topLeft) - nudge; + float3 maximum = max(topLeft, bottomRight) + nudge; + + // Clip history sample + history = ClipToAABB(history, minimum, maximum); + + // Blend color with history + //float historyLuma = Luminance(history); + //float weight = 1.0f - saturate(abs(colorLuma - historyLuma) / max(max(colorLuma, historyLuma), 0.2)); + float weight = saturate(velocityLength * FinalBlendParameters.z); + float feedback = lerp(FinalBlendParameters.x, FinalBlendParameters.y, weight * weight); + //feedback = lerp(feedback, 0.02, velocityWeight); + color = Unmap(lerp(color, history, feedback)); + color = clamp(color, 0.0, HDR_CLAMP_MAX); + + output = float4(color, 1); + outputHistory = output; + + //output = float4(1, 0, 0, 1) * feedback; +} diff --git a/Source/Shaders/VolumetricFog.shader b/Source/Shaders/VolumetricFog.shader new file mode 100644 index 000000000..169e7db5e --- /dev/null +++ b/Source/Shaders/VolumetricFog.shader @@ -0,0 +1,470 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +// Implementation based on: +// "Volumetric fog: Unified, compute shader based solution to atmospheric scattering" - Bart Wronski at Siggraph 2014 +// and +// "Physically Based and Unified Volumetric Rendering in Frostbite" - Sebastien Hillaire at Siggraph 2015 + +#define NO_GBUFFER_SAMPLING + +// Debug voxels world space positions +#define DEBUG_VOXEL_WS_POS 0 + +// Debug voxels so CS_FinalIntegration will just copy data without modifications +#define DEBUG_VOXELS 0 + +#include "./Flax/Common.hlsl" +#include "./Flax/LightingCommon.hlsl" +#include "./Flax/ShadowsSampling.hlsl" +#include "./Flax/GBuffer.hlsl" + +struct SkyLightData +{ + float3 MultiplyColor; + float VolumetricScatteringIntensity; + float3 AdditiveColor; + float Dummt0; +}; + +META_CB_BEGIN(0, Data) + +GBufferData GBuffer; + +float3 GlobalAlbedo; +float GlobalExtinctionScale; + +float3 GlobalEmissive; +float HistoryWeight; + +float3 GridSize; +uint HistoryMissSuperSampleCount; + +int3 GridSizeInt; +float PhaseG; + +float2 Dummy0; +float VolumetricFogMaxDistance; +float InverseSquaredLightDistanceBiasScale; + +float4 FogParameters; + +float4x4 PrevWorldToClip; + +float4 FrameJitterOffsets[8]; + +LightData DirectionalLight; +LightShadowData DirectionalLightShadow; +SkyLightData SkyLight; + +META_CB_END + +META_CB_BEGIN(1, PerLight) + +float2 Dummy1; +int MinZ; // Z index of the minimum slice in the range +float LocalLightScatteringIntensity; + +float4 ViewSpaceBoundingSphere; +float4x4 ViewToVolumeClip; + +LightData LocalLight; +LightShadowData LocalLightShadow; + +META_CB_END + +float ComputeDepthFromZSlice(float zSlice) +{ + return (zSlice / GridSize.z) * VolumetricFogMaxDistance; +} + +float3 ComputeCellWorldPosition(uint3 gridCoordinate, float3 cellOffset, out float sceneDepth) +{ + float2 volumeUV = (gridCoordinate.xy + cellOffset.xy) / GridSize.xy; + sceneDepth = ComputeDepthFromZSlice(gridCoordinate.z + cellOffset.z) / GBuffer.ViewFar; + float deviceDepth = LinearZ2DeviceDepth(GBuffer, sceneDepth); + return GetWorldPos(GBuffer, volumeUV, deviceDepth); +} + +float3 ComputeCellWorldPosition(uint3 gridCoordinate, float3 cellOffset) +{ + float unused; + return ComputeCellWorldPosition(gridCoordinate, cellOffset, unused); +} + +float ComputeNormalizedZSliceFromDepth(float sceneDepth) +{ + return sceneDepth / VolumetricFogMaxDistance; +} + +float3 ComputeVolumeUV(float3 worldPosition, float4x4 worldToClip) +{ + float4 ndcPosition = mul(float4(worldPosition, 1), worldToClip); + ndcPosition.xy /= ndcPosition.w; + return float3(ndcPosition.xy * float2(0.5f, -0.5f) + 0.5f, ComputeNormalizedZSliceFromDepth(ndcPosition.w)); +} + +float IsotropicPhase() +{ + return 1 / (4 * PI); +} + +float HenyeyGreensteinPhase(float g, float cosTheta) +{ + return (1 - g * g) / (4 * PI * pow(1 + g * g + 2 * g * cosTheta, 1.5f)); +} + +float SchlickPhase(float k, float cosTheta) +{ + float t = (1 + k * cosTheta); + return (1 - k * k) / (4 * PI * t * t); +} + +float RaleighPhase(float cosTheta) +{ + return 3.0f * (1.0f + cosTheta * cosTheta) / (16.0f * PI); +} + +// Positive g = forward scattering +// Zero g = isotropic +// Negative g = backward scattering +float PhaseFunction(float g, float cosTheta) +{ + return HenyeyGreensteinPhase(g, cosTheta); +} + +// Vertex shader that writes to a range of slices of a volume texture +META_VS(true, FEATURE_LEVEL_SM5) +META_FLAG(VertexToGeometryShader) +META_VS_IN_ELEMENT(TEXCOORD, 0, R32G32_FLOAT, 0, ALIGN, PER_VERTEX, 0, true) +Quad_VS2GS VS_WriteToSlice(float2 TexCoord : TEXCOORD0, uint LayerIndex : SV_InstanceID) +{ + Quad_VS2GS output; + + uint slice = LayerIndex + MinZ; + float sliceDepth = ComputeDepthFromZSlice(slice); + float sliceDepthOffset = abs(sliceDepth - ViewSpaceBoundingSphere.z); + + if (sliceDepthOffset < ViewSpaceBoundingSphere.w) + { + // Compute the radius of the circle formed by the intersection of the bounding sphere and the current depth slice + float sliceRadius = sqrt(ViewSpaceBoundingSphere.w * ViewSpaceBoundingSphere.w - sliceDepthOffset * sliceDepthOffset); + + // Place the quad vertex to tightly bound the circle + float3 viewSpaceVertexPosition = float3(ViewSpaceBoundingSphere.xy + (TexCoord * 2 - 1) * sliceRadius, sliceDepth); + output.Vertex.Position = mul(float4(viewSpaceVertexPosition, 1), ViewToVolumeClip); + } + else + { + // Slice does not intersect bounding sphere, emit degenerate triangle + output.Vertex.Position = 0; + } + + output.Vertex.TexCoord = 0; + output.LayerIndex = slice; + + return output; +} + +// Geometry shader that writes to a range of slices of a volume texture +META_GS(true, FEATURE_LEVEL_SM5) +[maxvertexcount(3)] +void GS_WriteToSlice(triangle Quad_VS2GS input[3], inout TriangleStream OutStream) +{ + Quad_GS2PS vertex0; + vertex0.Vertex = input[0].Vertex; + vertex0.LayerIndex = input[0].LayerIndex; + + Quad_GS2PS vertex1; + vertex1.Vertex = input[1].Vertex; + vertex1.LayerIndex = input[1].LayerIndex; + + Quad_GS2PS vertex2; + vertex2.Vertex = input[2].Vertex; + vertex2.LayerIndex = input[2].LayerIndex; + + OutStream.Append(vertex0); + OutStream.Append(vertex1); + OutStream.Append(vertex2); +} + +#if USE_SHADOW + +// Shadow Maps +TextureCube ShadowMapCube : register(t5); +Texture2D ShadowMapSpot : register(t6); + +float ComputeVolumeShadowing(float3 worldPosition, bool isSpotLight) +{ + float shadow = 1; + + // TODO: use single shadowmaps atlas for whole scene (with slots) - same code path for spot and point lights + if (isSpotLight) + { + shadow = SampleShadow(LocalLight, LocalLightShadow, ShadowMapSpot, worldPosition); + } + else + { + shadow = SampleShadow(LocalLight, LocalLightShadow, ShadowMapCube, worldPosition); + } + + return shadow; +} + +#endif + +META_PS(true, FEATURE_LEVEL_SM5) +META_PERMUTATION_2(USE_TEMPORAL_REPROJECTION=0, USE_SHADOW=0) +META_PERMUTATION_2(USE_TEMPORAL_REPROJECTION=1, USE_SHADOW=0) +META_PERMUTATION_2(USE_TEMPORAL_REPROJECTION=0, USE_SHADOW=1) +META_PERMUTATION_2(USE_TEMPORAL_REPROJECTION=1, USE_SHADOW=1) +float4 PS_InjectLight(Quad_GS2PS input) : SV_Target0 +{ + uint3 gridCoordinate = uint3(input.Vertex.Position.xy, input.LayerIndex); + + // Prevent from shading locations outside the volume + if (!all(gridCoordinate < GridSizeInt)) + return 0; + +#if USE_TEMPORAL_REPROJECTION + float3 historyUV = ComputeVolumeUV(ComputeCellWorldPosition(gridCoordinate, 0.5f), PrevWorldToClip); + float historyAlpha = HistoryWeight; + + FLATTEN + if (any(historyUV < 0) || any(historyUV > 1)) + { + historyAlpha = 0; + } + + uint numSuperSamples = historyAlpha < .001f ? HistoryMissSuperSampleCount : 1; +#else + uint numSuperSamples = 1; +#endif + + float3 L = 0; + float3 toLight = 0; + float NoL = 0; + float distanceAttenuation = 1; + float lightRadiusMask = 1; + float spotAttenuation = 1; + bool isSpotLight = LocalLight.SpotAngles.x > -2.0f; + + float4 scattering = 0; + for (uint sampleIndex = 0; sampleIndex < numSuperSamples; sampleIndex++) + { + float3 cellOffset = FrameJitterOffsets[sampleIndex].xyz; + //float cellOffset = 0.5f; + + float3 worldPosition = ComputeCellWorldPosition(gridCoordinate, cellOffset); + float3 cameraVector = normalize(worldPosition - GBuffer.ViewPos); + float cellRadius = length(worldPosition - ComputeCellWorldPosition(gridCoordinate + uint3(1, 1, 1), cellOffset)); + + // Bias the inverse squared light falloff based on voxel size to prevent aliasing near the light source + float distanceBias = max(cellRadius * InverseSquaredLightDistanceBiasScale, 1); + + // Get the light attenuation + GetRadialLightAttenuation(LocalLight, isSpotLight, worldPosition, float3(0, 0, 1), distanceBias * distanceBias, toLight, L, NoL, distanceAttenuation, lightRadiusMask, spotAttenuation); + float combinedAttenuation = distanceAttenuation * lightRadiusMask * spotAttenuation; + + // Peek the shadow + float shadowFactor = 1.0f; +#if USE_SHADOW + if (combinedAttenuation > 0) + { + shadowFactor = ComputeVolumeShadowing(worldPosition, isSpotLight); + } +#endif + + scattering.rgb += LocalLight.Color * (PhaseFunction(PhaseG, dot(L, -cameraVector)) * combinedAttenuation * shadowFactor * LocalLightScatteringIntensity); + } + + // Normalize + scattering.rgb /= (float)numSuperSamples; + + return scattering; +} + +#if defined(_CS_Initialize) + +RWTexture3D RWVBufferA : register(u0); +RWTexture3D RWVBufferB : register(u1); + +#define THREADGROUP_SIZE 4 + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(THREADGROUP_SIZE, THREADGROUP_SIZE, THREADGROUP_SIZE)] +void CS_Initialize(uint3 GroupId : SV_GroupID, uint3 DispatchThreadId : SV_DispatchThreadID, uint3 GroupThreadId : SV_GroupThreadID) +{ + uint3 gridCoordinate = DispatchThreadId; + + // Center of the voxel + float voxelOffset = 0.5f; + float3 worldPosition = ComputeCellWorldPosition(gridCoordinate, voxelOffset); + + // Unpack the fog parameters (packing done in C++ ExponentialHeightFog::GetVolumetricFogOptions) + float fogDensity = FogParameters.x; + float fogHeight = FogParameters.y; + float fogHeightFalloff = FogParameters.z; + + // Calculate the global fog density that matches the exponential height fog density + float globalDensity = fogDensity * exp2(-fogHeightFalloff * (worldPosition.y - fogHeight)); + float matchFactor = 0.24f; + float extinction = max(globalDensity * GlobalExtinctionScale * matchFactor, 0); + + float3 scattering = GlobalAlbedo * extinction; + float absorption = max(extinction - Luminance(scattering), 0.0f); + + if (all((int3)gridCoordinate < GridSizeInt)) + { + RWVBufferA[gridCoordinate] = float4(scattering, absorption); + RWVBufferB[gridCoordinate] = float4(GlobalEmissive, 0); + } +} + +#elif defined(_CS_LightScattering) + +RWTexture3D RWLightScattering : register(u0); + +Texture3D VBufferA : register(t0); +Texture3D VBufferB : register(t1); +Texture3D LightScatteringHistory : register(t2); +Texture3D LocalShadowedLightScattering : register(t3); +Texture2DArray ShadowMapCSM : register(t4); +TextureCube SkyLightImage : register(t5); + +#define THREADGROUP_SIZE 4 + +META_CS(true, FEATURE_LEVEL_SM5) +META_PERMUTATION_1(USE_TEMPORAL_REPROJECTION=0) +META_PERMUTATION_1(USE_TEMPORAL_REPROJECTION=1) +[numthreads(THREADGROUP_SIZE, THREADGROUP_SIZE, THREADGROUP_SIZE)] +void CS_LightScattering(uint3 GroupId : SV_GroupID, uint3 DispatchThreadId : SV_DispatchThreadID, uint3 GroupThreadId : SV_GroupThreadID) +{ + uint3 gridCoordinate = DispatchThreadId; + float3 lightScattering = 0; + uint numSuperSamples = 1; + +#if USE_TEMPORAL_REPROJECTION + float3 historyUV = ComputeVolumeUV(ComputeCellWorldPosition(gridCoordinate, 0.5f), PrevWorldToClip); + float historyAlpha = HistoryWeight; + + // Discard history if it lays outside the current view + FLATTEN + if (any(historyUV < 0) || any(historyUV > 1)) + { + historyAlpha = 0; + } + + // Supersample if the history was outside the camera frustum + // The compute shader is dispatched with extra threads, make sure those don't supersample + numSuperSamples = historyAlpha < 0.001f && all(gridCoordinate < GridSizeInt) ? HistoryMissSuperSampleCount : 1; +#endif + + for (uint sampleIndex = 0; sampleIndex < numSuperSamples; sampleIndex++) + { + float3 cellOffset = FrameJitterOffsets[sampleIndex].xyz; + //float3 cellOffset = 0.5f; + + float sceneDepth; + float3 worldPosition = ComputeCellWorldPosition(gridCoordinate, cellOffset, sceneDepth); + float3 cameraVector = worldPosition - GBuffer.ViewPos; + float cameraVectorLength = length(cameraVector); + float3 cameraVectorNormalized = cameraVector / cameraVectorLength; + + // Directional light + BRANCH + if (DirectionalLightShadow.NumCascades < 10) // NumCascades==10 if no dir light + { + // Try to sample CSM shadow at the voxel position + float shadow = 1; + if (DirectionalLightShadow.NumCascades > 0) + { + shadow = SampleShadow(DirectionalLight, DirectionalLightShadow, ShadowMapCSM, worldPosition, cameraVectorLength); + } + + lightScattering += DirectionalLight.Color * (8 * shadow * PhaseFunction(PhaseG, dot(DirectionalLight.Direction, cameraVectorNormalized))); + } + + // Sky light + if (SkyLight.VolumetricScatteringIntensity > 0) + { + float3 skyLighting = SkyLightImage.SampleLevel(SamplerLinearClamp, float3(0, 0, 0), 10000).rgb; + skyLighting = skyLighting * SkyLight.MultiplyColor + SkyLight.AdditiveColor; + lightScattering += skyLighting * SkyLight.VolumetricScatteringIntensity; + } + } + + lightScattering /= (float)numSuperSamples; + + // Apply scattering from the point and spot lights + lightScattering += LocalShadowedLightScattering[gridCoordinate].rgb; + + float4 materialScatteringAndAbsorption = VBufferA[gridCoordinate]; + float extinction = materialScatteringAndAbsorption.w + Luminance(materialScatteringAndAbsorption.xyz); + float3 materialEmissive = VBufferB[gridCoordinate].xyz; + float4 scatteringAndExtinction = float4(lightScattering * materialScatteringAndAbsorption.xyz + materialEmissive, extinction); + +#if USE_TEMPORAL_REPROJECTION + BRANCH + if (historyAlpha > 0) + { + float4 historyScatteringAndExtinction = LightScatteringHistory.SampleLevel(SamplerLinearClamp, historyUV, 0); + scatteringAndExtinction = lerp(scatteringAndExtinction, historyScatteringAndExtinction, historyAlpha); + } +#endif + + if (all(gridCoordinate < GridSizeInt)) + { + scatteringAndExtinction = isnan(scatteringAndExtinction) || isinf(scatteringAndExtinction) ? 0 : scatteringAndExtinction; + RWLightScattering[gridCoordinate] = max(scatteringAndExtinction, 0); + } +} + +#elif defined(_CS_FinalIntegration) + +RWTexture3D RWIntegratedLightScattering : register(u0); + +Texture3D LightScattering : register(t0); + +#define THREADGROUP_SIZE 8 + +META_CS(true, FEATURE_LEVEL_SM5) +[numthreads(THREADGROUP_SIZE, THREADGROUP_SIZE, 1)] +void CS_FinalIntegration(uint3 GroupId : SV_GroupID, uint3 DispatchThreadId : SV_DispatchThreadID, uint3 GroupThreadId : SV_GroupThreadID) +{ + uint3 gridCoordinate = DispatchThreadId; + + float4 accumulatedLightingAndTransmittance = float4(0, 0, 0, 1); + float3 previousSliceWorldPosition = GBuffer.ViewPos; + + for (uint layerIndex = 0; layerIndex < GridSizeInt.z; layerIndex++) + { + uint3 layerCoordinate = uint3(gridCoordinate.xy, layerIndex); + float4 scatteringAndExtinction = LightScattering[layerCoordinate]; + + float3 layerWorldPosition = ComputeCellWorldPosition(layerCoordinate, 0.5f); + float stepLength = length(layerWorldPosition - previousSliceWorldPosition); + previousSliceWorldPosition = layerWorldPosition; + + float transmittance = exp(-scatteringAndExtinction.w * stepLength); + + // Ref: "Physically Based and Unified Volumetric Rendering in Frostbite" +#define ENERGY_CONSERVING_INTEGRATION 1 +#if ENERGY_CONSERVING_INTEGRATION + float3 scatteringIntegratedOverSlice = (scatteringAndExtinction.rgb - scatteringAndExtinction.rgb * transmittance) / max(scatteringAndExtinction.w, .00001f); + accumulatedLightingAndTransmittance.rgb += scatteringIntegratedOverSlice * accumulatedLightingAndTransmittance.a; +#else + accumulatedLightingAndTransmittance.rgb += scatteringAndExtinction.rgb * accumulatedLightingAndTransmittance.a; +#endif + accumulatedLightingAndTransmittance.a *= transmittance; + +#if DEBUG_VOXELS + RWIntegratedLightScattering[layerCoordinate] = float4(scatteringAndExtinction.rgb, 1.0f); +#elif DEBUG_VOXEL_WS_POS + RWIntegratedLightScattering[layerCoordinate] = float4(layerWorldPosition.rgb, 1.0f); +#else + RWIntegratedLightScattering[layerCoordinate] = accumulatedLightingAndTransmittance; +#endif + } +} + +#endif diff --git a/Source/ThirdParty/DirectXMesh/DirectXMesh.Build.cs b/Source/ThirdParty/DirectXMesh/DirectXMesh.Build.cs new file mode 100644 index 000000000..c3a590d34 --- /dev/null +++ b/Source/ThirdParty/DirectXMesh/DirectXMesh.Build.cs @@ -0,0 +1,36 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.IO; +using Flax.Build; +using Flax.Build.NativeCpp; + +/// +/// https://github.com/microsoft/DirectXMesh +/// +public class DirectXMesh : DepsModule +{ + /// + public override void Init() + { + base.Init(); + + LicenseType = LicenseTypes.MIT; + LicenseFilePath = "LICENSE"; + } + + /// + public override void Setup(BuildOptions options) + { + base.Setup(options); + + var depsRoot = options.DepsFolder; + switch (options.Platform.Target) + { + case TargetPlatform.Windows: + options.OutputFiles.Add(Path.Combine(depsRoot, "DirectXMesh.lib")); + options.OptionalDependencyFiles.Add(Path.Combine(depsRoot, "DirectXMesh.pdb")); + break; + default: throw new InvalidPlatformException(options.Platform.Target); + } + } +} diff --git a/Source/ThirdParty/DirectXMesh/DirectXMesh.h b/Source/ThirdParty/DirectXMesh/DirectXMesh.h new file mode 100644 index 000000000..9a8c72a3b --- /dev/null +++ b/Source/ThirdParty/DirectXMesh/DirectXMesh.h @@ -0,0 +1,524 @@ +//------------------------------------------------------------------------------------- +// DirectXMesh.h +// +// DirectX Mesh Geometry Library +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkID=324981 +//------------------------------------------------------------------------------------- + +#pragma once + +#include +#include +#include +#include + +#include + +#if !defined(__d3d11_h__) && !defined(__d3d11_x_h__) && !defined(__d3d12_h__) && !defined(__d3d12_x_h__) +#if defined(_XBOX_ONE) && defined(_TITLE) +#include +#else +#include +#endif +#endif + +#include + +#define DIRECTX_MESH_VERSION 130 + + +namespace DirectX +{ + //--------------------------------------------------------------------------------- + // DXGI Format Utilities + bool __cdecl IsValidVB(_In_ DXGI_FORMAT fmt); + bool __cdecl IsValidIB(_In_ DXGI_FORMAT fmt); + size_t __cdecl BytesPerElement(_In_ DXGI_FORMAT fmt); + + + //--------------------------------------------------------------------------------- + // Input Layout Descriptor Utilities +#if defined(__d3d11_h__) || defined(__d3d11_x_h__) + bool __cdecl IsValid(_In_reads_(nDecl) const D3D11_INPUT_ELEMENT_DESC* vbDecl, _In_ size_t nDecl); + void __cdecl ComputeInputLayout( + _In_reads_(nDecl) const D3D11_INPUT_ELEMENT_DESC* vbDecl, _In_ size_t nDecl, + _Out_writes_opt_(nDecl) uint32_t* offsets, + _Out_writes_opt_(D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT) uint32_t* strides); +#endif + +#if defined(__d3d12_h__) || defined(__d3d12_x_h__) + bool __cdecl IsValid(const D3D12_INPUT_LAYOUT_DESC& vbDecl); + void __cdecl ComputeInputLayout( + const D3D12_INPUT_LAYOUT_DESC& vbDecl, + _Out_writes_opt_(vbDecl.NumElements) uint32_t* offsets, + _Out_writes_opt_(D3D12_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT) uint32_t* strides); +#endif + + //--------------------------------------------------------------------------------- + // Attribute Utilities + std::vector> __cdecl ComputeSubsets(_In_reads_opt_(nFaces) const uint32_t* attributes, _In_ size_t nFaces); + // Returns a list of face offset,counts for attribute groups + + //--------------------------------------------------------------------------------- + // Mesh Optimization Utilities + void __cdecl ComputeVertexCacheMissRate( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, _In_ size_t nVerts, + _In_ size_t cacheSize, _Out_ float& acmr, _Out_ float& atvr); + void __cdecl ComputeVertexCacheMissRate( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, _In_ size_t nVerts, + _In_ size_t cacheSize, _Out_ float& acmr, _Out_ float& atvr); + // Compute the average cache miss ratio and average triangle vertex reuse for the post-transform vertex cache + + //--------------------------------------------------------------------------------- + // Vertex Buffer Reader/Writer + + class VBReader + { + public: + VBReader() noexcept(false); + VBReader(VBReader&& moveFrom) noexcept; + VBReader& operator= (VBReader&& moveFrom) noexcept; + + VBReader(VBReader const&) = delete; + VBReader& operator= (VBReader const&) = delete; + + ~VBReader(); + + #if defined(__d3d11_h__) || defined(__d3d11_x_h__) + HRESULT __cdecl Initialize(_In_reads_(nDecl) const D3D11_INPUT_ELEMENT_DESC* vbDecl, _In_ size_t nDecl); + // Does not support VB decls with D3D11_INPUT_PER_INSTANCE_DATA + #endif + + #if defined(__d3d12_h__) || defined(__d3d12_x_h__) + HRESULT __cdecl Initialize(const D3D12_INPUT_LAYOUT_DESC& vbDecl); + // Does not support VB decls with D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA + #endif + + HRESULT __cdecl AddStream(_In_reads_bytes_(stride*nVerts) const void* vb, _In_ size_t nVerts, _In_ size_t inputSlot, _In_ size_t stride = 0); + // Add vertex buffer to reader + + HRESULT __cdecl Read(_Out_writes_(count) XMVECTOR* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + // Extracts data elements from vertex buffer + + HRESULT __cdecl Read(_Out_writes_(count) float* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + HRESULT __cdecl Read(_Out_writes_(count) XMFLOAT2* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + HRESULT __cdecl Read(_Out_writes_(count) XMFLOAT3* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + HRESULT __cdecl Read(_Out_writes_(count) XMFLOAT4* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + // Helpers for data extraction + + void __cdecl Release(); + + #if defined(__d3d11_h__) || defined(__d3d11_x_h__) + const D3D11_INPUT_ELEMENT_DESC* GetElement(_In_z_ const char* semanticName, _In_ unsigned int semanticIndex) const + { + return GetElement11(semanticName, semanticIndex); + } + + const D3D11_INPUT_ELEMENT_DESC* __cdecl GetElement11(_In_z_ const char* semanticName, _In_ unsigned int semanticIndex) const; + #endif + + #if defined(__d3d12_h__) || defined(__d3d12_x_h__) + const D3D12_INPUT_ELEMENT_DESC* __cdecl GetElement12(_In_z_ const char* semanticName, _In_ unsigned int semanticIndex) const; + #endif + + private: + // Private implementation. + class Impl; + + std::unique_ptr pImpl; + }; + + class VBWriter + { + public: + VBWriter() noexcept(false); + VBWriter(VBWriter&& moveFrom) noexcept; + VBWriter& operator= (VBWriter&& moveFrom) noexcept; + + VBWriter(VBWriter const&) = delete; + VBWriter& operator= (VBWriter const&) = delete; + + ~VBWriter(); + + #if defined(__d3d11_h__) || defined(__d3d11_x_h__) + HRESULT __cdecl Initialize(_In_reads_(nDecl) const D3D11_INPUT_ELEMENT_DESC* vbDecl, _In_ size_t nDecl); + // Does not support VB decls with D3D11_INPUT_PER_INSTANCE_DATA + #endif + + #if defined(__d3d12_h__) || defined(__d3d12_x_h__) + HRESULT __cdecl Initialize(const D3D12_INPUT_LAYOUT_DESC& vbDecl); + // Does not support VB decls with D3D12_INPUT_CLASSIFICATION_PER_INSTANCE_DATA + #endif + + HRESULT __cdecl AddStream(_Out_writes_bytes_(stride*nVerts) void* vb, _In_ size_t nVerts, _In_ size_t inputSlot, _In_ size_t stride = 0); + // Add vertex buffer to writer + + HRESULT __cdecl Write(_In_reads_(count) const XMVECTOR* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + // Inserts data elements into vertex buffer + + HRESULT __cdecl Write(_In_reads_(count) const float* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + HRESULT __cdecl Write(_In_reads_(count) const XMFLOAT2* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + HRESULT __cdecl Write(_In_reads_(count) const XMFLOAT3* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + HRESULT __cdecl Write(_In_reads_(count) const XMFLOAT4* buffer, _In_z_ const char* semanticName, _In_ unsigned int semanticIndex, _In_ size_t count, bool x2bias = false) const; + // Helpers for data insertion + + void __cdecl Release(); + + #if defined(__d3d11_h__) || defined(__d3d11_x_h__) + const D3D11_INPUT_ELEMENT_DESC* __cdecl GetElement(_In_z_ const char* semanticName, _In_ unsigned int semanticIndex) const + { + return GetElement11(semanticName, semanticIndex); + } + + const D3D11_INPUT_ELEMENT_DESC* __cdecl GetElement11(_In_z_ const char* semanticName, _In_ unsigned int semanticIndex) const; + #endif + + #if defined(__d3d12_h__) || defined(__d3d12_x_h__) + const D3D12_INPUT_ELEMENT_DESC* __cdecl GetElement12(_In_z_ const char* semanticName, _In_ unsigned int semanticIndex) const; + #endif + + private: + // Private implementation. + class Impl; + + std::unique_ptr pImpl; + }; + + //--------------------------------------------------------------------------------- + // Adjacency Computation + + HRESULT __cdecl GenerateAdjacencyAndPointReps( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, _In_ size_t nVerts, + _In_ float epsilon, + _Out_writes_opt_(nVerts) uint32_t* pointRep, + _Out_writes_opt_(nFaces * 3) uint32_t* adjacency); + HRESULT __cdecl GenerateAdjacencyAndPointReps( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, _In_ size_t nVerts, + _In_ float epsilon, + _Out_writes_opt_(nVerts) uint32_t* pointRep, + _Out_writes_opt_(nFaces * 3) uint32_t* adjacency); + // If pointRep is null, it still generates them internally as they are needed for the final adjacency computation + + HRESULT __cdecl ConvertPointRepsToAdjacency( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, _In_ size_t nVerts, + _In_reads_opt_(nVerts) const uint32_t* pointRep, + _Out_writes_(nFaces * 3) uint32_t* adjacency); + HRESULT __cdecl ConvertPointRepsToAdjacency( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, _In_ size_t nVerts, + _In_reads_opt_(nVerts) const uint32_t* pointRep, + _Out_writes_(nFaces * 3) uint32_t* adjacency); + // If pointRep is null, assumes an identity + + HRESULT __cdecl GenerateGSAdjacency( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const uint32_t* pointRep, + _In_reads_(nFaces * 3) const uint32_t* adjacency, _In_ size_t nVerts, + _Out_writes_(nFaces * 6) uint16_t* indicesAdj); + HRESULT __cdecl GenerateGSAdjacency( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const uint32_t* pointRep, + _In_reads_(nFaces * 3) const uint32_t* adjacency, _In_ size_t nVerts, + _Out_writes_(nFaces * 6) uint32_t* indicesAdj); + // Generates an IB suitable for Geometry Shader using D3D1x_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ + + //--------------------------------------------------------------------------------- + // Normals, Tangents, and Bi-Tangents Computation + + enum CNORM_FLAGS + { + CNORM_DEFAULT = 0x0, + // Default is to compute normals using weight-by-angle + + CNORM_WEIGHT_BY_AREA = 0x1, + // Computes normals using weight-by-area + + CNORM_WEIGHT_EQUAL = 0x2, + // Compute normals with equal weights + + CNORM_WIND_CW = 0x4, + // Vertices are clock-wise (defaults to CCW) + }; + + HRESULT __cdecl ComputeNormals( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, _In_ size_t nVerts, + _In_ DWORD flags, + _Out_writes_(nVerts) XMFLOAT3* normals); + HRESULT __cdecl ComputeNormals( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, _In_ size_t nVerts, + _In_ DWORD flags, + _Out_writes_(nVerts) XMFLOAT3* normals); + // Computes vertex normals + + HRESULT __cdecl ComputeTangentFrame( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, + _In_reads_(nVerts) const XMFLOAT3* normals, + _In_reads_(nVerts) const XMFLOAT2* texcoords, _In_ size_t nVerts, + _Out_writes_opt_(nVerts) XMFLOAT3* tangents, + _Out_writes_opt_(nVerts) XMFLOAT3* bitangents); + HRESULT __cdecl ComputeTangentFrame( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, + _In_reads_(nVerts) const XMFLOAT3* normals, + _In_reads_(nVerts) const XMFLOAT2* texcoords, _In_ size_t nVerts, + _Out_writes_opt_(nVerts) XMFLOAT3* tangents, + _Out_writes_opt_(nVerts) XMFLOAT3* bitangents); + HRESULT __cdecl ComputeTangentFrame( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, + _In_reads_(nVerts) const XMFLOAT3* normals, + _In_reads_(nVerts) const XMFLOAT2* texcoords, _In_ size_t nVerts, + _Out_writes_opt_(nVerts) XMFLOAT4* tangents, + _Out_writes_opt_(nVerts) XMFLOAT3* bitangents); + HRESULT __cdecl ComputeTangentFrame( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, + _In_reads_(nVerts) const XMFLOAT3* normals, + _In_reads_(nVerts) const XMFLOAT2* texcoords, _In_ size_t nVerts, + _Out_writes_opt_(nVerts) XMFLOAT4* tangents, + _Out_writes_opt_(nVerts) XMFLOAT3* bitangents); + HRESULT __cdecl ComputeTangentFrame( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, + _In_reads_(nVerts) const XMFLOAT3* normals, + _In_reads_(nVerts) const XMFLOAT2* texcoords, _In_ size_t nVerts, + _Out_writes_(nVerts) XMFLOAT4* tangents); + HRESULT __cdecl ComputeTangentFrame( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nVerts) const XMFLOAT3* positions, + _In_reads_(nVerts) const XMFLOAT3* normals, + _In_reads_(nVerts) const XMFLOAT2* texcoords, _In_ size_t nVerts, + _Out_writes_(nVerts) XMFLOAT4* tangents); + // Computes tangents and/or bi-tangents (optionally with handedness stored in .w) + + //--------------------------------------------------------------------------------- + // Mesh clean-up and validation + + enum VALIDATE_FLAGS + { + VALIDATE_DEFAULT = 0x0, + + VALIDATE_BACKFACING = 0x1, + // Check for duplicate neighbor from triangle (requires adjacency) + + VALIDATE_BOWTIES = 0x2, + // Check for two fans of triangles using the same vertex (requires adjacency) + + VALIDATE_DEGENERATE = 0x4, + // Check for degenerate triangles + + VALIDATE_UNUSED = 0x8, + // Check for issues with 'unused' triangles + + VALIDATE_ASYMMETRIC_ADJ = 0x10, + // Checks that neighbors are symmetric (requires adjacency) + }; + + HRESULT __cdecl Validate( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_ size_t nVerts, _In_reads_opt_(nFaces * 3) const uint32_t* adjacency, + _In_ DWORD flags, _In_opt_ std::wstring* msgs = nullptr); + HRESULT __cdecl Validate( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_ size_t nVerts, _In_reads_opt_(nFaces * 3) const uint32_t* adjacency, + _In_ DWORD flags, _In_opt_ std::wstring* msgs = nullptr); + // Checks the mesh for common problems, return 'S_OK' if no problems were found + + HRESULT __cdecl Clean( + _Inout_updates_all_(nFaces * 3) uint16_t* indices, _In_ size_t nFaces, + _In_ size_t nVerts, _Inout_updates_all_opt_(nFaces * 3) uint32_t* adjacency, + _In_reads_opt_(nFaces) const uint32_t* attributes, + _Inout_ std::vector& dupVerts, _In_ bool breakBowties = false); + HRESULT __cdecl Clean( + _Inout_updates_all_(nFaces * 3) uint32_t* indices, _In_ size_t nFaces, + _In_ size_t nVerts, _Inout_updates_all_opt_(nFaces * 3) uint32_t* adjacency, + _In_reads_opt_(nFaces) const uint32_t* attributes, + _Inout_ std::vector& dupVerts, _In_ bool breakBowties = false); + // Cleans the mesh, splitting vertices if needed + + //--------------------------------------------------------------------------------- + // Mesh utilities + + HRESULT __cdecl WeldVertices( + _Inout_updates_all_(nFaces * 3) uint16_t* indices, _In_ size_t nFaces, + _In_ size_t nVerts, _In_reads_(nVerts) const uint32_t* pointRep, + _Out_writes_opt_(nVerts) uint32_t* vertexRemap, + _In_ std::function weldTest); + HRESULT __cdecl WeldVertices( + _Inout_updates_all_(nFaces * 3) uint32_t* indices, _In_ size_t nFaces, + _In_ size_t nVerts, _In_reads_(nVerts) const uint32_t* pointRep, + _Out_writes_opt_(nVerts) uint32_t* vertexRemap, + _In_ std::function weldTest); + // Welds vertices together based on a test function + + //--------------------------------------------------------------------------------- + // Mesh Optimization + + HRESULT __cdecl AttributeSort( + _In_ size_t nFaces, _Inout_updates_all_(nFaces) uint32_t* attributes, + _Out_writes_(nFaces) uint32_t* faceRemap); + // Reorders faces by attribute id + + enum OPTFACES + { + OPTFACES_V_DEFAULT = 12, + OPTFACES_R_DEFAULT = 7, + // Default vertex cache size and restart threshold which is considered 'device independent' + + OPTFACES_LRU_DEFAULT = 32, + // Default vertex cache size for the LRU algorithm + + OPTFACES_V_STRIPORDER = 0, + // Indicates no vertex cache optimization, only reordering into strips + }; + + HRESULT __cdecl OptimizeFaces( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nFaces * 3) const uint32_t* adjacency, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t vertexCache = OPTFACES_V_DEFAULT, + _In_ uint32_t restart = OPTFACES_R_DEFAULT); + HRESULT __cdecl OptimizeFaces( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nFaces * 3) const uint32_t* adjacency, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t vertexCache = OPTFACES_V_DEFAULT, + _In_ uint32_t restart = OPTFACES_R_DEFAULT); + HRESULT __cdecl OptimizeFacesLRU( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t lruCacheSize = OPTFACES_LRU_DEFAULT); + HRESULT __cdecl OptimizeFacesLRU( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t lruCacheSize = OPTFACES_LRU_DEFAULT); + // Reorders faces to increase hit rate of vertex caches + + HRESULT __cdecl OptimizeFacesEx( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nFaces * 3) const uint32_t* adjacency, + _In_reads_(nFaces) const uint32_t* attributes, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t vertexCache = OPTFACES_V_DEFAULT, + _In_ uint32_t restart = OPTFACES_R_DEFAULT); + HRESULT __cdecl OptimizeFacesEx( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nFaces * 3) const uint32_t* adjacency, + _In_reads_(nFaces) const uint32_t* attributes, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t vertexCache = OPTFACES_V_DEFAULT, + _In_ uint32_t restart = OPTFACES_R_DEFAULT); + HRESULT __cdecl OptimizeFacesLRUEx( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, + _In_reads_(nFaces) const uint32_t* attributes, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t lruCacheSize = OPTFACES_LRU_DEFAULT); + HRESULT __cdecl OptimizeFacesLRUEx( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, + _In_reads_(nFaces) const uint32_t* attributes, + _Out_writes_(nFaces) uint32_t* faceRemap, + _In_ uint32_t lruCacheSize = OPTFACES_LRU_DEFAULT); + // Attribute group version of OptimizeFaces + + HRESULT __cdecl OptimizeVertices( + _In_reads_(nFaces * 3) const uint16_t* indices, _In_ size_t nFaces, _In_ size_t nVerts, + _Out_writes_(nVerts) uint32_t* vertexRemap, _Out_opt_ size_t* trailingUnused = nullptr); + HRESULT __cdecl OptimizeVertices( + _In_reads_(nFaces * 3) const uint32_t* indices, _In_ size_t nFaces, _In_ size_t nVerts, + _Out_writes_(nVerts) uint32_t* vertexRemap, _Out_opt_ size_t* trailingUnused = nullptr); + // Reorders vertices in order of use + + //--------------------------------------------------------------------------------- + // Remap functions + + HRESULT __cdecl ReorderIB( + _In_reads_(nFaces * 3) const uint16_t* ibin, _In_ size_t nFaces, + _In_reads_(nFaces) const uint32_t* faceRemap, + _Out_writes_(nFaces * 3) uint16_t* ibout); + HRESULT __cdecl ReorderIB( + _Inout_updates_all_(nFaces * 3) uint16_t* ib, _In_ size_t nFaces, + _In_reads_(nFaces) const uint32_t* faceRemap); + HRESULT __cdecl ReorderIB( + _In_reads_(nFaces * 3) const uint32_t* ibin, _In_ size_t nFaces, + _In_reads_(nFaces) const uint32_t* faceRemap, + _Out_writes_(nFaces * 3) uint32_t* ibout); + HRESULT __cdecl ReorderIB( + _Inout_updates_all_(nFaces * 3) uint32_t* ib, _In_ size_t nFaces, + _In_reads_(nFaces) const uint32_t* faceRemap); + // Applies a face remap reordering to an index buffer + + HRESULT __cdecl ReorderIBAndAdjacency( + _In_reads_(nFaces * 3) const uint16_t* ibin, _In_ size_t nFaces, _In_reads_(nFaces * 3) const uint32_t* adjin, + _In_reads_(nFaces) const uint32_t* faceRemap, + _Out_writes_(nFaces * 3) uint16_t* ibout, _Out_writes_(nFaces * 3) uint32_t* adjout); + HRESULT __cdecl ReorderIBAndAdjacency( + _Inout_updates_all_(nFaces * 3) uint16_t* ib, _In_ size_t nFaces, _Inout_updates_all_(nFaces * 3) uint32_t* adj, + _In_reads_(nFaces) const uint32_t* faceRemap); + HRESULT __cdecl ReorderIBAndAdjacency( + _In_reads_(nFaces * 3) const uint32_t* ibin, _In_ size_t nFaces, _In_reads_(nFaces * 3) const uint32_t* adjin, + _In_reads_(nFaces) const uint32_t* faceRemap, + _Out_writes_(nFaces * 3) uint32_t* ibout, _Out_writes_(nFaces * 3) uint32_t* adjout); + HRESULT __cdecl ReorderIBAndAdjacency( + _Inout_updates_all_(nFaces * 3) uint32_t* ib, _In_ size_t nFaces, _Inout_updates_all_(nFaces * 3) uint32_t* adj, + _In_reads_(nFaces) const uint32_t* faceRemap); + // Applies a face remap reordering to an index buffer and adjacency + + HRESULT __cdecl FinalizeIB( + _In_reads_(nFaces * 3) const uint16_t* ibin, _In_ size_t nFaces, + _In_reads_(nVerts) const uint32_t* vertexRemap, _In_ size_t nVerts, + _Out_writes_(nFaces * 3) uint16_t* ibout); + HRESULT __cdecl FinalizeIB( + _Inout_updates_all_(nFaces * 3) uint16_t* ib, _In_ size_t nFaces, + _In_reads_(nVerts) const uint32_t* vertexRemap, _In_ size_t nVerts); + HRESULT __cdecl FinalizeIB( + _In_reads_(nFaces * 3) const uint32_t* ibin, _In_ size_t nFaces, + _In_reads_(nVerts) const uint32_t* vertexRemap, _In_ size_t nVerts, + _Out_writes_(nFaces * 3) uint32_t* ibout); + HRESULT __cdecl FinalizeIB( + _Inout_updates_all_(nFaces * 3) uint32_t* ib, _In_ size_t nFaces, + _In_reads_(nVerts) const uint32_t* vertexRemap, _In_ size_t nVerts); + // Applies a vertex remap reordering to an index buffer + + HRESULT __cdecl FinalizeVB( + _In_reads_bytes_(nVerts*stride) const void* vbin, _In_ size_t stride, _In_ size_t nVerts, + _In_reads_opt_(nDupVerts) const uint32_t* dupVerts, _In_ size_t nDupVerts, + _In_reads_opt_(nVerts + nDupVerts) const uint32_t* vertexRemap, + _Out_writes_bytes_((nVerts + nDupVerts)*stride) void* vbout); + HRESULT __cdecl FinalizeVB( + _Inout_updates_bytes_all_(nVerts*stride) void* vb, _In_ size_t stride, _In_ size_t nVerts, + _In_reads_(nVerts) const uint32_t* vertexRemap); + // Applies a vertex remap and/or a vertex duplication set to a vertex buffer + + HRESULT __cdecl FinalizeVBAndPointReps( + _In_reads_bytes_(nVerts*stride) const void* vbin, _In_ size_t stride, _In_ size_t nVerts, + _In_reads_(nVerts) const uint32_t* prin, + _In_reads_opt_(nDupVerts) const uint32_t* dupVerts, _In_ size_t nDupVerts, + _In_reads_opt_(nVerts + nDupVerts) const uint32_t* vertexRemap, + _Out_writes_bytes_((nVerts + nDupVerts)*stride) void* vbout, + _Out_writes_(nVerts + nDupVerts) uint32_t* prout); + HRESULT __cdecl FinalizeVBAndPointReps( + _Inout_updates_bytes_all_(nVerts*stride) void* vb, _In_ size_t stride, _In_ size_t nVerts, + _Inout_updates_all_(nVerts) uint32_t* pointRep, + _In_reads_(nVerts) const uint32_t* vertexRemap); + // Applies a vertex remap and/or a vertex duplication set to a vertex buffer and point representatives + + HRESULT __cdecl CompactVB( + _In_reads_bytes_(nVerts*stride) const void* vbin, _In_ size_t stride, _In_ size_t nVerts, + _In_ size_t trailingUnused, + _In_reads_opt_(nVerts) const uint32_t* vertexRemap, + _Out_writes_bytes_((nVerts - trailingUnused)*stride) void* vbout); + // Applies a vertex remap which contains a known number of unused entries at the end + +#include "DirectXMesh.inl" + +} // namespace diff --git a/Source/ThirdParty/DirectXMesh/DirectXMesh.inl b/Source/ThirdParty/DirectXMesh/DirectXMesh.inl new file mode 100644 index 000000000..bed0f4ae6 --- /dev/null +++ b/Source/ThirdParty/DirectXMesh/DirectXMesh.inl @@ -0,0 +1,27 @@ +//------------------------------------------------------------------------------------- +// DirectXMesh.inl +// +// DirectX Mesh Geometry Library +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkID=324981 +//------------------------------------------------------------------------------------- + +#pragma once + +//===================================================================================== +// DXGI Format Utilities +//===================================================================================== +_Use_decl_annotations_ +inline bool __cdecl IsValidVB(DXGI_FORMAT fmt) +{ + return BytesPerElement(fmt) != 0; +} + +_Use_decl_annotations_ +inline bool __cdecl IsValidIB(DXGI_FORMAT fmt) +{ + return (fmt == DXGI_FORMAT_R32_UINT || fmt == DXGI_FORMAT_R16_UINT) != 0; +} diff --git a/Source/ThirdParty/DirectXMesh/LICENSE b/Source/ThirdParty/DirectXMesh/LICENSE new file mode 100644 index 000000000..e8e78a94f --- /dev/null +++ b/Source/ThirdParty/DirectXMesh/LICENSE @@ -0,0 +1,21 @@ + The MIT License (MIT) + +Copyright (c) 2014-2019 Microsoft Corp + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies +or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/Source/ThirdParty/DirectXShaderCompiler/dxcapi.h b/Source/ThirdParty/DirectXShaderCompiler/dxcapi.h new file mode 100644 index 000000000..342c2e782 --- /dev/null +++ b/Source/ThirdParty/DirectXShaderCompiler/dxcapi.h @@ -0,0 +1,435 @@ + +/////////////////////////////////////////////////////////////////////////////// +// // +// dxcapi.h // +// Copyright (C) Microsoft Corporation. All rights reserved. // +// This file is distributed under the University of Illinois Open Source // +// License. See LICENSE.TXT for details. // +// // +// Provides declarations for the DirectX Compiler API entry point. // +// // +/////////////////////////////////////////////////////////////////////////////// + +#ifndef __DXC_API__ +#define __DXC_API__ + +#ifdef _WIN32 +#ifndef DXC_API_IMPORT +#define DXC_API_IMPORT __declspec(dllimport) +#endif +#else +#ifndef DXC_API_IMPORT +#define DXC_API_IMPORT __attribute__ ((visibility ("default"))) +#endif +#endif + +#ifdef _WIN32 +#define DECLARE_CROSS_PLATFORM_UUIDOF(T) +#define DEFINE_CROSS_PLATFORM_UUIDOF(T) +#else +#include +#include "dxc/Support/WinAdapter.h" +#endif + +struct IMalloc; + +struct IDxcIncludeHandler; + +/// +/// Creates a single uninitialized object of the class associated with a specified CLSID. +/// +/// +/// The CLSID associated with the data and code that will be used to create the object. +/// +/// +/// A reference to the identifier of the interface to be used to communicate +/// with the object. +/// +/// +/// Address of pointer variable that receives the interface pointer requested +/// in riid. Upon successful return, *ppv contains the requested interface +/// pointer. Upon failure, *ppv contains NULL. +/// +/// While this function is similar to CoCreateInstance, there is no COM involvement. +/// +typedef HRESULT (__stdcall *DxcCreateInstanceProc)( + _In_ REFCLSID rclsid, + _In_ REFIID riid, + _Out_ LPVOID* ppv +); + +typedef HRESULT(__stdcall *DxcCreateInstance2Proc)( + _In_ IMalloc *pMalloc, + _In_ REFCLSID rclsid, + _In_ REFIID riid, + _Out_ LPVOID* ppv + ); + +/// +/// Creates a single uninitialized object of the class associated with a specified CLSID. +/// +/// +/// The CLSID associated with the data and code that will be used to create the object. +/// +/// +/// A reference to the identifier of the interface to be used to communicate +/// with the object. +/// +/// +/// Address of pointer variable that receives the interface pointer requested +/// in riid. Upon successful return, *ppv contains the requested interface +/// pointer. Upon failure, *ppv contains NULL. +/// +/// While this function is similar to CoCreateInstance, there is no COM involvement. +/// + +#ifndef _MSC_VER +extern "C" +#endif +DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance( + _In_ REFCLSID rclsid, + _In_ REFIID riid, + _Out_ LPVOID* ppv + ); + +#ifndef _MSC_VER +extern "C" +#endif +DXC_API_IMPORT HRESULT __stdcall DxcCreateInstance2( + _In_ IMalloc *pMalloc, + _In_ REFCLSID rclsid, + _In_ REFIID riid, + _Out_ LPVOID* ppv +); + + +// IDxcBlob is an alias of ID3D10Blob and ID3DBlob +struct __declspec(uuid("8BA5FB08-5195-40e2-AC58-0D989C3A0102")) +IDxcBlob : public IUnknown { +public: + virtual LPVOID STDMETHODCALLTYPE GetBufferPointer(void) = 0; + virtual SIZE_T STDMETHODCALLTYPE GetBufferSize(void) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcBlob) +}; + +struct __declspec(uuid("7241d424-2646-4191-97c0-98e96e42fc68")) +IDxcBlobEncoding : public IDxcBlob { +public: + virtual HRESULT STDMETHODCALLTYPE GetEncoding(_Out_ BOOL *pKnown, + _Out_ UINT32 *pCodePage) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcBlobEncoding) +}; + +struct __declspec(uuid("e5204dc7-d18c-4c3c-bdfb-851673980fe7")) +IDxcLibrary : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE SetMalloc(_In_opt_ IMalloc *pMalloc) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateBlobFromBlob( + _In_ IDxcBlob *pBlob, UINT32 offset, UINT32 length, _COM_Outptr_ IDxcBlob **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateBlobFromFile( + LPCWSTR pFileName, _In_opt_ UINT32* codePage, + _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingFromPinned( + _In_bytecount_(size) LPCVOID pText, UINT32 size, UINT32 codePage, + _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingOnHeapCopy( + _In_bytecount_(size) LPCVOID pText, UINT32 size, UINT32 codePage, + _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateBlobWithEncodingOnMalloc( + _In_bytecount_(size) LPCVOID pText, IMalloc *pIMalloc, UINT32 size, UINT32 codePage, + _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateIncludeHandler( + _COM_Outptr_ IDxcIncludeHandler **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE CreateStreamFromBlobReadOnly( + _In_ IDxcBlob *pBlob, _COM_Outptr_ IStream **ppStream) = 0; + virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf8( + _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; + virtual HRESULT STDMETHODCALLTYPE GetBlobAsUtf16( + _In_ IDxcBlob *pBlob, _COM_Outptr_ IDxcBlobEncoding **pBlobEncoding) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcLibrary) +}; + +struct __declspec(uuid("CEDB484A-D4E9-445A-B991-CA21CA157DC2")) +IDxcOperationResult : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE GetStatus(_Out_ HRESULT *pStatus) = 0; + virtual HRESULT STDMETHODCALLTYPE GetResult(_COM_Outptr_result_maybenull_ IDxcBlob **pResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetErrorBuffer(_COM_Outptr_result_maybenull_ IDxcBlobEncoding **pErrors) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcOperationResult) +}; + +struct __declspec(uuid("7f61fc7d-950d-467f-b3e3-3c02fb49187c")) +IDxcIncludeHandler : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE LoadSource( + _In_ LPCWSTR pFilename, // Candidate filename. + _COM_Outptr_result_maybenull_ IDxcBlob **ppIncludeSource // Resultant source object for included file, nullptr if not found. + ) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcIncludeHandler) +}; + +struct DxcDefine { + LPCWSTR Name; + _Maybenull_ LPCWSTR Value; +}; + +struct __declspec(uuid("8c210bf3-011f-4422-8d70-6f9acb8db617")) +IDxcCompiler : public IUnknown { + // Compile a single entry point to the target shader model + virtual HRESULT STDMETHODCALLTYPE Compile( + _In_ IDxcBlob *pSource, // Source text to compile + _In_opt_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. + _In_ LPCWSTR pEntryPoint, // entry point name + _In_ LPCWSTR pTargetProfile, // shader profile to compile + _In_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments + _In_ UINT32 argCount, // Number of arguments + _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines + _In_ UINT32 defineCount, // Number of defines + _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) + _COM_Outptr_ IDxcOperationResult **ppResult // Compiler output status, buffer, and errors + ) = 0; + + // Preprocess source text + virtual HRESULT STDMETHODCALLTYPE Preprocess( + _In_ IDxcBlob *pSource, // Source text to preprocess + _In_opt_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. + _In_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments + _In_ UINT32 argCount, // Number of arguments + _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines + _In_ UINT32 defineCount, // Number of defines + _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) + _COM_Outptr_ IDxcOperationResult **ppResult // Preprocessor output status, buffer, and errors + ) = 0; + + // Disassemble a program. + virtual HRESULT STDMETHODCALLTYPE Disassemble( + _In_ IDxcBlob *pSource, // Program to disassemble. + _COM_Outptr_ IDxcBlobEncoding **ppDisassembly // Disassembly text. + ) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcCompiler) +}; + +struct __declspec(uuid("A005A9D9-B8BB-4594-B5C9-0E633BEC4D37")) +IDxcCompiler2 : public IDxcCompiler { + // Compile a single entry point to the target shader model with debug information. + virtual HRESULT STDMETHODCALLTYPE CompileWithDebug( + _In_ IDxcBlob *pSource, // Source text to compile + _In_opt_ LPCWSTR pSourceName, // Optional file name for pSource. Used in errors and include handlers. + _In_ LPCWSTR pEntryPoint, // Entry point name + _In_ LPCWSTR pTargetProfile, // Shader profile to compile + _In_count_(argCount) LPCWSTR *pArguments, // Array of pointers to arguments + _In_ UINT32 argCount, // Number of arguments + _In_count_(defineCount) const DxcDefine *pDefines, // Array of defines + _In_ UINT32 defineCount, // Number of defines + _In_opt_ IDxcIncludeHandler *pIncludeHandler, // user-provided interface to handle #include directives (optional) + _COM_Outptr_ IDxcOperationResult **ppResult, // Compiler output status, buffer, and errors + _Outptr_opt_result_z_ LPWSTR *ppDebugBlobName,// Suggested file name for debug blob. + _COM_Outptr_opt_ IDxcBlob **ppDebugBlob // Debug blob + ) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcCompiler2) +}; + +struct __declspec(uuid("F1B5BE2A-62DD-4327-A1C2-42AC1E1E78E6")) +IDxcLinker : public IUnknown { +public: + // Register a library with name to ref it later. + virtual HRESULT RegisterLibrary( + _In_opt_ LPCWSTR pLibName, // Name of the library. + _In_ IDxcBlob *pLib // Library blob. + ) = 0; + + // Links the shader and produces a shader blob that the Direct3D runtime can + // use. + virtual HRESULT STDMETHODCALLTYPE Link( + _In_opt_ LPCWSTR pEntryName, // Entry point name + _In_ LPCWSTR pTargetProfile, // shader profile to link + _In_count_(libCount) + const LPCWSTR *pLibNames, // Array of library names to link + UINT32 libCount, // Number of libraries to link + _In_count_(argCount) + const LPCWSTR *pArguments, // Array of pointers to arguments + _In_ UINT32 argCount, // Number of arguments + _COM_Outptr_ IDxcOperationResult * + *ppResult // Linker output status, buffer, and errors + ) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcLinker) +}; + +static const UINT32 DxcValidatorFlags_Default = 0; +static const UINT32 DxcValidatorFlags_InPlaceEdit = 1; // Validator is allowed to update shader blob in-place. +static const UINT32 DxcValidatorFlags_RootSignatureOnly = 2; +static const UINT32 DxcValidatorFlags_ModuleOnly = 4; +static const UINT32 DxcValidatorFlags_ValidMask = 0x7; + +struct __declspec(uuid("A6E82BD2-1FD7-4826-9811-2857E797F49A")) +IDxcValidator : public IUnknown { + // Validate a shader. + virtual HRESULT STDMETHODCALLTYPE Validate( + _In_ IDxcBlob *pShader, // Shader to validate. + _In_ UINT32 Flags, // Validation flags. + _COM_Outptr_ IDxcOperationResult **ppResult // Validation output status, buffer, and errors + ) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcValidator) +}; + +struct __declspec(uuid("334b1f50-2292-4b35-99a1-25588d8c17fe")) +IDxcContainerBuilder : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pDxilContainerHeader) = 0; // Loads DxilContainer to the builder + virtual HRESULT STDMETHODCALLTYPE AddPart(_In_ UINT32 fourCC, _In_ IDxcBlob *pSource) = 0; // Part to add to the container + virtual HRESULT STDMETHODCALLTYPE RemovePart(_In_ UINT32 fourCC) = 0; // Remove the part with fourCC + virtual HRESULT STDMETHODCALLTYPE SerializeContainer(_Out_ IDxcOperationResult **ppResult) = 0; // Builds a container of the given container builder state + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcContainerBuilder) +}; + +struct __declspec(uuid("091f7a26-1c1f-4948-904b-e6e3a8a771d5")) +IDxcAssembler : public IUnknown { + // Assemble dxil in ll or llvm bitcode to DXIL container. + virtual HRESULT STDMETHODCALLTYPE AssembleToContainer( + _In_ IDxcBlob *pShader, // Shader to assemble. + _COM_Outptr_ IDxcOperationResult **ppResult // Assembly output status, buffer, and errors + ) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcAssembler) +}; + +struct __declspec(uuid("d2c21b26-8350-4bdc-976a-331ce6f4c54c")) +IDxcContainerReflection : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE Load(_In_ IDxcBlob *pContainer) = 0; // Container to load. + virtual HRESULT STDMETHODCALLTYPE GetPartCount(_Out_ UINT32 *pResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetPartKind(UINT32 idx, _Out_ UINT32 *pResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetPartContent(UINT32 idx, _COM_Outptr_ IDxcBlob **ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE FindFirstPartKind(UINT32 kind, _Out_ UINT32 *pResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetPartReflection(UINT32 idx, REFIID iid, void **ppvObject) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcContainerReflection) +}; + +struct __declspec(uuid("AE2CD79F-CC22-453F-9B6B-B124E7A5204C")) +IDxcOptimizerPass : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE GetOptionName(_COM_Outptr_ LPWSTR *ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetDescription(_COM_Outptr_ LPWSTR *ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetOptionArgCount(_Out_ UINT32 *pCount) = 0; + virtual HRESULT STDMETHODCALLTYPE GetOptionArgName(UINT32 argIndex, _COM_Outptr_ LPWSTR *ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE GetOptionArgDescription(UINT32 argIndex, _COM_Outptr_ LPWSTR *ppResult) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcOptimizerPass) +}; + +struct __declspec(uuid("25740E2E-9CBA-401B-9119-4FB42F39F270")) +IDxcOptimizer : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE GetAvailablePassCount(_Out_ UINT32 *pCount) = 0; + virtual HRESULT STDMETHODCALLTYPE GetAvailablePass(UINT32 index, _COM_Outptr_ IDxcOptimizerPass** ppResult) = 0; + virtual HRESULT STDMETHODCALLTYPE RunOptimizer(IDxcBlob *pBlob, + _In_count_(optionCount) LPCWSTR *ppOptions, UINT32 optionCount, + _COM_Outptr_ IDxcBlob **pOutputModule, + _COM_Outptr_opt_ IDxcBlobEncoding **ppOutputText) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcOptimizer) +}; + +static const UINT32 DxcVersionInfoFlags_None = 0; +static const UINT32 DxcVersionInfoFlags_Debug = 1; // Matches VS_FF_DEBUG +static const UINT32 DxcVersionInfoFlags_Internal = 2; // Internal Validator (non-signing) + +struct __declspec(uuid("b04f5b50-2059-4f12-a8ff-a1e0cde1cc7e")) +IDxcVersionInfo : public IUnknown { + virtual HRESULT STDMETHODCALLTYPE GetVersion(_Out_ UINT32 *pMajor, _Out_ UINT32 *pMinor) = 0; + virtual HRESULT STDMETHODCALLTYPE GetFlags(_Out_ UINT32 *pFlags) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcVersionInfo) +}; + +struct __declspec(uuid("fb6904c4-42f0-4b62-9c46-983af7da7c83")) +IDxcVersionInfo2 : public IDxcVersionInfo { + virtual HRESULT STDMETHODCALLTYPE GetCommitInfo(_Out_ UINT32 *pCommitCount, _Out_ char **pCommitHash) = 0; + + DECLARE_CROSS_PLATFORM_UUIDOF(IDxcVersionInfo2) +}; + +// Note: __declspec(selectany) requires 'extern' +// On Linux __declspec(selectany) is removed and using 'extern' results in link error. +#ifdef _MSC_VER +#define EXTERN extern +#else +#define EXTERN +#endif + +// {73e22d93-e6ce-47f3-b5bf-f0664f39c1b0} +__declspec(selectany) EXTERN const CLSID CLSID_DxcCompiler = { + 0x73e22d93, + 0xe6ce, + 0x47f3, + { 0xb5, 0xbf, 0xf0, 0x66, 0x4f, 0x39, 0xc1, 0xb0 } +}; + +// {EF6A8087-B0EA-4D56-9E45-D07E1A8B7806} +__declspec(selectany) EXTERN const GUID CLSID_DxcLinker = { + 0xef6a8087, + 0xb0ea, + 0x4d56, + {0x9e, 0x45, 0xd0, 0x7e, 0x1a, 0x8b, 0x78, 0x6} +}; + +// {CD1F6B73-2AB0-484D-8EDC-EBE7A43CA09F} +__declspec(selectany) EXTERN const CLSID CLSID_DxcDiaDataSource = { + 0xcd1f6b73, + 0x2ab0, + 0x484d, + { 0x8e, 0xdc, 0xeb, 0xe7, 0xa4, 0x3c, 0xa0, 0x9f } +}; + +// {6245D6AF-66E0-48FD-80B4-4D271796748C} +__declspec(selectany) EXTERN const GUID CLSID_DxcLibrary = { + 0x6245d6af, + 0x66e0, + 0x48fd, + { 0x80, 0xb4, 0x4d, 0x27, 0x17, 0x96, 0x74, 0x8c } +}; + +// {8CA3E215-F728-4CF3-8CDD-88AF917587A1} +__declspec(selectany) EXTERN const GUID CLSID_DxcValidator = { + 0x8ca3e215, + 0xf728, + 0x4cf3, + { 0x8c, 0xdd, 0x88, 0xaf, 0x91, 0x75, 0x87, 0xa1 } +}; + +// {D728DB68-F903-4F80-94CD-DCCF76EC7151} +__declspec(selectany) EXTERN const GUID CLSID_DxcAssembler = { + 0xd728db68, + 0xf903, + 0x4f80, + { 0x94, 0xcd, 0xdc, 0xcf, 0x76, 0xec, 0x71, 0x51 } +}; + +// {b9f54489-55b8-400c-ba3a-1675e4728b91} +__declspec(selectany) EXTERN const GUID CLSID_DxcContainerReflection = { + 0xb9f54489, + 0x55b8, + 0x400c, + { 0xba, 0x3a, 0x16, 0x75, 0xe4, 0x72, 0x8b, 0x91 } +}; + +// {AE2CD79F-CC22-453F-9B6B-B124E7A5204C} +__declspec(selectany) EXTERN const GUID CLSID_DxcOptimizer = { + 0xae2cd79f, + 0xcc22, + 0x453f, + {0x9b, 0x6b, 0xb1, 0x24, 0xe7, 0xa5, 0x20, 0x4c} +}; + +// {94134294-411f-4574-b4d0-8741e25240d2} +__declspec(selectany) EXTERN const GUID CLSID_DxcContainerBuilder = { + 0x94134294, + 0x411f, + 0x4574, + { 0xb4, 0xd0, 0x87, 0x41, 0xe2, 0x52, 0x40, 0xd2 } +}; +#endif diff --git a/Source/ThirdParty/DirectXTex/DirectXTex.Build.cs b/Source/ThirdParty/DirectXTex/DirectXTex.Build.cs new file mode 100644 index 000000000..012151e4c --- /dev/null +++ b/Source/ThirdParty/DirectXTex/DirectXTex.Build.cs @@ -0,0 +1,41 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using System.IO; +using Flax.Build; +using Flax.Build.NativeCpp; + +/// +/// https://github.com/microsoft/DirectXTex +/// +public class DirectXTex : DepsModule +{ + /// + public override void Init() + { + base.Init(); + + LicenseType = LicenseTypes.MIT; + LicenseFilePath = "LICENSE"; + } + + /// + public override void Setup(BuildOptions options) + { + base.Setup(options); + + var depsRoot = options.DepsFolder; + switch (options.Platform.Target) + { + case TargetPlatform.Windows: + case TargetPlatform.UWP: + case TargetPlatform.XboxOne: + case TargetPlatform.XboxScarlett: + options.OutputFiles.Add(Path.Combine(depsRoot, "DirectXTex.lib")); + options.OptionalDependencyFiles.Add(Path.Combine(depsRoot, "DirectXTex.pdb")); + break; + default: throw new InvalidPlatformException(options.Platform.Target); + } + + options.PublicDefinitions.Add("COMPILE_WITH_DIRECTXTEX"); + } +} diff --git a/Source/ThirdParty/DirectXTex/DirectXTex.h b/Source/ThirdParty/DirectXTex/DirectXTex.h new file mode 100644 index 000000000..7ffa7dbfa --- /dev/null +++ b/Source/ThirdParty/DirectXTex/DirectXTex.h @@ -0,0 +1,783 @@ +//------------------------------------------------------------------------------------- +// DirectXTex.h +// +// DirectX Texture Library +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#pragma once + +#include + +#include +#include +#include + +#if !defined(__d3d11_h__) && !defined(__d3d11_x_h__) && !defined(__d3d12_h__) && !defined(__d3d12_x_h__) +#if defined(_XBOX_ONE) && defined(_TITLE) +#include +#else +#include +#endif +#endif + +#include + +#include + +#define DIRECTX_TEX_VERSION 162 + +struct IWICImagingFactory; +struct IWICMetadataQueryReader; + + +namespace DirectX +{ + + //--------------------------------------------------------------------------------- + // DXGI Format Utilities + bool __cdecl IsValid(_In_ DXGI_FORMAT fmt); + bool __cdecl IsCompressed(_In_ DXGI_FORMAT fmt); + bool __cdecl IsPacked(_In_ DXGI_FORMAT fmt); + bool __cdecl IsVideo(_In_ DXGI_FORMAT fmt); + bool __cdecl IsPlanar(_In_ DXGI_FORMAT fmt); + bool __cdecl IsPalettized(_In_ DXGI_FORMAT fmt); + bool __cdecl IsDepthStencil(_In_ DXGI_FORMAT fmt); + bool __cdecl IsSRGB(_In_ DXGI_FORMAT fmt); + bool __cdecl IsTypeless(_In_ DXGI_FORMAT fmt, _In_ bool partialTypeless = true); + + bool __cdecl HasAlpha(_In_ DXGI_FORMAT fmt); + + size_t __cdecl BitsPerPixel(_In_ DXGI_FORMAT fmt); + + size_t __cdecl BitsPerColor(_In_ DXGI_FORMAT fmt); + + enum CP_FLAGS + { + CP_FLAGS_NONE = 0x0, // Normal operation + CP_FLAGS_LEGACY_DWORD = 0x1, // Assume pitch is DWORD aligned instead of BYTE aligned + CP_FLAGS_PARAGRAPH = 0x2, // Assume pitch is 16-byte aligned instead of BYTE aligned + CP_FLAGS_YMM = 0x4, // Assume pitch is 32-byte aligned instead of BYTE aligned + CP_FLAGS_ZMM = 0x8, // Assume pitch is 64-byte aligned instead of BYTE aligned + CP_FLAGS_PAGE4K = 0x200, // Assume pitch is 4096-byte aligned instead of BYTE aligned + CP_FLAGS_BAD_DXTN_TAILS = 0x1000, // BC formats with malformed mipchain blocks smaller than 4x4 + CP_FLAGS_24BPP = 0x10000, // Override with a legacy 24 bits-per-pixel format size + CP_FLAGS_16BPP = 0x20000, // Override with a legacy 16 bits-per-pixel format size + CP_FLAGS_8BPP = 0x40000, // Override with a legacy 8 bits-per-pixel format size + }; + + HRESULT __cdecl ComputePitch( + _In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, + _Out_ size_t& rowPitch, _Out_ size_t& slicePitch, _In_ DWORD flags = CP_FLAGS_NONE); + + size_t __cdecl ComputeScanlines(_In_ DXGI_FORMAT fmt, _In_ size_t height); + + DXGI_FORMAT __cdecl MakeSRGB(_In_ DXGI_FORMAT fmt); + DXGI_FORMAT __cdecl MakeTypeless(_In_ DXGI_FORMAT fmt); + DXGI_FORMAT __cdecl MakeTypelessUNORM(_In_ DXGI_FORMAT fmt); + DXGI_FORMAT __cdecl MakeTypelessFLOAT(_In_ DXGI_FORMAT fmt); + + //--------------------------------------------------------------------------------- + // Texture metadata + enum TEX_DIMENSION + // Subset here matches D3D10_RESOURCE_DIMENSION and D3D11_RESOURCE_DIMENSION + { + TEX_DIMENSION_TEXTURE1D = 2, + TEX_DIMENSION_TEXTURE2D = 3, + TEX_DIMENSION_TEXTURE3D = 4, + }; + + enum TEX_MISC_FLAG + // Subset here matches D3D10_RESOURCE_MISC_FLAG and D3D11_RESOURCE_MISC_FLAG + { + TEX_MISC_TEXTURECUBE = 0x4L, + }; + + enum TEX_MISC_FLAG2 + { + TEX_MISC2_ALPHA_MODE_MASK = 0x7L, + }; + + enum TEX_ALPHA_MODE + // Matches DDS_ALPHA_MODE, encoded in MISC_FLAGS2 + { + TEX_ALPHA_MODE_UNKNOWN = 0, + TEX_ALPHA_MODE_STRAIGHT = 1, + TEX_ALPHA_MODE_PREMULTIPLIED = 2, + TEX_ALPHA_MODE_OPAQUE = 3, + TEX_ALPHA_MODE_CUSTOM = 4, + }; + + struct TexMetadata + { + size_t width; + size_t height; // Should be 1 for 1D textures + size_t depth; // Should be 1 for 1D or 2D textures + size_t arraySize; // For cubemap, this is a multiple of 6 + size_t mipLevels; + uint32_t miscFlags; + uint32_t miscFlags2; + DXGI_FORMAT format; + TEX_DIMENSION dimension; + + size_t __cdecl ComputeIndex(_In_ size_t mip, _In_ size_t item, _In_ size_t slice) const; + // Returns size_t(-1) to indicate an out-of-range error + + bool __cdecl IsCubemap() const { return (miscFlags & TEX_MISC_TEXTURECUBE) != 0; } + // Helper for miscFlags + + bool __cdecl IsPMAlpha() const { return ((miscFlags2 & TEX_MISC2_ALPHA_MODE_MASK) == TEX_ALPHA_MODE_PREMULTIPLIED) != 0; } + void __cdecl SetAlphaMode(TEX_ALPHA_MODE mode) { miscFlags2 = (miscFlags2 & ~static_cast(TEX_MISC2_ALPHA_MODE_MASK)) | static_cast(mode); } + TEX_ALPHA_MODE __cdecl GetAlphaMode() const { return static_cast(miscFlags2 & TEX_MISC2_ALPHA_MODE_MASK); } + // Helpers for miscFlags2 + + bool __cdecl IsVolumemap() const { return (dimension == TEX_DIMENSION_TEXTURE3D); } + // Helper for dimension + }; + + enum DDS_FLAGS + { + DDS_FLAGS_NONE = 0x0, + + DDS_FLAGS_LEGACY_DWORD = 0x1, + // Assume pitch is DWORD aligned instead of BYTE aligned (used by some legacy DDS files) + + DDS_FLAGS_NO_LEGACY_EXPANSION = 0x2, + // Do not implicitly convert legacy formats that result in larger pixel sizes (24 bpp, 3:3:2, A8L8, A4L4, P8, A8P8) + + DDS_FLAGS_NO_R10B10G10A2_FIXUP = 0x4, + // Do not use work-around for long-standing D3DX DDS file format issue which reversed the 10:10:10:2 color order masks + + DDS_FLAGS_FORCE_RGB = 0x8, + // Convert DXGI 1.1 BGR formats to DXGI_FORMAT_R8G8B8A8_UNORM to avoid use of optional WDDM 1.1 formats + + DDS_FLAGS_NO_16BPP = 0x10, + // Conversions avoid use of 565, 5551, and 4444 formats and instead expand to 8888 to avoid use of optional WDDM 1.2 formats + + DDS_FLAGS_EXPAND_LUMINANCE = 0x20, + // When loading legacy luminance formats expand replicating the color channels rather than leaving them packed (L8, L16, A8L8) + + DDS_FLAGS_BAD_DXTN_TAILS = 0x40, + // Some older DXTn DDS files incorrectly handle mipchain tails for blocks smaller than 4x4 + + DDS_FLAGS_FORCE_DX10_EXT = 0x10000, + // Always use the 'DX10' header extension for DDS writer (i.e. don't try to write DX9 compatible DDS files) + + DDS_FLAGS_FORCE_DX10_EXT_MISC2 = 0x20000, + // DDS_FLAGS_FORCE_DX10_EXT including miscFlags2 information (result may not be compatible with D3DX10 or D3DX11) + }; + + enum WIC_FLAGS + { + WIC_FLAGS_NONE = 0x0, + + WIC_FLAGS_FORCE_RGB = 0x1, + // Loads DXGI 1.1 BGR formats as DXGI_FORMAT_R8G8B8A8_UNORM to avoid use of optional WDDM 1.1 formats + + WIC_FLAGS_NO_X2_BIAS = 0x2, + // Loads DXGI 1.1 X2 10:10:10:2 format as DXGI_FORMAT_R10G10B10A2_UNORM + + WIC_FLAGS_NO_16BPP = 0x4, + // Loads 565, 5551, and 4444 formats as 8888 to avoid use of optional WDDM 1.2 formats + + WIC_FLAGS_ALLOW_MONO = 0x8, + // Loads 1-bit monochrome (black & white) as R1_UNORM rather than 8-bit grayscale + + WIC_FLAGS_ALL_FRAMES = 0x10, + // Loads all images in a multi-frame file, converting/resizing to match the first frame as needed, defaults to 0th frame otherwise + + WIC_FLAGS_IGNORE_SRGB = 0x20, + // Ignores sRGB metadata if present in the file + + WIC_FLAGS_FORCE_SRGB = 0x40, + // Writes sRGB metadata into the file reguardless of format + + WIC_FLAGS_FORCE_LINEAR = 0x80, + // Writes linear gamma metadata into the file reguardless of format + + WIC_FLAGS_DITHER = 0x10000, + // Use ordered 4x4 dithering for any required conversions + + WIC_FLAGS_DITHER_DIFFUSION = 0x20000, + // Use error-diffusion dithering for any required conversions + + WIC_FLAGS_FILTER_POINT = 0x100000, + WIC_FLAGS_FILTER_LINEAR = 0x200000, + WIC_FLAGS_FILTER_CUBIC = 0x300000, + WIC_FLAGS_FILTER_FANT = 0x400000, // Combination of Linear and Box filter + // Filtering mode to use for any required image resizing (only needed when loading arrays of differently sized images; defaults to Fant) + }; + + HRESULT __cdecl GetMetadataFromDDSMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _In_ DWORD flags, + _Out_ TexMetadata& metadata); + HRESULT __cdecl GetMetadataFromDDSFile( + _In_z_ const wchar_t* szFile, + _In_ DWORD flags, + _Out_ TexMetadata& metadata); + + HRESULT __cdecl GetMetadataFromHDRMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _Out_ TexMetadata& metadata); + HRESULT __cdecl GetMetadataFromHDRFile( + _In_z_ const wchar_t* szFile, + _Out_ TexMetadata& metadata); + + HRESULT __cdecl GetMetadataFromTGAMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _Out_ TexMetadata& metadata); + HRESULT __cdecl GetMetadataFromTGAFile( + _In_z_ const wchar_t* szFile, + _Out_ TexMetadata& metadata); + + HRESULT __cdecl GetMetadataFromWICMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _In_ DWORD flags, + _Out_ TexMetadata& metadata, + _In_opt_ std::function getMQR = nullptr); + + HRESULT __cdecl GetMetadataFromWICFile( + _In_z_ const wchar_t* szFile, + _In_ DWORD flags, + _Out_ TexMetadata& metadata, + _In_opt_ std::function getMQR = nullptr); + + //--------------------------------------------------------------------------------- + // Bitmap image container + struct Image + { + size_t width; + size_t height; + DXGI_FORMAT format; + size_t rowPitch; + size_t slicePitch; + uint8_t* pixels; + }; + + class ScratchImage + { + public: + ScratchImage() noexcept + : m_nimages(0), m_size(0), m_metadata{}, m_image(nullptr), m_memory(nullptr) {} + ScratchImage(ScratchImage&& moveFrom) noexcept + : m_nimages(0), m_size(0), m_metadata{}, m_image(nullptr), m_memory(nullptr) { *this = std::move(moveFrom); } + ~ScratchImage() { Release(); } + + ScratchImage& __cdecl operator= (ScratchImage&& moveFrom) noexcept; + + ScratchImage(const ScratchImage&) = delete; + ScratchImage& operator=(const ScratchImage&) = delete; + + HRESULT __cdecl Initialize(_In_ const TexMetadata& mdata, _In_ DWORD flags = CP_FLAGS_NONE); + + HRESULT __cdecl Initialize1D(_In_ DXGI_FORMAT fmt, _In_ size_t length, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); + HRESULT __cdecl Initialize2D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t arraySize, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); + HRESULT __cdecl Initialize3D(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t depth, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); + HRESULT __cdecl InitializeCube(_In_ DXGI_FORMAT fmt, _In_ size_t width, _In_ size_t height, _In_ size_t nCubes, _In_ size_t mipLevels, _In_ DWORD flags = CP_FLAGS_NONE); + + HRESULT __cdecl InitializeFromImage(_In_ const Image& srcImage, _In_ bool allow1D = false, _In_ DWORD flags = CP_FLAGS_NONE); + HRESULT __cdecl InitializeArrayFromImages(_In_reads_(nImages) const Image* images, _In_ size_t nImages, _In_ bool allow1D = false, _In_ DWORD flags = CP_FLAGS_NONE); + HRESULT __cdecl InitializeCubeFromImages(_In_reads_(nImages) const Image* images, _In_ size_t nImages, _In_ DWORD flags = CP_FLAGS_NONE); + HRESULT __cdecl Initialize3DFromImages(_In_reads_(depth) const Image* images, _In_ size_t depth, _In_ DWORD flags = CP_FLAGS_NONE); + + void __cdecl Release(); + + bool __cdecl OverrideFormat(_In_ DXGI_FORMAT f); + + const TexMetadata& __cdecl GetMetadata() const { return m_metadata; } + const Image* __cdecl GetImage(_In_ size_t mip, _In_ size_t item, _In_ size_t slice) const; + + const Image* __cdecl GetImages() const { return m_image; } + size_t __cdecl GetImageCount() const { return m_nimages; } + + uint8_t* __cdecl GetPixels() const { return m_memory; } + size_t __cdecl GetPixelsSize() const { return m_size; } + + bool __cdecl IsAlphaAllOpaque() const; + + private: + size_t m_nimages; + size_t m_size; + TexMetadata m_metadata; + Image* m_image; + uint8_t* m_memory; + }; + + //--------------------------------------------------------------------------------- + // Memory blob (allocated buffer pointer is always 16-byte aligned) + class Blob + { + public: + Blob() noexcept : m_buffer(nullptr), m_size(0) {} + Blob(Blob&& moveFrom) noexcept : m_buffer(nullptr), m_size(0) { *this = std::move(moveFrom); } + ~Blob() { Release(); } + + Blob& __cdecl operator= (Blob&& moveFrom) noexcept; + + Blob(const Blob&) = delete; + Blob& operator=(const Blob&) = delete; + + HRESULT __cdecl Initialize(_In_ size_t size); + + void __cdecl Release(); + + void *__cdecl GetBufferPointer() const { return m_buffer; } + size_t __cdecl GetBufferSize() const { return m_size; } + + HRESULT __cdecl Trim(size_t size); + + private: + void* m_buffer; + size_t m_size; + }; + + //--------------------------------------------------------------------------------- + // Image I/O + + // DDS operations + HRESULT __cdecl LoadFromDDSMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _In_ DWORD flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); + HRESULT __cdecl LoadFromDDSFile( + _In_z_ const wchar_t* szFile, + _In_ DWORD flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); + + HRESULT __cdecl SaveToDDSMemory( + _In_ const Image& image, + _In_ DWORD flags, + _Out_ Blob& blob); + HRESULT __cdecl SaveToDDSMemory( + _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD flags, + _Out_ Blob& blob); + + HRESULT __cdecl SaveToDDSFile(_In_ const Image& image, _In_ DWORD flags, _In_z_ const wchar_t* szFile); + HRESULT __cdecl SaveToDDSFile( + _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD flags, _In_z_ const wchar_t* szFile); + + // HDR operations + HRESULT __cdecl LoadFromHDRMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); + HRESULT __cdecl LoadFromHDRFile( + _In_z_ const wchar_t* szFile, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); + + HRESULT __cdecl SaveToHDRMemory(_In_ const Image& image, _Out_ Blob& blob); + HRESULT __cdecl SaveToHDRFile(_In_ const Image& image, _In_z_ const wchar_t* szFile); + + // TGA operations + HRESULT __cdecl LoadFromTGAMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); + HRESULT __cdecl LoadFromTGAFile( + _In_z_ const wchar_t* szFile, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image); + + HRESULT __cdecl SaveToTGAMemory(_In_ const Image& image, _Out_ Blob& blob, _In_opt_ const TexMetadata* metadata = nullptr); + HRESULT __cdecl SaveToTGAFile(_In_ const Image& image, _In_z_ const wchar_t* szFile, _In_opt_ const TexMetadata* metadata = nullptr); + + // WIC operations + HRESULT __cdecl LoadFromWICMemory( + _In_reads_bytes_(size) const void* pSource, _In_ size_t size, + _In_ DWORD flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image, + _In_opt_ std::function getMQR = nullptr); + HRESULT __cdecl LoadFromWICFile( + _In_z_ const wchar_t* szFile, _In_ DWORD flags, + _Out_opt_ TexMetadata* metadata, _Out_ ScratchImage& image, + _In_opt_ std::function getMQR = nullptr); + + HRESULT __cdecl SaveToWICMemory( + _In_ const Image& image, _In_ DWORD flags, _In_ REFGUID guidContainerFormat, + _Out_ Blob& blob, _In_opt_ const GUID* targetFormat = nullptr, + _In_opt_ std::function setCustomProps = nullptr); + HRESULT __cdecl SaveToWICMemory( + _In_count_(nimages) const Image* images, _In_ size_t nimages, + _In_ DWORD flags, _In_ REFGUID guidContainerFormat, + _Out_ Blob& blob, _In_opt_ const GUID* targetFormat = nullptr, + _In_opt_ std::function setCustomProps = nullptr); + + HRESULT __cdecl SaveToWICFile( + _In_ const Image& image, _In_ DWORD flags, _In_ REFGUID guidContainerFormat, + _In_z_ const wchar_t* szFile, _In_opt_ const GUID* targetFormat = nullptr, + _In_opt_ std::function setCustomProps = nullptr); + HRESULT __cdecl SaveToWICFile( + _In_count_(nimages) const Image* images, _In_ size_t nimages, + _In_ DWORD flags, _In_ REFGUID guidContainerFormat, + _In_z_ const wchar_t* szFile, _In_opt_ const GUID* targetFormat = nullptr, + _In_opt_ std::function setCustomProps = nullptr); + + //--------------------------------------------------------------------------------- + // Texture conversion, resizing, mipmap generation, and block compression + + enum TEX_FR_FLAGS + { + TEX_FR_ROTATE0 = 0x0, + TEX_FR_ROTATE90 = 0x1, + TEX_FR_ROTATE180 = 0x2, + TEX_FR_ROTATE270 = 0x3, + TEX_FR_FLIP_HORIZONTAL = 0x08, + TEX_FR_FLIP_VERTICAL = 0x10, + }; + + HRESULT __cdecl FlipRotate(_In_ const Image& srcImage, _In_ DWORD flags, _Out_ ScratchImage& image); + HRESULT __cdecl FlipRotate( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD flags, _Out_ ScratchImage& result); + // Flip and/or rotate image + + enum TEX_FILTER_FLAGS + { + TEX_FILTER_DEFAULT = 0, + + TEX_FILTER_WRAP_U = 0x1, + TEX_FILTER_WRAP_V = 0x2, + TEX_FILTER_WRAP_W = 0x4, + TEX_FILTER_WRAP = (TEX_FILTER_WRAP_U | TEX_FILTER_WRAP_V | TEX_FILTER_WRAP_W), + TEX_FILTER_MIRROR_U = 0x10, + TEX_FILTER_MIRROR_V = 0x20, + TEX_FILTER_MIRROR_W = 0x40, + TEX_FILTER_MIRROR = (TEX_FILTER_MIRROR_U | TEX_FILTER_MIRROR_V | TEX_FILTER_MIRROR_W), + // Wrap vs. Mirror vs. Clamp filtering options + + TEX_FILTER_SEPARATE_ALPHA = 0x100, + // Resize color and alpha channel independently + + TEX_FILTER_FLOAT_X2BIAS = 0x200, + // Enable *2 - 1 conversion cases for unorm<->float and positive-only float formats + + TEX_FILTER_RGB_COPY_RED = 0x1000, + TEX_FILTER_RGB_COPY_GREEN = 0x2000, + TEX_FILTER_RGB_COPY_BLUE = 0x4000, + // When converting RGB to R, defaults to using grayscale. These flags indicate copying a specific channel instead + // When converting RGB to RG, defaults to copying RED | GREEN. These flags control which channels are selected instead. + + TEX_FILTER_DITHER = 0x10000, + // Use ordered 4x4 dithering for any required conversions + TEX_FILTER_DITHER_DIFFUSION = 0x20000, + // Use error-diffusion dithering for any required conversions + + TEX_FILTER_POINT = 0x100000, + TEX_FILTER_LINEAR = 0x200000, + TEX_FILTER_CUBIC = 0x300000, + TEX_FILTER_BOX = 0x400000, + TEX_FILTER_FANT = 0x400000, // Equiv to Box filtering for mipmap generation + TEX_FILTER_TRIANGLE = 0x500000, + // Filtering mode to use for any required image resizing + + TEX_FILTER_SRGB_IN = 0x1000000, + TEX_FILTER_SRGB_OUT = 0x2000000, + TEX_FILTER_SRGB = (TEX_FILTER_SRGB_IN | TEX_FILTER_SRGB_OUT), + // sRGB <-> RGB for use in conversion operations + // if the input format type is IsSRGB(), then SRGB_IN is on by default + // if the output format type is IsSRGB(), then SRGB_OUT is on by default + + TEX_FILTER_FORCE_NON_WIC = 0x10000000, + // Forces use of the non-WIC path when both are an option + + TEX_FILTER_FORCE_WIC = 0x20000000, + // Forces use of the WIC path even when logic would have picked a non-WIC path when both are an option + }; + + HRESULT __cdecl Resize( + _In_ const Image& srcImage, _In_ size_t width, _In_ size_t height, + _In_ DWORD filter, + _Out_ ScratchImage& image); + HRESULT __cdecl Resize( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ size_t width, _In_ size_t height, _In_ DWORD filter, _Out_ ScratchImage& result); + // Resize the image to width x height. Defaults to Fant filtering. + // Note for a complex resize, the result will always have mipLevels == 1 + + const float TEX_THRESHOLD_DEFAULT = 0.5f; + // Default value for alpha threshold used when converting to 1-bit alpha + + HRESULT __cdecl Convert( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD filter, _In_ float threshold, + _Out_ ScratchImage& image); + HRESULT __cdecl Convert( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ DWORD filter, _In_ float threshold, _Out_ ScratchImage& result); + // Convert the image to a new format + + HRESULT __cdecl ConvertToSinglePlane(_In_ const Image& srcImage, _Out_ ScratchImage& image); + HRESULT __cdecl ConvertToSinglePlane( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _Out_ ScratchImage& image); + // Converts the image from a planar format to an equivalent non-planar format + + HRESULT __cdecl GenerateMipMaps( + _In_ const Image& baseImage, _In_ DWORD filter, _In_ size_t levels, + _Inout_ ScratchImage& mipChain, _In_ bool allow1D = false); + HRESULT __cdecl GenerateMipMaps( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD filter, _In_ size_t levels, _Inout_ ScratchImage& mipChain); + // levels of '0' indicates a full mipchain, otherwise is generates that number of total levels (including the source base image) + // Defaults to Fant filtering which is equivalent to a box filter + + HRESULT __cdecl GenerateMipMaps3D( + _In_reads_(depth) const Image* baseImages, _In_ size_t depth, _In_ DWORD filter, _In_ size_t levels, + _Out_ ScratchImage& mipChain); + HRESULT __cdecl GenerateMipMaps3D( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD filter, _In_ size_t levels, _Out_ ScratchImage& mipChain); + // levels of '0' indicates a full mipchain, otherwise is generates that number of total levels (including the source base image) + // Defaults to Fant filtering which is equivalent to a box filter + + HRESULT __cdecl ScaleMipMapsAlphaForCoverage( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, _In_ size_t item, + _In_ float alphaReference, _Inout_ ScratchImage& mipChain); + + + enum TEX_PMALPHA_FLAGS + { + TEX_PMALPHA_DEFAULT = 0, + + TEX_PMALPHA_IGNORE_SRGB = 0x1, + // ignores sRGB colorspace conversions + + TEX_PMALPHA_REVERSE = 0x2, + // converts from premultiplied alpha back to straight alpha + + TEX_PMALPHA_SRGB_IN = 0x1000000, + TEX_PMALPHA_SRGB_OUT = 0x2000000, + TEX_PMALPHA_SRGB = (TEX_PMALPHA_SRGB_IN | TEX_PMALPHA_SRGB_OUT), + // if the input format type is IsSRGB(), then SRGB_IN is on by default + // if the output format type is IsSRGB(), then SRGB_OUT is on by default + }; + + HRESULT __cdecl PremultiplyAlpha(_In_ const Image& srcImage, _In_ DWORD flags, _Out_ ScratchImage& image); + HRESULT __cdecl PremultiplyAlpha( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD flags, _Out_ ScratchImage& result); + // Converts to/from a premultiplied alpha version of the texture + + enum TEX_COMPRESS_FLAGS + { + TEX_COMPRESS_DEFAULT = 0, + + TEX_COMPRESS_RGB_DITHER = 0x10000, + // Enables dithering RGB colors for BC1-3 compression + + TEX_COMPRESS_A_DITHER = 0x20000, + // Enables dithering alpha for BC1-3 compression + + TEX_COMPRESS_DITHER = 0x30000, + // Enables both RGB and alpha dithering for BC1-3 compression + + TEX_COMPRESS_UNIFORM = 0x40000, + // Uniform color weighting for BC1-3 compression; by default uses perceptual weighting + + TEX_COMPRESS_BC7_USE_3SUBSETS = 0x80000, + // Enables exhaustive search for BC7 compress for mode 0 and 2; by default skips trying these modes + + TEX_COMPRESS_BC7_QUICK = 0x100000, + // Minimal modes (usually mode 6) for BC7 compression + + TEX_COMPRESS_SRGB_IN = 0x1000000, + TEX_COMPRESS_SRGB_OUT = 0x2000000, + TEX_COMPRESS_SRGB = (TEX_COMPRESS_SRGB_IN | TEX_COMPRESS_SRGB_OUT), + // if the input format type is IsSRGB(), then SRGB_IN is on by default + // if the output format type is IsSRGB(), then SRGB_OUT is on by default + + TEX_COMPRESS_PARALLEL = 0x10000000, + // Compress is free to use multithreading to improve performance (by default it does not use multithreading) + }; + + HRESULT __cdecl Compress( + _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float threshold, + _Out_ ScratchImage& cImage); + HRESULT __cdecl Compress( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float threshold, _Out_ ScratchImage& cImages); + // Note that threshold is only used by BC1. TEX_THRESHOLD_DEFAULT is a typical value to use + +#if defined(__d3d11_h__) || defined(__d3d11_x_h__) + HRESULT __cdecl Compress( + _In_ ID3D11Device* pDevice, _In_ const Image& srcImage, _In_ DXGI_FORMAT format, _In_ DWORD compress, + _In_ float alphaWeight, _Out_ ScratchImage& image); + HRESULT __cdecl Compress( + _In_ ID3D11Device* pDevice, _In_ const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _In_ DWORD compress, _In_ float alphaWeight, _Out_ ScratchImage& cImages); + // DirectCompute-based compression (alphaWeight is only used by BC7. 1.0 is the typical value to use) +#endif + + HRESULT __cdecl Decompress(_In_ const Image& cImage, _In_ DXGI_FORMAT format, _Out_ ScratchImage& image); + HRESULT __cdecl Decompress( + _In_reads_(nimages) const Image* cImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DXGI_FORMAT format, _Out_ ScratchImage& images); + + //--------------------------------------------------------------------------------- + // Normal map operations + + enum CNMAP_FLAGS + { + CNMAP_DEFAULT = 0, + + CNMAP_CHANNEL_RED = 0x1, + CNMAP_CHANNEL_GREEN = 0x2, + CNMAP_CHANNEL_BLUE = 0x3, + CNMAP_CHANNEL_ALPHA = 0x4, + CNMAP_CHANNEL_LUMINANCE = 0x5, + // Channel selection when evaluting color value for height + // Luminance is a combination of red, green, and blue + + CNMAP_MIRROR_U = 0x1000, + CNMAP_MIRROR_V = 0x2000, + CNMAP_MIRROR = 0x3000, + // Use mirror semantics for scanline references (defaults to wrap) + + CNMAP_INVERT_SIGN = 0x4000, + // Inverts normal sign + + CNMAP_COMPUTE_OCCLUSION = 0x8000, + // Computes a crude occlusion term stored in the alpha channel + }; + + HRESULT __cdecl ComputeNormalMap( + _In_ const Image& srcImage, _In_ DWORD flags, _In_ float amplitude, + _In_ DXGI_FORMAT format, _Out_ ScratchImage& normalMap); + HRESULT __cdecl ComputeNormalMap( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ DWORD flags, _In_ float amplitude, _In_ DXGI_FORMAT format, _Out_ ScratchImage& normalMaps); + + //--------------------------------------------------------------------------------- + // Misc image operations + + struct Rect + { + size_t x; + size_t y; + size_t w; + size_t h; + + Rect() = default; + Rect(size_t _x, size_t _y, size_t _w, size_t _h) : x(_x), y(_y), w(_w), h(_h) {} + }; + + HRESULT __cdecl CopyRectangle( + _In_ const Image& srcImage, _In_ const Rect& srcRect, _In_ const Image& dstImage, + _In_ DWORD filter, _In_ size_t xOffset, _In_ size_t yOffset); + + enum CMSE_FLAGS + { + CMSE_DEFAULT = 0, + + CMSE_IMAGE1_SRGB = 0x1, + CMSE_IMAGE2_SRGB = 0x2, + // Indicates that image needs gamma correction before comparision + + CMSE_IGNORE_RED = 0x10, + CMSE_IGNORE_GREEN = 0x20, + CMSE_IGNORE_BLUE = 0x40, + CMSE_IGNORE_ALPHA = 0x80, + // Ignore the channel when computing MSE + + CMSE_IMAGE1_X2_BIAS = 0x100, + CMSE_IMAGE2_X2_BIAS = 0x200, + // Indicates that image should be scaled and biased before comparison (i.e. UNORM -> SNORM) + }; + + HRESULT __cdecl ComputeMSE(_In_ const Image& image1, _In_ const Image& image2, _Out_ float& mse, _Out_writes_opt_(4) float* mseV, _In_ DWORD flags = 0); + + HRESULT __cdecl EvaluateImage( + _In_ const Image& image, + _In_ std::function pixelFunc); + HRESULT __cdecl EvaluateImage( + _In_reads_(nimages) const Image* images, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ std::function pixelFunc); + + HRESULT __cdecl TransformImage( + _In_ const Image& image, + _In_ std::function pixelFunc, + ScratchImage& result); + HRESULT __cdecl TransformImage( + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ std::function pixelFunc, + ScratchImage& result); + + //--------------------------------------------------------------------------------- + // WIC utility code + + enum WICCodecs + { + WIC_CODEC_BMP = 1, // Windows Bitmap (.bmp) + WIC_CODEC_JPEG, // Joint Photographic Experts Group (.jpg, .jpeg) + WIC_CODEC_PNG, // Portable Network Graphics (.png) + WIC_CODEC_TIFF, // Tagged Image File Format (.tif, .tiff) + WIC_CODEC_GIF, // Graphics Interchange Format (.gif) + WIC_CODEC_WMP, // Windows Media Photo / HD Photo / JPEG XR (.hdp, .jxr, .wdp) + WIC_CODEC_ICO, // Windows Icon (.ico) + }; + + REFGUID __cdecl GetWICCodec(_In_ WICCodecs codec); + + IWICImagingFactory* __cdecl GetWICFactory(bool& iswic2); + void __cdecl SetWICFactory(_In_opt_ IWICImagingFactory* pWIC); + + //--------------------------------------------------------------------------------- + // Direct3D 11 functions +#if defined(__d3d11_h__) || defined(__d3d11_x_h__) + bool __cdecl IsSupportedTexture(_In_ ID3D11Device* pDevice, _In_ const TexMetadata& metadata); + + HRESULT __cdecl CreateTexture( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _Outptr_ ID3D11Resource** ppResource); + + HRESULT __cdecl CreateShaderResourceView( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _Outptr_ ID3D11ShaderResourceView** ppSRV); + + HRESULT __cdecl CreateTextureEx( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ D3D11_USAGE usage, _In_ unsigned int bindFlags, _In_ unsigned int cpuAccessFlags, _In_ unsigned int miscFlags, _In_ bool forceSRGB, + _Outptr_ ID3D11Resource** ppResource); + + HRESULT __cdecl CreateShaderResourceViewEx( + _In_ ID3D11Device* pDevice, _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + _In_ D3D11_USAGE usage, _In_ unsigned int bindFlags, _In_ unsigned int cpuAccessFlags, _In_ unsigned int miscFlags, _In_ bool forceSRGB, + _Outptr_ ID3D11ShaderResourceView** ppSRV); + + HRESULT __cdecl CaptureTexture(_In_ ID3D11Device* pDevice, _In_ ID3D11DeviceContext* pContext, _In_ ID3D11Resource* pSource, _Out_ ScratchImage& result); +#endif + + //--------------------------------------------------------------------------------- + // Direct3D 12 functions +#if defined(__d3d12_h__) || defined(__d3d12_x_h__) + bool __cdecl IsSupportedTexture(_In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata); + + HRESULT __cdecl CreateTexture( + _In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata, + _Outptr_ ID3D12Resource** ppResource); + + HRESULT __cdecl CreateTextureEx( + _In_ ID3D12Device* pDevice, _In_ const TexMetadata& metadata, + _In_ D3D12_RESOURCE_FLAGS resFlags, _In_ bool forceSRGB, + _Outptr_ ID3D12Resource** ppResource); + + HRESULT __cdecl PrepareUpload( + _In_ ID3D12Device* pDevice, + _In_reads_(nimages) const Image* srcImages, _In_ size_t nimages, _In_ const TexMetadata& metadata, + std::vector& subresources); + + HRESULT __cdecl CaptureTexture( + _In_ ID3D12CommandQueue* pCommandQueue, _In_ ID3D12Resource* pSource, _In_ bool isCubeMap, + _Out_ ScratchImage& result, + _In_ D3D12_RESOURCE_STATES beforeState = D3D12_RESOURCE_STATE_RENDER_TARGET, + _In_ D3D12_RESOURCE_STATES afterState = D3D12_RESOURCE_STATE_RENDER_TARGET); +#endif + +#include "DirectXTex.inl" + +} // namespace diff --git a/Source/ThirdParty/DirectXTex/DirectXTex.inl b/Source/ThirdParty/DirectXTex/DirectXTex.inl new file mode 100644 index 000000000..a45abcd9e --- /dev/null +++ b/Source/ThirdParty/DirectXTex/DirectXTex.inl @@ -0,0 +1,124 @@ +//------------------------------------------------------------------------------------- +// DirectXTex.inl +// +// DirectX Texture Library +// +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. +// +// http://go.microsoft.com/fwlink/?LinkId=248926 +//------------------------------------------------------------------------------------- + +#pragma once + +//===================================================================================== +// DXGI Format Utilities +//===================================================================================== + +_Use_decl_annotations_ +inline bool __cdecl IsValid(DXGI_FORMAT fmt) +{ + return (static_cast(fmt) >= 1 && static_cast(fmt) <= 190); +} + +_Use_decl_annotations_ +inline bool __cdecl IsCompressed(DXGI_FORMAT fmt) +{ + switch (fmt) + { + case DXGI_FORMAT_BC1_TYPELESS: + case DXGI_FORMAT_BC1_UNORM: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_TYPELESS: + case DXGI_FORMAT_BC2_UNORM: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_TYPELESS: + case DXGI_FORMAT_BC3_UNORM: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_BC4_TYPELESS: + case DXGI_FORMAT_BC4_UNORM: + case DXGI_FORMAT_BC4_SNORM: + case DXGI_FORMAT_BC5_TYPELESS: + case DXGI_FORMAT_BC5_UNORM: + case DXGI_FORMAT_BC5_SNORM: + case DXGI_FORMAT_BC6H_TYPELESS: + case DXGI_FORMAT_BC6H_UF16: + case DXGI_FORMAT_BC6H_SF16: + case DXGI_FORMAT_BC7_TYPELESS: + case DXGI_FORMAT_BC7_UNORM: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return true; + + default: + return false; + } +} + +_Use_decl_annotations_ +inline bool __cdecl IsPalettized(DXGI_FORMAT fmt) +{ + switch (fmt) + { + case DXGI_FORMAT_AI44: + case DXGI_FORMAT_IA44: + case DXGI_FORMAT_P8: + case DXGI_FORMAT_A8P8: + return true; + + default: + return false; + } +} + +_Use_decl_annotations_ +inline bool __cdecl IsSRGB(DXGI_FORMAT fmt) +{ + switch (fmt) + { + case DXGI_FORMAT_R8G8B8A8_UNORM_SRGB: + case DXGI_FORMAT_BC1_UNORM_SRGB: + case DXGI_FORMAT_BC2_UNORM_SRGB: + case DXGI_FORMAT_BC3_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8A8_UNORM_SRGB: + case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB: + case DXGI_FORMAT_BC7_UNORM_SRGB: + return true; + + default: + return false; + } +} + + +//===================================================================================== +// Image I/O +//===================================================================================== +_Use_decl_annotations_ +inline HRESULT __cdecl SaveToDDSMemory(const Image& image, DWORD flags, Blob& blob) +{ + TexMetadata mdata = {}; + mdata.width = image.width; + mdata.height = image.height; + mdata.depth = 1; + mdata.arraySize = 1; + mdata.mipLevels = 1; + mdata.format = image.format; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + + return SaveToDDSMemory(&image, 1, mdata, flags, blob); +} + +_Use_decl_annotations_ +inline HRESULT __cdecl SaveToDDSFile(const Image& image, DWORD flags, const wchar_t* szFile) +{ + TexMetadata mdata = {}; + mdata.width = image.width; + mdata.height = image.height; + mdata.depth = 1; + mdata.arraySize = 1; + mdata.mipLevels = 1; + mdata.format = image.format; + mdata.dimension = TEX_DIMENSION_TEXTURE2D; + + return SaveToDDSFile(&image, 1, mdata, flags, szFile); +} diff --git a/Source/ThirdParty/DirectXTex/LICENSE b/Source/ThirdParty/DirectXTex/LICENSE new file mode 100644 index 000000000..48bda89b2 --- /dev/null +++ b/Source/ThirdParty/DirectXTex/LICENSE @@ -0,0 +1,21 @@ + The MIT License (MIT) + +Copyright (c) 2011-2019 Microsoft Corp + +Permission is hereby granted, free of charge, to any person obtaining a copy of this +software and associated documentation files (the "Software"), to deal in the Software +without restriction, including without limitation the rights to use, copy, modify, +merge, publish, distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be included in all copies +or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, +INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A +PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF +CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE +OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/Source/ThirdParty/LZ4/lz4.Build.cs b/Source/ThirdParty/LZ4/lz4.Build.cs new file mode 100644 index 000000000..28ef6096d --- /dev/null +++ b/Source/ThirdParty/LZ4/lz4.Build.cs @@ -0,0 +1,17 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using Flax.Build; + +/// +/// https://github.com/lz4/lz4 +/// +public class lz4 : ThirdPartyModule +{ + /// + public override void Init() + { + base.Init(); + + LicenseType = LicenseTypes.BSD2Clause; + } +} diff --git a/Source/ThirdParty/LZ4/lz4.cpp b/Source/ThirdParty/LZ4/lz4.cpp new file mode 100644 index 000000000..236e4eeac --- /dev/null +++ b/Source/ThirdParty/LZ4/lz4.cpp @@ -0,0 +1,1478 @@ +/* + LZ4 - Fast LZ compression algorithm + Copyright (C) 2011-2017, Yann Collet. + + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://www.lz4.org + - LZ4 source repository : https://github.com/lz4/lz4 +*/ + + +/*-************************************ +* Tuning parameters +**************************************/ +/* + * LZ4_HEAPMODE : + * Select how default compression functions will allocate memory for their hash table, + * in memory stack (0:default, fastest), or in memory heap (1:requires malloc()). + */ +#ifndef LZ4_HEAPMODE +# define LZ4_HEAPMODE 0 +#endif + +/* + * ACCELERATION_DEFAULT : + * Select "acceleration" for LZ4_compress_fast() when parameter value <= 0 + */ +#define ACCELERATION_DEFAULT 1 + + +/*-************************************ +* CPU Feature Detection +**************************************/ +/* LZ4_FORCE_MEMORY_ACCESS + * By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable. + * Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal. + * The below switch allow to select different access method for improved performance. + * Method 0 (default) : use `memcpy()`. Safe and portable. + * Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable). + * This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`. + * Method 2 : direct access. This method is portable but violate C standard. + * It can generate buggy code on targets which assembly generation depends on alignment. + * But in some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6) + * See https://fastcompression.blogspot.fr/2015/08/accessing-unaligned-memory.html for details. + * Prefer these methods in priority order (0 > 1 > 2) + */ +#ifndef LZ4_FORCE_MEMORY_ACCESS /* can be defined externally */ +# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) ) +# define LZ4_FORCE_MEMORY_ACCESS 2 +# elif defined(__INTEL_COMPILER) || defined(__GNUC__) +# define LZ4_FORCE_MEMORY_ACCESS 1 +# endif +#endif + +/* + * LZ4_FORCE_SW_BITCOUNT + * Define this parameter if your target system or compiler does not support hardware bit count + */ +#if defined(_MSC_VER) && defined(_WIN32_WCE) /* Visual Studio for Windows CE does not support Hardware bit count */ +# define LZ4_FORCE_SW_BITCOUNT +#endif + + +/*-************************************ +* Dependency +**************************************/ +#include "lz4.h" +/* see also "memory routines" below */ + + +/*-************************************ +* Compiler Options +**************************************/ +#ifdef _MSC_VER /* Visual Studio */ +# include +# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */ +# pragma warning(disable : 4293) /* disable: C4293: too large shift (32-bits) */ +#endif /* _MSC_VER */ + +#ifndef FORCE_INLINE +# ifdef _MSC_VER /* Visual Studio */ +# define FORCE_INLINE static __forceinline +# else +# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */ +# ifdef __GNUC__ +# define FORCE_INLINE static inline __attribute__((always_inline)) +# else +# define FORCE_INLINE static inline +# endif +# else +# define FORCE_INLINE static +# endif /* __STDC_VERSION__ */ +# endif /* _MSC_VER */ +#endif /* FORCE_INLINE */ + +#if (defined(__GNUC__) && (__GNUC__ >= 3)) || (defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 800)) || defined(__clang__) +# define expect(expr,value) (__builtin_expect ((expr),(value)) ) +#else +# define expect(expr,value) (expr) +#endif + +#define likely(expr) expect((expr) != 0, 1) +#define unlikely(expr) expect((expr) != 0, 0) + + +/*-************************************ +* Memory routines +**************************************/ +#include /* malloc, calloc, free */ +#define ALLOCATOR(n,s) calloc(n,s) +#define FREEMEM free +#include /* memset, memcpy */ +#define MEM_INIT memset + + +/*-************************************ +* Basic Types +**************************************/ +#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +# include + typedef uint8_t BYTE; + typedef uint16_t U16; + typedef uint32_t U32; + typedef int32_t S32; + typedef uint64_t U64; + typedef uintptr_t uptrval; +#else + typedef unsigned char BYTE; + typedef unsigned short U16; + typedef unsigned int U32; + typedef signed int S32; + typedef unsigned long long U64; + typedef size_t uptrval; /* generally true, except OpenVMS-64 */ +#endif + +#if defined(__x86_64__) + typedef U64 reg_t; /* 64-bits in x32 mode */ +#else + typedef size_t reg_t; /* 32-bits in x32 mode */ +#endif + +/*-************************************ +* Reading and writing into memory +**************************************/ +static unsigned LZ4_isLittleEndian(void) +{ + const union { U32 u; BYTE c[4]; } one = { 1 }; /* don't use static : performance detrimental */ + return one.c[0]; +} + + +#if defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==2) +/* lie to the compiler about data alignment; use with caution */ + +static U16 LZ4_read16(const void* memPtr) { return *(const U16*) memPtr; } +static U32 LZ4_read32(const void* memPtr) { return *(const U32*) memPtr; } +static reg_t LZ4_read_ARCH(const void* memPtr) { return *(const reg_t*) memPtr; } + +static void LZ4_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; } +static void LZ4_write32(void* memPtr, U32 value) { *(U32*)memPtr = value; } + +#elif defined(LZ4_FORCE_MEMORY_ACCESS) && (LZ4_FORCE_MEMORY_ACCESS==1) + +/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */ +/* currently only defined for gcc and icc */ +typedef union { U16 u16; U32 u32; reg_t uArch; } __attribute__((packed)) unalign; + +static U16 LZ4_read16(const void* ptr) { return ((const unalign*)ptr)->u16; } +static U32 LZ4_read32(const void* ptr) { return ((const unalign*)ptr)->u32; } +static reg_t LZ4_read_ARCH(const void* ptr) { return ((const unalign*)ptr)->uArch; } + +static void LZ4_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; } +static void LZ4_write32(void* memPtr, U32 value) { ((unalign*)memPtr)->u32 = value; } + +#else /* safe and portable access through memcpy() */ + +static U16 LZ4_read16(const void* memPtr) +{ + U16 val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static U32 LZ4_read32(const void* memPtr) +{ + U32 val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static reg_t LZ4_read_ARCH(const void* memPtr) +{ + reg_t val; memcpy(&val, memPtr, sizeof(val)); return val; +} + +static void LZ4_write16(void* memPtr, U16 value) +{ + memcpy(memPtr, &value, sizeof(value)); +} + +static void LZ4_write32(void* memPtr, U32 value) +{ + memcpy(memPtr, &value, sizeof(value)); +} + +#endif /* LZ4_FORCE_MEMORY_ACCESS */ + + +static U16 LZ4_readLE16(const void* memPtr) +{ + if (LZ4_isLittleEndian()) { + return LZ4_read16(memPtr); + } else { + const BYTE* p = (const BYTE*)memPtr; + return (U16)((U16)p[0] + (p[1]<<8)); + } +} + +static void LZ4_writeLE16(void* memPtr, U16 value) +{ + if (LZ4_isLittleEndian()) { + LZ4_write16(memPtr, value); + } else { + BYTE* p = (BYTE*)memPtr; + p[0] = (BYTE) value; + p[1] = (BYTE)(value>>8); + } +} + +static void LZ4_copy8(void* dst, const void* src) +{ + memcpy(dst,src,8); +} + +/* customized variant of memcpy, which can overwrite up to 8 bytes beyond dstEnd */ +static void LZ4_wildCopy(void* dstPtr, const void* srcPtr, void* dstEnd) +{ + BYTE* d = (BYTE*)dstPtr; + const BYTE* s = (const BYTE*)srcPtr; + BYTE* const e = (BYTE*)dstEnd; + + do { LZ4_copy8(d,s); d+=8; s+=8; } while (d=2) +# include +# define DEBUGLOG(l, ...) { \ + if (l<=LZ4_DEBUG) { \ + fprintf(stderr, __FILE__ ": "); \ + fprintf(stderr, __VA_ARGS__); \ + fprintf(stderr, " \n"); \ + } } +#else +# define DEBUGLOG(l, ...) {} /* disabled */ +#endif + + +/*-************************************ +* Common functions +**************************************/ +static unsigned LZ4_NbCommonBytes (reg_t val) +{ + if (LZ4_isLittleEndian()) { + if (sizeof(val)==8) { +# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanForward64( &r, (U64)val ); + return (int)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctzll((U64)val) >> 3); +# else + static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 }; + return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58]; +# endif + } else /* 32 bits */ { +# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r; + _BitScanForward( &r, (U32)val ); + return (int)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_ctz((U32)val) >> 3); +# else + static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 }; + return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27]; +# endif + } + } else /* Big Endian CPU */ { + if (sizeof(val)==8) { +# if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanReverse64( &r, val ); + return (unsigned)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clzll((U64)val) >> 3); +# else + unsigned r; + if (!(val>>32)) { r=4; } else { r=0; val>>=32; } + if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; } + r += (!val); + return r; +# endif + } else /* 32 bits */ { +# if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT) + unsigned long r = 0; + _BitScanReverse( &r, (unsigned long)val ); + return (unsigned)(r>>3); +# elif (defined(__clang__) || (defined(__GNUC__) && (__GNUC__>=3))) && !defined(LZ4_FORCE_SW_BITCOUNT) + return (__builtin_clz((U32)val) >> 3); +# else + unsigned r; + if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; } + r += (!val); + return r; +# endif + } + } +} + +#define STEPSIZE sizeof(reg_t) +static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit) +{ + const BYTE* const pStart = pIn; + + while (likely(pIn compression run slower on incompressible data */ + + +/*-************************************ +* Local Structures and types +**************************************/ +typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive; +typedef enum { byPtr, byU32, byU16 } tableType_t; + +typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive; +typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive; + +typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_directive; +typedef enum { full = 0, partial = 1 } earlyEnd_directive; + + +/*-************************************ +* Local Utils +**************************************/ +int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; } +const char* LZ4_versionString(void) { return LZ4_VERSION_STRING; } +int LZ4_compressBound(int isize) { return LZ4_COMPRESSBOUND(isize); } +int LZ4_sizeofState() { return LZ4_STREAMSIZE; } + + +/*-****************************** +* Compression functions +********************************/ +static U32 LZ4_hash4(U32 sequence, tableType_t const tableType) +{ + if (tableType == byU16) + return ((sequence * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1))); + else + return ((sequence * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG)); +} + +static U32 LZ4_hash5(U64 sequence, tableType_t const tableType) +{ + static const U64 prime5bytes = 889523592379ULL; + static const U64 prime8bytes = 11400714785074694791ULL; + const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG; + if (LZ4_isLittleEndian()) + return (U32)(((sequence << 24) * prime5bytes) >> (64 - hashLog)); + else + return (U32)(((sequence >> 24) * prime8bytes) >> (64 - hashLog)); +} + +FORCE_INLINE U32 LZ4_hashPosition(const void* const p, tableType_t const tableType) +{ + if ((sizeof(reg_t)==8) && (tableType != byU16)) return LZ4_hash5(LZ4_read_ARCH(p), tableType); + return LZ4_hash4(LZ4_read32(p), tableType); +} + +static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, tableType_t const tableType, const BYTE* srcBase) +{ + switch (tableType) + { + case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = p; return; } + case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = (U32)(p-srcBase); return; } + case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = (U16)(p-srcBase); return; } + } +} + +FORCE_INLINE void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase); +} + +static const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + if (tableType == byPtr) { const BYTE** hashTable = (const BYTE**) tableBase; return hashTable[h]; } + if (tableType == byU32) { const U32* const hashTable = (U32*) tableBase; return hashTable[h] + srcBase; } + { const U16* const hashTable = (U16*) tableBase; return hashTable[h] + srcBase; } /* default, to ensure a return */ +} + +FORCE_INLINE const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase) +{ + U32 const h = LZ4_hashPosition(p, tableType); + return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase); +} + + +/** LZ4_compress_generic() : + inlined, to ensure branches are decided at compilation time */ +FORCE_INLINE int LZ4_compress_generic( + LZ4_stream_t_internal* const cctx, + const char* const source, + char* const dest, + const int inputSize, + const int maxOutputSize, + const limitedOutput_directive outputLimited, + const tableType_t tableType, + const dict_directive dict, + const dictIssue_directive dictIssue, + const U32 acceleration) +{ + const BYTE* ip = (const BYTE*) source; + const BYTE* base; + const BYTE* lowLimit; + const BYTE* const lowRefLimit = ip - cctx->dictSize; + const BYTE* const dictionary = cctx->dictionary; + const BYTE* const dictEnd = dictionary + cctx->dictSize; + const ptrdiff_t dictDelta = dictEnd - (const BYTE*)source; + const BYTE* anchor = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + + BYTE* op = (BYTE*) dest; + BYTE* const olimit = op + maxOutputSize; + + U32 forwardH; + + /* Init conditions */ + if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported inputSize, too large (or negative) */ + switch(dict) + { + case noDict: + default: + base = (const BYTE*)source; + lowLimit = (const BYTE*)source; + break; + case withPrefix64k: + base = (const BYTE*)source - cctx->currentOffset; + lowLimit = (const BYTE*)source - cctx->dictSize; + break; + case usingExtDict: + base = (const BYTE*)source - cctx->currentOffset; + lowLimit = (const BYTE*)source; + break; + } + if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ + if (inputSizehashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); + + /* Main Loop */ + for ( ; ; ) { + ptrdiff_t refDelta = 0; + const BYTE* match; + BYTE* token; + + /* Find a match */ + { const BYTE* forwardIp = ip; + unsigned step = 1; + unsigned searchMatchNb = acceleration << LZ4_skipTrigger; + do { + U32 const h = forwardH; + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_skipTrigger); + + if (unlikely(forwardIp > mflimit)) goto _last_literals; + + match = LZ4_getPositionOnHash(h, cctx->hashTable, tableType, base); + if (dict==usingExtDict) { + if (match < (const BYTE*)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE*)source; + } } + forwardH = LZ4_hashPosition(forwardIp, tableType); + LZ4_putPositionOnHash(ip, h, cctx->hashTable, tableType, base); + + } while ( ((dictIssue==dictSmall) ? (match < lowRefLimit) : 0) + || ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match+refDelta) != LZ4_read32(ip)) ); + } + + /* Catch up */ + while (((ip>anchor) & (match+refDelta > lowLimit)) && (unlikely(ip[-1]==match[refDelta-1]))) { ip--; match--; } + + /* Encode Literals */ + { unsigned const litLength = (unsigned)(ip - anchor); + token = op++; + if ((outputLimited) && /* Check output buffer overflow */ + (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit))) + return 0; + if (litLength >= RUN_MASK) { + int len = (int)litLength-RUN_MASK; + *token = (RUN_MASK<= 255 ; len-=255) *op++ = 255; + *op++ = (BYTE)len; + } + else *token = (BYTE)(litLength< matchlimit) limit = matchlimit; + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, limit); + ip += MINMATCH + matchCode; + if (ip==limit) { + unsigned const more = LZ4_count(ip, (const BYTE*)source, matchlimit); + matchCode += more; + ip += more; + } + } else { + matchCode = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit); + ip += MINMATCH + matchCode; + } + + if ( outputLimited && /* Check output buffer overflow */ + (unlikely(op + (1 + LASTLITERALS) + (matchCode>>8) > olimit)) ) + return 0; + if (matchCode >= ML_MASK) { + *token += ML_MASK; + matchCode -= ML_MASK; + LZ4_write32(op, 0xFFFFFFFF); + while (matchCode >= 4*255) op+=4, LZ4_write32(op, 0xFFFFFFFF), matchCode -= 4*255; + op += matchCode / 255; + *op++ = (BYTE)(matchCode % 255); + } else + *token += (BYTE)(matchCode); + } + + anchor = ip; + + /* Test end of chunk */ + if (ip > mflimit) break; + + /* Fill table */ + LZ4_putPosition(ip-2, cctx->hashTable, tableType, base); + + /* Test next position */ + match = LZ4_getPosition(ip, cctx->hashTable, tableType, base); + if (dict==usingExtDict) { + if (match < (const BYTE*)source) { + refDelta = dictDelta; + lowLimit = dictionary; + } else { + refDelta = 0; + lowLimit = (const BYTE*)source; + } } + LZ4_putPosition(ip, cctx->hashTable, tableType, base); + if ( ((dictIssue==dictSmall) ? (match>=lowRefLimit) : 1) + && (match+MAX_DISTANCE>=ip) + && (LZ4_read32(match+refDelta)==LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } + + /* Prepare next loop */ + forwardH = LZ4_hashPosition(++ip, tableType); + } + +_last_literals: + /* Encode Last Literals */ + { size_t const lastRun = (size_t)(iend - anchor); + if ( (outputLimited) && /* Check output buffer overflow */ + ((op - (BYTE*)dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize) ) + return 0; + if (lastRun >= RUN_MASK) { + size_t accumulator = lastRun - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRun<internal_donotuse; + LZ4_resetStream((LZ4_stream_t*)state); + if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + + if (maxOutputSize >= LZ4_compressBound(inputSize)) { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, dest, inputSize, 0, notLimited, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); + } else { + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(ctx, source, dest, inputSize, maxOutputSize, limitedOutput, (sizeof(void*)==8) ? byU32 : byPtr, noDict, noDictIssue, acceleration); + } +} + + +int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ +#if (LZ4_HEAPMODE) + void* ctxPtr = ALLOCATOR(1, sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ +#else + LZ4_stream_t ctx; + void* const ctxPtr = &ctx; +#endif + + int const result = LZ4_compress_fast_extState(ctxPtr, source, dest, inputSize, maxOutputSize, acceleration); + +#if (LZ4_HEAPMODE) + FREEMEM(ctxPtr); +#endif + return result; +} + + +int LZ4_compress_default(const char* source, char* dest, int inputSize, int maxOutputSize) +{ + return LZ4_compress_fast(source, dest, inputSize, maxOutputSize, 1); +} + + +/* hidden debug function */ +/* strangely enough, gcc generates faster code when this function is uncommented, even if unused */ +int LZ4_compress_fast_force(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t ctx; + LZ4_resetStream(&ctx); + + if (inputSize < LZ4_64Klimit) + return LZ4_compress_generic(&ctx.internal_donotuse, source, dest, inputSize, maxOutputSize, limitedOutput, byU16, noDict, noDictIssue, acceleration); + else + return LZ4_compress_generic(&ctx.internal_donotuse, source, dest, inputSize, maxOutputSize, limitedOutput, sizeof(void*)==8 ? byU32 : byPtr, noDict, noDictIssue, acceleration); +} + + +/*-****************************** +* *_destSize() variant +********************************/ + +static int LZ4_compress_destSize_generic( + LZ4_stream_t_internal* const ctx, + const char* const src, + char* const dst, + int* const srcSizePtr, + const int targetDstSize, + const tableType_t tableType) +{ + const BYTE* ip = (const BYTE*) src; + const BYTE* base = (const BYTE*) src; + const BYTE* lowLimit = (const BYTE*) src; + const BYTE* anchor = ip; + const BYTE* const iend = ip + *srcSizePtr; + const BYTE* const mflimit = iend - MFLIMIT; + const BYTE* const matchlimit = iend - LASTLITERALS; + + BYTE* op = (BYTE*) dst; + BYTE* const oend = op + targetDstSize; + BYTE* const oMaxLit = op + targetDstSize - 2 /* offset */ - 8 /* because 8+MINMATCH==MFLIMIT */ - 1 /* token */; + BYTE* const oMaxMatch = op + targetDstSize - (LASTLITERALS + 1 /* token */); + BYTE* const oMaxSeq = oMaxLit - 1 /* token */; + + U32 forwardH; + + + /* Init conditions */ + if (targetDstSize < 1) return 0; /* Impossible to store anything */ + if ((U32)*srcSizePtr > (U32)LZ4_MAX_INPUT_SIZE) return 0; /* Unsupported input size, too large (or negative) */ + if ((tableType == byU16) && (*srcSizePtr>=LZ4_64Klimit)) return 0; /* Size too large (not within 64K limit) */ + if (*srcSizePtrhashTable, tableType, base); + ip++; forwardH = LZ4_hashPosition(ip, tableType); + + /* Main Loop */ + for ( ; ; ) { + const BYTE* match; + BYTE* token; + + /* Find a match */ + { const BYTE* forwardIp = ip; + unsigned step = 1; + unsigned searchMatchNb = 1 << LZ4_skipTrigger; + + do { + U32 h = forwardH; + ip = forwardIp; + forwardIp += step; + step = (searchMatchNb++ >> LZ4_skipTrigger); + + if (unlikely(forwardIp > mflimit)) goto _last_literals; + + match = LZ4_getPositionOnHash(h, ctx->hashTable, tableType, base); + forwardH = LZ4_hashPosition(forwardIp, tableType); + LZ4_putPositionOnHash(ip, h, ctx->hashTable, tableType, base); + + } while ( ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip)) + || (LZ4_read32(match) != LZ4_read32(ip)) ); + } + + /* Catch up */ + while ((ip>anchor) && (match > lowLimit) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; } + + /* Encode Literal length */ + { unsigned litLength = (unsigned)(ip - anchor); + token = op++; + if (op + ((litLength+240)/255) + litLength > oMaxLit) { + /* Not enough space for a last match */ + op--; + goto _last_literals; + } + if (litLength>=RUN_MASK) { + unsigned len = litLength - RUN_MASK; + *token=(RUN_MASK<= 255 ; len-=255) *op++ = 255; + *op++ = (BYTE)len; + } + else *token = (BYTE)(litLength< oMaxMatch) { + /* Match description too long : reduce it */ + matchLength = (15-1) + (oMaxMatch-op) * 255; + } + ip += MINMATCH + matchLength; + + if (matchLength>=ML_MASK) { + *token += ML_MASK; + matchLength -= ML_MASK; + while (matchLength >= 255) { matchLength-=255; *op++ = 255; } + *op++ = (BYTE)matchLength; + } + else *token += (BYTE)(matchLength); + } + + anchor = ip; + + /* Test end of block */ + if (ip > mflimit) break; + if (op > oMaxSeq) break; + + /* Fill table */ + LZ4_putPosition(ip-2, ctx->hashTable, tableType, base); + + /* Test next position */ + match = LZ4_getPosition(ip, ctx->hashTable, tableType, base); + LZ4_putPosition(ip, ctx->hashTable, tableType, base); + if ( (match+MAX_DISTANCE>=ip) + && (LZ4_read32(match)==LZ4_read32(ip)) ) + { token=op++; *token=0; goto _next_match; } + + /* Prepare next loop */ + forwardH = LZ4_hashPosition(++ip, tableType); + } + +_last_literals: + /* Encode Last Literals */ + { size_t lastRunSize = (size_t)(iend - anchor); + if (op + 1 /* token */ + ((lastRunSize+240)/255) /* litLength */ + lastRunSize /* literals */ > oend) { + /* adapt lastRunSize to fill 'dst' */ + lastRunSize = (oend-op) - 1; + lastRunSize -= (lastRunSize+240)/255; + } + ip = anchor + lastRunSize; + + if (lastRunSize >= RUN_MASK) { + size_t accumulator = lastRunSize - RUN_MASK; + *op++ = RUN_MASK << ML_BITS; + for(; accumulator >= 255 ; accumulator-=255) *op++ = 255; + *op++ = (BYTE) accumulator; + } else { + *op++ = (BYTE)(lastRunSize<= LZ4_compressBound(*srcSizePtr)) { /* compression success is guaranteed */ + return LZ4_compress_fast_extState(state, src, dst, *srcSizePtr, targetDstSize, 1); + } else { + if (*srcSizePtr < LZ4_64Klimit) + return LZ4_compress_destSize_generic(&state->internal_donotuse, src, dst, srcSizePtr, targetDstSize, byU16); + else + return LZ4_compress_destSize_generic(&state->internal_donotuse, src, dst, srcSizePtr, targetDstSize, sizeof(void*)==8 ? byU32 : byPtr); + } +} + + +int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize) +{ +#if (LZ4_HEAPMODE) + LZ4_stream_t* ctx = (LZ4_stream_t*)ALLOCATOR(1, sizeof(LZ4_stream_t)); /* malloc-calloc always properly aligned */ +#else + LZ4_stream_t ctxBody; + LZ4_stream_t* ctx = &ctxBody; +#endif + + int result = LZ4_compress_destSize_extState(ctx, src, dst, srcSizePtr, targetDstSize); + +#if (LZ4_HEAPMODE) + FREEMEM(ctx); +#endif + return result; +} + + + +/*-****************************** +* Streaming functions +********************************/ + +LZ4_stream_t* LZ4_createStream(void) +{ + LZ4_stream_t* lz4s = (LZ4_stream_t*)ALLOCATOR(8, LZ4_STREAMSIZE_U64); + LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal)); /* A compilation error here means LZ4_STREAMSIZE is not large enough */ + LZ4_resetStream(lz4s); + return lz4s; +} + +void LZ4_resetStream (LZ4_stream_t* LZ4_stream) +{ + MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t)); +} + +int LZ4_freeStream (LZ4_stream_t* LZ4_stream) +{ + if (!LZ4_stream) return 0; /* support free on NULL */ + FREEMEM(LZ4_stream); + return (0); +} + + +#define HASH_UNIT sizeof(reg_t) +int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize) +{ + LZ4_stream_t_internal* dict = &LZ4_dict->internal_donotuse; + const BYTE* p = (const BYTE*)dictionary; + const BYTE* const dictEnd = p + dictSize; + const BYTE* base; + + if ((dict->initCheck) || (dict->currentOffset > 1 GB)) /* Uninitialized structure, or reuse overflow */ + LZ4_resetStream(LZ4_dict); + + if (dictSize < (int)HASH_UNIT) { + dict->dictionary = NULL; + dict->dictSize = 0; + return 0; + } + + if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB; + dict->currentOffset += 64 KB; + base = p - dict->currentOffset; + dict->dictionary = p; + dict->dictSize = (U32)(dictEnd - p); + dict->currentOffset += dict->dictSize; + + while (p <= dictEnd-HASH_UNIT) { + LZ4_putPosition(p, dict->hashTable, byU32, base); + p+=3; + } + + return dict->dictSize; +} + + +static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, const BYTE* src) +{ + if ((LZ4_dict->currentOffset > 0x80000000) || + ((uptrval)LZ4_dict->currentOffset > (uptrval)src)) { /* address space overflow */ + /* rescale hash table */ + U32 const delta = LZ4_dict->currentOffset - 64 KB; + const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize; + int i; + for (i=0; ihashTable[i] < delta) LZ4_dict->hashTable[i]=0; + else LZ4_dict->hashTable[i] -= delta; + } + LZ4_dict->currentOffset = 64 KB; + if (LZ4_dict->dictSize > 64 KB) LZ4_dict->dictSize = 64 KB; + LZ4_dict->dictionary = dictEnd - LZ4_dict->dictSize; + } +} + + +int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_stream->internal_donotuse; + const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize; + + const BYTE* smallest = (const BYTE*) source; + if (streamPtr->initCheck) return 0; /* Uninitialized structure detected */ + if ((streamPtr->dictSize>0) && (smallest>dictEnd)) smallest = dictEnd; + LZ4_renormDictT(streamPtr, smallest); + if (acceleration < 1) acceleration = ACCELERATION_DEFAULT; + + /* Check overlapping input/dictionary space */ + { const BYTE* sourceEnd = (const BYTE*) source + inputSize; + if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd)) { + streamPtr->dictSize = (U32)(dictEnd - sourceEnd); + if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB; + if (streamPtr->dictSize < 4) streamPtr->dictSize = 0; + streamPtr->dictionary = dictEnd - streamPtr->dictSize; + } + } + + /* prefix mode : source data follows dictionary */ + if (dictEnd == (const BYTE*)source) { + int result; + if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, dictSmall, acceleration); + else + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, noDictIssue, acceleration); + streamPtr->dictSize += (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } + + /* external dictionary mode */ + { int result; + if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset)) + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, dictSmall, acceleration); + else + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, noDictIssue, acceleration); + streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + return result; + } +} + + +/* Hidden debug function, to force external dictionary mode */ +int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int inputSize) +{ + LZ4_stream_t_internal* streamPtr = &LZ4_dict->internal_donotuse; + int result; + const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize; + + const BYTE* smallest = dictEnd; + if (smallest > (const BYTE*) source) smallest = (const BYTE*) source; + LZ4_renormDictT(streamPtr, smallest); + + result = LZ4_compress_generic(streamPtr, source, dest, inputSize, 0, notLimited, byU32, usingExtDict, noDictIssue, 1); + + streamPtr->dictionary = (const BYTE*)source; + streamPtr->dictSize = (U32)inputSize; + streamPtr->currentOffset += (U32)inputSize; + + return result; +} + + +/*! LZ4_saveDict() : + * If previously compressed data block is not guaranteed to remain available at its memory location, + * save it into a safer place (char* safeBuffer). + * Note : you don't need to call LZ4_loadDict() afterwards, + * dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue(). + * Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. + */ +int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize) +{ + LZ4_stream_t_internal* const dict = &LZ4_dict->internal_donotuse; + const BYTE* const previousDictEnd = dict->dictionary + dict->dictSize; + + if ((U32)dictSize > 64 KB) dictSize = 64 KB; /* useless to define a dictionary > 64 KB */ + if ((U32)dictSize > dict->dictSize) dictSize = dict->dictSize; + + memmove(safeBuffer, previousDictEnd - dictSize, dictSize); + + dict->dictionary = (const BYTE*)safeBuffer; + dict->dictSize = (U32)dictSize; + + return dictSize; +} + + + +/*-***************************** +* Decompression functions +*******************************/ +/*! LZ4_decompress_generic() : + * This generic decompression function cover all use cases. + * It shall be instantiated several times, using different sets of directives + * Note that it is important this generic function is really inlined, + * in order to remove useless branches during compilation optimization. + */ +FORCE_INLINE int LZ4_decompress_generic( + const char* const source, + char* const dest, + int inputSize, + int outputSize, /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */ + + int endOnInput, /* endOnOutputSize, endOnInputSize */ + int partialDecoding, /* full, partial */ + int targetOutputSize, /* only used if partialDecoding==partial */ + int dict, /* noDict, withPrefix64k, usingExtDict */ + const BYTE* const lowPrefix, /* == dest when no prefix */ + const BYTE* const dictStart, /* only if dict==usingExtDict */ + const size_t dictSize /* note : = 0 if noDict */ + ) +{ + /* Local Variables */ + const BYTE* ip = (const BYTE*) source; + const BYTE* const iend = ip + inputSize; + + BYTE* op = (BYTE*) dest; + BYTE* const oend = op + outputSize; + BYTE* cpy; + BYTE* oexit = op + targetOutputSize; + const BYTE* const lowLimit = lowPrefix - dictSize; + + const BYTE* const dictEnd = (const BYTE*)dictStart + dictSize; + const unsigned dec32table[] = {0, 1, 2, 1, 4, 4, 4, 4}; + const int dec64table[] = {0, 0, 0, -1, 0, 1, 2, 3}; + + const int safeDecode = (endOnInput==endOnInputSize); + const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB))); + + + /* Special cases */ + if ((partialDecoding) && (oexit > oend-MFLIMIT)) oexit = oend-MFLIMIT; /* targetOutputSize too high => decode everything */ + if ((endOnInput) && (unlikely(outputSize==0))) return ((inputSize==1) && (*ip==0)) ? 0 : -1; /* Empty output buffer */ + if ((!endOnInput) && (unlikely(outputSize==0))) return (*ip==0?1:-1); + + /* Main Loop : decode sequences */ + while (1) { + size_t length; + const BYTE* match; + size_t offset; + + /* get literal length */ + unsigned const token = *ip++; + if ((length=(token>>ML_BITS)) == RUN_MASK) { + unsigned s; + do { + s = *ip++; + length += s; + } while ( likely(endOnInput ? ip(partialDecoding?oexit:oend-MFLIMIT)) || (ip+length>iend-(2+1+LASTLITERALS))) ) + || ((!endOnInput) && (cpy>oend-WILDCOPYLENGTH)) ) + { + if (partialDecoding) { + if (cpy > oend) goto _output_error; /* Error : write attempt beyond end of output buffer */ + if ((endOnInput) && (ip+length > iend)) goto _output_error; /* Error : read attempt beyond end of input buffer */ + } else { + if ((!endOnInput) && (cpy != oend)) goto _output_error; /* Error : block decoding must stop exactly there */ + if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) goto _output_error; /* Error : input must be consumed */ + } + memcpy(op, ip, length); + ip += length; + op += length; + break; /* Necessarily EOF, due to parsing restrictions */ + } + LZ4_wildCopy(op, ip, cpy); + ip += length; op = cpy; + + /* get offset */ + offset = LZ4_readLE16(ip); ip+=2; + match = op - offset; + if ((checkOffset) && (unlikely(match < lowLimit))) goto _output_error; /* Error : offset outside buffers */ + LZ4_write32(op, (U32)offset); /* costs ~1%; silence an msan warning when offset==0 */ + + /* get matchlength */ + length = token & ML_MASK; + if (length == ML_MASK) { + unsigned s; + do { + s = *ip++; + if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error; + length += s; + } while (s==255); + if ((safeDecode) && unlikely((uptrval)(op)+length<(uptrval)op)) goto _output_error; /* overflow detection */ + } + length += MINMATCH; + + /* check external dictionary */ + if ((dict==usingExtDict) && (match < lowPrefix)) { + if (unlikely(op+length > oend-LASTLITERALS)) goto _output_error; /* doesn't respect parsing restriction */ + + if (length <= (size_t)(lowPrefix-match)) { + /* match can be copied as a single segment from external dictionary */ + memmove(op, dictEnd - (lowPrefix-match), length); + op += length; + } else { + /* match encompass external dictionary and current block */ + size_t const copySize = (size_t)(lowPrefix-match); + size_t const restSize = length - copySize; + memcpy(op, dictEnd - copySize, copySize); + op += copySize; + if (restSize > (size_t)(op-lowPrefix)) { /* overlap copy */ + BYTE* const endOfMatch = op + restSize; + const BYTE* copyFrom = lowPrefix; + while (op < endOfMatch) *op++ = *copyFrom++; + } else { + memcpy(op, lowPrefix, restSize); + op += restSize; + } } + continue; + } + + /* copy match within block */ + cpy = op + length; + if (unlikely(offset<8)) { + const int dec64 = dec64table[offset]; + op[0] = match[0]; + op[1] = match[1]; + op[2] = match[2]; + op[3] = match[3]; + match += dec32table[offset]; + memcpy(op+4, match, 4); + match -= dec64; + } else { LZ4_copy8(op, match); match+=8; } + op += 8; + + if (unlikely(cpy>oend-12)) { + BYTE* const oCopyLimit = oend-(WILDCOPYLENGTH-1); + if (cpy > oend-LASTLITERALS) goto _output_error; /* Error : last LASTLITERALS bytes must be literals (uncompressed) */ + if (op < oCopyLimit) { + LZ4_wildCopy(op, match, oCopyLimit); + match += oCopyLimit - op; + op = oCopyLimit; + } + while (op16) LZ4_wildCopy(op+8, match+8, cpy); + } + op=cpy; /* correction */ + } + + /* end of decoding */ + if (endOnInput) + return (int) (((char*)op)-dest); /* Nb of output bytes decoded */ + else + return (int) (((const char*)ip)-source); /* Nb of input bytes read */ + + /* Overflow error detected */ +_output_error: + return (int) (-(((const char*)ip)-source))-1; +} + + +int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxDecompressedSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, full, 0, noDict, (BYTE*)dest, NULL, 0); +} + +int LZ4_decompress_safe_partial(const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, partial, targetOutputSize, noDict, (BYTE*)dest, NULL, 0); +} + +int LZ4_decompress_fast(const char* source, char* dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)(dest - 64 KB), NULL, 64 KB); +} + + +/*===== streaming decompression functions =====*/ + +LZ4_streamDecode_t* LZ4_createStreamDecode(void) +{ + LZ4_streamDecode_t* lz4s = (LZ4_streamDecode_t*) ALLOCATOR(1, sizeof(LZ4_streamDecode_t)); + return lz4s; +} + +int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream) +{ + if (!LZ4_stream) return 0; /* support free on NULL */ + FREEMEM(LZ4_stream); + return 0; +} + +/*! + * LZ4_setStreamDecode() : + * Use this function to instruct where to find the dictionary. + * This function is not necessary if previous data is still available where it was decoded. + * Loading a size of 0 is allowed (same effect as no dictionary). + * Return : 1 if OK, 0 if error + */ +int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + lz4sd->prefixSize = (size_t) dictSize; + lz4sd->prefixEnd = (const BYTE*) dictionary + dictSize; + lz4sd->externalDict = NULL; + lz4sd->extDictSize = 0; + return 1; +} + +/* +*_continue() : + These decoding functions allow decompression of multiple blocks in "streaming" mode. + Previously decoded blocks must still be available at the memory position where they were decoded. + If it's not possible, save the relevant part of decoded data into a safe buffer, + and indicate where it stands using LZ4_setStreamDecode() +*/ +int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixEnd == (BYTE*)dest) { + result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, + endOnInputSize, full, 0, + usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize += result; + lz4sd->prefixEnd += result; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, + endOnInputSize, full, 0, + usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize = result; + lz4sd->prefixEnd = (BYTE*)dest + result; + } + + return result; +} + +int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize) +{ + LZ4_streamDecode_t_internal* lz4sd = &LZ4_streamDecode->internal_donotuse; + int result; + + if (lz4sd->prefixEnd == (BYTE*)dest) { + result = LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, full, 0, + usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize += originalSize; + lz4sd->prefixEnd += originalSize; + } else { + lz4sd->extDictSize = lz4sd->prefixSize; + lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize; + result = LZ4_decompress_generic(source, dest, 0, originalSize, + endOnOutputSize, full, 0, + usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize); + if (result <= 0) return result; + lz4sd->prefixSize = originalSize; + lz4sd->prefixEnd = (BYTE*)dest + originalSize; + } + + return result; +} + + +/* +Advanced decoding functions : +*_usingDict() : + These decoding functions work the same as "_continue" ones, + the dictionary must be explicitly provided within parameters +*/ + +FORCE_INLINE int LZ4_decompress_usingDict_generic(const char* source, char* dest, int compressedSize, int maxOutputSize, int safe, const char* dictStart, int dictSize) +{ + if (dictSize==0) + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest, NULL, 0); + if (dictStart+dictSize == dest) { + if (dictSize >= (int)(64 KB - 1)) + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, withPrefix64k, (BYTE*)dest-64 KB, NULL, 0); + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest-dictSize, NULL, 0); + } + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize); +} + +int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_usingDict_generic(source, dest, compressedSize, maxOutputSize, 1, dictStart, dictSize); +} + +int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_usingDict_generic(source, dest, 0, originalSize, 0, dictStart, dictSize); +} + +/* debug function */ +int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize); +} + + +/*=************************************************* +* Obsolete Functions +***************************************************/ +/* obsolete compression functions */ +int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize) { return LZ4_compress_default(source, dest, inputSize, maxOutputSize); } +int LZ4_compress(const char* source, char* dest, int inputSize) { return LZ4_compress_default(source, dest, inputSize, LZ4_compressBound(inputSize)); } +int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, dstSize, 1); } +int LZ4_compress_withState (void* state, const char* src, char* dst, int srcSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, LZ4_compressBound(srcSize), 1); } +int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_fast_continue(LZ4_stream, src, dst, srcSize, maxDstSize, 1); } +int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize) { return LZ4_compress_fast_continue(LZ4_stream, source, dest, inputSize, LZ4_compressBound(inputSize), 1); } + +/* +These function names are deprecated and should no longer be used. +They are only provided here for compatibility with older user programs. +- LZ4_uncompress is totally equivalent to LZ4_decompress_fast +- LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe +*/ +int LZ4_uncompress (const char* source, char* dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); } +int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); } + + +/* Obsolete Streaming functions */ + +int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; } + +static void LZ4_init(LZ4_stream_t* lz4ds, BYTE* base) +{ + MEM_INIT(lz4ds, 0, sizeof(LZ4_stream_t)); + lz4ds->internal_donotuse.bufferStart = base; +} + +int LZ4_resetStreamState(void* state, char* inputBuffer) +{ + if ((((uptrval)state) & 3) != 0) return 1; /* Error : pointer is not aligned on 4-bytes boundary */ + LZ4_init((LZ4_stream_t*)state, (BYTE*)inputBuffer); + return 0; +} + +void* LZ4_create (char* inputBuffer) +{ + LZ4_stream_t* lz4ds = (LZ4_stream_t*)ALLOCATOR(8, sizeof(LZ4_stream_t)); + LZ4_init (lz4ds, (BYTE*)inputBuffer); + return lz4ds; +} + +char* LZ4_slideInputBuffer (void* LZ4_Data) +{ + LZ4_stream_t_internal* ctx = &((LZ4_stream_t*)LZ4_Data)->internal_donotuse; + int dictSize = LZ4_saveDict((LZ4_stream_t*)LZ4_Data, (char*)ctx->bufferStart, 64 KB); + return (char*)(ctx->bufferStart + dictSize); +} + +/* Obsolete streaming decompression functions */ + +int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize) +{ + return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB); +} + +int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize) +{ + return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB); +} + +#endif /* LZ4_COMMONDEFS_ONLY */ diff --git a/Source/ThirdParty/LZ4/lz4.h b/Source/ThirdParty/LZ4/lz4.h new file mode 100644 index 000000000..a83fd1d86 --- /dev/null +++ b/Source/ThirdParty/LZ4/lz4.h @@ -0,0 +1,412 @@ +/* + * LZ4 - Fast LZ compression algorithm + * Header File + * Copyright (C) 2011-2017, Yann Collet. + + BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php) + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + You can contact the author at : + - LZ4 homepage : http://www.lz4.org + - LZ4 source repository : https://github.com/lz4/lz4 +*/ +#if defined (__cplusplus) +extern "C" { +#endif + +#ifndef LZ4_H_2983827168210 +#define LZ4_H_2983827168210 + +/* --- Dependency --- */ +#include /* size_t */ + + +/** + Introduction + + LZ4 is lossless compression algorithm, providing compression speed at 400 MB/s per core, + scalable with multi-cores CPU. It features an extremely fast decoder, with speed in + multiple GB/s per core, typically reaching RAM speed limits on multi-core systems. + + The LZ4 compression library provides in-memory compression and decompression functions. + Compression can be done in: + - a single step (described as Simple Functions) + - a single step, reusing a context (described in Advanced Functions) + - unbounded multiple steps (described as Streaming compression) + + lz4.h provides block compression functions. It gives full buffer control to user. + Decompressing an lz4-compressed block also requires metadata (such as compressed size). + Each application is free to encode such metadata in whichever way it wants. + + An additional format, called LZ4 frame specification (doc/lz4_Frame_format.md), + take care of encoding standard metadata alongside LZ4-compressed blocks. + If your application requires interoperability, it's recommended to use it. + A library is provided to take care of it, see lz4frame.h. +*/ + +/*^*************************************************************** +* Export parameters +*****************************************************************/ +/* +* LZ4_DLL_EXPORT : +* Enable exporting of functions when building a Windows DLL +* LZ4LIB_API : +* Control library symbols visibility. +*/ +#if defined(LZ4_DLL_EXPORT) && (LZ4_DLL_EXPORT==1) +# define LZ4LIB_API __declspec(dllexport) +#elif defined(LZ4_DLL_IMPORT) && (LZ4_DLL_IMPORT==1) +# define LZ4LIB_API __declspec(dllimport) /* It isn't required but allows to generate better code, saving a function pointer load from the IAT and an indirect jump.*/ +#elif defined(__GNUC__) && (__GNUC__ >= 4) +# define LZ4LIB_API __attribute__ ((__visibility__ ("default"))) +#else +# define LZ4LIB_API +#endif + + +/*------ Version ------*/ +#define LZ4_VERSION_MAJOR 1 /* for breaking interface changes */ +#define LZ4_VERSION_MINOR 8 /* for new (non-breaking) interface capabilities */ +#define LZ4_VERSION_RELEASE 0 /* for tweaks, bug-fixes, or development */ + +#define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE) + +#define LZ4_LIB_VERSION LZ4_VERSION_MAJOR.LZ4_VERSION_MINOR.LZ4_VERSION_RELEASE +#define LZ4_QUOTE(str) #str +#define LZ4_EXPAND_AND_QUOTE(str) LZ4_QUOTE(str) +#define LZ4_VERSION_STRING LZ4_EXPAND_AND_QUOTE(LZ4_LIB_VERSION) + +LZ4LIB_API int LZ4_versionNumber (void); /**< library version number; to be used when checking dll version */ +LZ4LIB_API const char* LZ4_versionString (void); /**< library version string; to be used when checking dll version */ + + +/*-************************************ +* Tuning parameter +**************************************/ +/*! + * LZ4_MEMORY_USAGE : + * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.) + * Increasing memory usage improves compression ratio + * Reduced memory usage can improve speed, due to cache effect + * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache + */ +#ifndef LZ4_MEMORY_USAGE +# define LZ4_MEMORY_USAGE 14 +#endif + +/*-************************************ +* Simple Functions +**************************************/ +/*! LZ4_compress_default() : + Compresses 'sourceSize' bytes from buffer 'source' + into already allocated 'dest' buffer of size 'maxDestSize'. + Compression is guaranteed to succeed if 'maxDestSize' >= LZ4_compressBound(sourceSize). + It also runs faster, so it's a recommended setting. + If the function cannot compress 'source' into a more limited 'dest' budget, + compression stops *immediately*, and the function result is zero. + As a consequence, 'dest' content is not valid. + This function never writes outside 'dest' buffer, nor read outside 'source' buffer. + sourceSize : Max supported value is LZ4_MAX_INPUT_VALUE + maxDestSize : full or partial size of buffer 'dest' (which must be already allocated) + return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize) + or 0 if compression fails */ +LZ4LIB_API int LZ4_compress_default(const char* source, char* dest, int sourceSize, int maxDestSize); + +/*! LZ4_decompress_safe() : + compressedSize : is the precise full size of the compressed block. + maxDecompressedSize : is the size of destination buffer, which must be already allocated. + return : the number of bytes decompressed into destination buffer (necessarily <= maxDecompressedSize) + If destination buffer is not large enough, decoding will stop and output an error code (<0). + If the source stream is detected malformed, the function will stop decoding and return a negative result. + This function is protected against buffer overflow exploits, including malicious data packets. + It never writes outside output buffer, nor reads outside input buffer. +*/ +LZ4LIB_API int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxDecompressedSize); + + +/*-************************************ +* Advanced Functions +**************************************/ +#define LZ4_MAX_INPUT_SIZE 0x7E000000 /* 2 113 929 216 bytes */ +#define LZ4_COMPRESSBOUND(isize) ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16) + +/*! +LZ4_compressBound() : + Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible) + This function is primarily useful for memory allocation purposes (destination buffer size). + Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example). + Note that LZ4_compress_default() compress faster when dest buffer size is >= LZ4_compressBound(srcSize) + inputSize : max supported value is LZ4_MAX_INPUT_SIZE + return : maximum output size in a "worst case" scenario + or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE) +*/ +LZ4LIB_API int LZ4_compressBound(int inputSize); + +/*! +LZ4_compress_fast() : + Same as LZ4_compress_default(), but allows to select an "acceleration" factor. + The larger the acceleration value, the faster the algorithm, but also the lesser the compression. + It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed. + An acceleration value of "1" is the same as regular LZ4_compress_default() + Values <= 0 will be replaced by ACCELERATION_DEFAULT (see lz4.c), which is 1. +*/ +LZ4LIB_API int LZ4_compress_fast (const char* source, char* dest, int sourceSize, int maxDestSize, int acceleration); + + +/*! +LZ4_compress_fast_extState() : + Same compression function, just using an externally allocated memory space to store compression state. + Use LZ4_sizeofState() to know how much memory must be allocated, + and allocate it on 8-bytes boundaries (using malloc() typically). + Then, provide it as 'void* state' to compression function. +*/ +LZ4LIB_API int LZ4_sizeofState(void); +LZ4LIB_API int LZ4_compress_fast_extState (void* state, const char* source, char* dest, int inputSize, int maxDestSize, int acceleration); + + +/*! +LZ4_compress_destSize() : + Reverse the logic, by compressing as much data as possible from 'source' buffer + into already allocated buffer 'dest' of size 'targetDestSize'. + This function either compresses the entire 'source' content into 'dest' if it's large enough, + or fill 'dest' buffer completely with as much data as possible from 'source'. + *sourceSizePtr : will be modified to indicate how many bytes where read from 'source' to fill 'dest'. + New value is necessarily <= old value. + return : Nb bytes written into 'dest' (necessarily <= targetDestSize) + or 0 if compression fails +*/ +LZ4LIB_API int LZ4_compress_destSize (const char* source, char* dest, int* sourceSizePtr, int targetDestSize); + + +/*! +LZ4_decompress_fast() : + originalSize : is the original and therefore uncompressed size + return : the number of bytes read from the source buffer (in other words, the compressed size) + If the source stream is detected malformed, the function will stop decoding and return a negative result. + Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes. + note : This function fully respect memory boundaries for properly formed compressed data. + It is a bit faster than LZ4_decompress_safe(). + However, it does not provide any protection against intentionally modified data stream (malicious input). + Use this function in trusted environment only (data to decode comes from a trusted source). +*/ +LZ4LIB_API int LZ4_decompress_fast (const char* source, char* dest, int originalSize); + +/*! +LZ4_decompress_safe_partial() : + This function decompress a compressed block of size 'compressedSize' at position 'source' + into destination buffer 'dest' of size 'maxDecompressedSize'. + The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached, + reducing decompression time. + return : the number of bytes decoded in the destination buffer (necessarily <= maxDecompressedSize) + Note : this number can be < 'targetOutputSize' should the compressed block to decode be smaller. + Always control how many bytes were decoded. + If the source stream is detected malformed, the function will stop decoding and return a negative result. + This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets +*/ +LZ4LIB_API int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize); + + +/*-********************************************* +* Streaming Compression Functions +***********************************************/ +typedef union LZ4_stream_u LZ4_stream_t; /* incomplete type (defined later) */ + +/*! LZ4_createStream() and LZ4_freeStream() : + * LZ4_createStream() will allocate and initialize an `LZ4_stream_t` structure. + * LZ4_freeStream() releases its memory. + */ +LZ4LIB_API LZ4_stream_t* LZ4_createStream(void); +LZ4LIB_API int LZ4_freeStream (LZ4_stream_t* streamPtr); + +/*! LZ4_resetStream() : + * An LZ4_stream_t structure can be allocated once and re-used multiple times. + * Use this function to init an allocated `LZ4_stream_t` structure and start a new compression. + */ +LZ4LIB_API void LZ4_resetStream (LZ4_stream_t* streamPtr); + +/*! LZ4_loadDict() : + * Use this function to load a static dictionary into LZ4_stream. + * Any previous data will be forgotten, only 'dictionary' will remain in memory. + * Loading a size of 0 is allowed. + * Return : dictionary size, in bytes (necessarily <= 64 KB) + */ +LZ4LIB_API int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize); + +/*! LZ4_compress_fast_continue() : + * Compress buffer content 'src', using data from previously compressed blocks as dictionary to improve compression ratio. + * Important : Previous data blocks are assumed to remain present and unmodified ! + * 'dst' buffer must be already allocated. + * If dstCapacity >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster. + * If not, and if compressed data cannot fit into 'dst' buffer size, compression stops, and function @return==0. + * After an error, the stream status is invalid, it can only be reset or freed. + */ +LZ4LIB_API int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int dstCapacity, int acceleration); + +/*! LZ4_saveDict() : + * If previously compressed data block is not guaranteed to remain available at its current memory location, + * save it into a safer place (char* safeBuffer). + * Note : it's not necessary to call LZ4_loadDict() after LZ4_saveDict(), dictionary is immediately usable. + * @return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error. + */ +LZ4LIB_API int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int dictSize); + + +/*-********************************************** +* Streaming Decompression Functions +* Bufferless synchronous API +************************************************/ +typedef union LZ4_streamDecode_u LZ4_streamDecode_t; /* incomplete type (defined later) */ + +/*! LZ4_createStreamDecode() and LZ4_freeStreamDecode() : + * creation / destruction of streaming decompression tracking structure */ +LZ4LIB_API LZ4_streamDecode_t* LZ4_createStreamDecode(void); +LZ4LIB_API int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream); + +/*! LZ4_setStreamDecode() : + * Use this function to instruct where to find the dictionary. + * Setting a size of 0 is allowed (same effect as reset). + * @return : 1 if OK, 0 if error + */ +LZ4LIB_API int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize); + +/*! LZ4_decompress_*_continue() : + * These decoding functions allow decompression of multiple blocks in "streaming" mode. + * Previously decoded blocks *must* remain available at the memory position where they were decoded (up to 64 KB) + * In the case of a ring buffers, decoding buffer must be either : + * - Exactly same size as encoding buffer, with same update rule (block boundaries at same positions) + * In which case, the decoding & encoding ring buffer can have any size, including very small ones ( < 64 KB). + * - Larger than encoding buffer, by a minimum of maxBlockSize more bytes. + * maxBlockSize is implementation dependent. It's the maximum size you intend to compress into a single block. + * In which case, encoding and decoding buffers do not need to be synchronized, + * and encoding ring buffer can have any size, including small ones ( < 64 KB). + * - _At least_ 64 KB + 8 bytes + maxBlockSize. + * In which case, encoding and decoding buffers do not need to be synchronized, + * and encoding ring buffer can have any size, including larger than decoding buffer. + * Whenever these conditions are not possible, save the last 64KB of decoded data into a safe buffer, + * and indicate where it is saved using LZ4_setStreamDecode() +*/ +LZ4LIB_API int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxDecompressedSize); +LZ4LIB_API int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize); + + +/*! LZ4_decompress_*_usingDict() : + * These decoding functions work the same as + * a combination of LZ4_setStreamDecode() followed by LZ4_decompress_*_continue() + * They are stand-alone, and don't need an LZ4_streamDecode_t structure. + */ +LZ4LIB_API int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxDecompressedSize, const char* dictStart, int dictSize); +LZ4LIB_API int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize); + + +/*^********************************************** + * !!!!!! STATIC LINKING ONLY !!!!!! + ***********************************************/ +/*-************************************ + * Private definitions + ************************************** + * Do not use these definitions. + * They are exposed to allow static allocation of `LZ4_stream_t` and `LZ4_streamDecode_t`. + * Using these definitions will expose code to API and/or ABI break in future versions of the library. + **************************************/ +#define LZ4_HASHLOG (LZ4_MEMORY_USAGE-2) +#define LZ4_HASHTABLESIZE (1 << LZ4_MEMORY_USAGE) +#define LZ4_HASH_SIZE_U32 (1 << LZ4_HASHLOG) /* required as macro for static allocation */ + +#if defined(__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */) +#include + +typedef struct { + uint32_t hashTable[LZ4_HASH_SIZE_U32]; + uint32_t currentOffset; + uint32_t initCheck; + const uint8_t* dictionary; + uint8_t* bufferStart; /* obsolete, used for slideInputBuffer */ + uint32_t dictSize; +} LZ4_stream_t_internal; + +typedef struct { + const uint8_t* externalDict; + size_t extDictSize; + const uint8_t* prefixEnd; + size_t prefixSize; +} LZ4_streamDecode_t_internal; + +#else + +typedef struct { + unsigned int hashTable[LZ4_HASH_SIZE_U32]; + unsigned int currentOffset; + unsigned int initCheck; + const unsigned char* dictionary; + unsigned char* bufferStart; /* obsolete, used for slideInputBuffer */ + unsigned int dictSize; +} LZ4_stream_t_internal; + +typedef struct { + const unsigned char* externalDict; + size_t extDictSize; + const unsigned char* prefixEnd; + size_t prefixSize; +} LZ4_streamDecode_t_internal; + +#endif + +/*! + * LZ4_stream_t : + * information structure to track an LZ4 stream. + * init this structure before first use. + * note : only use in association with static linking ! + * this definition is not API/ABI safe, + * it may change in a future version ! + */ +#define LZ4_STREAMSIZE_U64 ((1 << (LZ4_MEMORY_USAGE-3)) + 4) +#define LZ4_STREAMSIZE (LZ4_STREAMSIZE_U64 * sizeof(unsigned long long)) +union LZ4_stream_u { + unsigned long long table[LZ4_STREAMSIZE_U64]; + LZ4_stream_t_internal internal_donotuse; +} ; /* previously typedef'd to LZ4_stream_t */ + + +/*! + * LZ4_streamDecode_t : + * information structure to track an LZ4 stream during decompression. + * init this structure using LZ4_setStreamDecode (or memset()) before first use + * note : only use in association with static linking ! + * this definition is not API/ABI safe, + * and may change in a future version ! + */ +#define LZ4_STREAMDECODESIZE_U64 4 +#define LZ4_STREAMDECODESIZE (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long)) +union LZ4_streamDecode_u { + unsigned long long table[LZ4_STREAMDECODESIZE_U64]; + LZ4_streamDecode_t_internal internal_donotuse; +} ; /* previously typedef'd to LZ4_streamDecode_t */ + +#endif /* LZ4_H_2983827168210 */ + + +#if defined (__cplusplus) +} +#endif diff --git a/Source/ThirdParty/Microsoft.VisualStudio.Setup.Configuration.Native/License.docx b/Source/ThirdParty/Microsoft.VisualStudio.Setup.Configuration.Native/License.docx new file mode 100644 index 000000000..1601d35fa Binary files /dev/null and b/Source/ThirdParty/Microsoft.VisualStudio.Setup.Configuration.Native/License.docx differ diff --git a/Source/ThirdParty/Microsoft.VisualStudio.Setup.Configuration.Native/Setup.Configuration.h b/Source/ThirdParty/Microsoft.VisualStudio.Setup.Configuration.Native/Setup.Configuration.h new file mode 100644 index 000000000..81690bffa --- /dev/null +++ b/Source/ThirdParty/Microsoft.VisualStudio.Setup.Configuration.Native/Setup.Configuration.h @@ -0,0 +1,1059 @@ +// The MIT License(MIT) +// Copyright(C) Microsoft Corporation.All rights reserved. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files(the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and / or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions : +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. +// + +#pragma once + +// Constants +// +#ifndef E_NOTFOUND +#define E_NOTFOUND HRESULT_FROM_WIN32(ERROR_NOT_FOUND) +#endif + +#ifndef E_FILENOTFOUND +#define E_FILENOTFOUND HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) +#endif + +#ifndef E_NOTSUPPORTED +#define E_NOTSUPPORTED HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED) +#endif + +// Enumerations +// +/// +/// The state of an instance. +/// +enum InstanceState +{ + /// + /// The instance state has not been determined. + /// + eNone = 0, + + /// + /// The instance installation path exists. + /// + eLocal = 1, + + /// + /// A product is registered to the instance. + /// + eRegistered = 2, + + /// + /// No reboot is required for the instance. + /// + eNoRebootRequired = 4, + + /// + /// No errors were reported for the instance. + /// + eNoErrors = 8, + + /// + /// The instance represents a complete install. + /// + eComplete = MAXUINT, +}; + +// Forward interface declarations +// +#ifndef __ISetupInstance_FWD_DEFINED__ +#define __ISetupInstance_FWD_DEFINED__ +typedef struct ISetupInstance ISetupInstance; +#endif + +#ifndef __ISetupInstance2_FWD_DEFINED__ +#define __ISetupInstance2_FWD_DEFINED__ +typedef struct ISetupInstance2 ISetupInstance2; +#endif + +#ifndef __ISetupInstanceCatalog_FWD_DEFINED__ +#define __ISetupInstanceCatalog_FWD_DEFINED__ +typedef struct ISetupInstanceCatalog ISetupInstanceCatalog; +#endif + +#ifndef __ISetupLocalizedProperties_FWD_DEFINED__ +#define __ISetupLocalizedProperties_FWD_DEFINED__ +typedef struct ISetupLocalizedProperties ISetupLocalizedProperties; +#endif + +#ifndef __IEnumSetupInstances_FWD_DEFINED__ +#define __IEnumSetupInstances_FWD_DEFINED__ +typedef struct IEnumSetupInstances IEnumSetupInstances; +#endif + +#ifndef __ISetupConfiguration_FWD_DEFINED__ +#define __ISetupConfiguration_FWD_DEFINED__ +typedef struct ISetupConfiguration ISetupConfiguration; +#endif + +#ifndef __ISetupConfiguration2_FWD_DEFINED__ +#define __ISetupConfiguration2_FWD_DEFINED__ +typedef struct ISetupConfiguration2 ISetupConfiguration2; +#endif + +#ifndef __ISetupPackageReference_FWD_DEFINED__ +#define __ISetupPackageReference_FWD_DEFINED__ +typedef struct ISetupPackageReference ISetupPackageReference; +#endif + +#ifndef __ISetupProductReference_FWD_DEFINED__ +#define __ISetupProductReference_FWD_DEFINED__ +typedef struct ISetupProductReference ISetupProductReference; +#endif + +#ifndef __ISetupProductReference2_FWD_DEFINED__ +#define __ISetupProductReference2_FWD_DEFINED__ +typedef struct ISetupProductReference2 ISetupProductReference2; +#endif + +#ifndef __ISetupHelper_FWD_DEFINED__ +#define __ISetupHelper_FWD_DEFINED__ +typedef struct ISetupHelper ISetupHelper; +#endif + +#ifndef __ISetupErrorInfo_FWD_DEFINED__ +#define __ISetupErrorInfo_FWD_DEFINED__ +typedef struct ISetupErrorInfo ISetupErrorInfo; +#endif + +#ifndef __ISetupErrorState_FWD_DEFINED__ +#define __ISetupErrorState_FWD_DEFINED__ +typedef struct ISetupErrorState ISetupErrorState; +#endif + +#ifndef __ISetupErrorState2_FWD_DEFINED__ +#define __ISetupErrorState2_FWD_DEFINED__ +typedef struct ISetupErrorState2 ISetupErrorState2; +#endif + +#ifndef __ISetupErrorState3_FWD_DEFINED__ +#define __ISetupErrorState3_FWD_DEFINED__ +typedef struct ISetupErrorState3 ISetupErrorState3; +#endif + +#ifndef __ISetupFailedPackageReference_FWD_DEFINED__ +#define __ISetupFailedPackageReference_FWD_DEFINED__ +typedef struct ISetupFailedPackageReference ISetupFailedPackageReference; +#endif + +#ifndef __ISetupFailedPackageReference2_FWD_DEFINED__ +#define __ISetupFailedPackageReference2_FWD_DEFINED__ +typedef struct ISetupFailedPackageReference2 ISetupFailedPackageReference2; +#endif + +#ifndef __ISetupFailedPackageReference3_FWD_DEFINED__ +#define __ISetupFailedPackageReference3_FWD_DEFINED__ +typedef struct ISetupFailedPackageReference3 ISetupFailedPackageReference3; +#endif + +#ifndef __ISetupPropertyStore_FWD_DEFINED__ +#define __ISetupPropertyStore_FWD_DEFINED__ +typedef struct ISetupPropertyStore ISetupPropertyStore; +#endif + +#ifndef __ISetupLocalizedPropertyStore_FWD_DEFINED__ +#define __ISetupLocalizedPropertyStore_FWD_DEFINED__ +typedef struct ISetupLocalizedPropertyStore ISetupLocalizedPropertyStore; +#endif + +#ifndef __ISetupPolicy_FWD_DEFINED__ +#define __ISetupPolicy_FWD_DEFINED__ +typedef struct ISetupPolicy ISetupPolicy; +#endif + +// Forward class declarations +// +#ifndef __SetupConfiguration_FWD_DEFINED__ +#define __SetupConfiguration_FWD_DEFINED__ + +#ifdef __cplusplus +typedef class SetupConfiguration SetupConfiguration; +#endif + +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +// Interface definitions +// +EXTERN_C const IID IID_ISetupInstance; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about an instance of a product. +/// +struct DECLSPEC_UUID("B41463C3-8866-43B5-BC33-2B0676F7F42E") DECLSPEC_NOVTABLE ISetupInstance : public IUnknown +{ + /// + /// Gets the instance identifier (should match the name of the parent instance directory). + /// + /// The instance identifier. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist. + STDMETHOD(GetInstanceId)( + _Out_ BSTR* pbstrInstanceId + ) = 0; + + /// + /// Gets the local date and time when the installation was originally installed. + /// + /// The local date and time when the installation was originally installed. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(GetInstallDate)( + _Out_ LPFILETIME pInstallDate + ) = 0; + + /// + /// Gets the unique name of the installation, often indicating the branch and other information used for telemetry. + /// + /// The unique name of the installation, often indicating the branch and other information used for telemetry. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(GetInstallationName)( + _Out_ BSTR* pbstrInstallationName + ) = 0; + + /// + /// Gets the path to the installation root of the product. + /// + /// The path to the installation root of the product. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(GetInstallationPath)( + _Out_ BSTR* pbstrInstallationPath + ) = 0; + + /// + /// Gets the version of the product installed in this instance. + /// + /// The version of the product installed in this instance. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(GetInstallationVersion)( + _Out_ BSTR* pbstrInstallationVersion + ) = 0; + + /// + /// Gets the display name (title) of the product installed in this instance. + /// + /// The LCID for the display name. + /// The display name (title) of the product installed in this instance. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(GetDisplayName)( + _In_ LCID lcid, + _Out_ BSTR* pbstrDisplayName + ) = 0; + + /// + /// Gets the description of the product installed in this instance. + /// + /// The LCID for the description. + /// The description of the product installed in this instance. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(GetDescription)( + _In_ LCID lcid, + _Out_ BSTR* pbstrDescription + ) = 0; + + /// + /// Resolves the optional relative path to the root path of the instance. + /// + /// A relative path within the instance to resolve, or NULL to get the root path. + /// The full path to the optional relative path within the instance. If the relative path is NULL, the root path will always terminate in a backslash. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property is not defined. + STDMETHOD(ResolvePath)( + _In_opt_z_ LPCOLESTR pwszRelativePath, + _Out_ BSTR* pbstrAbsolutePath + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupInstance2; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about an instance of a product. +/// +struct DECLSPEC_UUID("89143C9A-05AF-49B0-B717-72E218A2185C") DECLSPEC_NOVTABLE ISetupInstance2 : public ISetupInstance +{ + /// + /// Gets the state of the instance. + /// + /// The state of the instance. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist. + STDMETHOD(GetState)( + _Out_ InstanceState* pState + ) = 0; + + /// + /// Gets an array of package references registered to the instance. + /// + /// Pointer to an array of . + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the packages property is not defined. + STDMETHOD(GetPackages)( + _Out_ LPSAFEARRAY* ppsaPackages + ) = 0; + + /// + /// Gets a pointer to the that represents the registered product. + /// + /// Pointer to an instance of . This may be NULL if does not return . + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the packages property is not defined. + STDMETHOD(GetProduct)( + _Outptr_result_maybenull_ ISetupPackageReference** ppPackage + ) = 0; + + /// + /// Gets the relative path to the product application, if available. + /// + /// The relative path to the product application, if available. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist. + STDMETHOD(GetProductPath)( + _Outptr_result_maybenull_ BSTR* pbstrProductPath + ) = 0; + + /// + /// Gets the error state of the instance, if available. + /// + /// The error state of the instance, if available. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist. + STDMETHOD(GetErrors)( + _Outptr_result_maybenull_ ISetupErrorState** ppErrorState + ) = 0; + + /// + /// Gets a value indicating whether the instance can be launched. + /// + /// Whether the instance can be launched. + /// Standard HRESULT indicating success or failure. + /// + /// An instance could have had errors during install but still be launched. Some features may not work correctly, but others will. + /// + STDMETHOD(IsLaunchable)( + _Out_ VARIANT_BOOL* pfIsLaunchable + ) = 0; + + /// + /// Gets a value indicating whether the instance is complete. + /// + /// Whether the instance is complete. + /// Standard HRESULT indicating success or failure. + /// + /// An instance is complete if it had no errors during install, resume, or repair. + /// + STDMETHOD(IsComplete)( + _Out_ VARIANT_BOOL* pfIsComplete + ) = 0; + + /// + /// Gets product-specific properties. + /// + /// A pointer to an instance of . This may be NULL if no properties are defined. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist. + STDMETHOD(GetProperties)( + _Outptr_result_maybenull_ ISetupPropertyStore** ppProperties + ) = 0; + + /// + /// Gets the directory path to the setup engine that installed the instance. + /// + /// The directory path to the setup engine that installed the instance. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist. + STDMETHOD(GetEnginePath)( + _Outptr_result_maybenull_ BSTR* pbstrEnginePath + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupInstanceCatalog; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about a catalog used to install an instance. +/// +struct DECLSPEC_UUID("9AD8E40F-39A2-40F1-BF64-0A6C50DD9EEB") DECLSPEC_NOVTABLE ISetupInstanceCatalog : public IUnknown +{ + /// + /// Gets catalog information properties. + /// + /// A pointer to an instance of . + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property does not exist. + STDMETHOD(GetCatalogInfo)( + _Out_ ISetupPropertyStore** ppCatalogInfo + ) = 0; + + /// + /// Gets a value indicating whether the catalog is a prerelease. + /// + /// Whether the catalog for the instance is a prerelease version. + /// Standard HRESULT indicating success or failure, including E_FILENOTFOUND if the instance state does not exist and E_NOTFOUND if the property does not exist. + STDMETHOD(IsPrerelease)( + _Out_ VARIANT_BOOL* pfIsPrerelease + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupLocalizedProperties; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Provides localized properties of an instance of a product. +/// +struct DECLSPEC_UUID("F4BD7382-FE27-4AB4-B974-9905B2A148B0") DECLSPEC_NOVTABLE ISetupLocalizedProperties : public IUnknown +{ + /// + /// Gets localized product-specific properties. + /// + /// A pointer to an instance of . This may be NULL if no properties are defined. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetLocalizedProperties)( + _Outptr_result_maybenull_ ISetupLocalizedPropertyStore** ppLocalizedProperties + ) = 0; + + /// + /// Gets localized channel-specific properties. + /// + /// A pointer to an instance of . This may be NULL if no channel properties are defined. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetLocalizedChannelProperties)( + _Outptr_result_maybenull_ ISetupLocalizedPropertyStore** ppLocalizedChannelProperties + ) = 0; +}; +#endif + +EXTERN_C const IID IID_IEnumSetupInstances; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// An enumerator of installed objects. +/// +struct DECLSPEC_UUID("6380BCFF-41D3-4B2E-8B2E-BF8A6810C848") DECLSPEC_NOVTABLE IEnumSetupInstances : public IUnknown +{ + /// + /// Retrieves the next set of product instances in the enumeration sequence. + /// + /// The number of product instances to retrieve. + /// A pointer to an array of . + /// A pointer to the number of product instances retrieved. If is 1 this parameter may be NULL. + /// S_OK if the number of elements were fetched, S_FALSE if nothing was fetched (at end of enumeration), E_INVALIDARG if is greater than 1 and pceltFetched is NULL, or E_OUTOFMEMORY if an could not be allocated. + STDMETHOD(Next)( + _In_ ULONG celt, + _Out_writes_to_(celt, *pceltFetched) ISetupInstance** rgelt, + _Out_opt_ _Deref_out_range_(0, celt) ULONG* pceltFetched + ) = 0; + + /// + /// Skips the next set of product instances in the enumeration sequence. + /// + /// The number of product instances to skip. + /// S_OK if the number of elements could be skipped; otherwise, S_FALSE; + STDMETHOD(Skip)( + _In_ ULONG celt + ) = 0; + + /// + /// Resets the enumeration sequence to the beginning. + /// + /// Always returns S_OK; + STDMETHOD(Reset)(void) = 0; + + /// + /// Creates a new enumeration object in the same state as the current enumeration object: the new object points to the same place in the enumeration sequence. + /// + /// A pointer to a pointer to a new interface. If the method fails, this parameter is undefined. + /// S_OK if a clone was returned; otherwise, E_OUTOFMEMORY. + STDMETHOD(Clone)( + _Deref_out_opt_ IEnumSetupInstances** ppenum + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupConfiguration; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Gets information about product instances installed on the machine. +/// +struct DECLSPEC_UUID("42843719-DB4C-46C2-8E7C-64F1816EFD5B") DECLSPEC_NOVTABLE ISetupConfiguration : public IUnknown +{ + /// + /// Enumerates all launchable product instances installed. + /// + /// An enumeration of completed, installed product instances. + /// Standard HRESULT indicating success or failure. + STDMETHOD(EnumInstances)( + _Out_ IEnumSetupInstances** ppEnumInstances + ) = 0; + + /// + /// Gets the instance for the current process path. + /// + /// The instance for the current process path. + /// + /// The instance for the current process path, or E_NOTFOUND if not found. + /// The may indicate the instance is invalid. + /// + /// + /// The returned instance may not be launchable. + /// +STDMETHOD(GetInstanceForCurrentProcess)( + _Out_ ISetupInstance** ppInstance + ) = 0; + + /// + /// Gets the instance for the given path. + /// + /// The instance for the given path. + /// + /// The instance for the given path, or E_NOTFOUND if not found. + /// The may indicate the instance is invalid. + /// + /// + /// The returned instance may not be launchable. + /// +STDMETHOD(GetInstanceForPath)( + _In_z_ LPCWSTR wzPath, + _Out_ ISetupInstance** ppInstance + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupConfiguration2; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Gets information about product instances. +/// +struct DECLSPEC_UUID("26AAB78C-4A60-49D6-AF3B-3C35BC93365D") DECLSPEC_NOVTABLE ISetupConfiguration2 : public ISetupConfiguration +{ + /// + /// Enumerates all product instances. + /// + /// An enumeration of all product instances. + /// Standard HRESULT indicating success or failure. + STDMETHOD(EnumAllInstances)( + _Out_ IEnumSetupInstances** ppEnumInstances + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupPackageReference; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// A reference to a package. +/// +struct DECLSPEC_UUID("da8d8a16-b2b6-4487-a2f1-594ccccd6bf5") DECLSPEC_NOVTABLE ISetupPackageReference : public IUnknown +{ + /// + /// Gets the general package identifier. + /// + /// The general package identifier. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetId)( + _Out_ BSTR* pbstrId + ) = 0; + + /// + /// Gets the version of the package. + /// + /// The version of the package. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetVersion)( + _Out_ BSTR* pbstrVersion + ) = 0; + + /// + /// Gets the target process architecture of the package. + /// + /// The target process architecture of the package. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetChip)( + _Out_ BSTR* pbstrChip + ) = 0; + + /// + /// Gets the language and optional region identifier. + /// + /// The language and optional region identifier. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetLanguage)( + _Out_ BSTR* pbstrLanguage + ) = 0; + + /// + /// Gets the build branch of the package. + /// + /// The build branch of the package. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetBranch)( + _Out_ BSTR* pbstrBranch + ) = 0; + + /// + /// Gets the type of the package. + /// + /// The type of the package. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetType)( + _Out_ BSTR* pbstrType + ) = 0; + + /// + /// Gets the unique identifier consisting of all defined tokens. + /// + /// The unique identifier consisting of all defined tokens. + /// Standard HRESULT indicating success or failure, including E_UNEXPECTED if no Id was defined (required). + STDMETHOD(GetUniqueId)( + _Out_ BSTR* pbstrUniqueId + ) = 0; + + /// + /// Gets a value indicating whether the package refers to an external extension. + /// + /// A value indicating whether the package refers to an external extension. + /// Standard HRESULT indicating success or failure, including E_UNEXPECTED if no Id was defined (required). + STDMETHOD(GetIsExtension)( + _Out_ VARIANT_BOOL* pfIsExtension + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupProductReference; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// A reference to a product package. +/// +struct DECLSPEC_UUID("a170b5ef-223d-492b-b2d4-945032980685") DECLSPEC_NOVTABLE ISetupProductReference : public ISetupPackageReference +{ + /// + /// Gets a value indicating whether the product package is installed. + /// + /// A value indicating whether the product package is installed. + /// Standard HRESULT indicating success or failure, including E_NOTSUPPORTED if the reference is not to a product, or E_UNEXPECTED if the Installed property is the wrong type. + STDMETHOD(GetIsInstalled)( + _Out_ VARIANT_BOOL* pfIsInstalled + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupProductReference2; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// A reference to a product package. +/// +struct DECLSPEC_UUID("279a5db3-7503-444b-b34d-308f961b9a06") DECLSPEC_NOVTABLE ISetupProductReference2 : public ISetupProductReference +{ + /// + /// Gets a value indicating whether the product supports extensions. + /// + /// A value indicating whether the product supports extensions. + /// Standard HRESULT indicating success or failure, including E_NOTSUPPORTED if the reference is not to a product, or E_UNEXPECTED if the SupportsExtensions property is the wrong type. + STDMETHOD(GetSupportsExtensions)( + _Out_ VARIANT_BOOL* pfSupportsExtensions + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupHelper; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Helper functions. +/// +/// +/// You can query for this interface from the class. +/// +struct DECLSPEC_UUID("42b21b78-6192-463e-87bf-d577838f1d5c") DECLSPEC_NOVTABLE ISetupHelper : public IUnknown +{ + /// + /// Parses a dotted quad version string into a 64-bit unsigned integer. + /// + /// The dotted quad version string to parse, e.g. 1.2.3.4. + /// A 64-bit unsigned integer representing the version. You can compare this to other versions. + /// Standard HRESULT indicating success or failure, including E_INVALIDARG if the version is not valid. + STDMETHOD(ParseVersion)( + _In_ LPCOLESTR pwszVersion, + _Out_ PULONGLONG pullVersion + ) = 0; + + /// + /// Parses a dotted quad version string into a 64-bit unsigned integer. + /// + /// The string containing 1 or 2 dotted quad version strings to parse, e.g. [1.0,) that means 1.0.0.0 or newer. + /// A 64-bit unsigned integer representing the minimum version, which may be 0. You can compare this to other versions. + /// A 64-bit unsigned integer representing the maximum version, which may be MAXULONGLONG. You can compare this to other versions. + /// Standard HRESULT indicating success or failure, including E_INVALIDARG if the version range is not valid. + STDMETHOD(ParseVersionRange)( + _In_ LPCOLESTR pwszVersionRange, + _Out_ PULONGLONG pullMinVersion, + _Out_ PULONGLONG pullMaxVersion + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupErrorInfo; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about errors that occured during install of an instance. +/// +/// +/// Objects may also implement and . +/// +struct DECLSPEC_UUID("2A2F3292-958E-4905-B36E-013BE84E27AB") DECLSPEC_NOVTABLE ISetupErrorInfo : public IUnknown +{ + /// + /// Gets the HRESULT of the error. + /// + /// The HRESULT of the error. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetErrorHResult)( + _Out_ HRESULT* plHResult + ) = 0; + + /// + /// Gets the class name of the error (exception). + /// + /// The class name of the error (exception). + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetErrorClassName)( + _Outptr_result_maybenull_ BSTR* pbstrClassName + ) = 0; + + /// + /// Gets the error message. + /// + /// The error message. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetErrorMessage)( + _Outptr_result_maybenull_ BSTR* pbstrMessage + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupErrorState; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about the error state of an instance. +/// +struct DECLSPEC_UUID("46DCCD94-A287-476A-851E-DFBC2FFDBC20") DECLSPEC_NOVTABLE ISetupErrorState : public IUnknown +{ + /// + /// Gets an array of failed package references. + /// + /// Pointer to an array of , if packages have failed. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetFailedPackages)( + _Outptr_result_maybenull_ LPSAFEARRAY* ppsaFailedPackages + ) = 0; + + /// + /// Gets an array of skipped package references. + /// + /// Pointer to an array of , if packages have been skipped. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetSkippedPackages)( + _Outptr_result_maybenull_ LPSAFEARRAY* ppsaSkippedPackages + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupErrorState2; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about the error state of an instance. +/// +struct DECLSPEC_UUID("9871385B-CA69-48F2-BC1F-7A37CBF0B1EF") DECLSPEC_NOVTABLE ISetupErrorState2 : public ISetupErrorState +{ + /// + /// Gets the path to the error log. + /// + /// The path to the error log. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetErrorLogFilePath)( + _Outptr_result_maybenull_ BSTR* pbstrErrorLogFilePath + ) = 0; + + /// + /// Gets the path to the main setup log. + /// + /// The path to the main setup log. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetLogFilePath)( + _Outptr_result_maybenull_ BSTR* pbstrLogFilePath + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupErrorState3; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Information about the error state of an instance. +/// +struct DECLSPEC_UUID("290019AD-28E2-46D5-9DE5-DA4B6BCF8057") DECLSPEC_NOVTABLE ISetupErrorState3 : public ISetupErrorState2 +{ + /// + /// Gets the runtime error that occured during install of an instance. + /// + /// The runtime error that occured during install of an instance. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetRuntimeError)( + _Outptr_result_maybenull_ ISetupErrorInfo** ppErrorInfo + ) = 0; +}; +#endif + +EXTERN_C const IID IID_ISetupFailedPackageReference; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// A reference to a failed package. +/// +struct DECLSPEC_UUID("E73559CD-7003-4022-B134-27DC650B280F") DECLSPEC_NOVTABLE ISetupFailedPackageReference : public ISetupPackageReference +{ +}; + +#endif + +EXTERN_C const IID IID_ISetupFailedPackageReference2; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// A reference to a failed package. +/// +struct DECLSPEC_UUID("0FAD873E-E874-42E3-B268-4FE2F096B9CA") DECLSPEC_NOVTABLE ISetupFailedPackageReference2 : public ISetupFailedPackageReference +{ + /// + /// Gets the path to the optional package log. + /// + /// The path to the optional package log. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetLogFilePath)( + _Outptr_result_maybenull_ BSTR* pbstrLogFilePath + ) = 0; + + /// + /// Gets the description of the package failure. + /// + /// The description of the package failure. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetDescription)( + _Outptr_result_maybenull_ BSTR* pbstrDescription + ) = 0; + + /// + /// Gets the signature to use for feedback reporting. + /// + /// The signature to use for feedback reporting. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetSignature)( + _Outptr_result_maybenull_ BSTR* pbstrSignature + ) = 0; + + /// + /// Gets the array of details for this package failure. + /// + /// Pointer to an array of details as BSTRs. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetDetails)( + _Out_ LPSAFEARRAY* ppsaDetails + ) = 0; + + /// + /// Gets an array of packages affected by this package failure. + /// + /// Pointer to an array of for packages affected by this package failure. This may be NULL. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetAffectedPackages)( + _Out_ LPSAFEARRAY* ppsaAffectedPackages + ) = 0; +}; + +#endif + +EXTERN_C const IID IID_ISetupFailedPackageReference3; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// A reference to a failed package. +/// +struct DECLSPEC_UUID("EBC3AE68-AD15-44E8-8377-39DBF0316F6C") DECLSPEC_NOVTABLE ISetupFailedPackageReference3 : public ISetupFailedPackageReference2 +{ + /// + /// Gets the action attempted when the package failed. + /// + /// The action, eg: Install, Download, etc. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetAction)( + _Outptr_result_maybenull_ BSTR* pbstrAction + ) = 0; + + /// + /// Gets the return code of the failure. + /// + /// The return code. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetReturnCode)( + _Outptr_result_maybenull_ BSTR* pbstrReturnCode + ) = 0; +}; + +#endif + +EXTERN_C const IID IID_ISetupPropertyStore; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Provides named properties. +/// +/// +/// You can get this from an , , or derivative. +/// +struct DECLSPEC_UUID("C601C175-A3BE-44BC-91F6-4568D230FC83") DECLSPEC_NOVTABLE ISetupPropertyStore : public IUnknown +{ + /// + /// Gets an array of property names in this property store. + /// + /// Pointer to an array of property names as BSTRs. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetNames)( + _Out_ LPSAFEARRAY* ppsaNames + ) = 0; + + /// + /// Gets the value of a named property in this property store. + /// + /// The name of the property to get. + /// The value of the property. + /// Standard HRESULT indicating success or failure, including E_NOTFOUND if the property is not defined or E_NOTSUPPORTED if the property type is not supported. + STDMETHOD(GetValue)( + _In_ LPCOLESTR pwszName, + _Out_ LPVARIANT pvtValue + ) = 0; +}; + +#endif + +EXTERN_C const IID IID_ISetupLocalizedPropertyStore; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Provides localized named properties. +/// +/// +/// You can get this from an . +/// +struct DECLSPEC_UUID("5BB53126-E0D5-43DF-80F1-6B161E5C6F6C") DECLSPEC_NOVTABLE ISetupLocalizedPropertyStore : public IUnknown +{ + /// + /// Gets an array of property names in this property store. + /// + /// The LCID for the property names. + /// Pointer to an array of property names as BSTRs. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetNames)( + _In_ LCID lcid, + _Out_ LPSAFEARRAY* ppsaNames + ) = 0; + + /// + /// Gets the value of a named property in this property store. + /// + /// The name of the property to get. + /// The LCID for the property. + /// The value of the property. + /// Standard HRESULT indicating success or failure, including E_NOTFOUND if the property is not defined or E_NOTSUPPORTED if the property type is not supported. + STDMETHOD(GetValue)( + _In_ LPCOLESTR pwszName, + _In_ LCID lcid, + _Out_ LPVARIANT pvtValue + ) = 0; +}; + +#endif + +EXTERN_C const IID IID_ISetupPolicy; + +#if defined(__cplusplus) && !defined(CINTERFACE) +/// +/// Gets setup policy values. +/// +/// +/// You can get this from an . +/// +struct DECLSPEC_UUID("E1DA4CBD-64C4-4C44-821D-98FAB64C4DA7") DECLSPEC_NOVTABLE ISetupPolicy : public IUnknown +{ + /// + /// Gets the value of the SharedInstallationPath policy. + /// + /// The value of the SharedInstallationPath policy. + /// Standard HRESULT indicating success or failure. + STDMETHOD(GetSharedInstallationPath)( + _Out_ BSTR* pbstrSharedInstallationPath + ) = 0; + + /// + /// Gets the value of a named policy. + /// + /// The name of the policy to get. + /// The value of the named policy. + /// Standard HRESULT indicating success or failure, including E_NOTSUPPORTED if the policy is not supported by this implementation. + STDMETHOD(GetValue)( + _In_ LPCOLESTR pwszName, + _Out_ LPVARIANT pvtValue + ) = 0; +}; + +#endif + +// Class declarations +// +EXTERN_C const CLSID CLSID_SetupConfiguration; + +#ifdef __cplusplus +/// +/// This class implements , , and . +/// +class DECLSPEC_UUID("177F0C4A-1CD3-4DE7-A32C-71DBBB9FA36D") SetupConfiguration; +#endif + +// Function declarations +// +/// +/// Gets an that provides information about product instances installed on the machine. +/// +/// The that provides information about product instances installed on the machine. +/// Reserved for future use. +/// Standard HRESULT indicating success or failure. +STDMETHODIMP GetSetupConfiguration( + _Out_ ISetupConfiguration** ppConfiguration, + _Reserved_ LPVOID pReserved +); + +#ifdef __cplusplus +} +#endif diff --git a/Source/ThirdParty/OpenAL/COPYING b/Source/ThirdParty/OpenAL/COPYING new file mode 100644 index 000000000..8d5d00006 --- /dev/null +++ b/Source/ThirdParty/OpenAL/COPYING @@ -0,0 +1,437 @@ + GNU LIBRARY GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is + numbered 2 because it goes with version 2 of the ordinary GPL.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Library General Public License, applies to some +specially designated Free Software Foundation software, and to any +other libraries whose authors decide to use it. You can use it for +your libraries, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if +you distribute copies of the library, or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link a program with the library, you must provide +complete object files to the recipients so that they can relink them +with the library, after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + Our method of protecting your rights has two steps: (1) copyright +the library, and (2) offer you this license which gives you legal +permission to copy, distribute and/or modify the library. + + Also, for each distributor's protection, we want to make certain +that everyone understands that there is no warranty for this free +library. If the library is modified by someone else and passed on, we +want its recipients to know that what they have is not the original +version, so that any problems introduced by others will not reflect on +the original authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that companies distributing free +software will individually obtain patent licenses, thus in effect +transforming the program into proprietary software. To prevent this, +we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + + Most GNU software, including some libraries, is covered by the ordinary +GNU General Public License, which was designed for utility programs. This +license, the GNU Library General Public License, applies to certain +designated libraries. This license is quite different from the ordinary +one; be sure to read it in full, and don't assume that anything in it is +the same as in the ordinary license. + + The reason we have a separate public license for some libraries is that +they blur the distinction we usually make between modifying or adding to a +program and simply using it. Linking a program with a library, without +changing the library, is in some sense simply using the library, and is +analogous to running a utility program or application program. However, in +a textual and legal sense, the linked executable is a combined work, a +derivative of the original library, and the ordinary General Public License +treats it as such. + + Because of this blurred distinction, using the ordinary General +Public License for libraries did not effectively promote software +sharing, because most developers did not use the libraries. We +concluded that weaker conditions might promote sharing better. + + However, unrestricted linking of non-free programs would deprive the +users of those programs of all benefit from the free status of the +libraries themselves. This Library General Public License is intended to +permit developers of non-free programs to use free libraries, while +preserving your freedom as a user of such programs to change the free +libraries that are incorporated in them. (We have not seen how to achieve +this as regards changes in header files, but we have achieved it as regards +changes in the actual functions of the Library.) The hope is that this +will lead to faster development of free libraries. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, while the latter only +works together with the library. + + Note that it is possible for a library to be covered by the ordinary +General Public License rather than by this special one. + + GNU LIBRARY GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library which +contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Library +General Public License (also called "this License"). Each licensee is +addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also compile or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + c) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + d) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the source code distributed need not include anything that is normally +distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Library General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS diff --git a/Source/ThirdParty/OpenAL/al.h b/Source/ThirdParty/OpenAL/al.h new file mode 100644 index 000000000..413b38331 --- /dev/null +++ b/Source/ThirdParty/OpenAL/al.h @@ -0,0 +1,656 @@ +#ifndef AL_AL_H +#define AL_AL_H + +#if defined(__cplusplus) +extern "C" { +#endif + +#ifndef AL_API + #if defined(AL_LIBTYPE_STATIC) + #define AL_API + #elif defined(_WIN32) + #define AL_API __declspec(dllimport) + #else + #define AL_API extern + #endif +#endif + +#if defined(_WIN32) + #define AL_APIENTRY __cdecl +#else + #define AL_APIENTRY +#endif + + +/** Deprecated macro. */ +#define OPENAL +#define ALAPI AL_API +#define ALAPIENTRY AL_APIENTRY +#define AL_INVALID (-1) +#define AL_ILLEGAL_ENUM AL_INVALID_ENUM +#define AL_ILLEGAL_COMMAND AL_INVALID_OPERATION + +/** Supported AL version. */ +#define AL_VERSION_1_0 +#define AL_VERSION_1_1 + +/** 8-bit boolean */ +typedef char ALboolean; + +/** character */ +typedef char ALchar; + +/** signed 8-bit 2's complement integer */ +typedef signed char ALbyte; + +/** unsigned 8-bit integer */ +typedef unsigned char ALubyte; + +/** signed 16-bit 2's complement integer */ +typedef short ALshort; + +/** unsigned 16-bit integer */ +typedef unsigned short ALushort; + +/** signed 32-bit 2's complement integer */ +typedef int ALint; + +/** unsigned 32-bit integer */ +typedef unsigned int ALuint; + +/** non-negative 32-bit binary integer size */ +typedef int ALsizei; + +/** enumerated 32-bit value */ +typedef int ALenum; + +/** 32-bit IEEE754 floating-point */ +typedef float ALfloat; + +/** 64-bit IEEE754 floating-point */ +typedef double ALdouble; + +/** void type (for opaque pointers only) */ +typedef void ALvoid; + + +/* Enumerant values begin at column 50. No tabs. */ + +/** "no distance model" or "no buffer" */ +#define AL_NONE 0 + +/** Boolean False. */ +#define AL_FALSE 0 + +/** Boolean True. */ +#define AL_TRUE 1 + + +/** + * Relative source. + * Type: ALboolean + * Range: [AL_TRUE, AL_FALSE] + * Default: AL_FALSE + * + * Specifies if the Source has relative coordinates. + */ +#define AL_SOURCE_RELATIVE 0x202 + + +/** + * Inner cone angle, in degrees. + * Type: ALint, ALfloat + * Range: [0 - 360] + * Default: 360 + * + * The angle covered by the inner cone, where the source will not attenuate. + */ +#define AL_CONE_INNER_ANGLE 0x1001 + +/** + * Outer cone angle, in degrees. + * Range: [0 - 360] + * Default: 360 + * + * The angle covered by the outer cone, where the source will be fully + * attenuated. + */ +#define AL_CONE_OUTER_ANGLE 0x1002 + +/** + * Source pitch. + * Type: ALfloat + * Range: [0.5 - 2.0] + * Default: 1.0 + * + * A multiplier for the frequency (sample rate) of the source's buffer. + */ +#define AL_PITCH 0x1003 + +/** + * Source or listener position. + * Type: ALfloat[3], ALint[3] + * Default: {0, 0, 0} + * + * The source or listener location in three dimensional space. + * + * OpenAL, like OpenGL, uses a right handed coordinate system, where in a + * frontal default view X (thumb) points right, Y points up (index finger), and + * Z points towards the viewer/camera (middle finger). + * + * To switch from a left handed coordinate system, flip the sign on the Z + * coordinate. + */ +#define AL_POSITION 0x1004 + +/** + * Source direction. + * Type: ALfloat[3], ALint[3] + * Default: {0, 0, 0} + * + * Specifies the current direction in local space. + * A zero-length vector specifies an omni-directional source (cone is ignored). + */ +#define AL_DIRECTION 0x1005 + +/** + * Source or listener velocity. + * Type: ALfloat[3], ALint[3] + * Default: {0, 0, 0} + * + * Specifies the current velocity in local space. + */ +#define AL_VELOCITY 0x1006 + +/** + * Source looping. + * Type: ALboolean + * Range: [AL_TRUE, AL_FALSE] + * Default: AL_FALSE + * + * Specifies whether source is looping. + */ +#define AL_LOOPING 0x1007 + +/** + * Source buffer. + * Type: ALuint + * Range: any valid Buffer. + * + * Specifies the buffer to provide sound samples. + */ +#define AL_BUFFER 0x1009 + +/** + * Source or listener gain. + * Type: ALfloat + * Range: [0.0 - ] + * + * A value of 1.0 means unattenuated. Each division by 2 equals an attenuation + * of about -6dB. Each multiplicaton by 2 equals an amplification of about + * +6dB. + * + * A value of 0.0 is meaningless with respect to a logarithmic scale; it is + * silent. + */ +#define AL_GAIN 0x100A + +/** + * Minimum source gain. + * Type: ALfloat + * Range: [0.0 - 1.0] + * + * The minimum gain allowed for a source, after distance and cone attenation is + * applied (if applicable). + */ +#define AL_MIN_GAIN 0x100D + +/** + * Maximum source gain. + * Type: ALfloat + * Range: [0.0 - 1.0] + * + * The maximum gain allowed for a source, after distance and cone attenation is + * applied (if applicable). + */ +#define AL_MAX_GAIN 0x100E + +/** + * Listener orientation. + * Type: ALfloat[6] + * Default: {0.0, 0.0, -1.0, 0.0, 1.0, 0.0} + * + * Effectively two three dimensional vectors. The first vector is the front (or + * "at") and the second is the top (or "up"). + * + * Both vectors are in local space. + */ +#define AL_ORIENTATION 0x100F + +/** + * Source state (query only). + * Type: ALint + * Range: [AL_INITIAL, AL_PLAYING, AL_PAUSED, AL_STOPPED] + */ +#define AL_SOURCE_STATE 0x1010 + +/** Source state value. */ +#define AL_INITIAL 0x1011 +#define AL_PLAYING 0x1012 +#define AL_PAUSED 0x1013 +#define AL_STOPPED 0x1014 + +/** + * Source Buffer Queue size (query only). + * Type: ALint + * + * The number of buffers queued using alSourceQueueBuffers, minus the buffers + * removed with alSourceUnqueueBuffers. + */ +#define AL_BUFFERS_QUEUED 0x1015 + +/** + * Source Buffer Queue processed count (query only). + * Type: ALint + * + * The number of queued buffers that have been fully processed, and can be + * removed with alSourceUnqueueBuffers. + * + * Looping sources will never fully process buffers because they will be set to + * play again for when the source loops. + */ +#define AL_BUFFERS_PROCESSED 0x1016 + +/** + * Source reference distance. + * Type: ALfloat + * Range: [0.0 - ] + * Default: 1.0 + * + * The distance in units that no attenuation occurs. + * + * At 0.0, no distance attenuation ever occurs on non-linear attenuation models. + */ +#define AL_REFERENCE_DISTANCE 0x1020 + +/** + * Source rolloff factor. + * Type: ALfloat + * Range: [0.0 - ] + * Default: 1.0 + * + * Multiplier to exaggerate or diminish distance attenuation. + * + * At 0.0, no distance attenuation ever occurs. + */ +#define AL_ROLLOFF_FACTOR 0x1021 + +/** + * Outer cone gain. + * Type: ALfloat + * Range: [0.0 - 1.0] + * Default: 0.0 + * + * The gain attenuation applied when the listener is outside of the source's + * outer cone. + */ +#define AL_CONE_OUTER_GAIN 0x1022 + +/** + * Source maximum distance. + * Type: ALfloat + * Range: [0.0 - ] + * Default: +inf + * + * The distance above which the source is not attenuated any further with a + * clamped distance model, or where attenuation reaches 0.0 gain for linear + * distance models with a default rolloff factor. + */ +#define AL_MAX_DISTANCE 0x1023 + +/** Source buffer position, in seconds */ +#define AL_SEC_OFFSET 0x1024 +/** Source buffer position, in sample frames */ +#define AL_SAMPLE_OFFSET 0x1025 +/** Source buffer position, in bytes */ +#define AL_BYTE_OFFSET 0x1026 + +/** + * Source type (query only). + * Type: ALint + * Range: [AL_STATIC, AL_STREAMING, AL_UNDETERMINED] + * + * A Source is Static if a Buffer has been attached using AL_BUFFER. + * + * A Source is Streaming if one or more Buffers have been attached using + * alSourceQueueBuffers. + * + * A Source is Undetermined when it has the NULL buffer attached using + * AL_BUFFER. + */ +#define AL_SOURCE_TYPE 0x1027 + +/** Source type value. */ +#define AL_STATIC 0x1028 +#define AL_STREAMING 0x1029 +#define AL_UNDETERMINED 0x1030 + +/** Buffer format specifier. */ +#define AL_FORMAT_MONO8 0x1100 +#define AL_FORMAT_MONO16 0x1101 +#define AL_FORMAT_STEREO8 0x1102 +#define AL_FORMAT_STEREO16 0x1103 + +/** Buffer frequency (query only). */ +#define AL_FREQUENCY 0x2001 +/** Buffer bits per sample (query only). */ +#define AL_BITS 0x2002 +/** Buffer channel count (query only). */ +#define AL_CHANNELS 0x2003 +/** Buffer data size (query only). */ +#define AL_SIZE 0x2004 + +/** + * Buffer state. + * + * Not for public use. + */ +#define AL_UNUSED 0x2010 +#define AL_PENDING 0x2011 +#define AL_PROCESSED 0x2012 + + +/** No error. */ +#define AL_NO_ERROR 0 + +/** Invalid name paramater passed to AL call. */ +#define AL_INVALID_NAME 0xA001 + +/** Invalid enum parameter passed to AL call. */ +#define AL_INVALID_ENUM 0xA002 + +/** Invalid value parameter passed to AL call. */ +#define AL_INVALID_VALUE 0xA003 + +/** Illegal AL call. */ +#define AL_INVALID_OPERATION 0xA004 + +/** Not enough memory. */ +#define AL_OUT_OF_MEMORY 0xA005 + + +/** Context string: Vendor ID. */ +#define AL_VENDOR 0xB001 +/** Context string: Version. */ +#define AL_VERSION 0xB002 +/** Context string: Renderer ID. */ +#define AL_RENDERER 0xB003 +/** Context string: Space-separated extension list. */ +#define AL_EXTENSIONS 0xB004 + + +/** + * Doppler scale. + * Type: ALfloat + * Range: [0.0 - ] + * Default: 1.0 + * + * Scale for source and listener velocities. + */ +#define AL_DOPPLER_FACTOR 0xC000 +AL_API void AL_APIENTRY alDopplerFactor(ALfloat value); + +/** + * Doppler velocity (deprecated). + * + * A multiplier applied to the Speed of Sound. + */ +#define AL_DOPPLER_VELOCITY 0xC001 +AL_API void AL_APIENTRY alDopplerVelocity(ALfloat value); + +/** + * Speed of Sound, in units per second. + * Type: ALfloat + * Range: [0.0001 - ] + * Default: 343.3 + * + * The speed at which sound waves are assumed to travel, when calculating the + * doppler effect. + */ +#define AL_SPEED_OF_SOUND 0xC003 +AL_API void AL_APIENTRY alSpeedOfSound(ALfloat value); + +/** + * Distance attenuation model. + * Type: ALint + * Range: [AL_NONE, AL_INVERSE_DISTANCE, AL_INVERSE_DISTANCE_CLAMPED, + * AL_LINEAR_DISTANCE, AL_LINEAR_DISTANCE_CLAMPED, + * AL_EXPONENT_DISTANCE, AL_EXPONENT_DISTANCE_CLAMPED] + * Default: AL_INVERSE_DISTANCE_CLAMPED + * + * The model by which sources attenuate with distance. + * + * None - No distance attenuation. + * Inverse - Doubling the distance halves the source gain. + * Linear - Linear gain scaling between the reference and max distances. + * Exponent - Exponential gain dropoff. + * + * Clamped variations work like the non-clamped counterparts, except the + * distance calculated is clamped between the reference and max distances. + */ +#define AL_DISTANCE_MODEL 0xD000 +AL_API void AL_APIENTRY alDistanceModel(ALenum distanceModel); + +/** Distance model value. */ +#define AL_INVERSE_DISTANCE 0xD001 +#define AL_INVERSE_DISTANCE_CLAMPED 0xD002 +#define AL_LINEAR_DISTANCE 0xD003 +#define AL_LINEAR_DISTANCE_CLAMPED 0xD004 +#define AL_EXPONENT_DISTANCE 0xD005 +#define AL_EXPONENT_DISTANCE_CLAMPED 0xD006 + +/** Renderer State management. */ +AL_API void AL_APIENTRY alEnable(ALenum capability); +AL_API void AL_APIENTRY alDisable(ALenum capability); +AL_API ALboolean AL_APIENTRY alIsEnabled(ALenum capability); + +/** State retrieval. */ +AL_API const ALchar* AL_APIENTRY alGetString(ALenum param); +AL_API void AL_APIENTRY alGetBooleanv(ALenum param, ALboolean *values); +AL_API void AL_APIENTRY alGetIntegerv(ALenum param, ALint *values); +AL_API void AL_APIENTRY alGetFloatv(ALenum param, ALfloat *values); +AL_API void AL_APIENTRY alGetDoublev(ALenum param, ALdouble *values); +AL_API ALboolean AL_APIENTRY alGetBoolean(ALenum param); +AL_API ALint AL_APIENTRY alGetInteger(ALenum param); +AL_API ALfloat AL_APIENTRY alGetFloat(ALenum param); +AL_API ALdouble AL_APIENTRY alGetDouble(ALenum param); + +/** + * Error retrieval. + * + * Obtain the first error generated in the AL context since the last check. + */ +AL_API ALenum AL_APIENTRY alGetError(void); + +/** + * Extension support. + * + * Query for the presence of an extension, and obtain any appropriate function + * pointers and enum values. + */ +AL_API ALboolean AL_APIENTRY alIsExtensionPresent(const ALchar *extname); +AL_API void* AL_APIENTRY alGetProcAddress(const ALchar *fname); +AL_API ALenum AL_APIENTRY alGetEnumValue(const ALchar *ename); + + +/** Set Listener parameters */ +AL_API void AL_APIENTRY alListenerf(ALenum param, ALfloat value); +AL_API void AL_APIENTRY alListener3f(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); +AL_API void AL_APIENTRY alListenerfv(ALenum param, const ALfloat *values); +AL_API void AL_APIENTRY alListeneri(ALenum param, ALint value); +AL_API void AL_APIENTRY alListener3i(ALenum param, ALint value1, ALint value2, ALint value3); +AL_API void AL_APIENTRY alListeneriv(ALenum param, const ALint *values); + +/** Get Listener parameters */ +AL_API void AL_APIENTRY alGetListenerf(ALenum param, ALfloat *value); +AL_API void AL_APIENTRY alGetListener3f(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); +AL_API void AL_APIENTRY alGetListenerfv(ALenum param, ALfloat *values); +AL_API void AL_APIENTRY alGetListeneri(ALenum param, ALint *value); +AL_API void AL_APIENTRY alGetListener3i(ALenum param, ALint *value1, ALint *value2, ALint *value3); +AL_API void AL_APIENTRY alGetListeneriv(ALenum param, ALint *values); + + +/** Create Source objects. */ +AL_API void AL_APIENTRY alGenSources(ALsizei n, ALuint *sources); +/** Delete Source objects. */ +AL_API void AL_APIENTRY alDeleteSources(ALsizei n, const ALuint *sources); +/** Verify a handle is a valid Source. */ +AL_API ALboolean AL_APIENTRY alIsSource(ALuint source); + +/** Set Source parameters. */ +AL_API void AL_APIENTRY alSourcef(ALuint source, ALenum param, ALfloat value); +AL_API void AL_APIENTRY alSource3f(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); +AL_API void AL_APIENTRY alSourcefv(ALuint source, ALenum param, const ALfloat *values); +AL_API void AL_APIENTRY alSourcei(ALuint source, ALenum param, ALint value); +AL_API void AL_APIENTRY alSource3i(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3); +AL_API void AL_APIENTRY alSourceiv(ALuint source, ALenum param, const ALint *values); + +/** Get Source parameters. */ +AL_API void AL_APIENTRY alGetSourcef(ALuint source, ALenum param, ALfloat *value); +AL_API void AL_APIENTRY alGetSource3f(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); +AL_API void AL_APIENTRY alGetSourcefv(ALuint source, ALenum param, ALfloat *values); +AL_API void AL_APIENTRY alGetSourcei(ALuint source, ALenum param, ALint *value); +AL_API void AL_APIENTRY alGetSource3i(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3); +AL_API void AL_APIENTRY alGetSourceiv(ALuint source, ALenum param, ALint *values); + + +/** Play, replay, or resume (if paused) a list of Sources */ +AL_API void AL_APIENTRY alSourcePlayv(ALsizei n, const ALuint *sources); +/** Stop a list of Sources */ +AL_API void AL_APIENTRY alSourceStopv(ALsizei n, const ALuint *sources); +/** Rewind a list of Sources */ +AL_API void AL_APIENTRY alSourceRewindv(ALsizei n, const ALuint *sources); +/** Pause a list of Sources */ +AL_API void AL_APIENTRY alSourcePausev(ALsizei n, const ALuint *sources); + +/** Play, replay, or resume a Source */ +AL_API void AL_APIENTRY alSourcePlay(ALuint source); +/** Stop a Source */ +AL_API void AL_APIENTRY alSourceStop(ALuint source); +/** Rewind a Source (set playback postiton to beginning) */ +AL_API void AL_APIENTRY alSourceRewind(ALuint source); +/** Pause a Source */ +AL_API void AL_APIENTRY alSourcePause(ALuint source); + +/** Queue buffers onto a source */ +AL_API void AL_APIENTRY alSourceQueueBuffers(ALuint source, ALsizei nb, const ALuint *buffers); +/** Unqueue processed buffers from a source */ +AL_API void AL_APIENTRY alSourceUnqueueBuffers(ALuint source, ALsizei nb, ALuint *buffers); + + +/** Create Buffer objects */ +AL_API void AL_APIENTRY alGenBuffers(ALsizei n, ALuint *buffers); +/** Delete Buffer objects */ +AL_API void AL_APIENTRY alDeleteBuffers(ALsizei n, const ALuint *buffers); +/** Verify a handle is a valid Buffer */ +AL_API ALboolean AL_APIENTRY alIsBuffer(ALuint buffer); + +/** Specifies the data to be copied into a buffer */ +AL_API void AL_APIENTRY alBufferData(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq); + +/** Set Buffer parameters, */ +AL_API void AL_APIENTRY alBufferf(ALuint buffer, ALenum param, ALfloat value); +AL_API void AL_APIENTRY alBuffer3f(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); +AL_API void AL_APIENTRY alBufferfv(ALuint buffer, ALenum param, const ALfloat *values); +AL_API void AL_APIENTRY alBufferi(ALuint buffer, ALenum param, ALint value); +AL_API void AL_APIENTRY alBuffer3i(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3); +AL_API void AL_APIENTRY alBufferiv(ALuint buffer, ALenum param, const ALint *values); + +/** Get Buffer parameters. */ +AL_API void AL_APIENTRY alGetBufferf(ALuint buffer, ALenum param, ALfloat *value); +AL_API void AL_APIENTRY alGetBuffer3f(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); +AL_API void AL_APIENTRY alGetBufferfv(ALuint buffer, ALenum param, ALfloat *values); +AL_API void AL_APIENTRY alGetBufferi(ALuint buffer, ALenum param, ALint *value); +AL_API void AL_APIENTRY alGetBuffer3i(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3); +AL_API void AL_APIENTRY alGetBufferiv(ALuint buffer, ALenum param, ALint *values); + +/** Pointer-to-function type, useful for dynamically getting AL entry points. */ +typedef void (AL_APIENTRY *LPALENABLE)(ALenum capability); +typedef void (AL_APIENTRY *LPALDISABLE)(ALenum capability); +typedef ALboolean (AL_APIENTRY *LPALISENABLED)(ALenum capability); +typedef const ALchar* (AL_APIENTRY *LPALGETSTRING)(ALenum param); +typedef void (AL_APIENTRY *LPALGETBOOLEANV)(ALenum param, ALboolean *values); +typedef void (AL_APIENTRY *LPALGETINTEGERV)(ALenum param, ALint *values); +typedef void (AL_APIENTRY *LPALGETFLOATV)(ALenum param, ALfloat *values); +typedef void (AL_APIENTRY *LPALGETDOUBLEV)(ALenum param, ALdouble *values); +typedef ALboolean (AL_APIENTRY *LPALGETBOOLEAN)(ALenum param); +typedef ALint (AL_APIENTRY *LPALGETINTEGER)(ALenum param); +typedef ALfloat (AL_APIENTRY *LPALGETFLOAT)(ALenum param); +typedef ALdouble (AL_APIENTRY *LPALGETDOUBLE)(ALenum param); +typedef ALenum (AL_APIENTRY *LPALGETERROR)(void); +typedef ALboolean (AL_APIENTRY *LPALISEXTENSIONPRESENT)(const ALchar *extname); +typedef void* (AL_APIENTRY *LPALGETPROCADDRESS)(const ALchar *fname); +typedef ALenum (AL_APIENTRY *LPALGETENUMVALUE)(const ALchar *ename); +typedef void (AL_APIENTRY *LPALLISTENERF)(ALenum param, ALfloat value); +typedef void (AL_APIENTRY *LPALLISTENER3F)(ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); +typedef void (AL_APIENTRY *LPALLISTENERFV)(ALenum param, const ALfloat *values); +typedef void (AL_APIENTRY *LPALLISTENERI)(ALenum param, ALint value); +typedef void (AL_APIENTRY *LPALLISTENER3I)(ALenum param, ALint value1, ALint value2, ALint value3); +typedef void (AL_APIENTRY *LPALLISTENERIV)(ALenum param, const ALint *values); +typedef void (AL_APIENTRY *LPALGETLISTENERF)(ALenum param, ALfloat *value); +typedef void (AL_APIENTRY *LPALGETLISTENER3F)(ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); +typedef void (AL_APIENTRY *LPALGETLISTENERFV)(ALenum param, ALfloat *values); +typedef void (AL_APIENTRY *LPALGETLISTENERI)(ALenum param, ALint *value); +typedef void (AL_APIENTRY *LPALGETLISTENER3I)(ALenum param, ALint *value1, ALint *value2, ALint *value3); +typedef void (AL_APIENTRY *LPALGETLISTENERIV)(ALenum param, ALint *values); +typedef void (AL_APIENTRY *LPALGENSOURCES)(ALsizei n, ALuint *sources); +typedef void (AL_APIENTRY *LPALDELETESOURCES)(ALsizei n, const ALuint *sources); +typedef ALboolean (AL_APIENTRY *LPALISSOURCE)(ALuint source); +typedef void (AL_APIENTRY *LPALSOURCEF)(ALuint source, ALenum param, ALfloat value); +typedef void (AL_APIENTRY *LPALSOURCE3F)(ALuint source, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); +typedef void (AL_APIENTRY *LPALSOURCEFV)(ALuint source, ALenum param, const ALfloat *values); +typedef void (AL_APIENTRY *LPALSOURCEI)(ALuint source, ALenum param, ALint value); +typedef void (AL_APIENTRY *LPALSOURCE3I)(ALuint source, ALenum param, ALint value1, ALint value2, ALint value3); +typedef void (AL_APIENTRY *LPALSOURCEIV)(ALuint source, ALenum param, const ALint *values); +typedef void (AL_APIENTRY *LPALGETSOURCEF)(ALuint source, ALenum param, ALfloat *value); +typedef void (AL_APIENTRY *LPALGETSOURCE3F)(ALuint source, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); +typedef void (AL_APIENTRY *LPALGETSOURCEFV)(ALuint source, ALenum param, ALfloat *values); +typedef void (AL_APIENTRY *LPALGETSOURCEI)(ALuint source, ALenum param, ALint *value); +typedef void (AL_APIENTRY *LPALGETSOURCE3I)(ALuint source, ALenum param, ALint *value1, ALint *value2, ALint *value3); +typedef void (AL_APIENTRY *LPALGETSOURCEIV)(ALuint source, ALenum param, ALint *values); +typedef void (AL_APIENTRY *LPALSOURCEPLAYV)(ALsizei n, const ALuint *sources); +typedef void (AL_APIENTRY *LPALSOURCESTOPV)(ALsizei n, const ALuint *sources); +typedef void (AL_APIENTRY *LPALSOURCEREWINDV)(ALsizei n, const ALuint *sources); +typedef void (AL_APIENTRY *LPALSOURCEPAUSEV)(ALsizei n, const ALuint *sources); +typedef void (AL_APIENTRY *LPALSOURCEPLAY)(ALuint source); +typedef void (AL_APIENTRY *LPALSOURCESTOP)(ALuint source); +typedef void (AL_APIENTRY *LPALSOURCEREWIND)(ALuint source); +typedef void (AL_APIENTRY *LPALSOURCEPAUSE)(ALuint source); +typedef void (AL_APIENTRY *LPALSOURCEQUEUEBUFFERS)(ALuint source, ALsizei nb, const ALuint *buffers); +typedef void (AL_APIENTRY *LPALSOURCEUNQUEUEBUFFERS)(ALuint source, ALsizei nb, ALuint *buffers); +typedef void (AL_APIENTRY *LPALGENBUFFERS)(ALsizei n, ALuint *buffers); +typedef void (AL_APIENTRY *LPALDELETEBUFFERS)(ALsizei n, const ALuint *buffers); +typedef ALboolean (AL_APIENTRY *LPALISBUFFER)(ALuint buffer); +typedef void (AL_APIENTRY *LPALBUFFERDATA)(ALuint buffer, ALenum format, const ALvoid *data, ALsizei size, ALsizei freq); +typedef void (AL_APIENTRY *LPALBUFFERF)(ALuint buffer, ALenum param, ALfloat value); +typedef void (AL_APIENTRY *LPALBUFFER3F)(ALuint buffer, ALenum param, ALfloat value1, ALfloat value2, ALfloat value3); +typedef void (AL_APIENTRY *LPALBUFFERFV)(ALuint buffer, ALenum param, const ALfloat *values); +typedef void (AL_APIENTRY *LPALBUFFERI)(ALuint buffer, ALenum param, ALint value); +typedef void (AL_APIENTRY *LPALBUFFER3I)(ALuint buffer, ALenum param, ALint value1, ALint value2, ALint value3); +typedef void (AL_APIENTRY *LPALBUFFERIV)(ALuint buffer, ALenum param, const ALint *values); +typedef void (AL_APIENTRY *LPALGETBUFFERF)(ALuint buffer, ALenum param, ALfloat *value); +typedef void (AL_APIENTRY *LPALGETBUFFER3F)(ALuint buffer, ALenum param, ALfloat *value1, ALfloat *value2, ALfloat *value3); +typedef void (AL_APIENTRY *LPALGETBUFFERFV)(ALuint buffer, ALenum param, ALfloat *values); +typedef void (AL_APIENTRY *LPALGETBUFFERI)(ALuint buffer, ALenum param, ALint *value); +typedef void (AL_APIENTRY *LPALGETBUFFER3I)(ALuint buffer, ALenum param, ALint *value1, ALint *value2, ALint *value3); +typedef void (AL_APIENTRY *LPALGETBUFFERIV)(ALuint buffer, ALenum param, ALint *values); +typedef void (AL_APIENTRY *LPALDOPPLERFACTOR)(ALfloat value); +typedef void (AL_APIENTRY *LPALDOPPLERVELOCITY)(ALfloat value); +typedef void (AL_APIENTRY *LPALSPEEDOFSOUND)(ALfloat value); +typedef void (AL_APIENTRY *LPALDISTANCEMODEL)(ALenum distanceModel); + +#if defined(__cplusplus) +} /* extern "C" */ +#endif + +#endif /* AL_AL_H */ diff --git a/Source/ThirdParty/OpenAL/alc.h b/Source/ThirdParty/OpenAL/alc.h new file mode 100644 index 000000000..294e8b33c --- /dev/null +++ b/Source/ThirdParty/OpenAL/alc.h @@ -0,0 +1,237 @@ +#ifndef AL_ALC_H +#define AL_ALC_H + +#if defined(__cplusplus) +extern "C" { +#endif + +#ifndef ALC_API + #if defined(AL_LIBTYPE_STATIC) + #define ALC_API + #elif defined(_WIN32) + #define ALC_API __declspec(dllimport) + #else + #define ALC_API extern + #endif +#endif + +#if defined(_WIN32) + #define ALC_APIENTRY __cdecl +#else + #define ALC_APIENTRY +#endif + + +/** Deprecated macro. */ +#define ALCAPI ALC_API +#define ALCAPIENTRY ALC_APIENTRY +#define ALC_INVALID 0 + +/** Supported ALC version? */ +#define ALC_VERSION_0_1 1 + +/** Opaque device handle */ +typedef struct ALCdevice_struct ALCdevice; +/** Opaque context handle */ +typedef struct ALCcontext_struct ALCcontext; + +/** 8-bit boolean */ +typedef char ALCboolean; + +/** character */ +typedef char ALCchar; + +/** signed 8-bit 2's complement integer */ +typedef signed char ALCbyte; + +/** unsigned 8-bit integer */ +typedef unsigned char ALCubyte; + +/** signed 16-bit 2's complement integer */ +typedef short ALCshort; + +/** unsigned 16-bit integer */ +typedef unsigned short ALCushort; + +/** signed 32-bit 2's complement integer */ +typedef int ALCint; + +/** unsigned 32-bit integer */ +typedef unsigned int ALCuint; + +/** non-negative 32-bit binary integer size */ +typedef int ALCsizei; + +/** enumerated 32-bit value */ +typedef int ALCenum; + +/** 32-bit IEEE754 floating-point */ +typedef float ALCfloat; + +/** 64-bit IEEE754 floating-point */ +typedef double ALCdouble; + +/** void type (for opaque pointers only) */ +typedef void ALCvoid; + + +/* Enumerant values begin at column 50. No tabs. */ + +/** Boolean False. */ +#define ALC_FALSE 0 + +/** Boolean True. */ +#define ALC_TRUE 1 + +/** Context attribute: Hz. */ +#define ALC_FREQUENCY 0x1007 + +/** Context attribute: Hz. */ +#define ALC_REFRESH 0x1008 + +/** Context attribute: AL_TRUE or AL_FALSE. */ +#define ALC_SYNC 0x1009 + +/** Context attribute: requested Mono (3D) Sources. */ +#define ALC_MONO_SOURCES 0x1010 + +/** Context attribute: requested Stereo Sources. */ +#define ALC_STEREO_SOURCES 0x1011 + +/** No error. */ +#define ALC_NO_ERROR 0 + +/** Invalid device handle. */ +#define ALC_INVALID_DEVICE 0xA001 + +/** Invalid context handle. */ +#define ALC_INVALID_CONTEXT 0xA002 + +/** Invalid enum parameter passed to an ALC call. */ +#define ALC_INVALID_ENUM 0xA003 + +/** Invalid value parameter passed to an ALC call. */ +#define ALC_INVALID_VALUE 0xA004 + +/** Out of memory. */ +#define ALC_OUT_OF_MEMORY 0xA005 + + +/** Runtime ALC version. */ +#define ALC_MAJOR_VERSION 0x1000 +#define ALC_MINOR_VERSION 0x1001 + +/** Context attribute list properties. */ +#define ALC_ATTRIBUTES_SIZE 0x1002 +#define ALC_ALL_ATTRIBUTES 0x1003 + +/** String for the default device specifier. */ +#define ALC_DEFAULT_DEVICE_SPECIFIER 0x1004 +/** + * String for the given device's specifier. + * + * If device handle is NULL, it is instead a null-char separated list of + * strings of known device specifiers (list ends with an empty string). + */ +#define ALC_DEVICE_SPECIFIER 0x1005 +/** String for space-separated list of ALC extensions. */ +#define ALC_EXTENSIONS 0x1006 + + +/** Capture extension */ +#define ALC_EXT_CAPTURE 1 +/** + * String for the given capture device's specifier. + * + * If device handle is NULL, it is instead a null-char separated list of + * strings of known capture device specifiers (list ends with an empty string). + */ +#define ALC_CAPTURE_DEVICE_SPECIFIER 0x310 +/** String for the default capture device specifier. */ +#define ALC_CAPTURE_DEFAULT_DEVICE_SPECIFIER 0x311 +/** Number of sample frames available for capture. */ +#define ALC_CAPTURE_SAMPLES 0x312 + + +/** Enumerate All extension */ +#define ALC_ENUMERATE_ALL_EXT 1 +/** String for the default extended device specifier. */ +#define ALC_DEFAULT_ALL_DEVICES_SPECIFIER 0x1012 +/** + * String for the given extended device's specifier. + * + * If device handle is NULL, it is instead a null-char separated list of + * strings of known extended device specifiers (list ends with an empty string). + */ +#define ALC_ALL_DEVICES_SPECIFIER 0x1013 + + +/** Context management. */ +ALC_API ALCcontext* ALC_APIENTRY alcCreateContext(ALCdevice *device, const ALCint* attrlist); +ALC_API ALCboolean ALC_APIENTRY alcMakeContextCurrent(ALCcontext *context); +ALC_API void ALC_APIENTRY alcProcessContext(ALCcontext *context); +ALC_API void ALC_APIENTRY alcSuspendContext(ALCcontext *context); +ALC_API void ALC_APIENTRY alcDestroyContext(ALCcontext *context); +ALC_API ALCcontext* ALC_APIENTRY alcGetCurrentContext(void); +ALC_API ALCdevice* ALC_APIENTRY alcGetContextsDevice(ALCcontext *context); + +/** Device management. */ +ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename); +ALC_API ALCboolean ALC_APIENTRY alcCloseDevice(ALCdevice *device); + + +/** + * Error support. + * + * Obtain the most recent Device error. + */ +ALC_API ALCenum ALC_APIENTRY alcGetError(ALCdevice *device); + +/** + * Extension support. + * + * Query for the presence of an extension, and obtain any appropriate + * function pointers and enum values. + */ +ALC_API ALCboolean ALC_APIENTRY alcIsExtensionPresent(ALCdevice *device, const ALCchar *extname); +ALC_API void* ALC_APIENTRY alcGetProcAddress(ALCdevice *device, const ALCchar *funcname); +ALC_API ALCenum ALC_APIENTRY alcGetEnumValue(ALCdevice *device, const ALCchar *enumname); + +/** Query function. */ +ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum param); +ALC_API void ALC_APIENTRY alcGetIntegerv(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values); + +/** Capture function. */ +ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize); +ALC_API ALCboolean ALC_APIENTRY alcCaptureCloseDevice(ALCdevice *device); +ALC_API void ALC_APIENTRY alcCaptureStart(ALCdevice *device); +ALC_API void ALC_APIENTRY alcCaptureStop(ALCdevice *device); +ALC_API void ALC_APIENTRY alcCaptureSamples(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); + +/** Pointer-to-function type, useful for dynamically getting ALC entry points. */ +typedef ALCcontext* (ALC_APIENTRY *LPALCCREATECONTEXT)(ALCdevice *device, const ALCint *attrlist); +typedef ALCboolean (ALC_APIENTRY *LPALCMAKECONTEXTCURRENT)(ALCcontext *context); +typedef void (ALC_APIENTRY *LPALCPROCESSCONTEXT)(ALCcontext *context); +typedef void (ALC_APIENTRY *LPALCSUSPENDCONTEXT)(ALCcontext *context); +typedef void (ALC_APIENTRY *LPALCDESTROYCONTEXT)(ALCcontext *context); +typedef ALCcontext* (ALC_APIENTRY *LPALCGETCURRENTCONTEXT)(void); +typedef ALCdevice* (ALC_APIENTRY *LPALCGETCONTEXTSDEVICE)(ALCcontext *context); +typedef ALCdevice* (ALC_APIENTRY *LPALCOPENDEVICE)(const ALCchar *devicename); +typedef ALCboolean (ALC_APIENTRY *LPALCCLOSEDEVICE)(ALCdevice *device); +typedef ALCenum (ALC_APIENTRY *LPALCGETERROR)(ALCdevice *device); +typedef ALCboolean (ALC_APIENTRY *LPALCISEXTENSIONPRESENT)(ALCdevice *device, const ALCchar *extname); +typedef void* (ALC_APIENTRY *LPALCGETPROCADDRESS)(ALCdevice *device, const ALCchar *funcname); +typedef ALCenum (ALC_APIENTRY *LPALCGETENUMVALUE)(ALCdevice *device, const ALCchar *enumname); +typedef const ALCchar* (ALC_APIENTRY *LPALCGETSTRING)(ALCdevice *device, ALCenum param); +typedef void (ALC_APIENTRY *LPALCGETINTEGERV)(ALCdevice *device, ALCenum param, ALCsizei size, ALCint *values); +typedef ALCdevice* (ALC_APIENTRY *LPALCCAPTUREOPENDEVICE)(const ALCchar *devicename, ALCuint frequency, ALCenum format, ALCsizei buffersize); +typedef ALCboolean (ALC_APIENTRY *LPALCCAPTURECLOSEDEVICE)(ALCdevice *device); +typedef void (ALC_APIENTRY *LPALCCAPTURESTART)(ALCdevice *device); +typedef void (ALC_APIENTRY *LPALCCAPTURESTOP)(ALCdevice *device); +typedef void (ALC_APIENTRY *LPALCCAPTURESAMPLES)(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); + +#if defined(__cplusplus) +} +#endif + +#endif /* AL_ALC_H */ diff --git a/Source/ThirdParty/OpenAL/alext.h b/Source/ThirdParty/OpenAL/alext.h new file mode 100644 index 000000000..cd7f2750d --- /dev/null +++ b/Source/ThirdParty/OpenAL/alext.h @@ -0,0 +1,516 @@ +/** + * OpenAL cross platform audio library + * Copyright (C) 2008 by authors. + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * Or go to http://www.gnu.org/copyleft/lgpl.html + */ + +#ifndef AL_ALEXT_H +#define AL_ALEXT_H + +#include +/* Define int64_t and uint64_t types */ +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L +#include +#elif defined(_WIN32) && defined(__GNUC__) +#include +#elif defined(_WIN32) +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +#else +/* Fallback if nothing above works */ +#include +#endif + +#include "alc.h" +#include "al.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef AL_LOKI_IMA_ADPCM_format +#define AL_LOKI_IMA_ADPCM_format 1 +#define AL_FORMAT_IMA_ADPCM_MONO16_EXT 0x10000 +#define AL_FORMAT_IMA_ADPCM_STEREO16_EXT 0x10001 +#endif + +#ifndef AL_LOKI_WAVE_format +#define AL_LOKI_WAVE_format 1 +#define AL_FORMAT_WAVE_EXT 0x10002 +#endif + +#ifndef AL_EXT_vorbis +#define AL_EXT_vorbis 1 +#define AL_FORMAT_VORBIS_EXT 0x10003 +#endif + +#ifndef AL_LOKI_quadriphonic +#define AL_LOKI_quadriphonic 1 +#define AL_FORMAT_QUAD8_LOKI 0x10004 +#define AL_FORMAT_QUAD16_LOKI 0x10005 +#endif + +#ifndef AL_EXT_float32 +#define AL_EXT_float32 1 +#define AL_FORMAT_MONO_FLOAT32 0x10010 +#define AL_FORMAT_STEREO_FLOAT32 0x10011 +#endif + +#ifndef AL_EXT_double +#define AL_EXT_double 1 +#define AL_FORMAT_MONO_DOUBLE_EXT 0x10012 +#define AL_FORMAT_STEREO_DOUBLE_EXT 0x10013 +#endif + +#ifndef AL_EXT_MULAW +#define AL_EXT_MULAW 1 +#define AL_FORMAT_MONO_MULAW_EXT 0x10014 +#define AL_FORMAT_STEREO_MULAW_EXT 0x10015 +#endif + +#ifndef AL_EXT_ALAW +#define AL_EXT_ALAW 1 +#define AL_FORMAT_MONO_ALAW_EXT 0x10016 +#define AL_FORMAT_STEREO_ALAW_EXT 0x10017 +#endif + +#ifndef ALC_LOKI_audio_channel +#define ALC_LOKI_audio_channel 1 +#define ALC_CHAN_MAIN_LOKI 0x500001 +#define ALC_CHAN_PCM_LOKI 0x500002 +#define ALC_CHAN_CD_LOKI 0x500003 +#endif + +#ifndef AL_EXT_MCFORMATS +#define AL_EXT_MCFORMATS 1 +/* Provides support for surround sound buffer formats with 8, 16, and 32-bit + * samples. + * + * QUAD8: Unsigned 8-bit, Quadraphonic (Front Left, Front Right, Rear Left, + * Rear Right). + * QUAD16: Signed 16-bit, Quadraphonic. + * QUAD32: 32-bit float, Quadraphonic. + * REAR8: Unsigned 8-bit, Rear Stereo (Rear Left, Rear Right). + * REAR16: Signed 16-bit, Rear Stereo. + * REAR32: 32-bit float, Rear Stereo. + * 51CHN8: Unsigned 8-bit, 5.1 Surround (Front Left, Front Right, Front Center, + * LFE, Side Left, Side Right). Note that some audio systems may label + * 5.1's Side channels as Rear or Surround; they are equivalent for the + * purposes of this extension. + * 51CHN16: Signed 16-bit, 5.1 Surround. + * 51CHN32: 32-bit float, 5.1 Surround. + * 61CHN8: Unsigned 8-bit, 6.1 Surround (Front Left, Front Right, Front Center, + * LFE, Rear Center, Side Left, Side Right). + * 61CHN16: Signed 16-bit, 6.1 Surround. + * 61CHN32: 32-bit float, 6.1 Surround. + * 71CHN8: Unsigned 8-bit, 7.1 Surround (Front Left, Front Right, Front Center, + * LFE, Rear Left, Rear Right, Side Left, Side Right). + * 71CHN16: Signed 16-bit, 7.1 Surround. + * 71CHN32: 32-bit float, 7.1 Surround. + */ +#define AL_FORMAT_QUAD8 0x1204 +#define AL_FORMAT_QUAD16 0x1205 +#define AL_FORMAT_QUAD32 0x1206 +#define AL_FORMAT_REAR8 0x1207 +#define AL_FORMAT_REAR16 0x1208 +#define AL_FORMAT_REAR32 0x1209 +#define AL_FORMAT_51CHN8 0x120A +#define AL_FORMAT_51CHN16 0x120B +#define AL_FORMAT_51CHN32 0x120C +#define AL_FORMAT_61CHN8 0x120D +#define AL_FORMAT_61CHN16 0x120E +#define AL_FORMAT_61CHN32 0x120F +#define AL_FORMAT_71CHN8 0x1210 +#define AL_FORMAT_71CHN16 0x1211 +#define AL_FORMAT_71CHN32 0x1212 +#endif + +#ifndef AL_EXT_MULAW_MCFORMATS +#define AL_EXT_MULAW_MCFORMATS 1 +#define AL_FORMAT_MONO_MULAW 0x10014 +#define AL_FORMAT_STEREO_MULAW 0x10015 +#define AL_FORMAT_QUAD_MULAW 0x10021 +#define AL_FORMAT_REAR_MULAW 0x10022 +#define AL_FORMAT_51CHN_MULAW 0x10023 +#define AL_FORMAT_61CHN_MULAW 0x10024 +#define AL_FORMAT_71CHN_MULAW 0x10025 +#endif + +#ifndef AL_EXT_IMA4 +#define AL_EXT_IMA4 1 +#define AL_FORMAT_MONO_IMA4 0x1300 +#define AL_FORMAT_STEREO_IMA4 0x1301 +#endif + +#ifndef AL_EXT_STATIC_BUFFER +#define AL_EXT_STATIC_BUFFER 1 +typedef ALvoid (AL_APIENTRY*PFNALBUFFERDATASTATICPROC)(const ALint,ALenum,ALvoid*,ALsizei,ALsizei); +#ifdef AL_ALEXT_PROTOTYPES +AL_API ALvoid AL_APIENTRY alBufferDataStatic(const ALint buffer, ALenum format, ALvoid *data, ALsizei len, ALsizei freq); +#endif +#endif + +#ifndef ALC_EXT_EFX +#define ALC_EXT_EFX 1 +#include "efx.h" +#endif + +#ifndef ALC_EXT_disconnect +#define ALC_EXT_disconnect 1 +#define ALC_CONNECTED 0x313 +#endif + +#ifndef ALC_EXT_thread_local_context +#define ALC_EXT_thread_local_context 1 +typedef ALCboolean (ALC_APIENTRY*PFNALCSETTHREADCONTEXTPROC)(ALCcontext *context); +typedef ALCcontext* (ALC_APIENTRY*PFNALCGETTHREADCONTEXTPROC)(void); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API ALCboolean ALC_APIENTRY alcSetThreadContext(ALCcontext *context); +ALC_API ALCcontext* ALC_APIENTRY alcGetThreadContext(void); +#endif +#endif + +#ifndef AL_EXT_source_distance_model +#define AL_EXT_source_distance_model 1 +#define AL_SOURCE_DISTANCE_MODEL 0x200 +#endif + +#ifndef AL_SOFT_buffer_sub_data +#define AL_SOFT_buffer_sub_data 1 +#define AL_BYTE_RW_OFFSETS_SOFT 0x1031 +#define AL_SAMPLE_RW_OFFSETS_SOFT 0x1032 +typedef ALvoid (AL_APIENTRY*PFNALBUFFERSUBDATASOFTPROC)(ALuint,ALenum,const ALvoid*,ALsizei,ALsizei); +#ifdef AL_ALEXT_PROTOTYPES +AL_API ALvoid AL_APIENTRY alBufferSubDataSOFT(ALuint buffer,ALenum format,const ALvoid *data,ALsizei offset,ALsizei length); +#endif +#endif + +#ifndef AL_SOFT_loop_points +#define AL_SOFT_loop_points 1 +#define AL_LOOP_POINTS_SOFT 0x2015 +#endif + +#ifndef AL_EXT_FOLDBACK +#define AL_EXT_FOLDBACK 1 +#define AL_EXT_FOLDBACK_NAME "AL_EXT_FOLDBACK" +#define AL_FOLDBACK_EVENT_BLOCK 0x4112 +#define AL_FOLDBACK_EVENT_START 0x4111 +#define AL_FOLDBACK_EVENT_STOP 0x4113 +#define AL_FOLDBACK_MODE_MONO 0x4101 +#define AL_FOLDBACK_MODE_STEREO 0x4102 +typedef void (AL_APIENTRY*LPALFOLDBACKCALLBACK)(ALenum,ALsizei); +typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTART)(ALenum,ALsizei,ALsizei,ALfloat*,LPALFOLDBACKCALLBACK); +typedef void (AL_APIENTRY*LPALREQUESTFOLDBACKSTOP)(void); +#ifdef AL_ALEXT_PROTOTYPES +AL_API void AL_APIENTRY alRequestFoldbackStart(ALenum mode,ALsizei count,ALsizei length,ALfloat *mem,LPALFOLDBACKCALLBACK callback); +AL_API void AL_APIENTRY alRequestFoldbackStop(void); +#endif +#endif + +#ifndef ALC_EXT_DEDICATED +#define ALC_EXT_DEDICATED 1 +#define AL_DEDICATED_GAIN 0x0001 +#define AL_EFFECT_DEDICATED_DIALOGUE 0x9001 +#define AL_EFFECT_DEDICATED_LOW_FREQUENCY_EFFECT 0x9000 +#endif + +#ifndef AL_SOFT_buffer_samples +#define AL_SOFT_buffer_samples 1 +/* Channel configurations */ +#define AL_MONO_SOFT 0x1500 +#define AL_STEREO_SOFT 0x1501 +#define AL_REAR_SOFT 0x1502 +#define AL_QUAD_SOFT 0x1503 +#define AL_5POINT1_SOFT 0x1504 +#define AL_6POINT1_SOFT 0x1505 +#define AL_7POINT1_SOFT 0x1506 + +/* Sample types */ +#define AL_BYTE_SOFT 0x1400 +#define AL_UNSIGNED_BYTE_SOFT 0x1401 +#define AL_SHORT_SOFT 0x1402 +#define AL_UNSIGNED_SHORT_SOFT 0x1403 +#define AL_INT_SOFT 0x1404 +#define AL_UNSIGNED_INT_SOFT 0x1405 +#define AL_FLOAT_SOFT 0x1406 +#define AL_DOUBLE_SOFT 0x1407 +#define AL_BYTE3_SOFT 0x1408 +#define AL_UNSIGNED_BYTE3_SOFT 0x1409 + +/* Storage formats */ +#define AL_MONO8_SOFT 0x1100 +#define AL_MONO16_SOFT 0x1101 +#define AL_MONO32F_SOFT 0x10010 +#define AL_STEREO8_SOFT 0x1102 +#define AL_STEREO16_SOFT 0x1103 +#define AL_STEREO32F_SOFT 0x10011 +#define AL_QUAD8_SOFT 0x1204 +#define AL_QUAD16_SOFT 0x1205 +#define AL_QUAD32F_SOFT 0x1206 +#define AL_REAR8_SOFT 0x1207 +#define AL_REAR16_SOFT 0x1208 +#define AL_REAR32F_SOFT 0x1209 +#define AL_5POINT1_8_SOFT 0x120A +#define AL_5POINT1_16_SOFT 0x120B +#define AL_5POINT1_32F_SOFT 0x120C +#define AL_6POINT1_8_SOFT 0x120D +#define AL_6POINT1_16_SOFT 0x120E +#define AL_6POINT1_32F_SOFT 0x120F +#define AL_7POINT1_8_SOFT 0x1210 +#define AL_7POINT1_16_SOFT 0x1211 +#define AL_7POINT1_32F_SOFT 0x1212 + +/* Buffer attributes */ +#define AL_INTERNAL_FORMAT_SOFT 0x2008 +#define AL_BYTE_LENGTH_SOFT 0x2009 +#define AL_SAMPLE_LENGTH_SOFT 0x200A +#define AL_SEC_LENGTH_SOFT 0x200B + +typedef void (AL_APIENTRY*LPALBUFFERSAMPLESSOFT)(ALuint,ALuint,ALenum,ALsizei,ALenum,ALenum,const ALvoid*); +typedef void (AL_APIENTRY*LPALBUFFERSUBSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,const ALvoid*); +typedef void (AL_APIENTRY*LPALGETBUFFERSAMPLESSOFT)(ALuint,ALsizei,ALsizei,ALenum,ALenum,ALvoid*); +typedef ALboolean (AL_APIENTRY*LPALISBUFFERFORMATSUPPORTEDSOFT)(ALenum); +#ifdef AL_ALEXT_PROTOTYPES +AL_API void AL_APIENTRY alBufferSamplesSOFT(ALuint buffer, ALuint samplerate, ALenum internalformat, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data); +AL_API void AL_APIENTRY alBufferSubSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, const ALvoid *data); +AL_API void AL_APIENTRY alGetBufferSamplesSOFT(ALuint buffer, ALsizei offset, ALsizei samples, ALenum channels, ALenum type, ALvoid *data); +AL_API ALboolean AL_APIENTRY alIsBufferFormatSupportedSOFT(ALenum format); +#endif +#endif + +#ifndef AL_SOFT_direct_channels +#define AL_SOFT_direct_channels 1 +#define AL_DIRECT_CHANNELS_SOFT 0x1033 +#endif + +#ifndef ALC_SOFT_loopback +#define ALC_SOFT_loopback 1 +#define ALC_FORMAT_CHANNELS_SOFT 0x1990 +#define ALC_FORMAT_TYPE_SOFT 0x1991 + +/* Sample types */ +#define ALC_BYTE_SOFT 0x1400 +#define ALC_UNSIGNED_BYTE_SOFT 0x1401 +#define ALC_SHORT_SOFT 0x1402 +#define ALC_UNSIGNED_SHORT_SOFT 0x1403 +#define ALC_INT_SOFT 0x1404 +#define ALC_UNSIGNED_INT_SOFT 0x1405 +#define ALC_FLOAT_SOFT 0x1406 + +/* Channel configurations */ +#define ALC_MONO_SOFT 0x1500 +#define ALC_STEREO_SOFT 0x1501 +#define ALC_QUAD_SOFT 0x1503 +#define ALC_5POINT1_SOFT 0x1504 +#define ALC_6POINT1_SOFT 0x1505 +#define ALC_7POINT1_SOFT 0x1506 + +typedef ALCdevice* (ALC_APIENTRY*LPALCLOOPBACKOPENDEVICESOFT)(const ALCchar*); +typedef ALCboolean (ALC_APIENTRY*LPALCISRENDERFORMATSUPPORTEDSOFT)(ALCdevice*,ALCsizei,ALCenum,ALCenum); +typedef void (ALC_APIENTRY*LPALCRENDERSAMPLESSOFT)(ALCdevice*,ALCvoid*,ALCsizei); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API ALCdevice* ALC_APIENTRY alcLoopbackOpenDeviceSOFT(const ALCchar *deviceName); +ALC_API ALCboolean ALC_APIENTRY alcIsRenderFormatSupportedSOFT(ALCdevice *device, ALCsizei freq, ALCenum channels, ALCenum type); +ALC_API void ALC_APIENTRY alcRenderSamplesSOFT(ALCdevice *device, ALCvoid *buffer, ALCsizei samples); +#endif +#endif + +#ifndef AL_EXT_STEREO_ANGLES +#define AL_EXT_STEREO_ANGLES 1 +#define AL_STEREO_ANGLES 0x1030 +#endif + +#ifndef AL_EXT_SOURCE_RADIUS +#define AL_EXT_SOURCE_RADIUS 1 +#define AL_SOURCE_RADIUS 0x1031 +#endif + +#ifndef AL_SOFT_source_latency +#define AL_SOFT_source_latency 1 +#define AL_SAMPLE_OFFSET_LATENCY_SOFT 0x1200 +#define AL_SEC_OFFSET_LATENCY_SOFT 0x1201 +typedef int64_t ALint64SOFT; +typedef uint64_t ALuint64SOFT; +typedef void (AL_APIENTRY*LPALSOURCEDSOFT)(ALuint,ALenum,ALdouble); +typedef void (AL_APIENTRY*LPALSOURCE3DSOFT)(ALuint,ALenum,ALdouble,ALdouble,ALdouble); +typedef void (AL_APIENTRY*LPALSOURCEDVSOFT)(ALuint,ALenum,const ALdouble*); +typedef void (AL_APIENTRY*LPALGETSOURCEDSOFT)(ALuint,ALenum,ALdouble*); +typedef void (AL_APIENTRY*LPALGETSOURCE3DSOFT)(ALuint,ALenum,ALdouble*,ALdouble*,ALdouble*); +typedef void (AL_APIENTRY*LPALGETSOURCEDVSOFT)(ALuint,ALenum,ALdouble*); +typedef void (AL_APIENTRY*LPALSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT); +typedef void (AL_APIENTRY*LPALSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT,ALint64SOFT,ALint64SOFT); +typedef void (AL_APIENTRY*LPALSOURCEI64VSOFT)(ALuint,ALenum,const ALint64SOFT*); +typedef void (AL_APIENTRY*LPALGETSOURCEI64SOFT)(ALuint,ALenum,ALint64SOFT*); +typedef void (AL_APIENTRY*LPALGETSOURCE3I64SOFT)(ALuint,ALenum,ALint64SOFT*,ALint64SOFT*,ALint64SOFT*); +typedef void (AL_APIENTRY*LPALGETSOURCEI64VSOFT)(ALuint,ALenum,ALint64SOFT*); +#ifdef AL_ALEXT_PROTOTYPES +AL_API void AL_APIENTRY alSourcedSOFT(ALuint source, ALenum param, ALdouble value); +AL_API void AL_APIENTRY alSource3dSOFT(ALuint source, ALenum param, ALdouble value1, ALdouble value2, ALdouble value3); +AL_API void AL_APIENTRY alSourcedvSOFT(ALuint source, ALenum param, const ALdouble *values); +AL_API void AL_APIENTRY alGetSourcedSOFT(ALuint source, ALenum param, ALdouble *value); +AL_API void AL_APIENTRY alGetSource3dSOFT(ALuint source, ALenum param, ALdouble *value1, ALdouble *value2, ALdouble *value3); +AL_API void AL_APIENTRY alGetSourcedvSOFT(ALuint source, ALenum param, ALdouble *values); +AL_API void AL_APIENTRY alSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT value); +AL_API void AL_APIENTRY alSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT value1, ALint64SOFT value2, ALint64SOFT value3); +AL_API void AL_APIENTRY alSourcei64vSOFT(ALuint source, ALenum param, const ALint64SOFT *values); +AL_API void AL_APIENTRY alGetSourcei64SOFT(ALuint source, ALenum param, ALint64SOFT *value); +AL_API void AL_APIENTRY alGetSource3i64SOFT(ALuint source, ALenum param, ALint64SOFT *value1, ALint64SOFT *value2, ALint64SOFT *value3); +AL_API void AL_APIENTRY alGetSourcei64vSOFT(ALuint source, ALenum param, ALint64SOFT *values); +#endif +#endif + +#ifndef ALC_EXT_DEFAULT_FILTER_ORDER +#define ALC_EXT_DEFAULT_FILTER_ORDER 1 +#define ALC_DEFAULT_FILTER_ORDER 0x1100 +#endif + +#ifndef AL_SOFT_deferred_updates +#define AL_SOFT_deferred_updates 1 +#define AL_DEFERRED_UPDATES_SOFT 0xC002 +typedef ALvoid (AL_APIENTRY*LPALDEFERUPDATESSOFT)(void); +typedef ALvoid (AL_APIENTRY*LPALPROCESSUPDATESSOFT)(void); +#ifdef AL_ALEXT_PROTOTYPES +AL_API ALvoid AL_APIENTRY alDeferUpdatesSOFT(void); +AL_API ALvoid AL_APIENTRY alProcessUpdatesSOFT(void); +#endif +#endif + +#ifndef AL_SOFT_block_alignment +#define AL_SOFT_block_alignment 1 +#define AL_UNPACK_BLOCK_ALIGNMENT_SOFT 0x200C +#define AL_PACK_BLOCK_ALIGNMENT_SOFT 0x200D +#endif + +#ifndef AL_SOFT_MSADPCM +#define AL_SOFT_MSADPCM 1 +#define AL_FORMAT_MONO_MSADPCM_SOFT 0x1302 +#define AL_FORMAT_STEREO_MSADPCM_SOFT 0x1303 +#endif + +#ifndef AL_SOFT_source_length +#define AL_SOFT_source_length 1 +/*#define AL_BYTE_LENGTH_SOFT 0x2009*/ +/*#define AL_SAMPLE_LENGTH_SOFT 0x200A*/ +/*#define AL_SEC_LENGTH_SOFT 0x200B*/ +#endif + +#ifndef ALC_SOFT_pause_device +#define ALC_SOFT_pause_device 1 +typedef void (ALC_APIENTRY*LPALCDEVICEPAUSESOFT)(ALCdevice *device); +typedef void (ALC_APIENTRY*LPALCDEVICERESUMESOFT)(ALCdevice *device); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API void ALC_APIENTRY alcDevicePauseSOFT(ALCdevice *device); +ALC_API void ALC_APIENTRY alcDeviceResumeSOFT(ALCdevice *device); +#endif +#endif + +#ifndef AL_EXT_BFORMAT +#define AL_EXT_BFORMAT 1 +/* Provides support for B-Format ambisonic buffers (first-order, FuMa scaling + * and layout). + * + * BFORMAT2D_8: Unsigned 8-bit, 3-channel non-periphonic (WXY). + * BFORMAT2D_16: Signed 16-bit, 3-channel non-periphonic (WXY). + * BFORMAT2D_FLOAT32: 32-bit float, 3-channel non-periphonic (WXY). + * BFORMAT3D_8: Unsigned 8-bit, 4-channel periphonic (WXYZ). + * BFORMAT3D_16: Signed 16-bit, 4-channel periphonic (WXYZ). + * BFORMAT3D_FLOAT32: 32-bit float, 4-channel periphonic (WXYZ). + */ +#define AL_FORMAT_BFORMAT2D_8 0x20021 +#define AL_FORMAT_BFORMAT2D_16 0x20022 +#define AL_FORMAT_BFORMAT2D_FLOAT32 0x20023 +#define AL_FORMAT_BFORMAT3D_8 0x20031 +#define AL_FORMAT_BFORMAT3D_16 0x20032 +#define AL_FORMAT_BFORMAT3D_FLOAT32 0x20033 +#endif + +#ifndef AL_EXT_MULAW_BFORMAT +#define AL_EXT_MULAW_BFORMAT 1 +#define AL_FORMAT_BFORMAT2D_MULAW 0x10031 +#define AL_FORMAT_BFORMAT3D_MULAW 0x10032 +#endif + +#ifndef ALC_SOFT_HRTF +#define ALC_SOFT_HRTF 1 +#define ALC_HRTF_SOFT 0x1992 +#define ALC_DONT_CARE_SOFT 0x0002 +#define ALC_HRTF_STATUS_SOFT 0x1993 +#define ALC_HRTF_DISABLED_SOFT 0x0000 +#define ALC_HRTF_ENABLED_SOFT 0x0001 +#define ALC_HRTF_DENIED_SOFT 0x0002 +#define ALC_HRTF_REQUIRED_SOFT 0x0003 +#define ALC_HRTF_HEADPHONES_DETECTED_SOFT 0x0004 +#define ALC_HRTF_UNSUPPORTED_FORMAT_SOFT 0x0005 +#define ALC_NUM_HRTF_SPECIFIERS_SOFT 0x1994 +#define ALC_HRTF_SPECIFIER_SOFT 0x1995 +#define ALC_HRTF_ID_SOFT 0x1996 +typedef const ALCchar* (ALC_APIENTRY*LPALCGETSTRINGISOFT)(ALCdevice *device, ALCenum paramName, ALCsizei index); +typedef ALCboolean (ALC_APIENTRY*LPALCRESETDEVICESOFT)(ALCdevice *device, const ALCint *attribs); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API const ALCchar* ALC_APIENTRY alcGetStringiSOFT(ALCdevice *device, ALCenum paramName, ALCsizei index); +ALC_API ALCboolean ALC_APIENTRY alcResetDeviceSOFT(ALCdevice *device, const ALCint *attribs); +#endif +#endif + +#ifndef AL_SOFT_gain_clamp_ex +#define AL_SOFT_gain_clamp_ex 1 +#define AL_GAIN_LIMIT_SOFT 0x200E +#endif + +#ifndef AL_SOFT_source_resampler +#define AL_SOFT_source_resampler +#define AL_NUM_RESAMPLERS_SOFT 0x1210 +#define AL_DEFAULT_RESAMPLER_SOFT 0x1211 +#define AL_SOURCE_RESAMPLER_SOFT 0x1212 +#define AL_RESAMPLER_NAME_SOFT 0x1213 +typedef const ALchar* (AL_APIENTRY*LPALGETSTRINGISOFT)(ALenum pname, ALsizei index); +#ifdef AL_ALEXT_PROTOTYPES +AL_API const ALchar* AL_APIENTRY alGetStringiSOFT(ALenum pname, ALsizei index); +#endif +#endif + +#ifndef AL_SOFT_source_spatialize +#define AL_SOFT_source_spatialize +#define AL_SOURCE_SPATIALIZE_SOFT 0x1214 +#define AL_AUTO_SOFT 0x0002 +#endif + +#ifndef ALC_SOFT_output_limiter +#define ALC_SOFT_output_limiter +#define ALC_OUTPUT_LIMITER_SOFT 0x199A +#endif + +#ifndef ALC_SOFT_device_clock +#define ALC_SOFT_device_clock 1 +typedef int64_t ALCint64SOFT; +typedef uint64_t ALCuint64SOFT; +#define ALC_DEVICE_CLOCK_SOFT 0x1600 +#define ALC_DEVICE_LATENCY_SOFT 0x1601 +#define ALC_DEVICE_CLOCK_LATENCY_SOFT 0x1602 +#define AL_SAMPLE_OFFSET_CLOCK_SOFT 0x1202 +#define AL_SEC_OFFSET_CLOCK_SOFT 0x1203 +typedef void (ALC_APIENTRY*LPALCGETINTEGER64VSOFT)(ALCdevice *device, ALCenum pname, ALsizei size, ALCint64SOFT *values); +#ifdef AL_ALEXT_PROTOTYPES +ALC_API void ALC_APIENTRY alcGetInteger64vSOFT(ALCdevice *device, ALCenum pname, ALsizei size, ALCint64SOFT *values); +#endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/Source/ThirdParty/OpenAL/efx-creative.h b/Source/ThirdParty/OpenAL/efx-creative.h new file mode 100644 index 000000000..0a04c982e --- /dev/null +++ b/Source/ThirdParty/OpenAL/efx-creative.h @@ -0,0 +1,3 @@ +/* The tokens that would be defined here are already defined in efx.h. This + * empty file is here to provide compatibility with Windows-based projects + * that would include it. */ diff --git a/Source/ThirdParty/OpenAL/efx-presets.h b/Source/ThirdParty/OpenAL/efx-presets.h new file mode 100644 index 000000000..8539fd517 --- /dev/null +++ b/Source/ThirdParty/OpenAL/efx-presets.h @@ -0,0 +1,402 @@ +/* Reverb presets for EFX */ + +#ifndef EFX_PRESETS_H +#define EFX_PRESETS_H + +#ifndef EFXEAXREVERBPROPERTIES_DEFINED +#define EFXEAXREVERBPROPERTIES_DEFINED +typedef struct { + float flDensity; + float flDiffusion; + float flGain; + float flGainHF; + float flGainLF; + float flDecayTime; + float flDecayHFRatio; + float flDecayLFRatio; + float flReflectionsGain; + float flReflectionsDelay; + float flReflectionsPan[3]; + float flLateReverbGain; + float flLateReverbDelay; + float flLateReverbPan[3]; + float flEchoTime; + float flEchoDepth; + float flModulationTime; + float flModulationDepth; + float flAirAbsorptionGainHF; + float flHFReference; + float flLFReference; + float flRoomRolloffFactor; + int iDecayHFLimit; +} EFXEAXREVERBPROPERTIES, *LPEFXEAXREVERBPROPERTIES; +#endif + +/* Default Presets */ + +#define EFX_REVERB_PRESET_GENERIC \ + { 1.0000f, 1.0000f, 0.3162f, 0.8913f, 1.0000f, 1.4900f, 0.8300f, 1.0000f, 0.0500f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PADDEDCELL \ + { 0.1715f, 1.0000f, 0.3162f, 0.0010f, 1.0000f, 0.1700f, 0.1000f, 1.0000f, 0.2500f, 0.0010f, { 0.0000f, 0.0000f, 0.0000f }, 1.2691f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ROOM \ + { 0.4287f, 1.0000f, 0.3162f, 0.5929f, 1.0000f, 0.4000f, 0.8300f, 1.0000f, 0.1503f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 1.0629f, 0.0030f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_BATHROOM \ + { 0.1715f, 1.0000f, 0.3162f, 0.2512f, 1.0000f, 1.4900f, 0.5400f, 1.0000f, 0.6531f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 3.2734f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_LIVINGROOM \ + { 0.9766f, 1.0000f, 0.3162f, 0.0010f, 1.0000f, 0.5000f, 0.1000f, 1.0000f, 0.2051f, 0.0030f, { 0.0000f, 0.0000f, 0.0000f }, 0.2805f, 0.0040f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_STONEROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.7079f, 1.0000f, 2.3100f, 0.6400f, 1.0000f, 0.4411f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1003f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_AUDITORIUM \ + { 1.0000f, 1.0000f, 0.3162f, 0.5781f, 1.0000f, 4.3200f, 0.5900f, 1.0000f, 0.4032f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.7170f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CONCERTHALL \ + { 1.0000f, 1.0000f, 0.3162f, 0.5623f, 1.0000f, 3.9200f, 0.7000f, 1.0000f, 0.2427f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.9977f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CAVE \ + { 1.0000f, 1.0000f, 0.3162f, 1.0000f, 1.0000f, 2.9100f, 1.3000f, 1.0000f, 0.5000f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.7063f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_ARENA \ + { 1.0000f, 1.0000f, 0.3162f, 0.4477f, 1.0000f, 7.2400f, 0.3300f, 1.0000f, 0.2612f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.0186f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_HANGAR \ + { 1.0000f, 1.0000f, 0.3162f, 0.3162f, 1.0000f, 10.0500f, 0.2300f, 1.0000f, 0.5000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2560f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CARPETEDHALLWAY \ + { 0.4287f, 1.0000f, 0.3162f, 0.0100f, 1.0000f, 0.3000f, 0.1000f, 1.0000f, 0.1215f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 0.1531f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_HALLWAY \ + { 0.3645f, 1.0000f, 0.3162f, 0.7079f, 1.0000f, 1.4900f, 0.5900f, 1.0000f, 0.2458f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.6615f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_STONECORRIDOR \ + { 1.0000f, 1.0000f, 0.3162f, 0.7612f, 1.0000f, 2.7000f, 0.7900f, 1.0000f, 0.2472f, 0.0130f, { 0.0000f, 0.0000f, 0.0000f }, 1.5758f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ALLEY \ + { 1.0000f, 0.3000f, 0.3162f, 0.7328f, 1.0000f, 1.4900f, 0.8600f, 1.0000f, 0.2500f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.9954f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.9500f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FOREST \ + { 1.0000f, 0.3000f, 0.3162f, 0.0224f, 1.0000f, 1.4900f, 0.5400f, 1.0000f, 0.0525f, 0.1620f, { 0.0000f, 0.0000f, 0.0000f }, 0.7682f, 0.0880f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY \ + { 1.0000f, 0.5000f, 0.3162f, 0.3981f, 1.0000f, 1.4900f, 0.6700f, 1.0000f, 0.0730f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.1427f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_MOUNTAINS \ + { 1.0000f, 0.2700f, 0.3162f, 0.0562f, 1.0000f, 1.4900f, 0.2100f, 1.0000f, 0.0407f, 0.3000f, { 0.0000f, 0.0000f, 0.0000f }, 0.1919f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_QUARRY \ + { 1.0000f, 1.0000f, 0.3162f, 0.3162f, 1.0000f, 1.4900f, 0.8300f, 1.0000f, 0.0000f, 0.0610f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0250f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.7000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PLAIN \ + { 1.0000f, 0.2100f, 0.3162f, 0.1000f, 1.0000f, 1.4900f, 0.5000f, 1.0000f, 0.0585f, 0.1790f, { 0.0000f, 0.0000f, 0.0000f }, 0.1089f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PARKINGLOT \ + { 1.0000f, 1.0000f, 0.3162f, 1.0000f, 1.0000f, 1.6500f, 1.5000f, 1.0000f, 0.2082f, 0.0080f, { 0.0000f, 0.0000f, 0.0000f }, 0.2652f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_SEWERPIPE \ + { 0.3071f, 0.8000f, 0.3162f, 0.3162f, 1.0000f, 2.8100f, 0.1400f, 1.0000f, 1.6387f, 0.0140f, { 0.0000f, 0.0000f, 0.0000f }, 3.2471f, 0.0210f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_UNDERWATER \ + { 0.3645f, 1.0000f, 0.3162f, 0.0100f, 1.0000f, 1.4900f, 0.1000f, 1.0000f, 0.5963f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 7.0795f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 1.1800f, 0.3480f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRUGGED \ + { 0.4287f, 0.5000f, 0.3162f, 1.0000f, 1.0000f, 8.3900f, 1.3900f, 1.0000f, 0.8760f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 3.1081f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 1.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DIZZY \ + { 0.3645f, 0.6000f, 0.3162f, 0.6310f, 1.0000f, 17.2300f, 0.5600f, 1.0000f, 0.1392f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.4937f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.8100f, 0.3100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PSYCHOTIC \ + { 0.0625f, 0.5000f, 0.3162f, 0.8404f, 1.0000f, 7.5600f, 0.9100f, 1.0000f, 0.4864f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 2.4378f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 4.0000f, 1.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +/* Castle Presets */ + +#define EFX_REVERB_PRESET_CASTLE_SMALLROOM \ + { 1.0000f, 0.8900f, 0.3162f, 0.3981f, 0.1000f, 1.2200f, 0.8300f, 0.3100f, 0.8913f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_SHORTPASSAGE \ + { 1.0000f, 0.8900f, 0.3162f, 0.3162f, 0.1000f, 2.3200f, 0.8300f, 0.3100f, 0.8913f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_MEDIUMROOM \ + { 1.0000f, 0.9300f, 0.3162f, 0.2818f, 0.1000f, 2.0400f, 0.8300f, 0.4600f, 0.6310f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1550f, 0.0300f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_LARGEROOM \ + { 1.0000f, 0.8200f, 0.3162f, 0.2818f, 0.1259f, 2.5300f, 0.8300f, 0.5000f, 0.4467f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1850f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_LONGPASSAGE \ + { 1.0000f, 0.8900f, 0.3162f, 0.3981f, 0.1000f, 3.4200f, 0.8300f, 0.3100f, 0.8913f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_HALL \ + { 1.0000f, 0.8100f, 0.3162f, 0.2818f, 0.1778f, 3.1400f, 0.7900f, 0.6200f, 0.1778f, 0.0560f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_CUPBOARD \ + { 1.0000f, 0.8900f, 0.3162f, 0.2818f, 0.1000f, 0.6700f, 0.8700f, 0.3100f, 1.4125f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 3.5481f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CASTLE_COURTYARD \ + { 1.0000f, 0.4200f, 0.3162f, 0.4467f, 0.1995f, 2.1300f, 0.6100f, 0.2300f, 0.2239f, 0.1600f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0360f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.3700f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_CASTLE_ALCOVE \ + { 1.0000f, 0.8900f, 0.3162f, 0.5012f, 0.1000f, 1.6400f, 0.8700f, 0.3100f, 1.0000f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 0.1380f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 5168.6001f, 139.5000f, 0.0000f, 0x1 } + +/* Factory Presets */ + +#define EFX_REVERB_PRESET_FACTORY_SMALLROOM \ + { 0.3645f, 0.8200f, 0.3162f, 0.7943f, 0.5012f, 1.7200f, 0.6500f, 1.3100f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.1190f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_SHORTPASSAGE \ + { 0.3645f, 0.6400f, 0.2512f, 0.7943f, 0.5012f, 2.5300f, 0.6500f, 1.3100f, 1.0000f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.1350f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_MEDIUMROOM \ + { 0.4287f, 0.8200f, 0.2512f, 0.7943f, 0.5012f, 2.7600f, 0.6500f, 1.3100f, 0.2818f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1740f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_LARGEROOM \ + { 0.4287f, 0.7500f, 0.2512f, 0.7079f, 0.6310f, 4.2400f, 0.5100f, 1.3100f, 0.1778f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.2310f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_LONGPASSAGE \ + { 0.3645f, 0.6400f, 0.2512f, 0.7943f, 0.5012f, 4.0600f, 0.6500f, 1.3100f, 1.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0370f, { 0.0000f, 0.0000f, 0.0000f }, 0.1350f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_HALL \ + { 0.4287f, 0.7500f, 0.3162f, 0.7079f, 0.6310f, 7.4300f, 0.5100f, 1.3100f, 0.0631f, 0.0730f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_CUPBOARD \ + { 0.3071f, 0.6300f, 0.2512f, 0.7943f, 0.5012f, 0.4900f, 0.6500f, 1.3100f, 1.2589f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.1070f, 0.0700f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_COURTYARD \ + { 0.3071f, 0.5700f, 0.3162f, 0.3162f, 0.6310f, 2.3200f, 0.2900f, 0.5600f, 0.2239f, 0.1400f, { 0.0000f, 0.0000f, 0.0000f }, 0.3981f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2900f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_FACTORY_ALCOVE \ + { 0.3645f, 0.5900f, 0.2512f, 0.7943f, 0.5012f, 3.1400f, 0.6500f, 1.3100f, 1.4125f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.1140f, 0.1000f, 0.2500f, 0.0000f, 0.9943f, 3762.6001f, 362.5000f, 0.0000f, 0x1 } + +/* Ice Palace Presets */ + +#define EFX_REVERB_PRESET_ICEPALACE_SMALLROOM \ + { 1.0000f, 0.8400f, 0.3162f, 0.5623f, 0.2818f, 1.5100f, 1.5300f, 0.2700f, 0.8913f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1640f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_SHORTPASSAGE \ + { 1.0000f, 0.7500f, 0.3162f, 0.5623f, 0.2818f, 1.7900f, 1.4600f, 0.2800f, 0.5012f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.1770f, 0.0900f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_MEDIUMROOM \ + { 1.0000f, 0.8700f, 0.3162f, 0.5623f, 0.4467f, 2.2200f, 1.5300f, 0.3200f, 0.3981f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.1860f, 0.1200f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_LARGEROOM \ + { 1.0000f, 0.8100f, 0.3162f, 0.5623f, 0.4467f, 3.1400f, 1.5300f, 0.3200f, 0.2512f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0270f, { 0.0000f, 0.0000f, 0.0000f }, 0.2140f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_LONGPASSAGE \ + { 1.0000f, 0.7700f, 0.3162f, 0.5623f, 0.3981f, 3.0100f, 1.4600f, 0.2800f, 0.7943f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0250f, { 0.0000f, 0.0000f, 0.0000f }, 0.1860f, 0.0400f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_HALL \ + { 1.0000f, 0.7600f, 0.3162f, 0.4467f, 0.5623f, 5.4900f, 1.5300f, 0.3800f, 0.1122f, 0.0540f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0520f, { 0.0000f, 0.0000f, 0.0000f }, 0.2260f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_CUPBOARD \ + { 1.0000f, 0.8300f, 0.3162f, 0.5012f, 0.2239f, 0.7600f, 1.5300f, 0.2600f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1430f, 0.0800f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_COURTYARD \ + { 1.0000f, 0.5900f, 0.3162f, 0.2818f, 0.3162f, 2.0400f, 1.2000f, 0.3800f, 0.3162f, 0.1730f, { 0.0000f, 0.0000f, 0.0000f }, 0.3162f, 0.0430f, { 0.0000f, 0.0000f, 0.0000f }, 0.2350f, 0.4800f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_ICEPALACE_ALCOVE \ + { 1.0000f, 0.8400f, 0.3162f, 0.5623f, 0.2818f, 2.7600f, 1.4600f, 0.2800f, 1.1220f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1610f, 0.0900f, 0.2500f, 0.0000f, 0.9943f, 12428.5000f, 99.6000f, 0.0000f, 0x1 } + +/* Space Station Presets */ + +#define EFX_REVERB_PRESET_SPACESTATION_SMALLROOM \ + { 0.2109f, 0.7000f, 0.3162f, 0.7079f, 0.8913f, 1.7200f, 0.8200f, 0.5500f, 0.7943f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0130f, { 0.0000f, 0.0000f, 0.0000f }, 0.1880f, 0.2600f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_SHORTPASSAGE \ + { 0.2109f, 0.8700f, 0.3162f, 0.6310f, 0.8913f, 3.5700f, 0.5000f, 0.5500f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.1720f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_MEDIUMROOM \ + { 0.2109f, 0.7500f, 0.3162f, 0.6310f, 0.8913f, 3.0100f, 0.5000f, 0.5500f, 0.3981f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0350f, { 0.0000f, 0.0000f, 0.0000f }, 0.2090f, 0.3100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_LARGEROOM \ + { 0.3645f, 0.8100f, 0.3162f, 0.6310f, 0.8913f, 3.8900f, 0.3800f, 0.6100f, 0.3162f, 0.0560f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0350f, { 0.0000f, 0.0000f, 0.0000f }, 0.2330f, 0.2800f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_LONGPASSAGE \ + { 0.4287f, 0.8200f, 0.3162f, 0.6310f, 0.8913f, 4.6200f, 0.6200f, 0.5500f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0310f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2300f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_HALL \ + { 0.4287f, 0.8700f, 0.3162f, 0.6310f, 0.8913f, 7.1100f, 0.3800f, 0.6100f, 0.1778f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0470f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2500f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_CUPBOARD \ + { 0.1715f, 0.5600f, 0.3162f, 0.7079f, 0.8913f, 0.7900f, 0.8100f, 0.5500f, 1.4125f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.7783f, 0.0180f, { 0.0000f, 0.0000f, 0.0000f }, 0.1810f, 0.3100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPACESTATION_ALCOVE \ + { 0.2109f, 0.7800f, 0.3162f, 0.7079f, 0.8913f, 1.1600f, 0.8100f, 0.5500f, 1.4125f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0180f, { 0.0000f, 0.0000f, 0.0000f }, 0.1920f, 0.2100f, 0.2500f, 0.0000f, 0.9943f, 3316.1001f, 458.2000f, 0.0000f, 0x1 } + +/* Wooden Galleon Presets */ + +#define EFX_REVERB_PRESET_WOODEN_SMALLROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.1122f, 0.3162f, 0.7900f, 0.3200f, 0.8700f, 1.0000f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_SHORTPASSAGE \ + { 1.0000f, 1.0000f, 0.3162f, 0.1259f, 0.3162f, 1.7500f, 0.5000f, 0.8700f, 0.8913f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.6310f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_MEDIUMROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.1000f, 0.2818f, 1.4700f, 0.4200f, 0.8200f, 0.8913f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_LARGEROOM \ + { 1.0000f, 1.0000f, 0.3162f, 0.0891f, 0.2818f, 2.6500f, 0.3300f, 0.8200f, 0.8913f, 0.0660f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_LONGPASSAGE \ + { 1.0000f, 1.0000f, 0.3162f, 0.1000f, 0.3162f, 1.9900f, 0.4000f, 0.7900f, 1.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.4467f, 0.0360f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_HALL \ + { 1.0000f, 1.0000f, 0.3162f, 0.0794f, 0.2818f, 3.4500f, 0.3000f, 0.8200f, 0.8913f, 0.0880f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0630f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_CUPBOARD \ + { 1.0000f, 1.0000f, 0.3162f, 0.1413f, 0.3162f, 0.5600f, 0.4600f, 0.9100f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_COURTYARD \ + { 1.0000f, 0.6500f, 0.3162f, 0.0794f, 0.3162f, 1.7900f, 0.3500f, 0.7900f, 0.5623f, 0.1230f, { 0.0000f, 0.0000f, 0.0000f }, 0.1000f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_WOODEN_ALCOVE \ + { 1.0000f, 1.0000f, 0.3162f, 0.1259f, 0.3162f, 1.2200f, 0.6200f, 0.9100f, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 4705.0000f, 99.6000f, 0.0000f, 0x1 } + +/* Sports Presets */ + +#define EFX_REVERB_PRESET_SPORT_EMPTYSTADIUM \ + { 1.0000f, 1.0000f, 0.3162f, 0.4467f, 0.7943f, 6.2600f, 0.5100f, 1.1000f, 0.0631f, 0.1830f, { 0.0000f, 0.0000f, 0.0000f }, 0.3981f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_SQUASHCOURT \ + { 1.0000f, 0.7500f, 0.3162f, 0.3162f, 0.7943f, 2.2200f, 0.9100f, 1.1600f, 0.4467f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.1260f, 0.1900f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_SMALLSWIMMINGPOOL \ + { 1.0000f, 0.7000f, 0.3162f, 0.7943f, 0.8913f, 2.7600f, 1.2500f, 1.1400f, 0.6310f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1790f, 0.1500f, 0.8950f, 0.1900f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_SPORT_LARGESWIMMINGPOOL \ + { 1.0000f, 0.8200f, 0.3162f, 0.7943f, 1.0000f, 5.4900f, 1.3100f, 1.1400f, 0.4467f, 0.0390f, { 0.0000f, 0.0000f, 0.0000f }, 0.5012f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2220f, 0.5500f, 1.1590f, 0.2100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_SPORT_GYMNASIUM \ + { 1.0000f, 0.8100f, 0.3162f, 0.4467f, 0.8913f, 3.1400f, 1.0600f, 1.3500f, 0.3981f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.5623f, 0.0450f, { 0.0000f, 0.0000f, 0.0000f }, 0.1460f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_FULLSTADIUM \ + { 1.0000f, 1.0000f, 0.3162f, 0.0708f, 0.7943f, 5.2500f, 0.1700f, 0.8000f, 0.1000f, 0.1880f, { 0.0000f, 0.0000f, 0.0000f }, 0.2818f, 0.0380f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SPORT_STADIUMTANNOY \ + { 1.0000f, 0.7800f, 0.3162f, 0.5623f, 0.5012f, 2.5300f, 0.8800f, 0.6800f, 0.2818f, 0.2300f, { 0.0000f, 0.0000f, 0.0000f }, 0.5012f, 0.0630f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +/* Prefab Presets */ + +#define EFX_REVERB_PRESET_PREFAB_WORKSHOP \ + { 0.4287f, 1.0000f, 0.3162f, 0.1413f, 0.3981f, 0.7600f, 1.0000f, 1.0000f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PREFAB_SCHOOLROOM \ + { 0.4022f, 0.6900f, 0.3162f, 0.6310f, 0.5012f, 0.9800f, 0.4500f, 0.1800f, 1.4125f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.0950f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PREFAB_PRACTISEROOM \ + { 0.4022f, 0.8700f, 0.3162f, 0.3981f, 0.5012f, 1.1200f, 0.5600f, 0.1800f, 1.2589f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0110f, { 0.0000f, 0.0000f, 0.0000f }, 0.0950f, 0.1400f, 0.2500f, 0.0000f, 0.9943f, 7176.8999f, 211.2000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PREFAB_OUTHOUSE \ + { 1.0000f, 0.8200f, 0.3162f, 0.1122f, 0.1585f, 1.3800f, 0.3800f, 0.3500f, 0.8913f, 0.0240f, { 0.0000f, 0.0000f, -0.0000f }, 0.6310f, 0.0440f, { 0.0000f, 0.0000f, 0.0000f }, 0.1210f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PREFAB_CARAVAN \ + { 1.0000f, 1.0000f, 0.3162f, 0.0891f, 0.1259f, 0.4300f, 1.5000f, 1.0000f, 1.0000f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 1.9953f, 0.0120f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +/* Dome and Pipe Presets */ + +#define EFX_REVERB_PRESET_DOME_TOMB \ + { 1.0000f, 0.7900f, 0.3162f, 0.3548f, 0.2239f, 4.1800f, 0.2100f, 0.1000f, 0.3868f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 1.6788f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.1770f, 0.1900f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PIPE_SMALL \ + { 1.0000f, 1.0000f, 0.3162f, 0.3548f, 0.2239f, 5.0400f, 0.1000f, 0.1000f, 0.5012f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 2.5119f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DOME_SAINTPAULS \ + { 1.0000f, 0.8700f, 0.3162f, 0.3548f, 0.2239f, 10.4800f, 0.1900f, 0.1000f, 0.1778f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0420f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1200f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PIPE_LONGTHIN \ + { 0.2560f, 0.9100f, 0.3162f, 0.4467f, 0.2818f, 9.2100f, 0.1800f, 0.1000f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_PIPE_LARGE \ + { 1.0000f, 1.0000f, 0.3162f, 0.3548f, 0.2239f, 8.4500f, 0.1000f, 0.1000f, 0.3981f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_PIPE_RESONANT \ + { 0.1373f, 0.9100f, 0.3162f, 0.4467f, 0.2818f, 6.8100f, 0.1800f, 0.1000f, 0.7079f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.0000f, 0.0220f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 20.0000f, 0.0000f, 0x0 } + +/* Outdoors Presets */ + +#define EFX_REVERB_PRESET_OUTDOORS_BACKYARD \ + { 1.0000f, 0.4500f, 0.3162f, 0.2512f, 0.5012f, 1.1200f, 0.3400f, 0.4600f, 0.4467f, 0.0690f, { 0.0000f, 0.0000f, -0.0000f }, 0.7079f, 0.0230f, { 0.0000f, 0.0000f, 0.0000f }, 0.2180f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_ROLLINGPLAINS \ + { 1.0000f, 0.0000f, 0.3162f, 0.0112f, 0.6310f, 2.1300f, 0.2100f, 0.4600f, 0.1778f, 0.3000f, { 0.0000f, 0.0000f, -0.0000f }, 0.4467f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_DEEPCANYON \ + { 1.0000f, 0.7400f, 0.3162f, 0.1778f, 0.6310f, 3.8900f, 0.2100f, 0.4600f, 0.3162f, 0.2230f, { 0.0000f, 0.0000f, -0.0000f }, 0.3548f, 0.0190f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_CREEK \ + { 1.0000f, 0.3500f, 0.3162f, 0.1778f, 0.5012f, 2.1300f, 0.2100f, 0.4600f, 0.3981f, 0.1150f, { 0.0000f, 0.0000f, -0.0000f }, 0.1995f, 0.0310f, { 0.0000f, 0.0000f, 0.0000f }, 0.2180f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 4399.1001f, 242.9000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_OUTDOORS_VALLEY \ + { 1.0000f, 0.2800f, 0.3162f, 0.0282f, 0.1585f, 2.8800f, 0.2600f, 0.3500f, 0.1413f, 0.2630f, { 0.0000f, 0.0000f, -0.0000f }, 0.3981f, 0.1000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.3400f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +/* Mood Presets */ + +#define EFX_REVERB_PRESET_MOOD_HEAVEN \ + { 1.0000f, 0.9400f, 0.3162f, 0.7943f, 0.4467f, 5.0400f, 1.1200f, 0.5600f, 0.2427f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0290f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0800f, 2.7420f, 0.0500f, 0.9977f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_MOOD_HELL \ + { 1.0000f, 0.5700f, 0.3162f, 0.3548f, 0.4467f, 3.5700f, 0.4900f, 2.0000f, 0.0000f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1100f, 0.0400f, 2.1090f, 0.5200f, 0.9943f, 5000.0000f, 139.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_MOOD_MEMORY \ + { 1.0000f, 0.8500f, 0.3162f, 0.6310f, 0.3548f, 4.0600f, 0.8200f, 0.5600f, 0.0398f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.1220f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.4740f, 0.4500f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +/* Driving Presets */ + +#define EFX_REVERB_PRESET_DRIVING_COMMENTATOR \ + { 1.0000f, 0.0000f, 0.3162f, 0.5623f, 0.5012f, 2.4200f, 0.8800f, 0.6800f, 0.1995f, 0.0930f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0170f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 1.0000f, 0.2500f, 0.0000f, 0.9886f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_PITGARAGE \ + { 0.4287f, 0.5900f, 0.3162f, 0.7079f, 0.5623f, 1.7200f, 0.9300f, 0.8700f, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0160f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DRIVING_INCAR_RACER \ + { 0.0832f, 0.8000f, 0.3162f, 1.0000f, 0.7943f, 0.1700f, 2.0000f, 0.4100f, 1.7783f, 0.0070f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0150f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_INCAR_SPORTS \ + { 0.0832f, 0.8000f, 0.3162f, 0.6310f, 1.0000f, 0.1700f, 0.7500f, 0.4100f, 1.0000f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.5623f, 0.0000f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_INCAR_LUXURY \ + { 0.2560f, 1.0000f, 0.3162f, 0.1000f, 0.5012f, 0.1300f, 0.4100f, 0.4600f, 0.7943f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 1.5849f, 0.0100f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10268.2002f, 251.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_DRIVING_FULLGRANDSTAND \ + { 1.0000f, 1.0000f, 0.3162f, 0.2818f, 0.6310f, 3.0100f, 1.3700f, 1.2800f, 0.3548f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 0.1778f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10420.2002f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DRIVING_EMPTYGRANDSTAND \ + { 1.0000f, 1.0000f, 0.3162f, 1.0000f, 0.7943f, 4.6200f, 1.7500f, 1.4000f, 0.2082f, 0.0900f, { 0.0000f, 0.0000f, 0.0000f }, 0.2512f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.0000f, 0.9943f, 10420.2002f, 250.0000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_DRIVING_TUNNEL \ + { 1.0000f, 0.8100f, 0.3162f, 0.3981f, 0.8913f, 3.4200f, 0.9400f, 1.3100f, 0.7079f, 0.0510f, { 0.0000f, 0.0000f, 0.0000f }, 0.7079f, 0.0470f, { 0.0000f, 0.0000f, 0.0000f }, 0.2140f, 0.0500f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 155.3000f, 0.0000f, 0x1 } + +/* City Presets */ + +#define EFX_REVERB_PRESET_CITY_STREETS \ + { 1.0000f, 0.7800f, 0.3162f, 0.7079f, 0.8913f, 1.7900f, 1.1200f, 0.9100f, 0.2818f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 0.1995f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY_SUBWAY \ + { 1.0000f, 0.7400f, 0.3162f, 0.7079f, 0.8913f, 3.0100f, 1.2300f, 0.9100f, 0.7079f, 0.0460f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0280f, { 0.0000f, 0.0000f, 0.0000f }, 0.1250f, 0.2100f, 0.2500f, 0.0000f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY_MUSEUM \ + { 1.0000f, 0.8200f, 0.3162f, 0.1778f, 0.1778f, 3.2800f, 1.4000f, 0.5700f, 0.2512f, 0.0390f, { 0.0000f, 0.0000f, -0.0000f }, 0.8913f, 0.0340f, { 0.0000f, 0.0000f, 0.0000f }, 0.1300f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_CITY_LIBRARY \ + { 1.0000f, 0.8200f, 0.3162f, 0.2818f, 0.0891f, 2.7600f, 0.8900f, 0.4100f, 0.3548f, 0.0290f, { 0.0000f, 0.0000f, -0.0000f }, 0.8913f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 0.1300f, 0.1700f, 0.2500f, 0.0000f, 0.9943f, 2854.3999f, 107.5000f, 0.0000f, 0x0 } + +#define EFX_REVERB_PRESET_CITY_UNDERPASS \ + { 1.0000f, 0.8200f, 0.3162f, 0.4467f, 0.8913f, 3.5700f, 1.1200f, 0.9100f, 0.3981f, 0.0590f, { 0.0000f, 0.0000f, 0.0000f }, 0.8913f, 0.0370f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.1400f, 0.2500f, 0.0000f, 0.9920f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CITY_ABANDONED \ + { 1.0000f, 0.6900f, 0.3162f, 0.7943f, 0.8913f, 3.2800f, 1.1700f, 0.9100f, 0.4467f, 0.0440f, { 0.0000f, 0.0000f, 0.0000f }, 0.2818f, 0.0240f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.2000f, 0.2500f, 0.0000f, 0.9966f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +/* Misc. Presets */ + +#define EFX_REVERB_PRESET_DUSTYROOM \ + { 0.3645f, 0.5600f, 0.3162f, 0.7943f, 0.7079f, 1.7900f, 0.3800f, 0.2100f, 0.5012f, 0.0020f, { 0.0000f, 0.0000f, 0.0000f }, 1.2589f, 0.0060f, { 0.0000f, 0.0000f, 0.0000f }, 0.2020f, 0.0500f, 0.2500f, 0.0000f, 0.9886f, 13046.0000f, 163.3000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_CHAPEL \ + { 1.0000f, 0.8400f, 0.3162f, 0.5623f, 1.0000f, 4.6200f, 0.6400f, 1.2300f, 0.4467f, 0.0320f, { 0.0000f, 0.0000f, 0.0000f }, 0.7943f, 0.0490f, { 0.0000f, 0.0000f, 0.0000f }, 0.2500f, 0.0000f, 0.2500f, 0.1100f, 0.9943f, 5000.0000f, 250.0000f, 0.0000f, 0x1 } + +#define EFX_REVERB_PRESET_SMALLWATERROOM \ + { 1.0000f, 0.7000f, 0.3162f, 0.4477f, 1.0000f, 1.5100f, 1.2500f, 1.1400f, 0.8913f, 0.0200f, { 0.0000f, 0.0000f, 0.0000f }, 1.4125f, 0.0300f, { 0.0000f, 0.0000f, 0.0000f }, 0.1790f, 0.1500f, 0.8950f, 0.1900f, 0.9920f, 5000.0000f, 250.0000f, 0.0000f, 0x0 } + +#endif /* EFX_PRESETS_H */ diff --git a/Source/ThirdParty/OpenAL/efx.h b/Source/ThirdParty/OpenAL/efx.h new file mode 100644 index 000000000..57766983f --- /dev/null +++ b/Source/ThirdParty/OpenAL/efx.h @@ -0,0 +1,761 @@ +#ifndef AL_EFX_H +#define AL_EFX_H + + +#include "alc.h" +#include "al.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ALC_EXT_EFX_NAME "ALC_EXT_EFX" + +#define ALC_EFX_MAJOR_VERSION 0x20001 +#define ALC_EFX_MINOR_VERSION 0x20002 +#define ALC_MAX_AUXILIARY_SENDS 0x20003 + + +/* Listener properties. */ +#define AL_METERS_PER_UNIT 0x20004 + +/* Source properties. */ +#define AL_DIRECT_FILTER 0x20005 +#define AL_AUXILIARY_SEND_FILTER 0x20006 +#define AL_AIR_ABSORPTION_FACTOR 0x20007 +#define AL_ROOM_ROLLOFF_FACTOR 0x20008 +#define AL_CONE_OUTER_GAINHF 0x20009 +#define AL_DIRECT_FILTER_GAINHF_AUTO 0x2000A +#define AL_AUXILIARY_SEND_FILTER_GAIN_AUTO 0x2000B +#define AL_AUXILIARY_SEND_FILTER_GAINHF_AUTO 0x2000C + + +/* Effect properties. */ + +/* Reverb effect parameters */ +#define AL_REVERB_DENSITY 0x0001 +#define AL_REVERB_DIFFUSION 0x0002 +#define AL_REVERB_GAIN 0x0003 +#define AL_REVERB_GAINHF 0x0004 +#define AL_REVERB_DECAY_TIME 0x0005 +#define AL_REVERB_DECAY_HFRATIO 0x0006 +#define AL_REVERB_REFLECTIONS_GAIN 0x0007 +#define AL_REVERB_REFLECTIONS_DELAY 0x0008 +#define AL_REVERB_LATE_REVERB_GAIN 0x0009 +#define AL_REVERB_LATE_REVERB_DELAY 0x000A +#define AL_REVERB_AIR_ABSORPTION_GAINHF 0x000B +#define AL_REVERB_ROOM_ROLLOFF_FACTOR 0x000C +#define AL_REVERB_DECAY_HFLIMIT 0x000D + +/* EAX Reverb effect parameters */ +#define AL_EAXREVERB_DENSITY 0x0001 +#define AL_EAXREVERB_DIFFUSION 0x0002 +#define AL_EAXREVERB_GAIN 0x0003 +#define AL_EAXREVERB_GAINHF 0x0004 +#define AL_EAXREVERB_GAINLF 0x0005 +#define AL_EAXREVERB_DECAY_TIME 0x0006 +#define AL_EAXREVERB_DECAY_HFRATIO 0x0007 +#define AL_EAXREVERB_DECAY_LFRATIO 0x0008 +#define AL_EAXREVERB_REFLECTIONS_GAIN 0x0009 +#define AL_EAXREVERB_REFLECTIONS_DELAY 0x000A +#define AL_EAXREVERB_REFLECTIONS_PAN 0x000B +#define AL_EAXREVERB_LATE_REVERB_GAIN 0x000C +#define AL_EAXREVERB_LATE_REVERB_DELAY 0x000D +#define AL_EAXREVERB_LATE_REVERB_PAN 0x000E +#define AL_EAXREVERB_ECHO_TIME 0x000F +#define AL_EAXREVERB_ECHO_DEPTH 0x0010 +#define AL_EAXREVERB_MODULATION_TIME 0x0011 +#define AL_EAXREVERB_MODULATION_DEPTH 0x0012 +#define AL_EAXREVERB_AIR_ABSORPTION_GAINHF 0x0013 +#define AL_EAXREVERB_HFREFERENCE 0x0014 +#define AL_EAXREVERB_LFREFERENCE 0x0015 +#define AL_EAXREVERB_ROOM_ROLLOFF_FACTOR 0x0016 +#define AL_EAXREVERB_DECAY_HFLIMIT 0x0017 + +/* Chorus effect parameters */ +#define AL_CHORUS_WAVEFORM 0x0001 +#define AL_CHORUS_PHASE 0x0002 +#define AL_CHORUS_RATE 0x0003 +#define AL_CHORUS_DEPTH 0x0004 +#define AL_CHORUS_FEEDBACK 0x0005 +#define AL_CHORUS_DELAY 0x0006 + +/* Distortion effect parameters */ +#define AL_DISTORTION_EDGE 0x0001 +#define AL_DISTORTION_GAIN 0x0002 +#define AL_DISTORTION_LOWPASS_CUTOFF 0x0003 +#define AL_DISTORTION_EQCENTER 0x0004 +#define AL_DISTORTION_EQBANDWIDTH 0x0005 + +/* Echo effect parameters */ +#define AL_ECHO_DELAY 0x0001 +#define AL_ECHO_LRDELAY 0x0002 +#define AL_ECHO_DAMPING 0x0003 +#define AL_ECHO_FEEDBACK 0x0004 +#define AL_ECHO_SPREAD 0x0005 + +/* Flanger effect parameters */ +#define AL_FLANGER_WAVEFORM 0x0001 +#define AL_FLANGER_PHASE 0x0002 +#define AL_FLANGER_RATE 0x0003 +#define AL_FLANGER_DEPTH 0x0004 +#define AL_FLANGER_FEEDBACK 0x0005 +#define AL_FLANGER_DELAY 0x0006 + +/* Frequency shifter effect parameters */ +#define AL_FREQUENCY_SHIFTER_FREQUENCY 0x0001 +#define AL_FREQUENCY_SHIFTER_LEFT_DIRECTION 0x0002 +#define AL_FREQUENCY_SHIFTER_RIGHT_DIRECTION 0x0003 + +/* Vocal morpher effect parameters */ +#define AL_VOCAL_MORPHER_PHONEMEA 0x0001 +#define AL_VOCAL_MORPHER_PHONEMEA_COARSE_TUNING 0x0002 +#define AL_VOCAL_MORPHER_PHONEMEB 0x0003 +#define AL_VOCAL_MORPHER_PHONEMEB_COARSE_TUNING 0x0004 +#define AL_VOCAL_MORPHER_WAVEFORM 0x0005 +#define AL_VOCAL_MORPHER_RATE 0x0006 + +/* Pitchshifter effect parameters */ +#define AL_PITCH_SHIFTER_COARSE_TUNE 0x0001 +#define AL_PITCH_SHIFTER_FINE_TUNE 0x0002 + +/* Ringmodulator effect parameters */ +#define AL_RING_MODULATOR_FREQUENCY 0x0001 +#define AL_RING_MODULATOR_HIGHPASS_CUTOFF 0x0002 +#define AL_RING_MODULATOR_WAVEFORM 0x0003 + +/* Autowah effect parameters */ +#define AL_AUTOWAH_ATTACK_TIME 0x0001 +#define AL_AUTOWAH_RELEASE_TIME 0x0002 +#define AL_AUTOWAH_RESONANCE 0x0003 +#define AL_AUTOWAH_PEAK_GAIN 0x0004 + +/* Compressor effect parameters */ +#define AL_COMPRESSOR_ONOFF 0x0001 + +/* Equalizer effect parameters */ +#define AL_EQUALIZER_LOW_GAIN 0x0001 +#define AL_EQUALIZER_LOW_CUTOFF 0x0002 +#define AL_EQUALIZER_MID1_GAIN 0x0003 +#define AL_EQUALIZER_MID1_CENTER 0x0004 +#define AL_EQUALIZER_MID1_WIDTH 0x0005 +#define AL_EQUALIZER_MID2_GAIN 0x0006 +#define AL_EQUALIZER_MID2_CENTER 0x0007 +#define AL_EQUALIZER_MID2_WIDTH 0x0008 +#define AL_EQUALIZER_HIGH_GAIN 0x0009 +#define AL_EQUALIZER_HIGH_CUTOFF 0x000A + +/* Effect type */ +#define AL_EFFECT_FIRST_PARAMETER 0x0000 +#define AL_EFFECT_LAST_PARAMETER 0x8000 +#define AL_EFFECT_TYPE 0x8001 + +/* Effect types, used with the AL_EFFECT_TYPE property */ +#define AL_EFFECT_NULL 0x0000 +#define AL_EFFECT_REVERB 0x0001 +#define AL_EFFECT_CHORUS 0x0002 +#define AL_EFFECT_DISTORTION 0x0003 +#define AL_EFFECT_ECHO 0x0004 +#define AL_EFFECT_FLANGER 0x0005 +#define AL_EFFECT_FREQUENCY_SHIFTER 0x0006 +#define AL_EFFECT_VOCAL_MORPHER 0x0007 +#define AL_EFFECT_PITCH_SHIFTER 0x0008 +#define AL_EFFECT_RING_MODULATOR 0x0009 +#define AL_EFFECT_AUTOWAH 0x000A +#define AL_EFFECT_COMPRESSOR 0x000B +#define AL_EFFECT_EQUALIZER 0x000C +#define AL_EFFECT_EAXREVERB 0x8000 + +/* Auxiliary Effect Slot properties. */ +#define AL_EFFECTSLOT_EFFECT 0x0001 +#define AL_EFFECTSLOT_GAIN 0x0002 +#define AL_EFFECTSLOT_AUXILIARY_SEND_AUTO 0x0003 + +/* NULL Auxiliary Slot ID to disable a source send. */ +#define AL_EFFECTSLOT_NULL 0x0000 + + +/* Filter properties. */ + +/* Lowpass filter parameters */ +#define AL_LOWPASS_GAIN 0x0001 +#define AL_LOWPASS_GAINHF 0x0002 + +/* Highpass filter parameters */ +#define AL_HIGHPASS_GAIN 0x0001 +#define AL_HIGHPASS_GAINLF 0x0002 + +/* Bandpass filter parameters */ +#define AL_BANDPASS_GAIN 0x0001 +#define AL_BANDPASS_GAINLF 0x0002 +#define AL_BANDPASS_GAINHF 0x0003 + +/* Filter type */ +#define AL_FILTER_FIRST_PARAMETER 0x0000 +#define AL_FILTER_LAST_PARAMETER 0x8000 +#define AL_FILTER_TYPE 0x8001 + +/* Filter types, used with the AL_FILTER_TYPE property */ +#define AL_FILTER_NULL 0x0000 +#define AL_FILTER_LOWPASS 0x0001 +#define AL_FILTER_HIGHPASS 0x0002 +#define AL_FILTER_BANDPASS 0x0003 + + +/* Effect object function types. */ +typedef void (AL_APIENTRY *LPALGENEFFECTS)(ALsizei, ALuint*); +typedef void (AL_APIENTRY *LPALDELETEEFFECTS)(ALsizei, const ALuint*); +typedef ALboolean (AL_APIENTRY *LPALISEFFECT)(ALuint); +typedef void (AL_APIENTRY *LPALEFFECTI)(ALuint, ALenum, ALint); +typedef void (AL_APIENTRY *LPALEFFECTIV)(ALuint, ALenum, const ALint*); +typedef void (AL_APIENTRY *LPALEFFECTF)(ALuint, ALenum, ALfloat); +typedef void (AL_APIENTRY *LPALEFFECTFV)(ALuint, ALenum, const ALfloat*); +typedef void (AL_APIENTRY *LPALGETEFFECTI)(ALuint, ALenum, ALint*); +typedef void (AL_APIENTRY *LPALGETEFFECTIV)(ALuint, ALenum, ALint*); +typedef void (AL_APIENTRY *LPALGETEFFECTF)(ALuint, ALenum, ALfloat*); +typedef void (AL_APIENTRY *LPALGETEFFECTFV)(ALuint, ALenum, ALfloat*); + +/* Filter object function types. */ +typedef void (AL_APIENTRY *LPALGENFILTERS)(ALsizei, ALuint*); +typedef void (AL_APIENTRY *LPALDELETEFILTERS)(ALsizei, const ALuint*); +typedef ALboolean (AL_APIENTRY *LPALISFILTER)(ALuint); +typedef void (AL_APIENTRY *LPALFILTERI)(ALuint, ALenum, ALint); +typedef void (AL_APIENTRY *LPALFILTERIV)(ALuint, ALenum, const ALint*); +typedef void (AL_APIENTRY *LPALFILTERF)(ALuint, ALenum, ALfloat); +typedef void (AL_APIENTRY *LPALFILTERFV)(ALuint, ALenum, const ALfloat*); +typedef void (AL_APIENTRY *LPALGETFILTERI)(ALuint, ALenum, ALint*); +typedef void (AL_APIENTRY *LPALGETFILTERIV)(ALuint, ALenum, ALint*); +typedef void (AL_APIENTRY *LPALGETFILTERF)(ALuint, ALenum, ALfloat*); +typedef void (AL_APIENTRY *LPALGETFILTERFV)(ALuint, ALenum, ALfloat*); + +/* Auxiliary Effect Slot object function types. */ +typedef void (AL_APIENTRY *LPALGENAUXILIARYEFFECTSLOTS)(ALsizei, ALuint*); +typedef void (AL_APIENTRY *LPALDELETEAUXILIARYEFFECTSLOTS)(ALsizei, const ALuint*); +typedef ALboolean (AL_APIENTRY *LPALISAUXILIARYEFFECTSLOT)(ALuint); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, const ALint*); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat); +typedef void (AL_APIENTRY *LPALAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, const ALfloat*); +typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTI)(ALuint, ALenum, ALint*); +typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTIV)(ALuint, ALenum, ALint*); +typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTF)(ALuint, ALenum, ALfloat*); +typedef void (AL_APIENTRY *LPALGETAUXILIARYEFFECTSLOTFV)(ALuint, ALenum, ALfloat*); + +#ifdef AL_ALEXT_PROTOTYPES +AL_API ALvoid AL_APIENTRY alGenEffects(ALsizei n, ALuint *effects); +AL_API ALvoid AL_APIENTRY alDeleteEffects(ALsizei n, const ALuint *effects); +AL_API ALboolean AL_APIENTRY alIsEffect(ALuint effect); +AL_API ALvoid AL_APIENTRY alEffecti(ALuint effect, ALenum param, ALint iValue); +AL_API ALvoid AL_APIENTRY alEffectiv(ALuint effect, ALenum param, const ALint *piValues); +AL_API ALvoid AL_APIENTRY alEffectf(ALuint effect, ALenum param, ALfloat flValue); +AL_API ALvoid AL_APIENTRY alEffectfv(ALuint effect, ALenum param, const ALfloat *pflValues); +AL_API ALvoid AL_APIENTRY alGetEffecti(ALuint effect, ALenum param, ALint *piValue); +AL_API ALvoid AL_APIENTRY alGetEffectiv(ALuint effect, ALenum param, ALint *piValues); +AL_API ALvoid AL_APIENTRY alGetEffectf(ALuint effect, ALenum param, ALfloat *pflValue); +AL_API ALvoid AL_APIENTRY alGetEffectfv(ALuint effect, ALenum param, ALfloat *pflValues); + +AL_API ALvoid AL_APIENTRY alGenFilters(ALsizei n, ALuint *filters); +AL_API ALvoid AL_APIENTRY alDeleteFilters(ALsizei n, const ALuint *filters); +AL_API ALboolean AL_APIENTRY alIsFilter(ALuint filter); +AL_API ALvoid AL_APIENTRY alFilteri(ALuint filter, ALenum param, ALint iValue); +AL_API ALvoid AL_APIENTRY alFilteriv(ALuint filter, ALenum param, const ALint *piValues); +AL_API ALvoid AL_APIENTRY alFilterf(ALuint filter, ALenum param, ALfloat flValue); +AL_API ALvoid AL_APIENTRY alFilterfv(ALuint filter, ALenum param, const ALfloat *pflValues); +AL_API ALvoid AL_APIENTRY alGetFilteri(ALuint filter, ALenum param, ALint *piValue); +AL_API ALvoid AL_APIENTRY alGetFilteriv(ALuint filter, ALenum param, ALint *piValues); +AL_API ALvoid AL_APIENTRY alGetFilterf(ALuint filter, ALenum param, ALfloat *pflValue); +AL_API ALvoid AL_APIENTRY alGetFilterfv(ALuint filter, ALenum param, ALfloat *pflValues); + +AL_API ALvoid AL_APIENTRY alGenAuxiliaryEffectSlots(ALsizei n, ALuint *effectslots); +AL_API ALvoid AL_APIENTRY alDeleteAuxiliaryEffectSlots(ALsizei n, const ALuint *effectslots); +AL_API ALboolean AL_APIENTRY alIsAuxiliaryEffectSlot(ALuint effectslot); +AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint iValue); +AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, const ALint *piValues); +AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat flValue); +AL_API ALvoid AL_APIENTRY alAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, const ALfloat *pflValues); +AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSloti(ALuint effectslot, ALenum param, ALint *piValue); +AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotiv(ALuint effectslot, ALenum param, ALint *piValues); +AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotf(ALuint effectslot, ALenum param, ALfloat *pflValue); +AL_API ALvoid AL_APIENTRY alGetAuxiliaryEffectSlotfv(ALuint effectslot, ALenum param, ALfloat *pflValues); +#endif + +/* Filter ranges and defaults. */ + +/* Lowpass filter */ +#define AL_LOWPASS_MIN_GAIN (0.0f) +#define AL_LOWPASS_MAX_GAIN (1.0f) +#define AL_LOWPASS_DEFAULT_GAIN (1.0f) + +#define AL_LOWPASS_MIN_GAINHF (0.0f) +#define AL_LOWPASS_MAX_GAINHF (1.0f) +#define AL_LOWPASS_DEFAULT_GAINHF (1.0f) + +/* Highpass filter */ +#define AL_HIGHPASS_MIN_GAIN (0.0f) +#define AL_HIGHPASS_MAX_GAIN (1.0f) +#define AL_HIGHPASS_DEFAULT_GAIN (1.0f) + +#define AL_HIGHPASS_MIN_GAINLF (0.0f) +#define AL_HIGHPASS_MAX_GAINLF (1.0f) +#define AL_HIGHPASS_DEFAULT_GAINLF (1.0f) + +/* Bandpass filter */ +#define AL_BANDPASS_MIN_GAIN (0.0f) +#define AL_BANDPASS_MAX_GAIN (1.0f) +#define AL_BANDPASS_DEFAULT_GAIN (1.0f) + +#define AL_BANDPASS_MIN_GAINHF (0.0f) +#define AL_BANDPASS_MAX_GAINHF (1.0f) +#define AL_BANDPASS_DEFAULT_GAINHF (1.0f) + +#define AL_BANDPASS_MIN_GAINLF (0.0f) +#define AL_BANDPASS_MAX_GAINLF (1.0f) +#define AL_BANDPASS_DEFAULT_GAINLF (1.0f) + + +/* Effect parameter ranges and defaults. */ + +/* Standard reverb effect */ +#define AL_REVERB_MIN_DENSITY (0.0f) +#define AL_REVERB_MAX_DENSITY (1.0f) +#define AL_REVERB_DEFAULT_DENSITY (1.0f) + +#define AL_REVERB_MIN_DIFFUSION (0.0f) +#define AL_REVERB_MAX_DIFFUSION (1.0f) +#define AL_REVERB_DEFAULT_DIFFUSION (1.0f) + +#define AL_REVERB_MIN_GAIN (0.0f) +#define AL_REVERB_MAX_GAIN (1.0f) +#define AL_REVERB_DEFAULT_GAIN (0.32f) + +#define AL_REVERB_MIN_GAINHF (0.0f) +#define AL_REVERB_MAX_GAINHF (1.0f) +#define AL_REVERB_DEFAULT_GAINHF (0.89f) + +#define AL_REVERB_MIN_DECAY_TIME (0.1f) +#define AL_REVERB_MAX_DECAY_TIME (20.0f) +#define AL_REVERB_DEFAULT_DECAY_TIME (1.49f) + +#define AL_REVERB_MIN_DECAY_HFRATIO (0.1f) +#define AL_REVERB_MAX_DECAY_HFRATIO (2.0f) +#define AL_REVERB_DEFAULT_DECAY_HFRATIO (0.83f) + +#define AL_REVERB_MIN_REFLECTIONS_GAIN (0.0f) +#define AL_REVERB_MAX_REFLECTIONS_GAIN (3.16f) +#define AL_REVERB_DEFAULT_REFLECTIONS_GAIN (0.05f) + +#define AL_REVERB_MIN_REFLECTIONS_DELAY (0.0f) +#define AL_REVERB_MAX_REFLECTIONS_DELAY (0.3f) +#define AL_REVERB_DEFAULT_REFLECTIONS_DELAY (0.007f) + +#define AL_REVERB_MIN_LATE_REVERB_GAIN (0.0f) +#define AL_REVERB_MAX_LATE_REVERB_GAIN (10.0f) +#define AL_REVERB_DEFAULT_LATE_REVERB_GAIN (1.26f) + +#define AL_REVERB_MIN_LATE_REVERB_DELAY (0.0f) +#define AL_REVERB_MAX_LATE_REVERB_DELAY (0.1f) +#define AL_REVERB_DEFAULT_LATE_REVERB_DELAY (0.011f) + +#define AL_REVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f) +#define AL_REVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f) +#define AL_REVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f) + +#define AL_REVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f) +#define AL_REVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f) +#define AL_REVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f) + +#define AL_REVERB_MIN_DECAY_HFLIMIT AL_FALSE +#define AL_REVERB_MAX_DECAY_HFLIMIT AL_TRUE +#define AL_REVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE + +/* EAX reverb effect */ +#define AL_EAXREVERB_MIN_DENSITY (0.0f) +#define AL_EAXREVERB_MAX_DENSITY (1.0f) +#define AL_EAXREVERB_DEFAULT_DENSITY (1.0f) + +#define AL_EAXREVERB_MIN_DIFFUSION (0.0f) +#define AL_EAXREVERB_MAX_DIFFUSION (1.0f) +#define AL_EAXREVERB_DEFAULT_DIFFUSION (1.0f) + +#define AL_EAXREVERB_MIN_GAIN (0.0f) +#define AL_EAXREVERB_MAX_GAIN (1.0f) +#define AL_EAXREVERB_DEFAULT_GAIN (0.32f) + +#define AL_EAXREVERB_MIN_GAINHF (0.0f) +#define AL_EAXREVERB_MAX_GAINHF (1.0f) +#define AL_EAXREVERB_DEFAULT_GAINHF (0.89f) + +#define AL_EAXREVERB_MIN_GAINLF (0.0f) +#define AL_EAXREVERB_MAX_GAINLF (1.0f) +#define AL_EAXREVERB_DEFAULT_GAINLF (1.0f) + +#define AL_EAXREVERB_MIN_DECAY_TIME (0.1f) +#define AL_EAXREVERB_MAX_DECAY_TIME (20.0f) +#define AL_EAXREVERB_DEFAULT_DECAY_TIME (1.49f) + +#define AL_EAXREVERB_MIN_DECAY_HFRATIO (0.1f) +#define AL_EAXREVERB_MAX_DECAY_HFRATIO (2.0f) +#define AL_EAXREVERB_DEFAULT_DECAY_HFRATIO (0.83f) + +#define AL_EAXREVERB_MIN_DECAY_LFRATIO (0.1f) +#define AL_EAXREVERB_MAX_DECAY_LFRATIO (2.0f) +#define AL_EAXREVERB_DEFAULT_DECAY_LFRATIO (1.0f) + +#define AL_EAXREVERB_MIN_REFLECTIONS_GAIN (0.0f) +#define AL_EAXREVERB_MAX_REFLECTIONS_GAIN (3.16f) +#define AL_EAXREVERB_DEFAULT_REFLECTIONS_GAIN (0.05f) + +#define AL_EAXREVERB_MIN_REFLECTIONS_DELAY (0.0f) +#define AL_EAXREVERB_MAX_REFLECTIONS_DELAY (0.3f) +#define AL_EAXREVERB_DEFAULT_REFLECTIONS_DELAY (0.007f) + +#define AL_EAXREVERB_DEFAULT_REFLECTIONS_PAN_XYZ (0.0f) + +#define AL_EAXREVERB_MIN_LATE_REVERB_GAIN (0.0f) +#define AL_EAXREVERB_MAX_LATE_REVERB_GAIN (10.0f) +#define AL_EAXREVERB_DEFAULT_LATE_REVERB_GAIN (1.26f) + +#define AL_EAXREVERB_MIN_LATE_REVERB_DELAY (0.0f) +#define AL_EAXREVERB_MAX_LATE_REVERB_DELAY (0.1f) +#define AL_EAXREVERB_DEFAULT_LATE_REVERB_DELAY (0.011f) + +#define AL_EAXREVERB_DEFAULT_LATE_REVERB_PAN_XYZ (0.0f) + +#define AL_EAXREVERB_MIN_ECHO_TIME (0.075f) +#define AL_EAXREVERB_MAX_ECHO_TIME (0.25f) +#define AL_EAXREVERB_DEFAULT_ECHO_TIME (0.25f) + +#define AL_EAXREVERB_MIN_ECHO_DEPTH (0.0f) +#define AL_EAXREVERB_MAX_ECHO_DEPTH (1.0f) +#define AL_EAXREVERB_DEFAULT_ECHO_DEPTH (0.0f) + +#define AL_EAXREVERB_MIN_MODULATION_TIME (0.04f) +#define AL_EAXREVERB_MAX_MODULATION_TIME (4.0f) +#define AL_EAXREVERB_DEFAULT_MODULATION_TIME (0.25f) + +#define AL_EAXREVERB_MIN_MODULATION_DEPTH (0.0f) +#define AL_EAXREVERB_MAX_MODULATION_DEPTH (1.0f) +#define AL_EAXREVERB_DEFAULT_MODULATION_DEPTH (0.0f) + +#define AL_EAXREVERB_MIN_AIR_ABSORPTION_GAINHF (0.892f) +#define AL_EAXREVERB_MAX_AIR_ABSORPTION_GAINHF (1.0f) +#define AL_EAXREVERB_DEFAULT_AIR_ABSORPTION_GAINHF (0.994f) + +#define AL_EAXREVERB_MIN_HFREFERENCE (1000.0f) +#define AL_EAXREVERB_MAX_HFREFERENCE (20000.0f) +#define AL_EAXREVERB_DEFAULT_HFREFERENCE (5000.0f) + +#define AL_EAXREVERB_MIN_LFREFERENCE (20.0f) +#define AL_EAXREVERB_MAX_LFREFERENCE (1000.0f) +#define AL_EAXREVERB_DEFAULT_LFREFERENCE (250.0f) + +#define AL_EAXREVERB_MIN_ROOM_ROLLOFF_FACTOR (0.0f) +#define AL_EAXREVERB_MAX_ROOM_ROLLOFF_FACTOR (10.0f) +#define AL_EAXREVERB_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f) + +#define AL_EAXREVERB_MIN_DECAY_HFLIMIT AL_FALSE +#define AL_EAXREVERB_MAX_DECAY_HFLIMIT AL_TRUE +#define AL_EAXREVERB_DEFAULT_DECAY_HFLIMIT AL_TRUE + +/* Chorus effect */ +#define AL_CHORUS_WAVEFORM_SINUSOID (0) +#define AL_CHORUS_WAVEFORM_TRIANGLE (1) + +#define AL_CHORUS_MIN_WAVEFORM (0) +#define AL_CHORUS_MAX_WAVEFORM (1) +#define AL_CHORUS_DEFAULT_WAVEFORM (1) + +#define AL_CHORUS_MIN_PHASE (-180) +#define AL_CHORUS_MAX_PHASE (180) +#define AL_CHORUS_DEFAULT_PHASE (90) + +#define AL_CHORUS_MIN_RATE (0.0f) +#define AL_CHORUS_MAX_RATE (10.0f) +#define AL_CHORUS_DEFAULT_RATE (1.1f) + +#define AL_CHORUS_MIN_DEPTH (0.0f) +#define AL_CHORUS_MAX_DEPTH (1.0f) +#define AL_CHORUS_DEFAULT_DEPTH (0.1f) + +#define AL_CHORUS_MIN_FEEDBACK (-1.0f) +#define AL_CHORUS_MAX_FEEDBACK (1.0f) +#define AL_CHORUS_DEFAULT_FEEDBACK (0.25f) + +#define AL_CHORUS_MIN_DELAY (0.0f) +#define AL_CHORUS_MAX_DELAY (0.016f) +#define AL_CHORUS_DEFAULT_DELAY (0.016f) + +/* Distortion effect */ +#define AL_DISTORTION_MIN_EDGE (0.0f) +#define AL_DISTORTION_MAX_EDGE (1.0f) +#define AL_DISTORTION_DEFAULT_EDGE (0.2f) + +#define AL_DISTORTION_MIN_GAIN (0.01f) +#define AL_DISTORTION_MAX_GAIN (1.0f) +#define AL_DISTORTION_DEFAULT_GAIN (0.05f) + +#define AL_DISTORTION_MIN_LOWPASS_CUTOFF (80.0f) +#define AL_DISTORTION_MAX_LOWPASS_CUTOFF (24000.0f) +#define AL_DISTORTION_DEFAULT_LOWPASS_CUTOFF (8000.0f) + +#define AL_DISTORTION_MIN_EQCENTER (80.0f) +#define AL_DISTORTION_MAX_EQCENTER (24000.0f) +#define AL_DISTORTION_DEFAULT_EQCENTER (3600.0f) + +#define AL_DISTORTION_MIN_EQBANDWIDTH (80.0f) +#define AL_DISTORTION_MAX_EQBANDWIDTH (24000.0f) +#define AL_DISTORTION_DEFAULT_EQBANDWIDTH (3600.0f) + +/* Echo effect */ +#define AL_ECHO_MIN_DELAY (0.0f) +#define AL_ECHO_MAX_DELAY (0.207f) +#define AL_ECHO_DEFAULT_DELAY (0.1f) + +#define AL_ECHO_MIN_LRDELAY (0.0f) +#define AL_ECHO_MAX_LRDELAY (0.404f) +#define AL_ECHO_DEFAULT_LRDELAY (0.1f) + +#define AL_ECHO_MIN_DAMPING (0.0f) +#define AL_ECHO_MAX_DAMPING (0.99f) +#define AL_ECHO_DEFAULT_DAMPING (0.5f) + +#define AL_ECHO_MIN_FEEDBACK (0.0f) +#define AL_ECHO_MAX_FEEDBACK (1.0f) +#define AL_ECHO_DEFAULT_FEEDBACK (0.5f) + +#define AL_ECHO_MIN_SPREAD (-1.0f) +#define AL_ECHO_MAX_SPREAD (1.0f) +#define AL_ECHO_DEFAULT_SPREAD (-1.0f) + +/* Flanger effect */ +#define AL_FLANGER_WAVEFORM_SINUSOID (0) +#define AL_FLANGER_WAVEFORM_TRIANGLE (1) + +#define AL_FLANGER_MIN_WAVEFORM (0) +#define AL_FLANGER_MAX_WAVEFORM (1) +#define AL_FLANGER_DEFAULT_WAVEFORM (1) + +#define AL_FLANGER_MIN_PHASE (-180) +#define AL_FLANGER_MAX_PHASE (180) +#define AL_FLANGER_DEFAULT_PHASE (0) + +#define AL_FLANGER_MIN_RATE (0.0f) +#define AL_FLANGER_MAX_RATE (10.0f) +#define AL_FLANGER_DEFAULT_RATE (0.27f) + +#define AL_FLANGER_MIN_DEPTH (0.0f) +#define AL_FLANGER_MAX_DEPTH (1.0f) +#define AL_FLANGER_DEFAULT_DEPTH (1.0f) + +#define AL_FLANGER_MIN_FEEDBACK (-1.0f) +#define AL_FLANGER_MAX_FEEDBACK (1.0f) +#define AL_FLANGER_DEFAULT_FEEDBACK (-0.5f) + +#define AL_FLANGER_MIN_DELAY (0.0f) +#define AL_FLANGER_MAX_DELAY (0.004f) +#define AL_FLANGER_DEFAULT_DELAY (0.002f) + +/* Frequency shifter effect */ +#define AL_FREQUENCY_SHIFTER_MIN_FREQUENCY (0.0f) +#define AL_FREQUENCY_SHIFTER_MAX_FREQUENCY (24000.0f) +#define AL_FREQUENCY_SHIFTER_DEFAULT_FREQUENCY (0.0f) + +#define AL_FREQUENCY_SHIFTER_MIN_LEFT_DIRECTION (0) +#define AL_FREQUENCY_SHIFTER_MAX_LEFT_DIRECTION (2) +#define AL_FREQUENCY_SHIFTER_DEFAULT_LEFT_DIRECTION (0) + +#define AL_FREQUENCY_SHIFTER_DIRECTION_DOWN (0) +#define AL_FREQUENCY_SHIFTER_DIRECTION_UP (1) +#define AL_FREQUENCY_SHIFTER_DIRECTION_OFF (2) + +#define AL_FREQUENCY_SHIFTER_MIN_RIGHT_DIRECTION (0) +#define AL_FREQUENCY_SHIFTER_MAX_RIGHT_DIRECTION (2) +#define AL_FREQUENCY_SHIFTER_DEFAULT_RIGHT_DIRECTION (0) + +/* Vocal morpher effect */ +#define AL_VOCAL_MORPHER_MIN_PHONEMEA (0) +#define AL_VOCAL_MORPHER_MAX_PHONEMEA (29) +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA (0) + +#define AL_VOCAL_MORPHER_MIN_PHONEMEA_COARSE_TUNING (-24) +#define AL_VOCAL_MORPHER_MAX_PHONEMEA_COARSE_TUNING (24) +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEA_COARSE_TUNING (0) + +#define AL_VOCAL_MORPHER_MIN_PHONEMEB (0) +#define AL_VOCAL_MORPHER_MAX_PHONEMEB (29) +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB (10) + +#define AL_VOCAL_MORPHER_MIN_PHONEMEB_COARSE_TUNING (-24) +#define AL_VOCAL_MORPHER_MAX_PHONEMEB_COARSE_TUNING (24) +#define AL_VOCAL_MORPHER_DEFAULT_PHONEMEB_COARSE_TUNING (0) + +#define AL_VOCAL_MORPHER_PHONEME_A (0) +#define AL_VOCAL_MORPHER_PHONEME_E (1) +#define AL_VOCAL_MORPHER_PHONEME_I (2) +#define AL_VOCAL_MORPHER_PHONEME_O (3) +#define AL_VOCAL_MORPHER_PHONEME_U (4) +#define AL_VOCAL_MORPHER_PHONEME_AA (5) +#define AL_VOCAL_MORPHER_PHONEME_AE (6) +#define AL_VOCAL_MORPHER_PHONEME_AH (7) +#define AL_VOCAL_MORPHER_PHONEME_AO (8) +#define AL_VOCAL_MORPHER_PHONEME_EH (9) +#define AL_VOCAL_MORPHER_PHONEME_ER (10) +#define AL_VOCAL_MORPHER_PHONEME_IH (11) +#define AL_VOCAL_MORPHER_PHONEME_IY (12) +#define AL_VOCAL_MORPHER_PHONEME_UH (13) +#define AL_VOCAL_MORPHER_PHONEME_UW (14) +#define AL_VOCAL_MORPHER_PHONEME_B (15) +#define AL_VOCAL_MORPHER_PHONEME_D (16) +#define AL_VOCAL_MORPHER_PHONEME_F (17) +#define AL_VOCAL_MORPHER_PHONEME_G (18) +#define AL_VOCAL_MORPHER_PHONEME_J (19) +#define AL_VOCAL_MORPHER_PHONEME_K (20) +#define AL_VOCAL_MORPHER_PHONEME_L (21) +#define AL_VOCAL_MORPHER_PHONEME_M (22) +#define AL_VOCAL_MORPHER_PHONEME_N (23) +#define AL_VOCAL_MORPHER_PHONEME_P (24) +#define AL_VOCAL_MORPHER_PHONEME_R (25) +#define AL_VOCAL_MORPHER_PHONEME_S (26) +#define AL_VOCAL_MORPHER_PHONEME_T (27) +#define AL_VOCAL_MORPHER_PHONEME_V (28) +#define AL_VOCAL_MORPHER_PHONEME_Z (29) + +#define AL_VOCAL_MORPHER_WAVEFORM_SINUSOID (0) +#define AL_VOCAL_MORPHER_WAVEFORM_TRIANGLE (1) +#define AL_VOCAL_MORPHER_WAVEFORM_SAWTOOTH (2) + +#define AL_VOCAL_MORPHER_MIN_WAVEFORM (0) +#define AL_VOCAL_MORPHER_MAX_WAVEFORM (2) +#define AL_VOCAL_MORPHER_DEFAULT_WAVEFORM (0) + +#define AL_VOCAL_MORPHER_MIN_RATE (0.0f) +#define AL_VOCAL_MORPHER_MAX_RATE (10.0f) +#define AL_VOCAL_MORPHER_DEFAULT_RATE (1.41f) + +/* Pitch shifter effect */ +#define AL_PITCH_SHIFTER_MIN_COARSE_TUNE (-12) +#define AL_PITCH_SHIFTER_MAX_COARSE_TUNE (12) +#define AL_PITCH_SHIFTER_DEFAULT_COARSE_TUNE (12) + +#define AL_PITCH_SHIFTER_MIN_FINE_TUNE (-50) +#define AL_PITCH_SHIFTER_MAX_FINE_TUNE (50) +#define AL_PITCH_SHIFTER_DEFAULT_FINE_TUNE (0) + +/* Ring modulator effect */ +#define AL_RING_MODULATOR_MIN_FREQUENCY (0.0f) +#define AL_RING_MODULATOR_MAX_FREQUENCY (8000.0f) +#define AL_RING_MODULATOR_DEFAULT_FREQUENCY (440.0f) + +#define AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF (0.0f) +#define AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF (24000.0f) +#define AL_RING_MODULATOR_DEFAULT_HIGHPASS_CUTOFF (800.0f) + +#define AL_RING_MODULATOR_SINUSOID (0) +#define AL_RING_MODULATOR_SAWTOOTH (1) +#define AL_RING_MODULATOR_SQUARE (2) + +#define AL_RING_MODULATOR_MIN_WAVEFORM (0) +#define AL_RING_MODULATOR_MAX_WAVEFORM (2) +#define AL_RING_MODULATOR_DEFAULT_WAVEFORM (0) + +/* Autowah effect */ +#define AL_AUTOWAH_MIN_ATTACK_TIME (0.0001f) +#define AL_AUTOWAH_MAX_ATTACK_TIME (1.0f) +#define AL_AUTOWAH_DEFAULT_ATTACK_TIME (0.06f) + +#define AL_AUTOWAH_MIN_RELEASE_TIME (0.0001f) +#define AL_AUTOWAH_MAX_RELEASE_TIME (1.0f) +#define AL_AUTOWAH_DEFAULT_RELEASE_TIME (0.06f) + +#define AL_AUTOWAH_MIN_RESONANCE (2.0f) +#define AL_AUTOWAH_MAX_RESONANCE (1000.0f) +#define AL_AUTOWAH_DEFAULT_RESONANCE (1000.0f) + +#define AL_AUTOWAH_MIN_PEAK_GAIN (0.00003f) +#define AL_AUTOWAH_MAX_PEAK_GAIN (31621.0f) +#define AL_AUTOWAH_DEFAULT_PEAK_GAIN (11.22f) + +/* Compressor effect */ +#define AL_COMPRESSOR_MIN_ONOFF (0) +#define AL_COMPRESSOR_MAX_ONOFF (1) +#define AL_COMPRESSOR_DEFAULT_ONOFF (1) + +/* Equalizer effect */ +#define AL_EQUALIZER_MIN_LOW_GAIN (0.126f) +#define AL_EQUALIZER_MAX_LOW_GAIN (7.943f) +#define AL_EQUALIZER_DEFAULT_LOW_GAIN (1.0f) + +#define AL_EQUALIZER_MIN_LOW_CUTOFF (50.0f) +#define AL_EQUALIZER_MAX_LOW_CUTOFF (800.0f) +#define AL_EQUALIZER_DEFAULT_LOW_CUTOFF (200.0f) + +#define AL_EQUALIZER_MIN_MID1_GAIN (0.126f) +#define AL_EQUALIZER_MAX_MID1_GAIN (7.943f) +#define AL_EQUALIZER_DEFAULT_MID1_GAIN (1.0f) + +#define AL_EQUALIZER_MIN_MID1_CENTER (200.0f) +#define AL_EQUALIZER_MAX_MID1_CENTER (3000.0f) +#define AL_EQUALIZER_DEFAULT_MID1_CENTER (500.0f) + +#define AL_EQUALIZER_MIN_MID1_WIDTH (0.01f) +#define AL_EQUALIZER_MAX_MID1_WIDTH (1.0f) +#define AL_EQUALIZER_DEFAULT_MID1_WIDTH (1.0f) + +#define AL_EQUALIZER_MIN_MID2_GAIN (0.126f) +#define AL_EQUALIZER_MAX_MID2_GAIN (7.943f) +#define AL_EQUALIZER_DEFAULT_MID2_GAIN (1.0f) + +#define AL_EQUALIZER_MIN_MID2_CENTER (1000.0f) +#define AL_EQUALIZER_MAX_MID2_CENTER (8000.0f) +#define AL_EQUALIZER_DEFAULT_MID2_CENTER (3000.0f) + +#define AL_EQUALIZER_MIN_MID2_WIDTH (0.01f) +#define AL_EQUALIZER_MAX_MID2_WIDTH (1.0f) +#define AL_EQUALIZER_DEFAULT_MID2_WIDTH (1.0f) + +#define AL_EQUALIZER_MIN_HIGH_GAIN (0.126f) +#define AL_EQUALIZER_MAX_HIGH_GAIN (7.943f) +#define AL_EQUALIZER_DEFAULT_HIGH_GAIN (1.0f) + +#define AL_EQUALIZER_MIN_HIGH_CUTOFF (4000.0f) +#define AL_EQUALIZER_MAX_HIGH_CUTOFF (16000.0f) +#define AL_EQUALIZER_DEFAULT_HIGH_CUTOFF (6000.0f) + + +/* Source parameter value ranges and defaults. */ +#define AL_MIN_AIR_ABSORPTION_FACTOR (0.0f) +#define AL_MAX_AIR_ABSORPTION_FACTOR (10.0f) +#define AL_DEFAULT_AIR_ABSORPTION_FACTOR (0.0f) + +#define AL_MIN_ROOM_ROLLOFF_FACTOR (0.0f) +#define AL_MAX_ROOM_ROLLOFF_FACTOR (10.0f) +#define AL_DEFAULT_ROOM_ROLLOFF_FACTOR (0.0f) + +#define AL_MIN_CONE_OUTER_GAINHF (0.0f) +#define AL_MAX_CONE_OUTER_GAINHF (1.0f) +#define AL_DEFAULT_CONE_OUTER_GAINHF (1.0f) + +#define AL_MIN_DIRECT_FILTER_GAINHF_AUTO AL_FALSE +#define AL_MAX_DIRECT_FILTER_GAINHF_AUTO AL_TRUE +#define AL_DEFAULT_DIRECT_FILTER_GAINHF_AUTO AL_TRUE + +#define AL_MIN_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_FALSE +#define AL_MAX_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE +#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAIN_AUTO AL_TRUE + +#define AL_MIN_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_FALSE +#define AL_MAX_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE +#define AL_DEFAULT_AUXILIARY_SEND_FILTER_GAINHF_AUTO AL_TRUE + + +/* Listener parameter value ranges and defaults. */ +#define AL_MIN_METERS_PER_UNIT FLT_MIN +#define AL_MAX_METERS_PER_UNIT FLT_MAX +#define AL_DEFAULT_METERS_PER_UNIT (1.0f) + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif /* AL_EFX_H */ diff --git a/Source/ThirdParty/OpenFBX/OpenFBX.Build.cs b/Source/ThirdParty/OpenFBX/OpenFBX.Build.cs new file mode 100644 index 000000000..63aa380e6 --- /dev/null +++ b/Source/ThirdParty/OpenFBX/OpenFBX.Build.cs @@ -0,0 +1,17 @@ +// Copyright (c) 2012-2020 Wojciech Figat. All rights reserved. + +using Flax.Build; + +/// +/// https://github.com/nem0/OpenFBX +/// +public class OpenFBX : ThirdPartyModule +{ + /// + public override void Init() + { + base.Init(); + + LicenseType = LicenseTypes.MIT; + } +} diff --git a/Source/ThirdParty/OpenFBX/miniz.cpp b/Source/ThirdParty/OpenFBX/miniz.cpp new file mode 100644 index 000000000..98d58a77c --- /dev/null +++ b/Source/ThirdParty/OpenFBX/miniz.cpp @@ -0,0 +1,7241 @@ +/************************************************************************** + * + * Copyright 2013-2014 RAD Game Tools and Valve Software + * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + **************************************************************************/ + +#include "miniz.h" + +typedef unsigned char mz_validate_uint16[sizeof(mz_uint16) == 2 ? 1 : -1]; +typedef unsigned char mz_validate_uint32[sizeof(mz_uint32) == 4 ? 1 : -1]; +typedef unsigned char mz_validate_uint64[sizeof(mz_uint64) == 8 ? 1 : -1]; + +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------------- zlib-style API's */ + +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len) +{ + mz_uint32 i, s1 = (mz_uint32)(adler & 0xffff), s2 = (mz_uint32)(adler >> 16); + size_t block_len = buf_len % 5552; + if (!ptr) + return MZ_ADLER32_INIT; + while (buf_len) + { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) + { + s1 += ptr[0], s2 += s1; + s1 += ptr[1], s2 += s1; + s1 += ptr[2], s2 += s1; + s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; + s1 += ptr[5], s2 += s1; + s1 += ptr[6], s2 += s1; + s1 += ptr[7], s2 += s1; + } + for (; i < block_len; ++i) + s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; + buf_len -= block_len; + block_len = 5552; + } + return (s2 << 16) + s1; +} + +/* Karl Malbrain's compact CRC-32. See "A compact CCITT crc16 and crc32 C implementation that balances processor cache usage against speed": http://www.geocities.com/malbrain/ */ +#if 0 + mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) + { + static const mz_uint32 s_crc32[16] = { 0, 0x1db71064, 0x3b6e20c8, 0x26d930ac, 0x76dc4190, 0x6b6b51f4, 0x4db26158, 0x5005713c, + 0xedb88320, 0xf00f9344, 0xd6d6a3e8, 0xcb61b38c, 0x9b64c2b0, 0x86d3d2d4, 0xa00ae278, 0xbdbdf21c }; + mz_uint32 crcu32 = (mz_uint32)crc; + if (!ptr) + return MZ_CRC32_INIT; + crcu32 = ~crcu32; + while (buf_len--) + { + mz_uint8 b = *ptr++; + crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b & 0xF)]; + crcu32 = (crcu32 >> 4) ^ s_crc32[(crcu32 & 0xF) ^ (b >> 4)]; + } + return ~crcu32; + } +#else +/* Faster, but larger CPU cache footprint. + */ +mz_ulong mz_crc32(mz_ulong crc, const mz_uint8 *ptr, size_t buf_len) +{ + static const mz_uint32 s_crc_table[256] = + { + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, + 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, + 0xE7B82D07, 0x90BF1D91, 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, + 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, 0x3B6E20C8, 0x4C69105E, 0xD56041E4, + 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, + 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, 0x26D930AC, + 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, + 0xB6662D3D, 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, + 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, + 0x086D3D2D, 0x91646C97, 0xE6635C01, 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, + 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, 0x4DB26158, 0x3AB551CE, + 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, + 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, + 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, + 0xB7BD5C3B, 0xC0BA6CAD, 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, + 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, 0xF00F9344, 0x8708A3D2, 0x1E01F268, + 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, + 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, 0xD6D6A3E8, + 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, + 0x4669BE79, 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, + 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, + 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, + 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, 0x86D3D2D4, 0xF1D4E242, + 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, + 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, + 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, + 0x47B2CF7F, 0x30B5FFE9, 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, + 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D + }; + + mz_uint32 crc32 = (mz_uint32)crc ^ 0xFFFFFFFF; + const mz_uint8 *pByte_buf = (const mz_uint8 *)ptr; + + while (buf_len >= 4) + { + crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF]; + crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[1]) & 0xFF]; + crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[2]) & 0xFF]; + crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[3]) & 0xFF]; + pByte_buf += 4; + buf_len -= 4; + } + + while (buf_len) + { + crc32 = (crc32 >> 8) ^ s_crc_table[(crc32 ^ pByte_buf[0]) & 0xFF]; + ++pByte_buf; + --buf_len; + } + + return ~crc32; +} +#endif + +void mz_free(void *p) +{ + MZ_FREE(p); +} + +void *miniz_def_alloc_func(void *opaque, size_t items, size_t size) +{ + (void)opaque, (void)items, (void)size; + return MZ_MALLOC(items * size); +} +void miniz_def_free_func(void *opaque, void *address) +{ + (void)opaque, (void)address; + MZ_FREE(address); +} +void *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size) +{ + (void)opaque, (void)address, (void)items, (void)size; + return MZ_REALLOC(address, items * size); +} + +const char *mz_version(void) +{ + return MZ_VERSION; +} + +#ifndef MINIZ_NO_ZLIB_APIS + +int mz_deflateInit(mz_streamp pStream, int level) +{ + return mz_deflateInit2(pStream, level, MZ_DEFLATED, MZ_DEFAULT_WINDOW_BITS, 9, MZ_DEFAULT_STRATEGY); +} + +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy) +{ + tdefl_compressor *pComp; + mz_uint comp_flags = TDEFL_COMPUTE_ADLER32 | tdefl_create_comp_flags_from_zip_params(level, window_bits, strategy); + + if (!pStream) + return MZ_STREAM_ERROR; + if ((method != MZ_DEFLATED) || ((mem_level < 1) || (mem_level > 9)) || ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS))) + return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = MZ_ADLER32_INIT; + pStream->msg = NULL; + pStream->reserved = 0; + pStream->total_in = 0; + pStream->total_out = 0; + if (!pStream->zalloc) + pStream->zalloc = miniz_def_alloc_func; + if (!pStream->zfree) + pStream->zfree = miniz_def_free_func; + + pComp = (tdefl_compressor *)pStream->zalloc(pStream->opaque, 1, sizeof(tdefl_compressor)); + if (!pComp) + return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pComp; + + if (tdefl_init(pComp, NULL, NULL, comp_flags) != TDEFL_STATUS_OKAY) + { + mz_deflateEnd(pStream); + return MZ_PARAM_ERROR; + } + + return MZ_OK; +} + +int mz_deflateReset(mz_streamp pStream) +{ + if ((!pStream) || (!pStream->state) || (!pStream->zalloc) || (!pStream->zfree)) + return MZ_STREAM_ERROR; + pStream->total_in = pStream->total_out = 0; + tdefl_init((tdefl_compressor *)pStream->state, NULL, NULL, ((tdefl_compressor *)pStream->state)->m_flags); + return MZ_OK; +} + +int mz_deflate(mz_streamp pStream, int flush) +{ + size_t in_bytes, out_bytes; + mz_ulong orig_total_in, orig_total_out; + int mz_status = MZ_OK; + + if ((!pStream) || (!pStream->state) || (flush < 0) || (flush > MZ_FINISH) || (!pStream->next_out)) + return MZ_STREAM_ERROR; + if (!pStream->avail_out) + return MZ_BUF_ERROR; + + if (flush == MZ_PARTIAL_FLUSH) + flush = MZ_SYNC_FLUSH; + + if (((tdefl_compressor *)pStream->state)->m_prev_return_status == TDEFL_STATUS_DONE) + return (flush == MZ_FINISH) ? MZ_STREAM_END : MZ_BUF_ERROR; + + orig_total_in = pStream->total_in; + orig_total_out = pStream->total_out; + for (;;) + { + tdefl_status defl_status; + in_bytes = pStream->avail_in; + out_bytes = pStream->avail_out; + + defl_status = tdefl_compress((tdefl_compressor *)pStream->state, pStream->next_in, &in_bytes, pStream->next_out, &out_bytes, (tdefl_flush)flush); + pStream->next_in += (mz_uint)in_bytes; + pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; + pStream->adler = tdefl_get_adler32((tdefl_compressor *)pStream->state); + + pStream->next_out += (mz_uint)out_bytes; + pStream->avail_out -= (mz_uint)out_bytes; + pStream->total_out += (mz_uint)out_bytes; + + if (defl_status < 0) + { + mz_status = MZ_STREAM_ERROR; + break; + } + else if (defl_status == TDEFL_STATUS_DONE) + { + mz_status = MZ_STREAM_END; + break; + } + else if (!pStream->avail_out) + break; + else if ((!pStream->avail_in) && (flush != MZ_FINISH)) + { + if ((flush) || (pStream->total_in != orig_total_in) || (pStream->total_out != orig_total_out)) + break; + return MZ_BUF_ERROR; /* Can't make forward progress without some input. + */ + } + } + return mz_status; +} + +int mz_deflateEnd(mz_streamp pStream) +{ + if (!pStream) + return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len) +{ + (void)pStream; + /* This is really over conservative. (And lame, but it's actually pretty tricky to compute a true upper bound given the way tdefl's blocking works.) */ + return MZ_MAX(128 + (source_len * 110) / 100, 128 + source_len + ((source_len / (31 * 1024)) + 1) * 5); +} + +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level) +{ + int status; + mz_stream stream; + memset(&stream, 0, sizeof(stream)); + + /* In case mz_ulong is 64-bits (argh I hate longs). */ + if ((source_len | *pDest_len) > 0xFFFFFFFFU) + return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32) * pDest_len; + + status = mz_deflateInit(&stream, level); + if (status != MZ_OK) + return status; + + status = mz_deflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_deflateEnd(&stream); + return (status == MZ_OK) ? MZ_BUF_ERROR : status; + } + + *pDest_len = stream.total_out; + return mz_deflateEnd(&stream); +} + +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + return mz_compress2(pDest, pDest_len, pSource, source_len, MZ_DEFAULT_COMPRESSION); +} + +mz_ulong mz_compressBound(mz_ulong source_len) +{ + return mz_deflateBound(NULL, source_len); +} + +typedef struct +{ + tinfl_decompressor m_decomp; + mz_uint m_dict_ofs, m_dict_avail, m_first_call, m_has_flushed; + int m_window_bits; + mz_uint8 m_dict[TINFL_LZ_DICT_SIZE]; + tinfl_status m_last_status; +} inflate_state; + +int mz_inflateInit2(mz_streamp pStream, int window_bits) +{ + inflate_state *pDecomp; + if (!pStream) + return MZ_STREAM_ERROR; + if ((window_bits != MZ_DEFAULT_WINDOW_BITS) && (-window_bits != MZ_DEFAULT_WINDOW_BITS)) + return MZ_PARAM_ERROR; + + pStream->data_type = 0; + pStream->adler = 0; + pStream->msg = NULL; + pStream->total_in = 0; + pStream->total_out = 0; + pStream->reserved = 0; + if (!pStream->zalloc) + pStream->zalloc = miniz_def_alloc_func; + if (!pStream->zfree) + pStream->zfree = miniz_def_free_func; + + pDecomp = (inflate_state *)pStream->zalloc(pStream->opaque, 1, sizeof(inflate_state)); + if (!pDecomp) + return MZ_MEM_ERROR; + + pStream->state = (struct mz_internal_state *)pDecomp; + + tinfl_init(&pDecomp->m_decomp); + pDecomp->m_dict_ofs = 0; + pDecomp->m_dict_avail = 0; + pDecomp->m_last_status = TINFL_STATUS_NEEDS_MORE_INPUT; + pDecomp->m_first_call = 1; + pDecomp->m_has_flushed = 0; + pDecomp->m_window_bits = window_bits; + + return MZ_OK; +} + +int mz_inflateInit(mz_streamp pStream) +{ + return mz_inflateInit2(pStream, MZ_DEFAULT_WINDOW_BITS); +} + +int mz_inflate(mz_streamp pStream, int flush) +{ + inflate_state *pState; + mz_uint n, first_call, decomp_flags = TINFL_FLAG_COMPUTE_ADLER32; + size_t in_bytes, out_bytes, orig_avail_in; + tinfl_status status; + + if ((!pStream) || (!pStream->state)) + return MZ_STREAM_ERROR; + if (flush == MZ_PARTIAL_FLUSH) + flush = MZ_SYNC_FLUSH; + if ((flush) && (flush != MZ_SYNC_FLUSH) && (flush != MZ_FINISH)) + return MZ_STREAM_ERROR; + + pState = (inflate_state *)pStream->state; + if (pState->m_window_bits > 0) + decomp_flags |= TINFL_FLAG_PARSE_ZLIB_HEADER; + orig_avail_in = pStream->avail_in; + + first_call = pState->m_first_call; + pState->m_first_call = 0; + if (pState->m_last_status < 0) + return MZ_DATA_ERROR; + + if (pState->m_has_flushed && (flush != MZ_FINISH)) + return MZ_STREAM_ERROR; + pState->m_has_flushed |= (flush == MZ_FINISH); + + if ((flush == MZ_FINISH) && (first_call)) + { + /* MZ_FINISH on the first call implies that the input and output buffers are large enough to hold the entire compressed/decompressed file. */ + decomp_flags |= TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF; + in_bytes = pStream->avail_in; + out_bytes = pStream->avail_out; + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pStream->next_out, pStream->next_out, &out_bytes, decomp_flags); + pState->m_last_status = status; + pStream->next_in += (mz_uint)in_bytes; + pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; + pStream->adler = tinfl_get_adler32(&pState->m_decomp); + pStream->next_out += (mz_uint)out_bytes; + pStream->avail_out -= (mz_uint)out_bytes; + pStream->total_out += (mz_uint)out_bytes; + + if (status < 0) + return MZ_DATA_ERROR; + else if (status != TINFL_STATUS_DONE) + { + pState->m_last_status = TINFL_STATUS_FAILED; + return MZ_BUF_ERROR; + } + return MZ_STREAM_END; + } + /* flush != MZ_FINISH then we must assume there's more input. */ + if (flush != MZ_FINISH) + decomp_flags |= TINFL_FLAG_HAS_MORE_INPUT; + + if (pState->m_dict_avail) + { + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; + pStream->avail_out -= n; + pStream->total_out += n; + pState->m_dict_avail -= n; + pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + return ((pState->m_last_status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; + } + + for (;;) + { + in_bytes = pStream->avail_in; + out_bytes = TINFL_LZ_DICT_SIZE - pState->m_dict_ofs; + + status = tinfl_decompress(&pState->m_decomp, pStream->next_in, &in_bytes, pState->m_dict, pState->m_dict + pState->m_dict_ofs, &out_bytes, decomp_flags); + pState->m_last_status = status; + + pStream->next_in += (mz_uint)in_bytes; + pStream->avail_in -= (mz_uint)in_bytes; + pStream->total_in += (mz_uint)in_bytes; + pStream->adler = tinfl_get_adler32(&pState->m_decomp); + + pState->m_dict_avail = (mz_uint)out_bytes; + + n = MZ_MIN(pState->m_dict_avail, pStream->avail_out); + memcpy(pStream->next_out, pState->m_dict + pState->m_dict_ofs, n); + pStream->next_out += n; + pStream->avail_out -= n; + pStream->total_out += n; + pState->m_dict_avail -= n; + pState->m_dict_ofs = (pState->m_dict_ofs + n) & (TINFL_LZ_DICT_SIZE - 1); + + if (status < 0) + return MZ_DATA_ERROR; /* Stream is corrupted (there could be some uncompressed data left in the output dictionary - oh well). */ + else if ((status == TINFL_STATUS_NEEDS_MORE_INPUT) && (!orig_avail_in)) + return MZ_BUF_ERROR; /* Signal caller that we can't make forward progress without supplying more input or by setting flush to MZ_FINISH. */ + else if (flush == MZ_FINISH) + { + /* The output buffer MUST be large to hold the remaining uncompressed data when flush==MZ_FINISH. */ + if (status == TINFL_STATUS_DONE) + return pState->m_dict_avail ? MZ_BUF_ERROR : MZ_STREAM_END; + /* status here must be TINFL_STATUS_HAS_MORE_OUTPUT, which means there's at least 1 more byte on the way. If there's no more room left in the output buffer then something is wrong. */ + else if (!pStream->avail_out) + return MZ_BUF_ERROR; + } + else if ((status == TINFL_STATUS_DONE) || (!pStream->avail_in) || (!pStream->avail_out) || (pState->m_dict_avail)) + break; + } + + return ((status == TINFL_STATUS_DONE) && (!pState->m_dict_avail)) ? MZ_STREAM_END : MZ_OK; +} + +int mz_inflateEnd(mz_streamp pStream) +{ + if (!pStream) + return MZ_STREAM_ERROR; + if (pStream->state) + { + pStream->zfree(pStream->opaque, pStream->state); + pStream->state = NULL; + } + return MZ_OK; +} + +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len) +{ + mz_stream stream; + int status; + memset(&stream, 0, sizeof(stream)); + + /* In case mz_ulong is 64-bits (argh I hate longs). */ + if ((source_len | *pDest_len) > 0xFFFFFFFFU) + return MZ_PARAM_ERROR; + + stream.next_in = pSource; + stream.avail_in = (mz_uint32)source_len; + stream.next_out = pDest; + stream.avail_out = (mz_uint32) * pDest_len; + + status = mz_inflateInit(&stream); + if (status != MZ_OK) + return status; + + status = mz_inflate(&stream, MZ_FINISH); + if (status != MZ_STREAM_END) + { + mz_inflateEnd(&stream); + return ((status == MZ_BUF_ERROR) && (!stream.avail_in)) ? MZ_DATA_ERROR : status; + } + *pDest_len = stream.total_out; + + return mz_inflateEnd(&stream); +} + +const char *mz_error(int err) +{ + static struct + { + int m_err; + const char *m_pDesc; + } s_error_descs[] = + { + { MZ_OK, "" }, { MZ_STREAM_END, "stream end" }, { MZ_NEED_DICT, "need dictionary" }, { MZ_ERRNO, "file error" }, { MZ_STREAM_ERROR, "stream error" }, + { MZ_DATA_ERROR, "data error" }, { MZ_MEM_ERROR, "out of memory" }, { MZ_BUF_ERROR, "buf error" }, { MZ_VERSION_ERROR, "version error" }, { MZ_PARAM_ERROR, "parameter error" } + }; + mz_uint i; + for (i = 0; i < sizeof(s_error_descs) / sizeof(s_error_descs[0]); ++i) + if (s_error_descs[i].m_err == err) + return s_error_descs[i].m_pDesc; + return NULL; +} + +#endif /*MINIZ_NO_ZLIB_APIS */ + +#ifdef __cplusplus +} +#endif + +/* + This is free and unencumbered software released into the public domain. + + Anyone is free to copy, modify, publish, use, compile, sell, or + distribute this software, either in source code form or as a compiled + binary, for any purpose, commercial or non-commercial, and by any + means. + + In jurisdictions that recognize copyright laws, the author or authors + of this software dedicate any and all copyright interest in the + software to the public domain. We make this dedication for the benefit + of the public at large and to the detriment of our heirs and + successors. We intend this dedication to be an overt act of + relinquishment in perpetuity of all present and future rights to this + software under copyright law. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR + OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + OTHER DEALINGS IN THE SOFTWARE. + + For more information, please refer to +*/ +/************************************************************************** + * + * Copyright 2013-2014 RAD Game Tools and Valve Software + * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + **************************************************************************/ + + + + +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------------- Low-level Compression (independent from all decompression API's) */ + +/* Purposely making these tables static for faster init and thread safety. */ +static const mz_uint16 s_tdefl_len_sym[256] = + { + 257, 258, 259, 260, 261, 262, 263, 264, 265, 265, 266, 266, 267, 267, 268, 268, 269, 269, 269, 269, 270, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 272, + 273, 273, 273, 273, 273, 273, 273, 273, 274, 274, 274, 274, 274, 274, 274, 274, 275, 275, 275, 275, 275, 275, 275, 275, 276, 276, 276, 276, 276, 276, 276, 276, + 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 277, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, + 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 279, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, 281, + 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, + 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, 283, + 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 284, 285 + }; + +static const mz_uint8 s_tdefl_len_extra[256] = + { + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 0 + }; + +static const mz_uint8 s_tdefl_small_dist_sym[512] = + { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, + 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, + 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, + 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, + 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17 + }; + +static const mz_uint8 s_tdefl_small_dist_extra[512] = + { + 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, + 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, + 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7 + }; + +static const mz_uint8 s_tdefl_large_dist_sym[128] = + { + 0, 0, 18, 19, 20, 20, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, + 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 + }; + +static const mz_uint8 s_tdefl_large_dist_extra[128] = + { + 0, 0, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, + 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, + 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13 + }; + +/* Radix sorts tdefl_sym_freq[] array by 16-bit key m_key. Returns ptr to sorted values. */ +typedef struct +{ + mz_uint16 m_key, m_sym_index; +} tdefl_sym_freq; +static tdefl_sym_freq *tdefl_radix_sort_syms(mz_uint num_syms, tdefl_sym_freq *pSyms0, tdefl_sym_freq *pSyms1) +{ + mz_uint32 total_passes = 2, pass_shift, pass, i, hist[256 * 2]; + tdefl_sym_freq *pCur_syms = pSyms0, *pNew_syms = pSyms1; + MZ_CLEAR_OBJ(hist); + for (i = 0; i < num_syms; i++) + { + mz_uint freq = pSyms0[i].m_key; + hist[freq & 0xFF]++; + hist[256 + ((freq >> 8) & 0xFF)]++; + } + while ((total_passes > 1) && (num_syms == hist[(total_passes - 1) * 256])) + total_passes--; + for (pass_shift = 0, pass = 0; pass < total_passes; pass++, pass_shift += 8) + { + const mz_uint32 *pHist = &hist[pass << 8]; + mz_uint offsets[256], cur_ofs = 0; + for (i = 0; i < 256; i++) + { + offsets[i] = cur_ofs; + cur_ofs += pHist[i]; + } + for (i = 0; i < num_syms; i++) + pNew_syms[offsets[(pCur_syms[i].m_key >> pass_shift) & 0xFF]++] = pCur_syms[i]; + { + tdefl_sym_freq *t = pCur_syms; + pCur_syms = pNew_syms; + pNew_syms = t; + } + } + return pCur_syms; +} + +/* tdefl_calculate_minimum_redundancy() originally written by: Alistair Moffat, alistair@cs.mu.oz.au, Jyrki Katajainen, jyrki@diku.dk, November 1996. */ +static void tdefl_calculate_minimum_redundancy(tdefl_sym_freq *A, int n) +{ + int root, leaf, next, avbl, used, dpth; + if (n == 0) + return; + else if (n == 1) + { + A[0].m_key = 1; + return; + } + A[0].m_key += A[1].m_key; + root = 0; + leaf = 2; + for (next = 1; next < n - 1; next++) + { + if (leaf >= n || A[root].m_key < A[leaf].m_key) + { + A[next].m_key = A[root].m_key; + A[root++].m_key = (mz_uint16)next; + } + else + A[next].m_key = A[leaf++].m_key; + if (leaf >= n || (root < next && A[root].m_key < A[leaf].m_key)) + { + A[next].m_key = (mz_uint16)(A[next].m_key + A[root].m_key); + A[root++].m_key = (mz_uint16)next; + } + else + A[next].m_key = (mz_uint16)(A[next].m_key + A[leaf++].m_key); + } + A[n - 2].m_key = 0; + for (next = n - 3; next >= 0; next--) + A[next].m_key = A[A[next].m_key].m_key + 1; + avbl = 1; + used = dpth = 0; + root = n - 2; + next = n - 1; + while (avbl > 0) + { + while (root >= 0 && (int)A[root].m_key == dpth) + { + used++; + root--; + } + while (avbl > used) + { + A[next--].m_key = (mz_uint16)(dpth); + avbl--; + } + avbl = 2 * used; + dpth++; + used = 0; + } +} + +/* Limits canonical Huffman code table's max code size. */ +enum +{ + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE = 32 +}; +static void tdefl_huffman_enforce_max_code_size(int *pNum_codes, int code_list_len, int max_code_size) +{ + int i; + mz_uint32 total = 0; + if (code_list_len <= 1) + return; + for (i = max_code_size + 1; i <= TDEFL_MAX_SUPPORTED_HUFF_CODESIZE; i++) + pNum_codes[max_code_size] += pNum_codes[i]; + for (i = max_code_size; i > 0; i--) + total += (((mz_uint32)pNum_codes[i]) << (max_code_size - i)); + while (total != (1UL << max_code_size)) + { + pNum_codes[max_code_size]--; + for (i = max_code_size - 1; i > 0; i--) + if (pNum_codes[i]) + { + pNum_codes[i]--; + pNum_codes[i + 1] += 2; + break; + } + total--; + } +} + +static void tdefl_optimize_huffman_table(tdefl_compressor *d, int table_num, int table_len, int code_size_limit, int static_table) +{ + int i, j, l, num_codes[1 + TDEFL_MAX_SUPPORTED_HUFF_CODESIZE]; + mz_uint next_code[TDEFL_MAX_SUPPORTED_HUFF_CODESIZE + 1]; + MZ_CLEAR_OBJ(num_codes); + if (static_table) + { + for (i = 0; i < table_len; i++) + num_codes[d->m_huff_code_sizes[table_num][i]]++; + } + else + { + tdefl_sym_freq syms0[TDEFL_MAX_HUFF_SYMBOLS], syms1[TDEFL_MAX_HUFF_SYMBOLS], *pSyms; + int num_used_syms = 0; + const mz_uint16 *pSym_count = &d->m_huff_count[table_num][0]; + for (i = 0; i < table_len; i++) + if (pSym_count[i]) + { + syms0[num_used_syms].m_key = (mz_uint16)pSym_count[i]; + syms0[num_used_syms++].m_sym_index = (mz_uint16)i; + } + + pSyms = tdefl_radix_sort_syms(num_used_syms, syms0, syms1); + tdefl_calculate_minimum_redundancy(pSyms, num_used_syms); + + for (i = 0; i < num_used_syms; i++) + num_codes[pSyms[i].m_key]++; + + tdefl_huffman_enforce_max_code_size(num_codes, num_used_syms, code_size_limit); + + MZ_CLEAR_OBJ(d->m_huff_code_sizes[table_num]); + MZ_CLEAR_OBJ(d->m_huff_codes[table_num]); + for (i = 1, j = num_used_syms; i <= code_size_limit; i++) + for (l = num_codes[i]; l > 0; l--) + d->m_huff_code_sizes[table_num][pSyms[--j].m_sym_index] = (mz_uint8)(i); + } + + next_code[1] = 0; + for (j = 0, i = 2; i <= code_size_limit; i++) + next_code[i] = j = ((j + num_codes[i - 1]) << 1); + + for (i = 0; i < table_len; i++) + { + mz_uint rev_code = 0, code, code_size; + if ((code_size = d->m_huff_code_sizes[table_num][i]) == 0) + continue; + code = next_code[code_size]++; + for (l = code_size; l > 0; l--, code >>= 1) + rev_code = (rev_code << 1) | (code & 1); + d->m_huff_codes[table_num][i] = (mz_uint16)rev_code; + } +} + +#define TDEFL_PUT_BITS(b, l) \ + do \ + { \ + mz_uint bits = b; \ + mz_uint len = l; \ + MZ_ASSERT(bits <= ((1U << len) - 1U)); \ + d->m_bit_buffer |= (bits << d->m_bits_in); \ + d->m_bits_in += len; \ + while (d->m_bits_in >= 8) \ + { \ + if (d->m_pOutput_buf < d->m_pOutput_buf_end) \ + *d->m_pOutput_buf++ = (mz_uint8)(d->m_bit_buffer); \ + d->m_bit_buffer >>= 8; \ + d->m_bits_in -= 8; \ + } \ + } \ + MZ_MACRO_END + +#define TDEFL_RLE_PREV_CODE_SIZE() \ + { \ + if (rle_repeat_count) \ + { \ + if (rle_repeat_count < 3) \ + { \ + d->m_huff_count[2][prev_code_size] = (mz_uint16)(d->m_huff_count[2][prev_code_size] + rle_repeat_count); \ + while (rle_repeat_count--) \ + packed_code_sizes[num_packed_code_sizes++] = prev_code_size; \ + } \ + else \ + { \ + d->m_huff_count[2][16] = (mz_uint16)(d->m_huff_count[2][16] + 1); \ + packed_code_sizes[num_packed_code_sizes++] = 16; \ + packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_repeat_count - 3); \ + } \ + rle_repeat_count = 0; \ + } \ + } + +#define TDEFL_RLE_ZERO_CODE_SIZE() \ + { \ + if (rle_z_count) \ + { \ + if (rle_z_count < 3) \ + { \ + d->m_huff_count[2][0] = (mz_uint16)(d->m_huff_count[2][0] + rle_z_count); \ + while (rle_z_count--) \ + packed_code_sizes[num_packed_code_sizes++] = 0; \ + } \ + else if (rle_z_count <= 10) \ + { \ + d->m_huff_count[2][17] = (mz_uint16)(d->m_huff_count[2][17] + 1); \ + packed_code_sizes[num_packed_code_sizes++] = 17; \ + packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 3); \ + } \ + else \ + { \ + d->m_huff_count[2][18] = (mz_uint16)(d->m_huff_count[2][18] + 1); \ + packed_code_sizes[num_packed_code_sizes++] = 18; \ + packed_code_sizes[num_packed_code_sizes++] = (mz_uint8)(rle_z_count - 11); \ + } \ + rle_z_count = 0; \ + } \ + } + +static mz_uint8 s_tdefl_packed_code_size_syms_swizzle[] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + +static void tdefl_start_dynamic_block(tdefl_compressor *d) +{ + int num_lit_codes, num_dist_codes, num_bit_lengths; + mz_uint i, total_code_sizes_to_pack, num_packed_code_sizes, rle_z_count, rle_repeat_count, packed_code_sizes_index; + mz_uint8 code_sizes_to_pack[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], packed_code_sizes[TDEFL_MAX_HUFF_SYMBOLS_0 + TDEFL_MAX_HUFF_SYMBOLS_1], prev_code_size = 0xFF; + + d->m_huff_count[0][256] = 1; + + tdefl_optimize_huffman_table(d, 0, TDEFL_MAX_HUFF_SYMBOLS_0, 15, MZ_FALSE); + tdefl_optimize_huffman_table(d, 1, TDEFL_MAX_HUFF_SYMBOLS_1, 15, MZ_FALSE); + + for (num_lit_codes = 286; num_lit_codes > 257; num_lit_codes--) + if (d->m_huff_code_sizes[0][num_lit_codes - 1]) + break; + for (num_dist_codes = 30; num_dist_codes > 1; num_dist_codes--) + if (d->m_huff_code_sizes[1][num_dist_codes - 1]) + break; + + memcpy(code_sizes_to_pack, &d->m_huff_code_sizes[0][0], num_lit_codes); + memcpy(code_sizes_to_pack + num_lit_codes, &d->m_huff_code_sizes[1][0], num_dist_codes); + total_code_sizes_to_pack = num_lit_codes + num_dist_codes; + num_packed_code_sizes = 0; + rle_z_count = 0; + rle_repeat_count = 0; + + memset(&d->m_huff_count[2][0], 0, sizeof(d->m_huff_count[2][0]) * TDEFL_MAX_HUFF_SYMBOLS_2); + for (i = 0; i < total_code_sizes_to_pack; i++) + { + mz_uint8 code_size = code_sizes_to_pack[i]; + if (!code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + if (++rle_z_count == 138) + { + TDEFL_RLE_ZERO_CODE_SIZE(); + } + } + else + { + TDEFL_RLE_ZERO_CODE_SIZE(); + if (code_size != prev_code_size) + { + TDEFL_RLE_PREV_CODE_SIZE(); + d->m_huff_count[2][code_size] = (mz_uint16)(d->m_huff_count[2][code_size] + 1); + packed_code_sizes[num_packed_code_sizes++] = code_size; + } + else if (++rle_repeat_count == 6) + { + TDEFL_RLE_PREV_CODE_SIZE(); + } + } + prev_code_size = code_size; + } + if (rle_repeat_count) + { + TDEFL_RLE_PREV_CODE_SIZE(); + } + else + { + TDEFL_RLE_ZERO_CODE_SIZE(); + } + + tdefl_optimize_huffman_table(d, 2, TDEFL_MAX_HUFF_SYMBOLS_2, 7, MZ_FALSE); + + TDEFL_PUT_BITS(2, 2); + + TDEFL_PUT_BITS(num_lit_codes - 257, 5); + TDEFL_PUT_BITS(num_dist_codes - 1, 5); + + for (num_bit_lengths = 18; num_bit_lengths >= 0; num_bit_lengths--) + if (d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[num_bit_lengths]]) + break; + num_bit_lengths = MZ_MAX(4, (num_bit_lengths + 1)); + TDEFL_PUT_BITS(num_bit_lengths - 4, 4); + for (i = 0; (int)i < num_bit_lengths; i++) + TDEFL_PUT_BITS(d->m_huff_code_sizes[2][s_tdefl_packed_code_size_syms_swizzle[i]], 3); + + for (packed_code_sizes_index = 0; packed_code_sizes_index < num_packed_code_sizes;) + { + mz_uint code = packed_code_sizes[packed_code_sizes_index++]; + MZ_ASSERT(code < TDEFL_MAX_HUFF_SYMBOLS_2); + TDEFL_PUT_BITS(d->m_huff_codes[2][code], d->m_huff_code_sizes[2][code]); + if (code >= 16) + TDEFL_PUT_BITS(packed_code_sizes[packed_code_sizes_index++], "\02\03\07"[code - 16]); + } +} + +static void tdefl_start_static_block(tdefl_compressor *d) +{ + mz_uint i; + mz_uint8 *p = &d->m_huff_code_sizes[0][0]; + + for (i = 0; i <= 143; ++i) + *p++ = 8; + for (; i <= 255; ++i) + *p++ = 9; + for (; i <= 279; ++i) + *p++ = 7; + for (; i <= 287; ++i) + *p++ = 8; + + memset(d->m_huff_code_sizes[1], 5, 32); + + tdefl_optimize_huffman_table(d, 0, 288, 15, MZ_TRUE); + tdefl_optimize_huffman_table(d, 1, 32, 15, MZ_TRUE); + + TDEFL_PUT_BITS(1, 2); +} + +static const mz_uint mz_bitmasks[17] = { 0x0000, 0x0001, 0x0003, 0x0007, 0x000F, 0x001F, 0x003F, 0x007F, 0x00FF, 0x01FF, 0x03FF, 0x07FF, 0x0FFF, 0x1FFF, 0x3FFF, 0x7FFF, 0xFFFF }; + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN &&MINIZ_HAS_64BIT_REGISTERS +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + mz_uint8 *pOutput_buf = d->m_pOutput_buf; + mz_uint8 *pLZ_code_buf_end = d->m_pLZ_code_buf; + mz_uint64 bit_buffer = d->m_bit_buffer; + mz_uint bits_in = d->m_bits_in; + +#define TDEFL_PUT_BITS_FAST(b, l) \ + { \ + bit_buffer |= (((mz_uint64)(b)) << bits_in); \ + bits_in += (l); \ + } + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < pLZ_code_buf_end; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + + if (flags & 1) + { + mz_uint s0, s1, n0, n1, sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = *(const mz_uint16 *)(pLZ_codes + 1); + pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS_FAST(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + /* This sequence coaxes MSVC into using cmov's vs. jmp's. */ + s0 = s_tdefl_small_dist_sym[match_dist & 511]; + n0 = s_tdefl_small_dist_extra[match_dist & 511]; + s1 = s_tdefl_large_dist_sym[match_dist >> 8]; + n1 = s_tdefl_large_dist_extra[match_dist >> 8]; + sym = (match_dist < 512) ? s0 : s1; + num_extra_bits = (match_dist < 512) ? n0 : n1; + + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS_FAST(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + + if (((flags & 2) == 0) && (pLZ_codes < pLZ_code_buf_end)) + { + flags >>= 1; + lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS_FAST(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + } + + if (pOutput_buf >= d->m_pOutput_buf_end) + return MZ_FALSE; + + *(mz_uint64 *)pOutput_buf = bit_buffer; + pOutput_buf += (bits_in >> 3); + bit_buffer >>= (bits_in & ~7); + bits_in &= 7; + } + +#undef TDEFL_PUT_BITS_FAST + + d->m_pOutput_buf = pOutput_buf; + d->m_bits_in = 0; + d->m_bit_buffer = 0; + + while (bits_in) + { + mz_uint32 n = MZ_MIN(bits_in, 16); + TDEFL_PUT_BITS((mz_uint)bit_buffer & mz_bitmasks[n], n); + bit_buffer >>= n; + bits_in -= n; + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#else +static mz_bool tdefl_compress_lz_codes(tdefl_compressor *d) +{ + mz_uint flags; + mz_uint8 *pLZ_codes; + + flags = 1; + for (pLZ_codes = d->m_lz_code_buf; pLZ_codes < d->m_pLZ_code_buf; flags >>= 1) + { + if (flags == 1) + flags = *pLZ_codes++ | 0x100; + if (flags & 1) + { + mz_uint sym, num_extra_bits; + mz_uint match_len = pLZ_codes[0], match_dist = (pLZ_codes[1] | (pLZ_codes[2] << 8)); + pLZ_codes += 3; + + MZ_ASSERT(d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(d->m_huff_codes[0][s_tdefl_len_sym[match_len]], d->m_huff_code_sizes[0][s_tdefl_len_sym[match_len]]); + TDEFL_PUT_BITS(match_len & mz_bitmasks[s_tdefl_len_extra[match_len]], s_tdefl_len_extra[match_len]); + + if (match_dist < 512) + { + sym = s_tdefl_small_dist_sym[match_dist]; + num_extra_bits = s_tdefl_small_dist_extra[match_dist]; + } + else + { + sym = s_tdefl_large_dist_sym[match_dist >> 8]; + num_extra_bits = s_tdefl_large_dist_extra[match_dist >> 8]; + } + MZ_ASSERT(d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(d->m_huff_codes[1][sym], d->m_huff_code_sizes[1][sym]); + TDEFL_PUT_BITS(match_dist & mz_bitmasks[num_extra_bits], num_extra_bits); + } + else + { + mz_uint lit = *pLZ_codes++; + MZ_ASSERT(d->m_huff_code_sizes[0][lit]); + TDEFL_PUT_BITS(d->m_huff_codes[0][lit], d->m_huff_code_sizes[0][lit]); + } + } + + TDEFL_PUT_BITS(d->m_huff_codes[0][256], d->m_huff_code_sizes[0][256]); + + return (d->m_pOutput_buf < d->m_pOutput_buf_end); +} +#endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN && MINIZ_HAS_64BIT_REGISTERS */ + +static mz_bool tdefl_compress_block(tdefl_compressor *d, mz_bool static_block) +{ + if (static_block) + tdefl_start_static_block(d); + else + tdefl_start_dynamic_block(d); + return tdefl_compress_lz_codes(d); +} + +static int tdefl_flush_block(tdefl_compressor *d, int flush) +{ + mz_uint saved_bit_buf, saved_bits_in; + mz_uint8 *pSaved_output_buf; + mz_bool comp_block_succeeded = MZ_FALSE; + int n, use_raw_block = ((d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS) != 0) && (d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size; + mz_uint8 *pOutput_buf_start = ((d->m_pPut_buf_func == NULL) && ((*d->m_pOut_buf_size - d->m_out_buf_ofs) >= TDEFL_OUT_BUF_SIZE)) ? ((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs) : d->m_output_buf; + + d->m_pOutput_buf = pOutput_buf_start; + d->m_pOutput_buf_end = d->m_pOutput_buf + TDEFL_OUT_BUF_SIZE - 16; + + MZ_ASSERT(!d->m_output_flush_remaining); + d->m_output_flush_ofs = 0; + d->m_output_flush_remaining = 0; + + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> d->m_num_flags_left); + d->m_pLZ_code_buf -= (d->m_num_flags_left == 8); + + if ((d->m_flags & TDEFL_WRITE_ZLIB_HEADER) && (!d->m_block_index)) + { + TDEFL_PUT_BITS(0x78, 8); + TDEFL_PUT_BITS(0x01, 8); + } + + TDEFL_PUT_BITS(flush == TDEFL_FINISH, 1); + + pSaved_output_buf = d->m_pOutput_buf; + saved_bit_buf = d->m_bit_buffer; + saved_bits_in = d->m_bits_in; + + if (!use_raw_block) + comp_block_succeeded = tdefl_compress_block(d, (d->m_flags & TDEFL_FORCE_ALL_STATIC_BLOCKS) || (d->m_total_lz_bytes < 48)); + + /* If the block gets expanded, forget the current contents of the output buffer and send a raw block instead. */ + if (((use_raw_block) || ((d->m_total_lz_bytes) && ((d->m_pOutput_buf - pSaved_output_buf + 1U) >= d->m_total_lz_bytes))) && + ((d->m_lookahead_pos - d->m_lz_code_buf_dict_pos) <= d->m_dict_size)) + { + mz_uint i; + d->m_pOutput_buf = pSaved_output_buf; + d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + TDEFL_PUT_BITS(0, 2); + if (d->m_bits_in) + { + TDEFL_PUT_BITS(0, 8 - d->m_bits_in); + } + for (i = 2; i; --i, d->m_total_lz_bytes ^= 0xFFFF) + { + TDEFL_PUT_BITS(d->m_total_lz_bytes & 0xFFFF, 16); + } + for (i = 0; i < d->m_total_lz_bytes; ++i) + { + TDEFL_PUT_BITS(d->m_dict[(d->m_lz_code_buf_dict_pos + i) & TDEFL_LZ_DICT_SIZE_MASK], 8); + } + } + /* Check for the extremely unlikely (if not impossible) case of the compressed block not fitting into the output buffer when using dynamic codes. */ + else if (!comp_block_succeeded) + { + d->m_pOutput_buf = pSaved_output_buf; + d->m_bit_buffer = saved_bit_buf, d->m_bits_in = saved_bits_in; + tdefl_compress_block(d, MZ_TRUE); + } + + if (flush) + { + if (flush == TDEFL_FINISH) + { + if (d->m_bits_in) + { + TDEFL_PUT_BITS(0, 8 - d->m_bits_in); + } + if (d->m_flags & TDEFL_WRITE_ZLIB_HEADER) + { + mz_uint i, a = d->m_adler32; + for (i = 0; i < 4; i++) + { + TDEFL_PUT_BITS((a >> 24) & 0xFF, 8); + a <<= 8; + } + } + } + else + { + mz_uint i, z = 0; + TDEFL_PUT_BITS(0, 3); + if (d->m_bits_in) + { + TDEFL_PUT_BITS(0, 8 - d->m_bits_in); + } + for (i = 2; i; --i, z ^= 0xFFFF) + { + TDEFL_PUT_BITS(z & 0xFFFF, 16); + } + } + } + + MZ_ASSERT(d->m_pOutput_buf < d->m_pOutput_buf_end); + + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; + d->m_pLZ_flags = d->m_lz_code_buf; + d->m_num_flags_left = 8; + d->m_lz_code_buf_dict_pos += d->m_total_lz_bytes; + d->m_total_lz_bytes = 0; + d->m_block_index++; + + if ((n = (int)(d->m_pOutput_buf - pOutput_buf_start)) != 0) + { + if (d->m_pPut_buf_func) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + if (!(*d->m_pPut_buf_func)(d->m_output_buf, n, d->m_pPut_buf_user)) + return (d->m_prev_return_status = TDEFL_STATUS_PUT_BUF_FAILED); + } + else if (pOutput_buf_start == d->m_output_buf) + { + int bytes_to_copy = (int)MZ_MIN((size_t)n, (size_t)(*d->m_pOut_buf_size - d->m_out_buf_ofs)); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf, bytes_to_copy); + d->m_out_buf_ofs += bytes_to_copy; + if ((n -= bytes_to_copy) != 0) + { + d->m_output_flush_ofs = bytes_to_copy; + d->m_output_flush_remaining = n; + } + } + else + { + d->m_out_buf_ofs += n; + } + } + + return d->m_output_flush_remaining; +} + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES +#define TDEFL_READ_UNALIGNED_WORD(p) *(const mz_uint16 *)(p) +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint16 *s = (const mz_uint16 *)(d->m_dict + pos), *p, *q; + mz_uint16 c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]), s01 = TDEFL_READ_UNALIGNED_WORD(s); + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); + if (max_match_len <= match_len) + return; + for (;;) + { + for (;;) + { + if (--num_probes_left == 0) + return; +#define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ + return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if (TDEFL_READ_UNALIGNED_WORD(&d->m_dict[probe_pos + match_len - 1]) == c01) \ + break; + TDEFL_PROBE; + TDEFL_PROBE; + TDEFL_PROBE; + } + if (!dist) + break; + q = (const mz_uint16 *)(d->m_dict + probe_pos); + if (TDEFL_READ_UNALIGNED_WORD(q) != s01) + continue; + p = s; + probe_len = 32; + do + { + } while ((TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0)); + if (!probe_len) + { + *pMatch_dist = dist; + *pMatch_len = MZ_MIN(max_match_len, (mz_uint)TDEFL_MAX_MATCH_LEN); + break; + } + else if ((probe_len = ((mz_uint)(p - s) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q)) > match_len) + { + *pMatch_dist = dist; + if ((*pMatch_len = match_len = MZ_MIN(max_match_len, probe_len)) == max_match_len) + break; + c01 = TDEFL_READ_UNALIGNED_WORD(&d->m_dict[pos + match_len - 1]); + } + } +} +#else +static MZ_FORCEINLINE void tdefl_find_match(tdefl_compressor *d, mz_uint lookahead_pos, mz_uint max_dist, mz_uint max_match_len, mz_uint *pMatch_dist, mz_uint *pMatch_len) +{ + mz_uint dist, pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK, match_len = *pMatch_len, probe_pos = pos, next_probe_pos, probe_len; + mz_uint num_probes_left = d->m_max_probes[match_len >= 32]; + const mz_uint8 *s = d->m_dict + pos, *p, *q; + mz_uint8 c0 = d->m_dict[pos + match_len], c1 = d->m_dict[pos + match_len - 1]; + MZ_ASSERT(max_match_len <= TDEFL_MAX_MATCH_LEN); + if (max_match_len <= match_len) + return; + for (;;) + { + for (;;) + { + if (--num_probes_left == 0) + return; +#define TDEFL_PROBE \ + next_probe_pos = d->m_next[probe_pos]; \ + if ((!next_probe_pos) || ((dist = (mz_uint16)(lookahead_pos - next_probe_pos)) > max_dist)) \ + return; \ + probe_pos = next_probe_pos & TDEFL_LZ_DICT_SIZE_MASK; \ + if ((d->m_dict[probe_pos + match_len] == c0) && (d->m_dict[probe_pos + match_len - 1] == c1)) \ + break; + TDEFL_PROBE; + TDEFL_PROBE; + TDEFL_PROBE; + } + if (!dist) + break; + p = s; + q = d->m_dict + probe_pos; + for (probe_len = 0; probe_len < max_match_len; probe_len++) + if (*p++ != *q++) + break; + if (probe_len > match_len) + { + *pMatch_dist = dist; + if ((*pMatch_len = match_len = probe_len) == max_match_len) + return; + c0 = d->m_dict[pos + match_len]; + c1 = d->m_dict[pos + match_len - 1]; + } + } +} +#endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES */ + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN +static mz_bool tdefl_compress_fast(tdefl_compressor *d) +{ + /* Faster, minimally featured LZRW1-style match+parse loop with better register utilization. Intended for applications where raw throughput is valued more highly than ratio. */ + mz_uint lookahead_pos = d->m_lookahead_pos, lookahead_size = d->m_lookahead_size, dict_size = d->m_dict_size, total_lz_bytes = d->m_total_lz_bytes, num_flags_left = d->m_num_flags_left; + mz_uint8 *pLZ_code_buf = d->m_pLZ_code_buf, *pLZ_flags = d->m_pLZ_flags; + mz_uint cur_pos = lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + + while ((d->m_src_buf_left) || ((d->m_flush) && (lookahead_size))) + { + const mz_uint TDEFL_COMP_FAST_LOOKAHEAD_SIZE = 4096; + mz_uint dst_pos = (lookahead_pos + lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(d->m_src_buf_left, TDEFL_COMP_FAST_LOOKAHEAD_SIZE - lookahead_size); + d->m_src_buf_left -= num_bytes_to_process; + lookahead_size += num_bytes_to_process; + + while (num_bytes_to_process) + { + mz_uint32 n = MZ_MIN(TDEFL_LZ_DICT_SIZE - dst_pos, num_bytes_to_process); + memcpy(d->m_dict + dst_pos, d->m_pSrc, n); + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + memcpy(d->m_dict + TDEFL_LZ_DICT_SIZE + dst_pos, d->m_pSrc, MZ_MIN(n, (TDEFL_MAX_MATCH_LEN - 1) - dst_pos)); + d->m_pSrc += n; + dst_pos = (dst_pos + n) & TDEFL_LZ_DICT_SIZE_MASK; + num_bytes_to_process -= n; + } + + dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - lookahead_size, dict_size); + if ((!d->m_flush) && (lookahead_size < TDEFL_COMP_FAST_LOOKAHEAD_SIZE)) + break; + + while (lookahead_size >= 4) + { + mz_uint cur_match_dist, cur_match_len = 1; + mz_uint8 *pCur_dict = d->m_dict + cur_pos; + mz_uint first_trigram = (*(const mz_uint32 *)pCur_dict) & 0xFFFFFF; + mz_uint hash = (first_trigram ^ (first_trigram >> (24 - (TDEFL_LZ_HASH_BITS - 8)))) & TDEFL_LEVEL1_HASH_SIZE_MASK; + mz_uint probe_pos = d->m_hash[hash]; + d->m_hash[hash] = (mz_uint16)lookahead_pos; + + if (((cur_match_dist = (mz_uint16)(lookahead_pos - probe_pos)) <= dict_size) && ((*(const mz_uint32 *)(d->m_dict + (probe_pos &= TDEFL_LZ_DICT_SIZE_MASK)) & 0xFFFFFF) == first_trigram)) + { + const mz_uint16 *p = (const mz_uint16 *)pCur_dict; + const mz_uint16 *q = (const mz_uint16 *)(d->m_dict + probe_pos); + mz_uint32 probe_len = 32; + do + { + } while ((TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && + (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (TDEFL_READ_UNALIGNED_WORD(++p) == TDEFL_READ_UNALIGNED_WORD(++q)) && (--probe_len > 0)); + cur_match_len = ((mz_uint)(p - (const mz_uint16 *)pCur_dict) * 2) + (mz_uint)(*(const mz_uint8 *)p == *(const mz_uint8 *)q); + if (!probe_len) + cur_match_len = cur_match_dist ? TDEFL_MAX_MATCH_LEN : 0; + + if ((cur_match_len < TDEFL_MIN_MATCH_LEN) || ((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U * 1024U))) + { + cur_match_len = 1; + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + else + { + mz_uint32 s0, s1; + cur_match_len = MZ_MIN(cur_match_len, lookahead_size); + + MZ_ASSERT((cur_match_len >= TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 1) && (cur_match_dist <= TDEFL_LZ_DICT_SIZE)); + + cur_match_dist--; + + pLZ_code_buf[0] = (mz_uint8)(cur_match_len - TDEFL_MIN_MATCH_LEN); + *(mz_uint16 *)(&pLZ_code_buf[1]) = (mz_uint16)cur_match_dist; + pLZ_code_buf += 3; + *pLZ_flags = (mz_uint8)((*pLZ_flags >> 1) | 0x80); + + s0 = s_tdefl_small_dist_sym[cur_match_dist & 511]; + s1 = s_tdefl_large_dist_sym[cur_match_dist >> 8]; + d->m_huff_count[1][(cur_match_dist < 512) ? s0 : s1]++; + + d->m_huff_count[0][s_tdefl_len_sym[cur_match_len - TDEFL_MIN_MATCH_LEN]]++; + } + } + else + { + *pLZ_code_buf++ = (mz_uint8)first_trigram; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + d->m_huff_count[0][(mz_uint8)first_trigram]++; + } + + if (--num_flags_left == 0) + { + num_flags_left = 8; + pLZ_flags = pLZ_code_buf++; + } + + total_lz_bytes += cur_match_len; + lookahead_pos += cur_match_len; + dict_size = MZ_MIN(dict_size + cur_match_len, (mz_uint)TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + cur_match_len) & TDEFL_LZ_DICT_SIZE_MASK; + MZ_ASSERT(lookahead_size >= cur_match_len); + lookahead_size -= cur_match_len; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; + d->m_lookahead_size = lookahead_size; + d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; + d->m_pLZ_code_buf = pLZ_code_buf; + d->m_pLZ_flags = pLZ_flags; + d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; + pLZ_code_buf = d->m_pLZ_code_buf; + pLZ_flags = d->m_pLZ_flags; + num_flags_left = d->m_num_flags_left; + } + } + + while (lookahead_size) + { + mz_uint8 lit = d->m_dict[cur_pos]; + + total_lz_bytes++; + *pLZ_code_buf++ = lit; + *pLZ_flags = (mz_uint8)(*pLZ_flags >> 1); + if (--num_flags_left == 0) + { + num_flags_left = 8; + pLZ_flags = pLZ_code_buf++; + } + + d->m_huff_count[0][lit]++; + + lookahead_pos++; + dict_size = MZ_MIN(dict_size + 1, (mz_uint)TDEFL_LZ_DICT_SIZE); + cur_pos = (cur_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; + lookahead_size--; + + if (pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) + { + int n; + d->m_lookahead_pos = lookahead_pos; + d->m_lookahead_size = lookahead_size; + d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; + d->m_pLZ_code_buf = pLZ_code_buf; + d->m_pLZ_flags = pLZ_flags; + d->m_num_flags_left = num_flags_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + total_lz_bytes = d->m_total_lz_bytes; + pLZ_code_buf = d->m_pLZ_code_buf; + pLZ_flags = d->m_pLZ_flags; + num_flags_left = d->m_num_flags_left; + } + } + } + + d->m_lookahead_pos = lookahead_pos; + d->m_lookahead_size = lookahead_size; + d->m_dict_size = dict_size; + d->m_total_lz_bytes = total_lz_bytes; + d->m_pLZ_code_buf = pLZ_code_buf; + d->m_pLZ_flags = pLZ_flags; + d->m_num_flags_left = num_flags_left; + return MZ_TRUE; +} +#endif /* MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN */ + +static MZ_FORCEINLINE void tdefl_record_literal(tdefl_compressor *d, mz_uint8 lit) +{ + d->m_total_lz_bytes++; + *d->m_pLZ_code_buf++ = lit; + *d->m_pLZ_flags = (mz_uint8)(*d->m_pLZ_flags >> 1); + if (--d->m_num_flags_left == 0) + { + d->m_num_flags_left = 8; + d->m_pLZ_flags = d->m_pLZ_code_buf++; + } + d->m_huff_count[0][lit]++; +} + +static MZ_FORCEINLINE void tdefl_record_match(tdefl_compressor *d, mz_uint match_len, mz_uint match_dist) +{ + mz_uint32 s0, s1; + + MZ_ASSERT((match_len >= TDEFL_MIN_MATCH_LEN) && (match_dist >= 1) && (match_dist <= TDEFL_LZ_DICT_SIZE)); + + d->m_total_lz_bytes += match_len; + + d->m_pLZ_code_buf[0] = (mz_uint8)(match_len - TDEFL_MIN_MATCH_LEN); + + match_dist -= 1; + d->m_pLZ_code_buf[1] = (mz_uint8)(match_dist & 0xFF); + d->m_pLZ_code_buf[2] = (mz_uint8)(match_dist >> 8); + d->m_pLZ_code_buf += 3; + + *d->m_pLZ_flags = (mz_uint8)((*d->m_pLZ_flags >> 1) | 0x80); + if (--d->m_num_flags_left == 0) + { + d->m_num_flags_left = 8; + d->m_pLZ_flags = d->m_pLZ_code_buf++; + } + + s0 = s_tdefl_small_dist_sym[match_dist & 511]; + s1 = s_tdefl_large_dist_sym[(match_dist >> 8) & 127]; + d->m_huff_count[1][(match_dist < 512) ? s0 : s1]++; + + if (match_len >= TDEFL_MIN_MATCH_LEN) + d->m_huff_count[0][s_tdefl_len_sym[match_len - TDEFL_MIN_MATCH_LEN]]++; +} + +static mz_bool tdefl_compress_normal(tdefl_compressor *d) +{ + const mz_uint8 *pSrc = d->m_pSrc; + size_t src_buf_left = d->m_src_buf_left; + tdefl_flush flush = d->m_flush; + + while ((src_buf_left) || ((flush) && (d->m_lookahead_size))) + { + mz_uint len_to_move, cur_match_dist, cur_match_len, cur_pos; + /* Update dictionary and hash chains. Keeps the lookahead size equal to TDEFL_MAX_MATCH_LEN. */ + if ((d->m_lookahead_size + d->m_dict_size) >= (TDEFL_MIN_MATCH_LEN - 1)) + { + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK, ins_pos = d->m_lookahead_pos + d->m_lookahead_size - 2; + mz_uint hash = (d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK]; + mz_uint num_bytes_to_process = (mz_uint)MZ_MIN(src_buf_left, TDEFL_MAX_MATCH_LEN - d->m_lookahead_size); + const mz_uint8 *pSrc_end = pSrc + num_bytes_to_process; + src_buf_left -= num_bytes_to_process; + d->m_lookahead_size += num_bytes_to_process; + while (pSrc != pSrc_end) + { + mz_uint8 c = *pSrc++; + d->m_dict[dst_pos] = c; + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + hash = ((hash << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; + d->m_hash[hash] = (mz_uint16)(ins_pos); + dst_pos = (dst_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK; + ins_pos++; + } + } + else + { + while ((src_buf_left) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + { + mz_uint8 c = *pSrc++; + mz_uint dst_pos = (d->m_lookahead_pos + d->m_lookahead_size) & TDEFL_LZ_DICT_SIZE_MASK; + src_buf_left--; + d->m_dict[dst_pos] = c; + if (dst_pos < (TDEFL_MAX_MATCH_LEN - 1)) + d->m_dict[TDEFL_LZ_DICT_SIZE + dst_pos] = c; + if ((++d->m_lookahead_size + d->m_dict_size) >= TDEFL_MIN_MATCH_LEN) + { + mz_uint ins_pos = d->m_lookahead_pos + (d->m_lookahead_size - 1) - 2; + mz_uint hash = ((d->m_dict[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] << (TDEFL_LZ_HASH_SHIFT * 2)) ^ (d->m_dict[(ins_pos + 1) & TDEFL_LZ_DICT_SIZE_MASK] << TDEFL_LZ_HASH_SHIFT) ^ c) & (TDEFL_LZ_HASH_SIZE - 1); + d->m_next[ins_pos & TDEFL_LZ_DICT_SIZE_MASK] = d->m_hash[hash]; + d->m_hash[hash] = (mz_uint16)(ins_pos); + } + } + } + d->m_dict_size = MZ_MIN(TDEFL_LZ_DICT_SIZE - d->m_lookahead_size, d->m_dict_size); + if ((!flush) && (d->m_lookahead_size < TDEFL_MAX_MATCH_LEN)) + break; + + /* Simple lazy/greedy parsing state machine. */ + len_to_move = 1; + cur_match_dist = 0; + cur_match_len = d->m_saved_match_len ? d->m_saved_match_len : (TDEFL_MIN_MATCH_LEN - 1); + cur_pos = d->m_lookahead_pos & TDEFL_LZ_DICT_SIZE_MASK; + if (d->m_flags & (TDEFL_RLE_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS)) + { + if ((d->m_dict_size) && (!(d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS))) + { + mz_uint8 c = d->m_dict[(cur_pos - 1) & TDEFL_LZ_DICT_SIZE_MASK]; + cur_match_len = 0; + while (cur_match_len < d->m_lookahead_size) + { + if (d->m_dict[cur_pos + cur_match_len] != c) + break; + cur_match_len++; + } + if (cur_match_len < TDEFL_MIN_MATCH_LEN) + cur_match_len = 0; + else + cur_match_dist = 1; + } + } + else + { + tdefl_find_match(d, d->m_lookahead_pos, d->m_dict_size, d->m_lookahead_size, &cur_match_dist, &cur_match_len); + } + if (((cur_match_len == TDEFL_MIN_MATCH_LEN) && (cur_match_dist >= 8U * 1024U)) || (cur_pos == cur_match_dist) || ((d->m_flags & TDEFL_FILTER_MATCHES) && (cur_match_len <= 5))) + { + cur_match_dist = cur_match_len = 0; + } + if (d->m_saved_match_len) + { + if (cur_match_len > d->m_saved_match_len) + { + tdefl_record_literal(d, (mz_uint8)d->m_saved_lit); + if (cur_match_len >= 128) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + d->m_saved_match_len = 0; + len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[cur_pos]; + d->m_saved_match_dist = cur_match_dist; + d->m_saved_match_len = cur_match_len; + } + } + else + { + tdefl_record_match(d, d->m_saved_match_len, d->m_saved_match_dist); + len_to_move = d->m_saved_match_len - 1; + d->m_saved_match_len = 0; + } + } + else if (!cur_match_dist) + tdefl_record_literal(d, d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]); + else if ((d->m_greedy_parsing) || (d->m_flags & TDEFL_RLE_MATCHES) || (cur_match_len >= 128)) + { + tdefl_record_match(d, cur_match_len, cur_match_dist); + len_to_move = cur_match_len; + } + else + { + d->m_saved_lit = d->m_dict[MZ_MIN(cur_pos, sizeof(d->m_dict) - 1)]; + d->m_saved_match_dist = cur_match_dist; + d->m_saved_match_len = cur_match_len; + } + /* Move the lookahead forward by len_to_move bytes. */ + d->m_lookahead_pos += len_to_move; + MZ_ASSERT(d->m_lookahead_size >= len_to_move); + d->m_lookahead_size -= len_to_move; + d->m_dict_size = MZ_MIN(d->m_dict_size + len_to_move, (mz_uint)TDEFL_LZ_DICT_SIZE); + /* Check if it's time to flush the current LZ codes to the internal output buffer. */ + if ((d->m_pLZ_code_buf > &d->m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE - 8]) || + ((d->m_total_lz_bytes > 31 * 1024) && (((((mz_uint)(d->m_pLZ_code_buf - d->m_lz_code_buf) * 115) >> 7) >= d->m_total_lz_bytes) || (d->m_flags & TDEFL_FORCE_ALL_RAW_BLOCKS)))) + { + int n; + d->m_pSrc = pSrc; + d->m_src_buf_left = src_buf_left; + if ((n = tdefl_flush_block(d, 0)) != 0) + return (n < 0) ? MZ_FALSE : MZ_TRUE; + } + } + + d->m_pSrc = pSrc; + d->m_src_buf_left = src_buf_left; + return MZ_TRUE; +} + +static tdefl_status tdefl_flush_output_buffer(tdefl_compressor *d) +{ + if (d->m_pIn_buf_size) + { + *d->m_pIn_buf_size = d->m_pSrc - (const mz_uint8 *)d->m_pIn_buf; + } + + if (d->m_pOut_buf_size) + { + size_t n = MZ_MIN(*d->m_pOut_buf_size - d->m_out_buf_ofs, d->m_output_flush_remaining); + memcpy((mz_uint8 *)d->m_pOut_buf + d->m_out_buf_ofs, d->m_output_buf + d->m_output_flush_ofs, n); + d->m_output_flush_ofs += (mz_uint)n; + d->m_output_flush_remaining -= (mz_uint)n; + d->m_out_buf_ofs += n; + + *d->m_pOut_buf_size = d->m_out_buf_ofs; + } + + return (d->m_finished && !d->m_output_flush_remaining) ? TDEFL_STATUS_DONE : TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush) +{ + if (!d) + { + if (pIn_buf_size) + *pIn_buf_size = 0; + if (pOut_buf_size) + *pOut_buf_size = 0; + return TDEFL_STATUS_BAD_PARAM; + } + + d->m_pIn_buf = pIn_buf; + d->m_pIn_buf_size = pIn_buf_size; + d->m_pOut_buf = pOut_buf; + d->m_pOut_buf_size = pOut_buf_size; + d->m_pSrc = (const mz_uint8 *)(pIn_buf); + d->m_src_buf_left = pIn_buf_size ? *pIn_buf_size : 0; + d->m_out_buf_ofs = 0; + d->m_flush = flush; + + if (((d->m_pPut_buf_func != NULL) == ((pOut_buf != NULL) || (pOut_buf_size != NULL))) || (d->m_prev_return_status != TDEFL_STATUS_OKAY) || + (d->m_wants_to_finish && (flush != TDEFL_FINISH)) || (pIn_buf_size && *pIn_buf_size && !pIn_buf) || (pOut_buf_size && *pOut_buf_size && !pOut_buf)) + { + if (pIn_buf_size) + *pIn_buf_size = 0; + if (pOut_buf_size) + *pOut_buf_size = 0; + return (d->m_prev_return_status = TDEFL_STATUS_BAD_PARAM); + } + d->m_wants_to_finish |= (flush == TDEFL_FINISH); + + if ((d->m_output_flush_remaining) || (d->m_finished)) + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN + if (((d->m_flags & TDEFL_MAX_PROBES_MASK) == 1) && + ((d->m_flags & TDEFL_GREEDY_PARSING_FLAG) != 0) && + ((d->m_flags & (TDEFL_FILTER_MATCHES | TDEFL_FORCE_ALL_RAW_BLOCKS | TDEFL_RLE_MATCHES)) == 0)) + { + if (!tdefl_compress_fast(d)) + return d->m_prev_return_status; + } + else +#endif /* #if MINIZ_USE_UNALIGNED_LOADS_AND_STORES && MINIZ_LITTLE_ENDIAN */ + { + if (!tdefl_compress_normal(d)) + return d->m_prev_return_status; + } + + if ((d->m_flags & (TDEFL_WRITE_ZLIB_HEADER | TDEFL_COMPUTE_ADLER32)) && (pIn_buf)) + d->m_adler32 = (mz_uint32)mz_adler32(d->m_adler32, (const mz_uint8 *)pIn_buf, d->m_pSrc - (const mz_uint8 *)pIn_buf); + + if ((flush) && (!d->m_lookahead_size) && (!d->m_src_buf_left) && (!d->m_output_flush_remaining)) + { + if (tdefl_flush_block(d, flush) < 0) + return d->m_prev_return_status; + d->m_finished = (flush == TDEFL_FINISH); + if (flush == TDEFL_FULL_FLUSH) + { + MZ_CLEAR_OBJ(d->m_hash); + MZ_CLEAR_OBJ(d->m_next); + d->m_dict_size = 0; + } + } + + return (d->m_prev_return_status = tdefl_flush_output_buffer(d)); +} + +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush) +{ + MZ_ASSERT(d->m_pPut_buf_func); + return tdefl_compress(d, pIn_buf, &in_buf_size, NULL, NULL, flush); +} + +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + d->m_pPut_buf_func = pPut_buf_func; + d->m_pPut_buf_user = pPut_buf_user; + d->m_flags = (mz_uint)(flags); + d->m_max_probes[0] = 1 + ((flags & 0xFFF) + 2) / 3; + d->m_greedy_parsing = (flags & TDEFL_GREEDY_PARSING_FLAG) != 0; + d->m_max_probes[1] = 1 + (((flags & 0xFFF) >> 2) + 2) / 3; + if (!(flags & TDEFL_NONDETERMINISTIC_PARSING_FLAG)) + MZ_CLEAR_OBJ(d->m_hash); + d->m_lookahead_pos = d->m_lookahead_size = d->m_dict_size = d->m_total_lz_bytes = d->m_lz_code_buf_dict_pos = d->m_bits_in = 0; + d->m_output_flush_ofs = d->m_output_flush_remaining = d->m_finished = d->m_block_index = d->m_bit_buffer = d->m_wants_to_finish = 0; + d->m_pLZ_code_buf = d->m_lz_code_buf + 1; + d->m_pLZ_flags = d->m_lz_code_buf; + d->m_num_flags_left = 8; + d->m_pOutput_buf = d->m_output_buf; + d->m_pOutput_buf_end = d->m_output_buf; + d->m_prev_return_status = TDEFL_STATUS_OKAY; + d->m_saved_match_dist = d->m_saved_match_len = d->m_saved_lit = 0; + d->m_adler32 = 1; + d->m_pIn_buf = NULL; + d->m_pOut_buf = NULL; + d->m_pIn_buf_size = NULL; + d->m_pOut_buf_size = NULL; + d->m_flush = TDEFL_NO_FLUSH; + d->m_pSrc = NULL; + d->m_src_buf_left = 0; + d->m_out_buf_ofs = 0; + memset(&d->m_huff_count[0][0], 0, sizeof(d->m_huff_count[0][0]) * TDEFL_MAX_HUFF_SYMBOLS_0); + memset(&d->m_huff_count[1][0], 0, sizeof(d->m_huff_count[1][0]) * TDEFL_MAX_HUFF_SYMBOLS_1); + return TDEFL_STATUS_OKAY; +} + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d) +{ + return d->m_prev_return_status; +} + +mz_uint32 tdefl_get_adler32(tdefl_compressor *d) +{ + return d->m_adler32; +} + +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + tdefl_compressor *pComp; + mz_bool succeeded; + if (((buf_len) && (!pBuf)) || (!pPut_buf_func)) + return MZ_FALSE; + pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); + if (!pComp) + return MZ_FALSE; + succeeded = (tdefl_init(pComp, pPut_buf_func, pPut_buf_user, flags) == TDEFL_STATUS_OKAY); + succeeded = succeeded && (tdefl_compress_buffer(pComp, pBuf, buf_len, TDEFL_FINISH) == TDEFL_STATUS_DONE); + MZ_FREE(pComp); + return succeeded; +} + +typedef struct +{ + size_t m_size, m_capacity; + mz_uint8 *m_pBuf; + mz_bool m_expandable; +} tdefl_output_buffer; + +static mz_bool tdefl_output_buffer_putter(const void *pBuf, int len, void *pUser) +{ + tdefl_output_buffer *p = (tdefl_output_buffer *)pUser; + size_t new_size = p->m_size + len; + if (new_size > p->m_capacity) + { + size_t new_capacity = p->m_capacity; + mz_uint8 *pNew_buf; + if (!p->m_expandable) + return MZ_FALSE; + do + { + new_capacity = MZ_MAX(128U, new_capacity << 1U); + } while (new_size > new_capacity); + pNew_buf = (mz_uint8 *)MZ_REALLOC(p->m_pBuf, new_capacity); + if (!pNew_buf) + return MZ_FALSE; + p->m_pBuf = pNew_buf; + p->m_capacity = new_capacity; + } + memcpy((mz_uint8 *)p->m_pBuf + p->m_size, pBuf, len); + p->m_size = new_size; + return MZ_TRUE; +} + +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tdefl_output_buffer out_buf; + MZ_CLEAR_OBJ(out_buf); + if (!pOut_len) + return MZ_FALSE; + else + *pOut_len = 0; + out_buf.m_expandable = MZ_TRUE; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) + return NULL; + *pOut_len = out_buf.m_size; + return out_buf.m_pBuf; +} + +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tdefl_output_buffer out_buf; + MZ_CLEAR_OBJ(out_buf); + if (!pOut_buf) + return 0; + out_buf.m_pBuf = (mz_uint8 *)pOut_buf; + out_buf.m_capacity = out_buf_len; + if (!tdefl_compress_mem_to_output(pSrc_buf, src_buf_len, tdefl_output_buffer_putter, &out_buf, flags)) + return 0; + return out_buf.m_size; +} + +static const mz_uint s_tdefl_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + +/* level may actually range from [0,10] (10 is a "hidden" max level, where we want a bit more compression and it's fine if throughput to fall off a cliff on some files). */ +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy) +{ + mz_uint comp_flags = s_tdefl_num_probes[(level >= 0) ? MZ_MIN(10, level) : MZ_DEFAULT_LEVEL] | ((level <= 3) ? TDEFL_GREEDY_PARSING_FLAG : 0); + if (window_bits > 0) + comp_flags |= TDEFL_WRITE_ZLIB_HEADER; + + if (!level) + comp_flags |= TDEFL_FORCE_ALL_RAW_BLOCKS; + else if (strategy == MZ_FILTERED) + comp_flags |= TDEFL_FILTER_MATCHES; + else if (strategy == MZ_HUFFMAN_ONLY) + comp_flags &= ~TDEFL_MAX_PROBES_MASK; + else if (strategy == MZ_FIXED) + comp_flags |= TDEFL_FORCE_ALL_STATIC_BLOCKS; + else if (strategy == MZ_RLE) + comp_flags |= TDEFL_RLE_MATCHES; + + return comp_flags; +} + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable : 4204) /* nonstandard extension used : non-constant aggregate initializer (also supported by GNU C and C99, so no big deal) */ +#endif + +/* Simple PNG writer function by Alex Evans, 2011. Released into the public domain: https://gist.github.com/908299, more context at + http://altdevblogaday.org/2011/04/06/a-smaller-jpg-encoder/. + This is actually a modification of Alex's original code so PNG files generated by this function pass pngcheck. */ +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip) +{ + /* Using a local copy of this array here in case MINIZ_NO_ZLIB_APIS was defined. */ + static const mz_uint s_tdefl_png_num_probes[11] = { 0, 1, 6, 32, 16, 32, 128, 256, 512, 768, 1500 }; + tdefl_compressor *pComp = (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); + tdefl_output_buffer out_buf; + int i, bpl = w * num_chans, y, z; + mz_uint32 c; + *pLen_out = 0; + if (!pComp) + return NULL; + MZ_CLEAR_OBJ(out_buf); + out_buf.m_expandable = MZ_TRUE; + out_buf.m_capacity = 57 + MZ_MAX(64, (1 + bpl) * h); + if (NULL == (out_buf.m_pBuf = (mz_uint8 *)MZ_MALLOC(out_buf.m_capacity))) + { + MZ_FREE(pComp); + return NULL; + } + /* write dummy header */ + for (z = 41; z; --z) + tdefl_output_buffer_putter(&z, 1, &out_buf); + /* compress image data */ + tdefl_init(pComp, tdefl_output_buffer_putter, &out_buf, s_tdefl_png_num_probes[MZ_MIN(10, level)] | TDEFL_WRITE_ZLIB_HEADER); + for (y = 0; y < h; ++y) + { + tdefl_compress_buffer(pComp, &z, 1, TDEFL_NO_FLUSH); + tdefl_compress_buffer(pComp, (mz_uint8 *)pImage + (flip ? (h - 1 - y) : y) * bpl, bpl, TDEFL_NO_FLUSH); + } + if (tdefl_compress_buffer(pComp, NULL, 0, TDEFL_FINISH) != TDEFL_STATUS_DONE) + { + MZ_FREE(pComp); + MZ_FREE(out_buf.m_pBuf); + return NULL; + } + /* write real header */ + *pLen_out = out_buf.m_size - 41; + { + static const mz_uint8 chans[] = { 0x00, 0x00, 0x04, 0x02, 0x06 }; + mz_uint8 pnghdr[41] = { 0x89, 0x50, 0x4e, 0x47, 0x0d, + 0x0a, 0x1a, 0x0a, 0x00, 0x00, + 0x00, 0x0d, 0x49, 0x48, 0x44, + 0x52, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x49, 0x44, 0x41, + 0x54 }; + pnghdr[18] = (mz_uint8)(w >> 8); + pnghdr[19] = (mz_uint8)w; + pnghdr[22] = (mz_uint8)(h >> 8); + pnghdr[22] = (mz_uint8)h; + pnghdr[25] = chans[num_chans]; + pnghdr[33] = (mz_uint8)(*pLen_out >> 24); + pnghdr[34] = (mz_uint8)(*pLen_out >> 16); + pnghdr[35] = (mz_uint8)(*pLen_out >> 8); + pnghdr[36] = (mz_uint8)*pLen_out; + c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, pnghdr + 12, 17); + for (i = 0; i < 4; ++i, c <<= 8) + ((mz_uint8 *)(pnghdr + 29))[i] = (mz_uint8)(c >> 24); + memcpy(out_buf.m_pBuf, pnghdr, 41); + } + /* write footer (IDAT CRC-32, followed by IEND chunk) */ + if (!tdefl_output_buffer_putter("\0\0\0\0\0\0\0\0\x49\x45\x4e\x44\xae\x42\x60\x82", 16, &out_buf)) + { + *pLen_out = 0; + MZ_FREE(pComp); + MZ_FREE(out_buf.m_pBuf); + return NULL; + } + c = (mz_uint32)mz_crc32(MZ_CRC32_INIT, out_buf.m_pBuf + 41 - 4, *pLen_out + 4); + for (i = 0; i < 4; ++i, c <<= 8) + (out_buf.m_pBuf + out_buf.m_size - 16)[i] = (mz_uint8)(c >> 24); + /* compute final size of file, grab compressed data buffer and return */ + *pLen_out += 57; + MZ_FREE(pComp); + return out_buf.m_pBuf; +} +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out) +{ + /* Level 6 corresponds to TDEFL_DEFAULT_MAX_PROBES or MZ_DEFAULT_LEVEL (but we can't depend on MZ_DEFAULT_LEVEL being available in case the zlib API's where #defined out) */ + return tdefl_write_image_to_png_file_in_memory_ex(pImage, w, h, num_chans, pLen_out, 6, MZ_FALSE); +} + +/* Allocate the tdefl_compressor and tinfl_decompressor structures in C so that */ +/* non-C language bindings to tdefL_ and tinfl_ API don't need to worry about */ +/* structure size and allocation mechanism. */ +tdefl_compressor *tdefl_compressor_alloc() +{ + return (tdefl_compressor *)MZ_MALLOC(sizeof(tdefl_compressor)); +} + +void tdefl_compressor_free(tdefl_compressor *pComp) +{ + MZ_FREE(pComp); +} + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +#ifdef __cplusplus +} +#endif +/************************************************************************** + * + * Copyright 2013-2014 RAD Game Tools and Valve Software + * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + **************************************************************************/ + + + +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------------- Low-level Decompression (completely independent from all compression API's) */ + +#define TINFL_MEMCPY(d, s, l) memcpy(d, s, l) +#define TINFL_MEMSET(p, c, l) memset(p, c, l) + +#define TINFL_CR_BEGIN \ + switch (r->m_state) \ + { \ + case 0: +#define TINFL_CR_RETURN(state_index, result) \ + do \ + { \ + status = result; \ + r->m_state = state_index; \ + goto common_exit; \ + case state_index: \ + ; \ + } \ + MZ_MACRO_END +#define TINFL_CR_RETURN_FOREVER(state_index, result) \ + do \ + { \ + for (;;) \ + { \ + TINFL_CR_RETURN(state_index, result); \ + } \ + } \ + MZ_MACRO_END +#define TINFL_CR_FINISH } + +#define TINFL_GET_BYTE(state_index, c) \ + do \ + { \ + while (pIn_buf_cur >= pIn_buf_end) \ + { \ + TINFL_CR_RETURN(state_index, (decomp_flags &TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); \ + } \ + c = *pIn_buf_cur++; \ + } \ + MZ_MACRO_END + +#define TINFL_NEED_BITS(state_index, n) \ + do \ + { \ + mz_uint c; \ + TINFL_GET_BYTE(state_index, c); \ + bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ + num_bits += 8; \ + } while (num_bits < (mz_uint)(n)) +#define TINFL_SKIP_BITS(state_index, n) \ + do \ + { \ + if (num_bits < (mz_uint)(n)) \ + { \ + TINFL_NEED_BITS(state_index, n); \ + } \ + bit_buf >>= (n); \ + num_bits -= (n); \ + } \ + MZ_MACRO_END +#define TINFL_GET_BITS(state_index, b, n) \ + do \ + { \ + if (num_bits < (mz_uint)(n)) \ + { \ + TINFL_NEED_BITS(state_index, n); \ + } \ + b = bit_buf & ((1 << (n)) - 1); \ + bit_buf >>= (n); \ + num_bits -= (n); \ + } \ + MZ_MACRO_END + +/* TINFL_HUFF_BITBUF_FILL() is only used rarely, when the number of bytes remaining in the input buffer falls below 2. */ +/* It reads just enough bytes from the input stream that are needed to decode the next Huffman code (and absolutely no more). It works by trying to fully decode a */ +/* Huffman code by using whatever bits are currently present in the bit buffer. If this fails, it reads another byte, and tries again until it succeeds or until the */ +/* bit buffer contains >=15 bits (deflate's max. Huffman code size). */ +#define TINFL_HUFF_BITBUF_FILL(state_index, pHuff) \ + do \ + { \ + temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]; \ + if (temp >= 0) \ + { \ + code_len = temp >> 9; \ + if ((code_len) && (num_bits >= code_len)) \ + break; \ + } \ + else if (num_bits > TINFL_FAST_LOOKUP_BITS) \ + { \ + code_len = TINFL_FAST_LOOKUP_BITS; \ + do \ + { \ + temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ + } while ((temp < 0) && (num_bits >= (code_len + 1))); \ + if (temp >= 0) \ + break; \ + } \ + TINFL_GET_BYTE(state_index, c); \ + bit_buf |= (((tinfl_bit_buf_t)c) << num_bits); \ + num_bits += 8; \ + } while (num_bits < 15); + +/* TINFL_HUFF_DECODE() decodes the next Huffman coded symbol. It's more complex than you would initially expect because the zlib API expects the decompressor to never read */ +/* beyond the final byte of the deflate stream. (In other words, when this macro wants to read another byte from the input, it REALLY needs another byte in order to fully */ +/* decode the next Huffman code.) Handling this properly is particularly important on raw deflate (non-zlib) streams, which aren't followed by a byte aligned adler-32. */ +/* The slow path is only executed at the very end of the input buffer. */ +/* v1.16: The original macro handled the case at the very end of the passed-in input buffer, but we also need to handle the case where the user passes in 1+zillion bytes */ +/* following the deflate data and our non-conservative read-ahead path won't kick in here on this code. This is much trickier. */ +#define TINFL_HUFF_DECODE(state_index, sym, pHuff) \ + do \ + { \ + int temp; \ + mz_uint code_len, c; \ + if (num_bits < 15) \ + { \ + if ((pIn_buf_end - pIn_buf_cur) < 2) \ + { \ + TINFL_HUFF_BITBUF_FILL(state_index, pHuff); \ + } \ + else \ + { \ + bit_buf |= (((tinfl_bit_buf_t)pIn_buf_cur[0]) << num_bits) | (((tinfl_bit_buf_t)pIn_buf_cur[1]) << (num_bits + 8)); \ + pIn_buf_cur += 2; \ + num_bits += 16; \ + } \ + } \ + if ((temp = (pHuff)->m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) \ + code_len = temp >> 9, temp &= 511; \ + else \ + { \ + code_len = TINFL_FAST_LOOKUP_BITS; \ + do \ + { \ + temp = (pHuff)->m_tree[~temp + ((bit_buf >> code_len++) & 1)]; \ + } while (temp < 0); \ + } \ + sym = temp; \ + bit_buf >>= code_len; \ + num_bits -= code_len; \ + } \ + MZ_MACRO_END + +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags) +{ + static const int s_length_base[31] = { 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 }; + static const int s_length_extra[31] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0 }; + static const int s_dist_base[32] = { 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0 }; + static const int s_dist_extra[32] = { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 }; + static const mz_uint8 s_length_dezigzag[19] = { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; + static const int s_min_table_sizes[3] = { 257, 1, 4 }; + + tinfl_status status = TINFL_STATUS_FAILED; + mz_uint32 num_bits, dist, counter, num_extra; + tinfl_bit_buf_t bit_buf; + const mz_uint8 *pIn_buf_cur = pIn_buf_next, *const pIn_buf_end = pIn_buf_next + *pIn_buf_size; + mz_uint8 *pOut_buf_cur = pOut_buf_next, *const pOut_buf_end = pOut_buf_next + *pOut_buf_size; + size_t out_buf_size_mask = (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF) ? (size_t) - 1 : ((pOut_buf_next - pOut_buf_start) + *pOut_buf_size) - 1, dist_from_out_buf_start; + + /* Ensure the output buffer's size is a power of 2, unless the output buffer is large enough to hold the entire output file (in which case it doesn't matter). */ + if (((out_buf_size_mask + 1) & out_buf_size_mask) || (pOut_buf_next < pOut_buf_start)) + { + *pIn_buf_size = *pOut_buf_size = 0; + return TINFL_STATUS_BAD_PARAM; + } + + num_bits = r->m_num_bits; + bit_buf = r->m_bit_buf; + dist = r->m_dist; + counter = r->m_counter; + num_extra = r->m_num_extra; + dist_from_out_buf_start = r->m_dist_from_out_buf_start; + TINFL_CR_BEGIN + + bit_buf = num_bits = dist = counter = num_extra = r->m_zhdr0 = r->m_zhdr1 = 0; + r->m_z_adler32 = r->m_check_adler32 = 1; + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + TINFL_GET_BYTE(1, r->m_zhdr0); + TINFL_GET_BYTE(2, r->m_zhdr1); + counter = (((r->m_zhdr0 * 256 + r->m_zhdr1) % 31 != 0) || (r->m_zhdr1 & 32) || ((r->m_zhdr0 & 15) != 8)); + if (!(decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) + counter |= (mz_uint32)(((1U << (8U + (r->m_zhdr0 >> 4))) > 32768U) || ((out_buf_size_mask + 1) < (mz_uint32)(1U << (8U + (r->m_zhdr0 >> 4))))); + if (counter) + { + TINFL_CR_RETURN_FOREVER(36, TINFL_STATUS_FAILED); + } + } + + do + { + TINFL_GET_BITS(3, r->m_final, 3); + r->m_type = r->m_final >> 1; + if (r->m_type == 0) + { + TINFL_SKIP_BITS(5, num_bits & 7); + for (counter = 0; counter < 4; ++counter) + { + if (num_bits) + TINFL_GET_BITS(6, r->m_raw_header[counter], 8); + else + TINFL_GET_BYTE(7, r->m_raw_header[counter]); + } + if ((counter = (r->m_raw_header[0] | (r->m_raw_header[1] << 8))) != (mz_uint)(0xFFFF ^ (r->m_raw_header[2] | (r->m_raw_header[3] << 8)))) + { + TINFL_CR_RETURN_FOREVER(39, TINFL_STATUS_FAILED); + } + while ((counter) && (num_bits)) + { + TINFL_GET_BITS(51, dist, 8); + while (pOut_buf_cur >= pOut_buf_end) + { + TINFL_CR_RETURN(52, TINFL_STATUS_HAS_MORE_OUTPUT); + } + *pOut_buf_cur++ = (mz_uint8)dist; + counter--; + } + while (counter) + { + size_t n; + while (pOut_buf_cur >= pOut_buf_end) + { + TINFL_CR_RETURN(9, TINFL_STATUS_HAS_MORE_OUTPUT); + } + while (pIn_buf_cur >= pIn_buf_end) + { + TINFL_CR_RETURN(38, (decomp_flags & TINFL_FLAG_HAS_MORE_INPUT) ? TINFL_STATUS_NEEDS_MORE_INPUT : TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS); + } + n = MZ_MIN(MZ_MIN((size_t)(pOut_buf_end - pOut_buf_cur), (size_t)(pIn_buf_end - pIn_buf_cur)), counter); + TINFL_MEMCPY(pOut_buf_cur, pIn_buf_cur, n); + pIn_buf_cur += n; + pOut_buf_cur += n; + counter -= (mz_uint)n; + } + } + else if (r->m_type == 3) + { + TINFL_CR_RETURN_FOREVER(10, TINFL_STATUS_FAILED); + } + else + { + if (r->m_type == 1) + { + mz_uint8 *p = r->m_tables[0].m_code_size; + mz_uint i; + r->m_table_sizes[0] = 288; + r->m_table_sizes[1] = 32; + TINFL_MEMSET(r->m_tables[1].m_code_size, 5, 32); + for (i = 0; i <= 143; ++i) + *p++ = 8; + for (; i <= 255; ++i) + *p++ = 9; + for (; i <= 279; ++i) + *p++ = 7; + for (; i <= 287; ++i) + *p++ = 8; + } + else + { + for (counter = 0; counter < 3; counter++) + { + TINFL_GET_BITS(11, r->m_table_sizes[counter], "\05\05\04"[counter]); + r->m_table_sizes[counter] += s_min_table_sizes[counter]; + } + MZ_CLEAR_OBJ(r->m_tables[2].m_code_size); + for (counter = 0; counter < r->m_table_sizes[2]; counter++) + { + mz_uint s; + TINFL_GET_BITS(14, s, 3); + r->m_tables[2].m_code_size[s_length_dezigzag[counter]] = (mz_uint8)s; + } + r->m_table_sizes[2] = 19; + } + for (; (int)r->m_type >= 0; r->m_type--) + { + int tree_next, tree_cur; + tinfl_huff_table *pTable; + mz_uint i, j, used_syms, total, sym_index, next_code[17], total_syms[16]; + pTable = &r->m_tables[r->m_type]; + MZ_CLEAR_OBJ(total_syms); + MZ_CLEAR_OBJ(pTable->m_look_up); + MZ_CLEAR_OBJ(pTable->m_tree); + for (i = 0; i < r->m_table_sizes[r->m_type]; ++i) + total_syms[pTable->m_code_size[i]]++; + used_syms = 0, total = 0; + next_code[0] = next_code[1] = 0; + for (i = 1; i <= 15; ++i) + { + used_syms += total_syms[i]; + next_code[i + 1] = (total = ((total + total_syms[i]) << 1)); + } + if ((65536 != total) && (used_syms > 1)) + { + TINFL_CR_RETURN_FOREVER(35, TINFL_STATUS_FAILED); + } + for (tree_next = -1, sym_index = 0; sym_index < r->m_table_sizes[r->m_type]; ++sym_index) + { + mz_uint rev_code = 0, l, cur_code, code_size = pTable->m_code_size[sym_index]; + if (!code_size) + continue; + cur_code = next_code[code_size]++; + for (l = code_size; l > 0; l--, cur_code >>= 1) + rev_code = (rev_code << 1) | (cur_code & 1); + if (code_size <= TINFL_FAST_LOOKUP_BITS) + { + mz_int16 k = (mz_int16)((code_size << 9) | sym_index); + while (rev_code < TINFL_FAST_LOOKUP_SIZE) + { + pTable->m_look_up[rev_code] = k; + rev_code += (1 << code_size); + } + continue; + } + if (0 == (tree_cur = pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)])) + { + pTable->m_look_up[rev_code & (TINFL_FAST_LOOKUP_SIZE - 1)] = (mz_int16)tree_next; + tree_cur = tree_next; + tree_next -= 2; + } + rev_code >>= (TINFL_FAST_LOOKUP_BITS - 1); + for (j = code_size; j > (TINFL_FAST_LOOKUP_BITS + 1); j--) + { + tree_cur -= ((rev_code >>= 1) & 1); + if (!pTable->m_tree[-tree_cur - 1]) + { + pTable->m_tree[-tree_cur - 1] = (mz_int16)tree_next; + tree_cur = tree_next; + tree_next -= 2; + } + else + tree_cur = pTable->m_tree[-tree_cur - 1]; + } + tree_cur -= ((rev_code >>= 1) & 1); + pTable->m_tree[-tree_cur - 1] = (mz_int16)sym_index; + } + if (r->m_type == 2) + { + for (counter = 0; counter < (r->m_table_sizes[0] + r->m_table_sizes[1]);) + { + mz_uint s; + TINFL_HUFF_DECODE(16, dist, &r->m_tables[2]); + if (dist < 16) + { + r->m_len_codes[counter++] = (mz_uint8)dist; + continue; + } + if ((dist == 16) && (!counter)) + { + TINFL_CR_RETURN_FOREVER(17, TINFL_STATUS_FAILED); + } + num_extra = "\02\03\07"[dist - 16]; + TINFL_GET_BITS(18, s, num_extra); + s += "\03\03\013"[dist - 16]; + TINFL_MEMSET(r->m_len_codes + counter, (dist == 16) ? r->m_len_codes[counter - 1] : 0, s); + counter += s; + } + if ((r->m_table_sizes[0] + r->m_table_sizes[1]) != counter) + { + TINFL_CR_RETURN_FOREVER(21, TINFL_STATUS_FAILED); + } + TINFL_MEMCPY(r->m_tables[0].m_code_size, r->m_len_codes, r->m_table_sizes[0]); + TINFL_MEMCPY(r->m_tables[1].m_code_size, r->m_len_codes + r->m_table_sizes[0], r->m_table_sizes[1]); + } + } + for (;;) + { + mz_uint8 *pSrc; + for (;;) + { + if (((pIn_buf_end - pIn_buf_cur) < 4) || ((pOut_buf_end - pOut_buf_cur) < 2)) + { + TINFL_HUFF_DECODE(23, counter, &r->m_tables[0]); + if (counter >= 256) + break; + while (pOut_buf_cur >= pOut_buf_end) + { + TINFL_CR_RETURN(24, TINFL_STATUS_HAS_MORE_OUTPUT); + } + *pOut_buf_cur++ = (mz_uint8)counter; + } + else + { + int sym2; + mz_uint code_len; +#if TINFL_USE_64BIT_BITBUF + if (num_bits < 30) + { + bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE32(pIn_buf_cur)) << num_bits); + pIn_buf_cur += 4; + num_bits += 32; + } +#else + if (num_bits < 15) + { + bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); + pIn_buf_cur += 2; + num_bits += 16; + } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; + do + { + sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; + } while (sym2 < 0); + } + counter = sym2; + bit_buf >>= code_len; + num_bits -= code_len; + if (counter & 256) + break; + +#if !TINFL_USE_64BIT_BITBUF + if (num_bits < 15) + { + bit_buf |= (((tinfl_bit_buf_t)MZ_READ_LE16(pIn_buf_cur)) << num_bits); + pIn_buf_cur += 2; + num_bits += 16; + } +#endif + if ((sym2 = r->m_tables[0].m_look_up[bit_buf & (TINFL_FAST_LOOKUP_SIZE - 1)]) >= 0) + code_len = sym2 >> 9; + else + { + code_len = TINFL_FAST_LOOKUP_BITS; + do + { + sym2 = r->m_tables[0].m_tree[~sym2 + ((bit_buf >> code_len++) & 1)]; + } while (sym2 < 0); + } + bit_buf >>= code_len; + num_bits -= code_len; + + pOut_buf_cur[0] = (mz_uint8)counter; + if (sym2 & 256) + { + pOut_buf_cur++; + counter = sym2; + break; + } + pOut_buf_cur[1] = (mz_uint8)sym2; + pOut_buf_cur += 2; + } + } + if ((counter &= 511) == 256) + break; + + num_extra = s_length_extra[counter - 257]; + counter = s_length_base[counter - 257]; + if (num_extra) + { + mz_uint extra_bits; + TINFL_GET_BITS(25, extra_bits, num_extra); + counter += extra_bits; + } + + TINFL_HUFF_DECODE(26, dist, &r->m_tables[1]); + num_extra = s_dist_extra[dist]; + dist = s_dist_base[dist]; + if (num_extra) + { + mz_uint extra_bits; + TINFL_GET_BITS(27, extra_bits, num_extra); + dist += extra_bits; + } + + dist_from_out_buf_start = pOut_buf_cur - pOut_buf_start; + if ((dist > dist_from_out_buf_start) && (decomp_flags & TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF)) + { + TINFL_CR_RETURN_FOREVER(37, TINFL_STATUS_FAILED); + } + + pSrc = pOut_buf_start + ((dist_from_out_buf_start - dist) & out_buf_size_mask); + + if ((MZ_MAX(pOut_buf_cur, pSrc) + counter) > pOut_buf_end) + { + while (counter--) + { + while (pOut_buf_cur >= pOut_buf_end) + { + TINFL_CR_RETURN(53, TINFL_STATUS_HAS_MORE_OUTPUT); + } + *pOut_buf_cur++ = pOut_buf_start[(dist_from_out_buf_start++ - dist) & out_buf_size_mask]; + } + continue; + } +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES + else if ((counter >= 9) && (counter <= dist)) + { + const mz_uint8 *pSrc_end = pSrc + (counter & ~7); + do + { + ((mz_uint32 *)pOut_buf_cur)[0] = ((const mz_uint32 *)pSrc)[0]; + ((mz_uint32 *)pOut_buf_cur)[1] = ((const mz_uint32 *)pSrc)[1]; + pOut_buf_cur += 8; + } while ((pSrc += 8) < pSrc_end); + if ((counter &= 7) < 3) + { + if (counter) + { + pOut_buf_cur[0] = pSrc[0]; + if (counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + continue; + } + } +#endif + do + { + pOut_buf_cur[0] = pSrc[0]; + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur[2] = pSrc[2]; + pOut_buf_cur += 3; + pSrc += 3; + } while ((int)(counter -= 3) > 2); + if ((int)counter > 0) + { + pOut_buf_cur[0] = pSrc[0]; + if ((int)counter > 1) + pOut_buf_cur[1] = pSrc[1]; + pOut_buf_cur += counter; + } + } + } + } while (!(r->m_final & 1)); + + /* Ensure byte alignment and put back any bytes from the bitbuf if we've looked ahead too far on gzip, or other Deflate streams followed by arbitrary data. */ + /* I'm being super conservative here. A number of simplifications can be made to the byte alignment part, and the Adler32 check shouldn't ever need to worry about reading from the bitbuf now. */ + TINFL_SKIP_BITS(32, num_bits & 7); + while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) + { + --pIn_buf_cur; + num_bits -= 8; + } + bit_buf &= (tinfl_bit_buf_t)(( ((mz_uint64)1) << num_bits) - (mz_uint64)1); + MZ_ASSERT(!num_bits); /* if this assert fires then we've read beyond the end of non-deflate/zlib streams with following data (such as gzip streams). */ + + if (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) + { + for (counter = 0; counter < 4; ++counter) + { + mz_uint s; + if (num_bits) + TINFL_GET_BITS(41, s, 8); + else + TINFL_GET_BYTE(42, s); + r->m_z_adler32 = (r->m_z_adler32 << 8) | s; + } + } + TINFL_CR_RETURN_FOREVER(34, TINFL_STATUS_DONE); + + TINFL_CR_FINISH + +common_exit: + /* As long as we aren't telling the caller that we NEED more input to make forward progress: */ + /* Put back any bytes from the bitbuf in case we've looked ahead too far on gzip, or other Deflate streams followed by arbitrary data. */ + /* We need to be very careful here to NOT push back any bytes we definitely know we need to make forward progress, though, or we'll lock the caller up into an inf loop. */ + if ((status != TINFL_STATUS_NEEDS_MORE_INPUT) && (status != TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS)) + { + while ((pIn_buf_cur > pIn_buf_next) && (num_bits >= 8)) + { + --pIn_buf_cur; + num_bits -= 8; + } + } + r->m_num_bits = num_bits; + r->m_bit_buf = bit_buf & (tinfl_bit_buf_t)(( ((mz_uint64)1) << num_bits) - (mz_uint64)1); + r->m_dist = dist; + r->m_counter = counter; + r->m_num_extra = num_extra; + r->m_dist_from_out_buf_start = dist_from_out_buf_start; + *pIn_buf_size = pIn_buf_cur - pIn_buf_next; + *pOut_buf_size = pOut_buf_cur - pOut_buf_next; + if ((decomp_flags & (TINFL_FLAG_PARSE_ZLIB_HEADER | TINFL_FLAG_COMPUTE_ADLER32)) && (status >= 0)) + { + const mz_uint8 *ptr = pOut_buf_next; + size_t buf_len = *pOut_buf_size; + mz_uint32 i, s1 = r->m_check_adler32 & 0xffff, s2 = r->m_check_adler32 >> 16; + size_t block_len = buf_len % 5552; + while (buf_len) + { + for (i = 0; i + 7 < block_len; i += 8, ptr += 8) + { + s1 += ptr[0], s2 += s1; + s1 += ptr[1], s2 += s1; + s1 += ptr[2], s2 += s1; + s1 += ptr[3], s2 += s1; + s1 += ptr[4], s2 += s1; + s1 += ptr[5], s2 += s1; + s1 += ptr[6], s2 += s1; + s1 += ptr[7], s2 += s1; + } + for (; i < block_len; ++i) + s1 += *ptr++, s2 += s1; + s1 %= 65521U, s2 %= 65521U; + buf_len -= block_len; + block_len = 5552; + } + r->m_check_adler32 = (s2 << 16) + s1; + if ((status == TINFL_STATUS_DONE) && (decomp_flags & TINFL_FLAG_PARSE_ZLIB_HEADER) && (r->m_check_adler32 != r->m_z_adler32)) + status = TINFL_STATUS_ADLER32_MISMATCH; + } + return status; +} + +/* Higher level helper functions. */ +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags) +{ + tinfl_decompressor decomp; + void *pBuf = NULL, *pNew_buf; + size_t src_buf_ofs = 0, out_buf_capacity = 0; + *pOut_len = 0; + tinfl_init(&decomp); + for (;;) + { + size_t src_buf_size = src_buf_len - src_buf_ofs, dst_buf_size = out_buf_capacity - *pOut_len, new_out_buf_capacity; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf + src_buf_ofs, &src_buf_size, (mz_uint8 *)pBuf, pBuf ? (mz_uint8 *)pBuf + *pOut_len : NULL, &dst_buf_size, + (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + if ((status < 0) || (status == TINFL_STATUS_NEEDS_MORE_INPUT)) + { + MZ_FREE(pBuf); + *pOut_len = 0; + return NULL; + } + src_buf_ofs += src_buf_size; + *pOut_len += dst_buf_size; + if (status == TINFL_STATUS_DONE) + break; + new_out_buf_capacity = out_buf_capacity * 2; + if (new_out_buf_capacity < 128) + new_out_buf_capacity = 128; + pNew_buf = MZ_REALLOC(pBuf, new_out_buf_capacity); + if (!pNew_buf) + { + MZ_FREE(pBuf); + *pOut_len = 0; + return NULL; + } + pBuf = pNew_buf; + out_buf_capacity = new_out_buf_capacity; + } + return pBuf; +} + +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags) +{ + tinfl_decompressor decomp; + tinfl_status status; + tinfl_init(&decomp); + status = tinfl_decompress(&decomp, (const mz_uint8 *)pSrc_buf, &src_buf_len, (mz_uint8 *)pOut_buf, (mz_uint8 *)pOut_buf, &out_buf_len, (flags & ~TINFL_FLAG_HAS_MORE_INPUT) | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF); + return (status != TINFL_STATUS_DONE) ? TINFL_DECOMPRESS_MEM_TO_MEM_FAILED : out_buf_len; +} + +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags) +{ + int result = 0; + tinfl_decompressor decomp; + mz_uint8 *pDict = (mz_uint8 *)MZ_MALLOC(TINFL_LZ_DICT_SIZE); + size_t in_buf_ofs = 0, dict_ofs = 0; + if (!pDict) + return TINFL_STATUS_FAILED; + tinfl_init(&decomp); + for (;;) + { + size_t in_buf_size = *pIn_buf_size - in_buf_ofs, dst_buf_size = TINFL_LZ_DICT_SIZE - dict_ofs; + tinfl_status status = tinfl_decompress(&decomp, (const mz_uint8 *)pIn_buf + in_buf_ofs, &in_buf_size, pDict, pDict + dict_ofs, &dst_buf_size, + (flags & ~(TINFL_FLAG_HAS_MORE_INPUT | TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF))); + in_buf_ofs += in_buf_size; + if ((dst_buf_size) && (!(*pPut_buf_func)(pDict + dict_ofs, (int)dst_buf_size, pPut_buf_user))) + break; + if (status != TINFL_STATUS_HAS_MORE_OUTPUT) + { + result = (status == TINFL_STATUS_DONE); + break; + } + dict_ofs = (dict_ofs + dst_buf_size) & (TINFL_LZ_DICT_SIZE - 1); + } + MZ_FREE(pDict); + *pIn_buf_size = in_buf_ofs; + return result; +} + +tinfl_decompressor *tinfl_decompressor_alloc() +{ + tinfl_decompressor *pDecomp = (tinfl_decompressor *)MZ_MALLOC(sizeof(tinfl_decompressor)); + if (pDecomp) + tinfl_init(pDecomp); + return pDecomp; +} + +void tinfl_decompressor_free(tinfl_decompressor *pDecomp) +{ + MZ_FREE(pDecomp); +} + +#ifdef __cplusplus +} +#endif +/************************************************************************** + * + * Copyright 2013-2014 RAD Game Tools and Valve Software + * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC + * Copyright 2016 Martin Raiber + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + **************************************************************************/ + + +#ifndef MINIZ_NO_ARCHIVE_APIS + +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------------- .ZIP archive reading */ + +#ifdef MINIZ_NO_STDIO +#define MZ_FILE void * +#else +#include + +#if defined(_MSC_VER) || defined(__MINGW64__) +static FILE *mz_fopen(const char *pFilename, const char *pMode) +{ + FILE *pFile = NULL; + fopen_s(&pFile, pFilename, pMode); + return pFile; +} +static FILE *mz_freopen(const char *pPath, const char *pMode, FILE *pStream) +{ + FILE *pFile = NULL; + if (freopen_s(&pFile, pPath, pMode, pStream)) + return NULL; + return pFile; +} +#ifndef MINIZ_NO_TIME +#include +#endif +#define MZ_FOPEN mz_fopen +#define MZ_FCLOSE fclose +#define MZ_FREAD fread +#define MZ_FWRITE fwrite +#define MZ_FTELL64 _ftelli64 +#define MZ_FSEEK64 _fseeki64 +#define MZ_FILE_STAT_STRUCT _stat +#define MZ_FILE_STAT _stat +#define MZ_FFLUSH fflush +#define MZ_FREOPEN mz_freopen +#define MZ_DELETE_FILE remove +#elif defined(__MINGW32__) +#ifndef MINIZ_NO_TIME +#include +#endif +#define MZ_FOPEN(f, m) fopen(f, m) +#define MZ_FCLOSE fclose +#define MZ_FREAD fread +#define MZ_FWRITE fwrite +#define MZ_FTELL64 ftello64 +#define MZ_FSEEK64 fseeko64 +#define MZ_FILE_STAT_STRUCT _stat +#define MZ_FILE_STAT _stat +#define MZ_FFLUSH fflush +#define MZ_FREOPEN(f, m, s) freopen(f, m, s) +#define MZ_DELETE_FILE remove +#elif defined(__TINYC__) +#ifndef MINIZ_NO_TIME +#include +#endif +#define MZ_FOPEN(f, m) fopen(f, m) +#define MZ_FCLOSE fclose +#define MZ_FREAD fread +#define MZ_FWRITE fwrite +#define MZ_FTELL64 ftell +#define MZ_FSEEK64 fseek +#define MZ_FILE_STAT_STRUCT stat +#define MZ_FILE_STAT stat +#define MZ_FFLUSH fflush +#define MZ_FREOPEN(f, m, s) freopen(f, m, s) +#define MZ_DELETE_FILE remove +#elif defined(__GNUC__) && _LARGEFILE64_SOURCE +#ifndef MINIZ_NO_TIME +#include +#endif +#define MZ_FOPEN(f, m) fopen64(f, m) +#define MZ_FCLOSE fclose +#define MZ_FREAD fread +#define MZ_FWRITE fwrite +#define MZ_FTELL64 ftello64 +#define MZ_FSEEK64 fseeko64 +#define MZ_FILE_STAT_STRUCT stat64 +#define MZ_FILE_STAT stat64 +#define MZ_FFLUSH fflush +#define MZ_FREOPEN(p, m, s) freopen64(p, m, s) +#define MZ_DELETE_FILE remove +#elif defined(__APPLE__) && _LARGEFILE64_SOURCE +#ifndef MINIZ_NO_TIME +#include +#endif +#define MZ_FOPEN(f, m) fopen(f, m) +#define MZ_FCLOSE fclose +#define MZ_FREAD fread +#define MZ_FWRITE fwrite +#define MZ_FTELL64 ftello +#define MZ_FSEEK64 fseeko +#define MZ_FILE_STAT_STRUCT stat +#define MZ_FILE_STAT stat +#define MZ_FFLUSH fflush +#define MZ_FREOPEN(p, m, s) freopen(p, m, s) +#define MZ_DELETE_FILE remove + +#else +#pragma message("Using fopen, ftello, fseeko, stat() etc. path for file I/O - this path may not support large files.") +#ifndef MINIZ_NO_TIME +#include +#endif +#define MZ_FOPEN(f, m) fopen(f, m) +#define MZ_FCLOSE fclose +#define MZ_FREAD fread +#define MZ_FWRITE fwrite +#ifdef __STRICT_ANSI__ +#define MZ_FTELL64 ftell +#define MZ_FSEEK64 fseek +#else +#define MZ_FTELL64 ftello +#define MZ_FSEEK64 fseeko +#endif +#define MZ_FILE_STAT_STRUCT stat +#define MZ_FILE_STAT stat +#define MZ_FFLUSH fflush +#define MZ_FREOPEN(f, m, s) freopen(f, m, s) +#define MZ_DELETE_FILE remove +#endif /* #ifdef _MSC_VER */ +#endif /* #ifdef MINIZ_NO_STDIO */ + +#define MZ_TOLOWER(c) ((((c) >= 'A') && ((c) <= 'Z')) ? ((c) - 'A' + 'a') : (c)) + +/* Various ZIP archive enums. To completely avoid cross platform compiler alignment and platform endian issues, miniz.c doesn't use structs for any of this stuff. */ +enum +{ + /* ZIP archive identifiers and record sizes */ + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06054b50, + MZ_ZIP_CENTRAL_DIR_HEADER_SIG = 0x02014b50, + MZ_ZIP_LOCAL_DIR_HEADER_SIG = 0x04034b50, + MZ_ZIP_LOCAL_DIR_HEADER_SIZE = 30, + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE = 46, + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE = 22, + + /* ZIP64 archive identifier and record sizes */ + MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG = 0x06064b50, + MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG = 0x07064b50, + MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE = 56, + MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE = 20, + MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID = 0x0001, + MZ_ZIP_DATA_DESCRIPTOR_ID = 0x08074b50, + MZ_ZIP_DATA_DESCRIPTER_SIZE64 = 24, + MZ_ZIP_DATA_DESCRIPTER_SIZE32 = 16, + + /* Central directory header record offsets */ + MZ_ZIP_CDH_SIG_OFS = 0, + MZ_ZIP_CDH_VERSION_MADE_BY_OFS = 4, + MZ_ZIP_CDH_VERSION_NEEDED_OFS = 6, + MZ_ZIP_CDH_BIT_FLAG_OFS = 8, + MZ_ZIP_CDH_METHOD_OFS = 10, + MZ_ZIP_CDH_FILE_TIME_OFS = 12, + MZ_ZIP_CDH_FILE_DATE_OFS = 14, + MZ_ZIP_CDH_CRC32_OFS = 16, + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS = 20, + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS = 24, + MZ_ZIP_CDH_FILENAME_LEN_OFS = 28, + MZ_ZIP_CDH_EXTRA_LEN_OFS = 30, + MZ_ZIP_CDH_COMMENT_LEN_OFS = 32, + MZ_ZIP_CDH_DISK_START_OFS = 34, + MZ_ZIP_CDH_INTERNAL_ATTR_OFS = 36, + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS = 38, + MZ_ZIP_CDH_LOCAL_HEADER_OFS = 42, + + /* Local directory header offsets */ + MZ_ZIP_LDH_SIG_OFS = 0, + MZ_ZIP_LDH_VERSION_NEEDED_OFS = 4, + MZ_ZIP_LDH_BIT_FLAG_OFS = 6, + MZ_ZIP_LDH_METHOD_OFS = 8, + MZ_ZIP_LDH_FILE_TIME_OFS = 10, + MZ_ZIP_LDH_FILE_DATE_OFS = 12, + MZ_ZIP_LDH_CRC32_OFS = 14, + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS = 18, + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS = 22, + MZ_ZIP_LDH_FILENAME_LEN_OFS = 26, + MZ_ZIP_LDH_EXTRA_LEN_OFS = 28, + MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR = 1 << 3, + + /* End of central directory offsets */ + MZ_ZIP_ECDH_SIG_OFS = 0, + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS = 4, + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS = 6, + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 8, + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS = 10, + MZ_ZIP_ECDH_CDIR_SIZE_OFS = 12, + MZ_ZIP_ECDH_CDIR_OFS_OFS = 16, + MZ_ZIP_ECDH_COMMENT_SIZE_OFS = 20, + + /* ZIP64 End of central directory locator offsets */ + MZ_ZIP64_ECDL_SIG_OFS = 0, /* 4 bytes */ + MZ_ZIP64_ECDL_NUM_DISK_CDIR_OFS = 4, /* 4 bytes */ + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS = 8, /* 8 bytes */ + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS = 16, /* 4 bytes */ + + /* ZIP64 End of central directory header offsets */ + MZ_ZIP64_ECDH_SIG_OFS = 0, /* 4 bytes */ + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS = 4, /* 8 bytes */ + MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS = 12, /* 2 bytes */ + MZ_ZIP64_ECDH_VERSION_NEEDED_OFS = 14, /* 2 bytes */ + MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS = 16, /* 4 bytes */ + MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS = 20, /* 4 bytes */ + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS = 24, /* 8 bytes */ + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS = 32, /* 8 bytes */ + MZ_ZIP64_ECDH_CDIR_SIZE_OFS = 40, /* 8 bytes */ + MZ_ZIP64_ECDH_CDIR_OFS_OFS = 48, /* 8 bytes */ + MZ_ZIP_VERSION_MADE_BY_DOS_FILESYSTEM_ID = 0, + MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG = 0x10, + MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED = 1, + MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG = 32, + MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION = 64, + MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED = 8192, + MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8 = 1 << 11 +}; + +typedef struct +{ + void *m_p; + size_t m_size, m_capacity; + mz_uint m_element_size; +} mz_zip_array; + +struct mz_zip_internal_state_tag +{ + mz_zip_array m_central_dir; + mz_zip_array m_central_dir_offsets; + mz_zip_array m_sorted_central_dir_offsets; + + /* The flags passed in when the archive is initially opened. */ + uint32_t m_init_flags; + + /* MZ_TRUE if the archive has a zip64 end of central directory headers, etc. */ + mz_bool m_zip64; + + /* MZ_TRUE if we found zip64 extended info in the central directory (m_zip64 will also be slammed to true too, even if we didn't find a zip64 end of central dir header, etc.) */ + mz_bool m_zip64_has_extended_info_fields; + + /* These fields are used by the file, FILE, memory, and memory/heap read/write helpers. */ + MZ_FILE *m_pFile; + mz_uint64 m_file_archive_start_ofs; + + void *m_pMem; + size_t m_mem_size; + size_t m_mem_capacity; +}; + +#define MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(array_ptr, element_size) (array_ptr)->m_element_size = element_size + +#if defined(DEBUG) || defined(_DEBUG) || defined(NDEBUG) +static MZ_FORCEINLINE mz_uint mz_zip_array_range_check(const mz_zip_array *pArray, mz_uint index) +{ + MZ_ASSERT(index < pArray->m_size); + return index; +} +#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[mz_zip_array_range_check(array_ptr, index)] +#else +#define MZ_ZIP_ARRAY_ELEMENT(array_ptr, element_type, index) ((element_type *)((array_ptr)->m_p))[index] +#endif + +static MZ_FORCEINLINE void mz_zip_array_init(mz_zip_array *pArray, mz_uint32 element_size) +{ + memset(pArray, 0, sizeof(mz_zip_array)); + pArray->m_element_size = element_size; +} + +static MZ_FORCEINLINE void mz_zip_array_clear(mz_zip_archive *pZip, mz_zip_array *pArray) +{ + pZip->m_pFree(pZip->m_pAlloc_opaque, pArray->m_p); + memset(pArray, 0, sizeof(mz_zip_array)); +} + +static mz_bool mz_zip_array_ensure_capacity(mz_zip_archive *pZip, mz_zip_array *pArray, size_t min_new_capacity, mz_uint growing) +{ + void *pNew_p; + size_t new_capacity = min_new_capacity; + MZ_ASSERT(pArray->m_element_size); + if (pArray->m_capacity >= min_new_capacity) + return MZ_TRUE; + if (growing) + { + new_capacity = MZ_MAX(1, pArray->m_capacity); + while (new_capacity < min_new_capacity) + new_capacity *= 2; + } + if (NULL == (pNew_p = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pArray->m_p, pArray->m_element_size, new_capacity))) + return MZ_FALSE; + pArray->m_p = pNew_p; + pArray->m_capacity = new_capacity; + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_reserve(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_capacity, mz_uint growing) +{ + if (new_capacity > pArray->m_capacity) + { + if (!mz_zip_array_ensure_capacity(pZip, pArray, new_capacity, growing)) + return MZ_FALSE; + } + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_resize(mz_zip_archive *pZip, mz_zip_array *pArray, size_t new_size, mz_uint growing) +{ + if (new_size > pArray->m_capacity) + { + if (!mz_zip_array_ensure_capacity(pZip, pArray, new_size, growing)) + return MZ_FALSE; + } + pArray->m_size = new_size; + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_ensure_room(mz_zip_archive *pZip, mz_zip_array *pArray, size_t n) +{ + return mz_zip_array_reserve(pZip, pArray, pArray->m_size + n, MZ_TRUE); +} + +static MZ_FORCEINLINE mz_bool mz_zip_array_push_back(mz_zip_archive *pZip, mz_zip_array *pArray, const void *pElements, size_t n) +{ + size_t orig_size = pArray->m_size; + if (!mz_zip_array_resize(pZip, pArray, orig_size + n, MZ_TRUE)) + return MZ_FALSE; + memcpy((mz_uint8 *)pArray->m_p + orig_size * pArray->m_element_size, pElements, n * pArray->m_element_size); + return MZ_TRUE; +} + +#ifndef MINIZ_NO_TIME +static MZ_TIME_T mz_zip_dos_to_time_t(int dos_time, int dos_date) +{ + struct tm tm; + memset(&tm, 0, sizeof(tm)); + tm.tm_isdst = -1; + tm.tm_year = ((dos_date >> 9) & 127) + 1980 - 1900; + tm.tm_mon = ((dos_date >> 5) & 15) - 1; + tm.tm_mday = dos_date & 31; + tm.tm_hour = (dos_time >> 11) & 31; + tm.tm_min = (dos_time >> 5) & 63; + tm.tm_sec = (dos_time << 1) & 62; + return mktime(&tm); +} + +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS +static void mz_zip_time_t_to_dos_time(MZ_TIME_T time, mz_uint16 *pDOS_time, mz_uint16 *pDOS_date) +{ +#ifdef _MSC_VER + struct tm tm_struct; + struct tm *tm = &tm_struct; + errno_t err = localtime_s(tm, &time); + if (err) + { + *pDOS_date = 0; + *pDOS_time = 0; + return; + } +#else + struct tm *tm = localtime(&time); +#endif /* #ifdef _MSC_VER */ + + *pDOS_time = (mz_uint16)(((tm->tm_hour) << 11) + ((tm->tm_min) << 5) + ((tm->tm_sec) >> 1)); + *pDOS_date = (mz_uint16)(((tm->tm_year + 1900 - 1980) << 9) + ((tm->tm_mon + 1) << 5) + tm->tm_mday); +} +#endif /* MINIZ_NO_ARCHIVE_WRITING_APIS */ + +#ifndef MINIZ_NO_STDIO +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS +static mz_bool mz_zip_get_file_modified_time(const char *pFilename, MZ_TIME_T *pTime) +{ + struct MZ_FILE_STAT_STRUCT file_stat; + + /* On Linux with x86 glibc, this call will fail on large files (I think >= 0x80000000 bytes) unless you compiled with _LARGEFILE64_SOURCE. Argh. */ + if (MZ_FILE_STAT(pFilename, &file_stat) != 0) + return MZ_FALSE; + + *pTime = file_stat.st_mtime; + + return MZ_TRUE; +} +#endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS*/ + +static mz_bool mz_zip_set_file_times(const char *pFilename, MZ_TIME_T access_time, MZ_TIME_T modified_time) +{ + struct utimbuf t; + + memset(&t, 0, sizeof(t)); + t.actime = access_time; + t.modtime = modified_time; + + return !utime(pFilename, &t); +} +#endif /* #ifndef MINIZ_NO_STDIO */ +#endif /* #ifndef MINIZ_NO_TIME */ + +static MZ_FORCEINLINE mz_bool mz_zip_set_error(mz_zip_archive *pZip, mz_zip_error err_num) +{ + if (pZip) + pZip->m_last_error = err_num; + return MZ_FALSE; +} + +static mz_bool mz_zip_reader_init_internal(mz_zip_archive *pZip, mz_uint flags) +{ + (void)flags; + if ((!pZip) || (pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!pZip->m_pAlloc) + pZip->m_pAlloc = miniz_def_alloc_func; + if (!pZip->m_pFree) + pZip->m_pFree = miniz_def_free_func; + if (!pZip->m_pRealloc) + pZip->m_pRealloc = miniz_def_realloc_func; + + pZip->m_archive_size = 0; + pZip->m_central_directory_file_ofs = 0; + pZip->m_total_files = 0; + pZip->m_last_error = MZ_ZIP_NO_ERROR; + + if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); + pZip->m_pState->m_init_flags = flags; + pZip->m_pState->m_zip64 = MZ_FALSE; + pZip->m_pState->m_zip64_has_extended_info_fields = MZ_FALSE; + + pZip->m_zip_mode = MZ_ZIP_MODE_READING; + + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_reader_filename_less(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, mz_uint r_index) +{ + const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; + const mz_uint8 *pR = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, r_index)); + mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS), r_len = MZ_READ_LE16(pR + MZ_ZIP_CDH_FILENAME_LEN_OFS); + mz_uint8 l = 0, r = 0; + pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + pR += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + pE = pL + MZ_MIN(l_len, r_len); + while (pL < pE) + { + if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) + break; + pL++; + pR++; + } + return (pL == pE) ? (l_len < r_len) : (l < r); +} + +#define MZ_SWAP_UINT32(a, b) \ + do \ + { \ + mz_uint32 t = a; \ + a = b; \ + b = t; \ + } \ + MZ_MACRO_END + +/* Heap sort of lowercased filenames, used to help accelerate plain central directory searches by mz_zip_reader_locate_file(). (Could also use qsort(), but it could allocate memory.) */ +static void mz_zip_reader_sort_central_dir_offsets_by_filename(mz_zip_archive *pZip) +{ + mz_zip_internal_state *pState = pZip->m_pState; + const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; + const mz_zip_array *pCentral_dir = &pState->m_central_dir; + mz_uint32 *pIndices; + mz_uint32 start, end; + const mz_uint32 size = pZip->m_total_files; + + if (size <= 1U) + return; + + pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); + + start = (size - 2U) >> 1U; + for (;;) + { + mz_uint64 child, root = start; + for (;;) + { + if ((child = (root << 1U) + 1U) >= size) + break; + child += (((child + 1U) < size) && (mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U]))); + if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) + break; + MZ_SWAP_UINT32(pIndices[root], pIndices[child]); + root = child; + } + if (!start) + break; + start--; + } + + end = size - 1; + while (end > 0) + { + mz_uint64 child, root = 0; + MZ_SWAP_UINT32(pIndices[end], pIndices[0]); + for (;;) + { + if ((child = (root << 1U) + 1U) >= end) + break; + child += (((child + 1U) < end) && mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[child], pIndices[child + 1U])); + if (!mz_zip_reader_filename_less(pCentral_dir, pCentral_dir_offsets, pIndices[root], pIndices[child])) + break; + MZ_SWAP_UINT32(pIndices[root], pIndices[child]); + root = child; + } + end--; + } +} + +static mz_bool mz_zip_reader_locate_header_sig(mz_zip_archive *pZip, mz_uint32 record_sig, mz_uint32 record_size, mz_int64 *pOfs) +{ + mz_int64 cur_file_ofs; + mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; + mz_uint8 *pBuf = (mz_uint8 *)buf_u32; + + /* Basic sanity checks - reject files which are too small */ + if (pZip->m_archive_size < record_size) + return MZ_FALSE; + + /* Find the record by scanning the file from the end towards the beginning. */ + cur_file_ofs = MZ_MAX((mz_int64)pZip->m_archive_size - (mz_int64)sizeof(buf_u32), 0); + for (;;) + { + int i, n = (int)MZ_MIN(sizeof(buf_u32), pZip->m_archive_size - cur_file_ofs); + + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, n) != (mz_uint)n) + return MZ_FALSE; + + for (i = n - 4; i >= 0; --i) + { + mz_uint s = MZ_READ_LE32(pBuf + i); + if (s == record_sig) + { + if ((pZip->m_archive_size - (cur_file_ofs + i)) >= record_size) + break; + } + } + + if (i >= 0) + { + cur_file_ofs += i; + break; + } + + /* Give up if we've searched the entire file, or we've gone back "too far" (~64kb) */ + if ((!cur_file_ofs) || ((pZip->m_archive_size - cur_file_ofs) >= (MZ_UINT16_MAX + record_size))) + return MZ_FALSE; + + cur_file_ofs = MZ_MAX(cur_file_ofs - (sizeof(buf_u32) - 3), 0); + } + + *pOfs = cur_file_ofs; + return MZ_TRUE; +} + +static mz_bool mz_zip_reader_read_central_dir(mz_zip_archive *pZip, mz_uint flags) +{ + mz_uint cdir_size = 0, cdir_entries_on_this_disk = 0, num_this_disk = 0, cdir_disk_index = 0; + mz_uint64 cdir_ofs = 0; + mz_int64 cur_file_ofs = 0; + const mz_uint8 *p; + + mz_uint32 buf_u32[4096 / sizeof(mz_uint32)]; + mz_uint8 *pBuf = (mz_uint8 *)buf_u32; + mz_bool sort_central_dir = ((flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0); + mz_uint32 zip64_end_of_central_dir_locator_u32[(MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; + mz_uint8 *pZip64_locator = (mz_uint8 *)zip64_end_of_central_dir_locator_u32; + + mz_uint32 zip64_end_of_central_dir_header_u32[(MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; + mz_uint8 *pZip64_end_of_central_dir = (mz_uint8 *)zip64_end_of_central_dir_header_u32; + + mz_uint64 zip64_end_of_central_dir_ofs = 0; + + /* Basic sanity checks - reject files which are too small, and check the first 4 bytes of the file to make sure a local header is there. */ + if (pZip->m_archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); + + if (!mz_zip_reader_locate_header_sig(pZip, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE, &cur_file_ofs)) + return mz_zip_set_error(pZip, MZ_ZIP_FAILED_FINDING_CENTRAL_DIR); + + /* Read and verify the end of central directory record. */ + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + + if (MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_SIG_OFS) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG) + return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); + + if (cur_file_ofs >= (MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE + MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) + { + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs - MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE, pZip64_locator, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) == MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) + { + if (MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_SIG_OFS) == MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG) + { + zip64_end_of_central_dir_ofs = MZ_READ_LE64(pZip64_locator + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS); + if (zip64_end_of_central_dir_ofs > (pZip->m_archive_size - MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE)) + return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); + + if (pZip->m_pRead(pZip->m_pIO_opaque, zip64_end_of_central_dir_ofs, pZip64_end_of_central_dir, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) == MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) + { + if (MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIG_OFS) == MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG) + { + pZip->m_pState->m_zip64 = MZ_TRUE; + } + } + } + } + } + + pZip->m_total_files = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS); + cdir_entries_on_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); + num_this_disk = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_THIS_DISK_OFS); + cdir_disk_index = MZ_READ_LE16(pBuf + MZ_ZIP_ECDH_NUM_DISK_CDIR_OFS); + cdir_size = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_SIZE_OFS); + cdir_ofs = MZ_READ_LE32(pBuf + MZ_ZIP_ECDH_CDIR_OFS_OFS); + + if (pZip->m_pState->m_zip64) + { + mz_uint32 zip64_total_num_of_disks = MZ_READ_LE32(pZip64_locator + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS); + mz_uint64 zip64_cdir_total_entries = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS); + mz_uint64 zip64_cdir_total_entries_on_this_disk = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS); + mz_uint64 zip64_size_of_end_of_central_dir_record = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS); + mz_uint64 zip64_size_of_central_directory = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_SIZE_OFS); + + if (zip64_size_of_end_of_central_dir_record < (MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - 12)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if (zip64_total_num_of_disks != 1U) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); + + /* Check for miniz's practical limits */ + if (zip64_cdir_total_entries > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + + pZip->m_total_files = (mz_uint32)zip64_cdir_total_entries; + + if (zip64_cdir_total_entries_on_this_disk > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + + cdir_entries_on_this_disk = (mz_uint32)zip64_cdir_total_entries_on_this_disk; + + /* Check for miniz's current practical limits (sorry, this should be enough for millions of files) */ + if (zip64_size_of_central_directory > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); + + cdir_size = (mz_uint32)zip64_size_of_central_directory; + + num_this_disk = MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_NUM_THIS_DISK_OFS); + + cdir_disk_index = MZ_READ_LE32(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_NUM_DISK_CDIR_OFS); + + cdir_ofs = MZ_READ_LE64(pZip64_end_of_central_dir + MZ_ZIP64_ECDH_CDIR_OFS_OFS); + } + + if (pZip->m_total_files != cdir_entries_on_this_disk) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); + + if (((num_this_disk | cdir_disk_index) != 0) && ((num_this_disk != 1) || (cdir_disk_index != 1))) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); + + if (cdir_size < pZip->m_total_files * MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if ((cdir_ofs + (mz_uint64)cdir_size) > pZip->m_archive_size) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + pZip->m_central_directory_file_ofs = cdir_ofs; + + if (pZip->m_total_files) + { + mz_uint i, n; + /* Read the entire central directory into a heap block, and allocate another heap block to hold the unsorted central dir file record offsets, and possibly another to hold the sorted indices. */ + if ((!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir, cdir_size, MZ_FALSE)) || + (!mz_zip_array_resize(pZip, &pZip->m_pState->m_central_dir_offsets, pZip->m_total_files, MZ_FALSE))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + if (sort_central_dir) + { + if (!mz_zip_array_resize(pZip, &pZip->m_pState->m_sorted_central_dir_offsets, pZip->m_total_files, MZ_FALSE)) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (pZip->m_pRead(pZip->m_pIO_opaque, cdir_ofs, pZip->m_pState->m_central_dir.m_p, cdir_size) != cdir_size) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + + /* Now create an index into the central directory file records, do some basic sanity checking on each record */ + p = (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p; + for (n = cdir_size, i = 0; i < pZip->m_total_files; ++i) + { + mz_uint total_header_size, disk_index, bit_flags, filename_size, ext_data_size; + mz_uint64 comp_size, decomp_size, local_header_ofs; + + if ((n < MZ_ZIP_CENTRAL_DIR_HEADER_SIZE) || (MZ_READ_LE32(p) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, i) = (mz_uint32)(p - (const mz_uint8 *)pZip->m_pState->m_central_dir.m_p); + + if (sort_central_dir) + MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_sorted_central_dir_offsets, mz_uint32, i) = i; + + comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + decomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); + local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); + filename_size = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + ext_data_size = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); + + if ((!pZip->m_pState->m_zip64_has_extended_info_fields) && + (ext_data_size) && + (MZ_MAX(MZ_MAX(comp_size, decomp_size), local_header_ofs) == MZ_UINT32_MAX)) + { + /* Attempt to find zip64 extended information field in the entry's extra data */ + mz_uint32 extra_size_remaining = ext_data_size; + + if (extra_size_remaining) + { + const mz_uint8 *pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size; + + do + { + mz_uint32 field_id; + mz_uint32 field_data_size; + + if (extra_size_remaining < (sizeof(mz_uint16) * 2)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + field_id = MZ_READ_LE16(pExtra_data); + field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); + + if ((field_data_size + sizeof(mz_uint16) * 2) > extra_size_remaining) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) + { + /* Ok, the archive didn't have any zip64 headers but it uses a zip64 extended information field so mark it as zip64 anyway (this can occur with infozip's zip util when it reads compresses files from stdin). */ + pZip->m_pState->m_zip64 = MZ_TRUE; + pZip->m_pState->m_zip64_has_extended_info_fields = MZ_TRUE; + break; + } + + pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; + extra_size_remaining = extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; + } while (extra_size_remaining); + } + } + + /* I've seen archives that aren't marked as zip64 that uses zip64 ext data, argh */ + if ((comp_size != MZ_UINT32_MAX) && (decomp_size != MZ_UINT32_MAX)) + { + if (((!MZ_READ_LE32(p + MZ_ZIP_CDH_METHOD_OFS)) && (decomp_size != comp_size)) || (decomp_size && !comp_size)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + } + + disk_index = MZ_READ_LE16(p + MZ_ZIP_CDH_DISK_START_OFS); + if ((disk_index == MZ_UINT16_MAX) || ((disk_index != num_this_disk) && (disk_index != 1))) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_MULTIDISK); + + if (comp_size != MZ_UINT32_MAX) + { + if (((mz_uint64)MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS) + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + comp_size) > pZip->m_archive_size) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + } + + bit_flags = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); + if (bit_flags & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_LOCAL_DIR_IS_MASKED) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); + + if ((total_header_size = MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS)) > n) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + n -= total_header_size; + p += total_header_size; + } + } + + if (sort_central_dir) + mz_zip_reader_sort_central_dir_offsets_by_filename(pZip); + + return MZ_TRUE; +} + +void mz_zip_zero_struct(mz_zip_archive *pZip) +{ + if (pZip) + MZ_CLEAR_OBJ(*pZip); +} + +static mz_bool mz_zip_reader_end_internal(mz_zip_archive *pZip, mz_bool set_last_error) +{ + mz_bool status = MZ_TRUE; + + if (!pZip) + return MZ_FALSE; + + if ((!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) + { + if (set_last_error) + pZip->m_last_error = MZ_ZIP_INVALID_PARAMETER; + + return MZ_FALSE; + } + + if (pZip->m_pState) + { + mz_zip_internal_state *pState = pZip->m_pState; + pZip->m_pState = NULL; + + mz_zip_array_clear(pZip, &pState->m_central_dir); + mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); + mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); + +#ifndef MINIZ_NO_STDIO + if (pState->m_pFile) + { + if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) + { + if (MZ_FCLOSE(pState->m_pFile) == EOF) + { + if (set_last_error) + pZip->m_last_error = MZ_ZIP_FILE_CLOSE_FAILED; + status = MZ_FALSE; + } + } + pState->m_pFile = NULL; + } +#endif /* #ifndef MINIZ_NO_STDIO */ + + pZip->m_pFree(pZip->m_pAlloc_opaque, pState); + } + pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; + + return status; +} + +mz_bool mz_zip_reader_end(mz_zip_archive *pZip) +{ + return mz_zip_reader_end_internal(pZip, MZ_TRUE); +} +mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags) +{ + if ((!pZip) || (!pZip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!mz_zip_reader_init_internal(pZip, flags)) + return MZ_FALSE; + + pZip->m_zip_type = MZ_ZIP_TYPE_USER; + pZip->m_archive_size = size; + + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end_internal(pZip, MZ_FALSE); + return MZ_FALSE; + } + + return MZ_TRUE; +} + +static size_t mz_zip_mem_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + size_t s = (file_ofs >= pZip->m_archive_size) ? 0 : (size_t)MZ_MIN(pZip->m_archive_size - file_ofs, n); + memcpy(pBuf, (const mz_uint8 *)pZip->m_pState->m_pMem + file_ofs, s); + return s; +} + +mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags) +{ + if (!pMem) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); + + if (!mz_zip_reader_init_internal(pZip, flags)) + return MZ_FALSE; + + pZip->m_zip_type = MZ_ZIP_TYPE_MEMORY; + pZip->m_archive_size = size; + pZip->m_pRead = mz_zip_mem_read_func; + pZip->m_pIO_opaque = pZip; + pZip->m_pNeeds_keepalive = NULL; + +#ifdef __cplusplus + pZip->m_pState->m_pMem = const_cast(pMem); +#else + pZip->m_pState->m_pMem = (void *)pMem; +#endif + + pZip->m_pState->m_mem_size = size; + + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end_internal(pZip, MZ_FALSE); + return MZ_FALSE; + } + + return MZ_TRUE; +} + +#ifndef MINIZ_NO_STDIO +static size_t mz_zip_file_read_func(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); + + file_ofs += pZip->m_pState->m_file_archive_start_ofs; + + if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) + return 0; + + return MZ_FREAD(pBuf, 1, n, pZip->m_pState->m_pFile); +} + +mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags) +{ + return mz_zip_reader_init_file_v2(pZip, pFilename, flags, 0, 0); +} + +mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size) +{ + mz_uint64 file_size; + MZ_FILE *pFile; + + if ((!pZip) || (!pFilename) || ((archive_size) && (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE))) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pFile = MZ_FOPEN(pFilename, "rb"); + if (!pFile) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + + file_size = archive_size; + if (!file_size) + { + if (MZ_FSEEK64(pFile, 0, SEEK_END)) + { + MZ_FCLOSE(pFile); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); + } + + file_size = MZ_FTELL64(pFile); + } + + /* TODO: Better sanity check archive_size and the # of actual remaining bytes */ + + if (file_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); + + if (!mz_zip_reader_init_internal(pZip, flags)) + { + MZ_FCLOSE(pFile); + return MZ_FALSE; + } + + pZip->m_zip_type = MZ_ZIP_TYPE_FILE; + pZip->m_pRead = mz_zip_file_read_func; + pZip->m_pIO_opaque = pZip; + pZip->m_pState->m_pFile = pFile; + pZip->m_archive_size = file_size; + pZip->m_pState->m_file_archive_start_ofs = file_start_ofs; + + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end_internal(pZip, MZ_FALSE); + return MZ_FALSE; + } + + return MZ_TRUE; +} + +mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags) +{ + mz_uint64 cur_file_ofs; + + if ((!pZip) || (!pFile)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + + cur_file_ofs = MZ_FTELL64(pFile); + + if (!archive_size) + { + if (MZ_FSEEK64(pFile, 0, SEEK_END)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); + + archive_size = MZ_FTELL64(pFile) - cur_file_ofs; + + if (archive_size < MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_NOT_AN_ARCHIVE); + } + + if (!mz_zip_reader_init_internal(pZip, flags)) + return MZ_FALSE; + + pZip->m_zip_type = MZ_ZIP_TYPE_CFILE; + pZip->m_pRead = mz_zip_file_read_func; + + pZip->m_pIO_opaque = pZip; + pZip->m_pState->m_pFile = pFile; + pZip->m_archive_size = archive_size; + pZip->m_pState->m_file_archive_start_ofs = cur_file_ofs; + + if (!mz_zip_reader_read_central_dir(pZip, flags)) + { + mz_zip_reader_end_internal(pZip, MZ_FALSE); + return MZ_FALSE; + } + + return MZ_TRUE; +} + +#endif /* #ifndef MINIZ_NO_STDIO */ + +static MZ_FORCEINLINE const mz_uint8 *mz_zip_get_cdh(mz_zip_archive *pZip, mz_uint file_index) +{ + if ((!pZip) || (!pZip->m_pState) || (file_index >= pZip->m_total_files)) + return NULL; + return &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); +} + +mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index) +{ + mz_uint m_bit_flag; + const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); + if (!p) + { + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return MZ_FALSE; + } + + m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); + return (m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) != 0; +} + +mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index) +{ + mz_uint bit_flag; + mz_uint method; + + const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); + if (!p) + { + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return MZ_FALSE; + } + + method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); + bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); + + if ((method != 0) && (method != MZ_DEFLATED)) + { + mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); + return MZ_FALSE; + } + + if (bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION)) + { + mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); + return MZ_FALSE; + } + + if (bit_flag & MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG) + { + mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); + return MZ_FALSE; + } + + return MZ_TRUE; +} + +mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index) +{ + mz_uint filename_len, attribute_mapping_id, external_attr; + const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); + if (!p) + { + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return MZ_FALSE; + } + + filename_len = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + if (filename_len) + { + if (*(p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_len - 1) == '/') + return MZ_TRUE; + } + + /* Bugfix: This code was also checking if the internal attribute was non-zero, which wasn't correct. */ + /* Most/all zip writers (hopefully) set DOS file/directory attributes in the low 16-bits, so check for the DOS directory flag and ignore the source OS ID in the created by field. */ + /* FIXME: Remove this check? Is it necessary - we already check the filename. */ + attribute_mapping_id = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS) >> 8; + (void)attribute_mapping_id; + + external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); + if ((external_attr & MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG) != 0) + { + return MZ_TRUE; + } + + return MZ_FALSE; +} + +static mz_bool mz_zip_file_stat_internal(mz_zip_archive *pZip, mz_uint file_index, const mz_uint8 *pCentral_dir_header, mz_zip_archive_file_stat *pStat, mz_bool *pFound_zip64_extra_data) +{ + mz_uint n; + const mz_uint8 *p = pCentral_dir_header; + + if (pFound_zip64_extra_data) + *pFound_zip64_extra_data = MZ_FALSE; + + if ((!p) || (!pStat)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + /* Extract fields from the central directory record. */ + pStat->m_file_index = file_index; + pStat->m_central_dir_ofs = MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index); + pStat->m_version_made_by = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_MADE_BY_OFS); + pStat->m_version_needed = MZ_READ_LE16(p + MZ_ZIP_CDH_VERSION_NEEDED_OFS); + pStat->m_bit_flag = MZ_READ_LE16(p + MZ_ZIP_CDH_BIT_FLAG_OFS); + pStat->m_method = MZ_READ_LE16(p + MZ_ZIP_CDH_METHOD_OFS); +#ifndef MINIZ_NO_TIME + pStat->m_time = mz_zip_dos_to_time_t(MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_TIME_OFS), MZ_READ_LE16(p + MZ_ZIP_CDH_FILE_DATE_OFS)); +#endif + pStat->m_crc32 = MZ_READ_LE32(p + MZ_ZIP_CDH_CRC32_OFS); + pStat->m_comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + pStat->m_uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); + pStat->m_internal_attr = MZ_READ_LE16(p + MZ_ZIP_CDH_INTERNAL_ATTR_OFS); + pStat->m_external_attr = MZ_READ_LE32(p + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS); + pStat->m_local_header_ofs = MZ_READ_LE32(p + MZ_ZIP_CDH_LOCAL_HEADER_OFS); + + /* Copy as much of the filename and comment as possible. */ + n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE - 1); + memcpy(pStat->m_filename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); + pStat->m_filename[n] = '\0'; + + n = MZ_READ_LE16(p + MZ_ZIP_CDH_COMMENT_LEN_OFS); + n = MZ_MIN(n, MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE - 1); + pStat->m_comment_size = n; + memcpy(pStat->m_comment, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS) + MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS), n); + pStat->m_comment[n] = '\0'; + + /* Set some flags for convienance */ + pStat->m_is_directory = mz_zip_reader_is_file_a_directory(pZip, file_index); + pStat->m_is_encrypted = mz_zip_reader_is_file_encrypted(pZip, file_index); + pStat->m_is_supported = mz_zip_reader_is_file_supported(pZip, file_index); + + /* See if we need to read any zip64 extended information fields. */ + /* Confusingly, these zip64 fields can be present even on non-zip64 archives (Debian zip on a huge files from stdin piped to stdout creates them). */ + if (MZ_MAX(MZ_MAX(pStat->m_comp_size, pStat->m_uncomp_size), pStat->m_local_header_ofs) == MZ_UINT32_MAX) + { + /* Attempt to find zip64 extended information field in the entry's extra data */ + mz_uint32 extra_size_remaining = MZ_READ_LE16(p + MZ_ZIP_CDH_EXTRA_LEN_OFS); + + if (extra_size_remaining) + { + const mz_uint8 *pExtra_data = p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + + do + { + mz_uint32 field_id; + mz_uint32 field_data_size; + + if (extra_size_remaining < (sizeof(mz_uint16) * 2)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + field_id = MZ_READ_LE16(pExtra_data); + field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); + + if ((field_data_size + sizeof(mz_uint16) * 2) > extra_size_remaining) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) + { + const mz_uint8 *pField_data = pExtra_data + sizeof(mz_uint16) * 2; + mz_uint32 field_data_remaining = field_data_size; + + if (pFound_zip64_extra_data) + *pFound_zip64_extra_data = MZ_TRUE; + + if (pStat->m_uncomp_size == MZ_UINT32_MAX) + { + if (field_data_remaining < sizeof(mz_uint64)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + pStat->m_uncomp_size = MZ_READ_LE64(pField_data); + pField_data += sizeof(mz_uint64); + field_data_remaining -= sizeof(mz_uint64); + } + + if (pStat->m_comp_size == MZ_UINT32_MAX) + { + if (field_data_remaining < sizeof(mz_uint64)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + pStat->m_comp_size = MZ_READ_LE64(pField_data); + pField_data += sizeof(mz_uint64); + field_data_remaining -= sizeof(mz_uint64); + } + + if (pStat->m_local_header_ofs == MZ_UINT32_MAX) + { + if (field_data_remaining < sizeof(mz_uint64)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + pStat->m_local_header_ofs = MZ_READ_LE64(pField_data); + pField_data += sizeof(mz_uint64); + field_data_remaining -= sizeof(mz_uint64); + } + + break; + } + + pExtra_data += sizeof(mz_uint16) * 2 + field_data_size; + extra_size_remaining = extra_size_remaining - sizeof(mz_uint16) * 2 - field_data_size; + } while (extra_size_remaining); + } + } + + return MZ_TRUE; +} + +static MZ_FORCEINLINE mz_bool mz_zip_string_equal(const char *pA, const char *pB, mz_uint len, mz_uint flags) +{ + mz_uint i; + if (flags & MZ_ZIP_FLAG_CASE_SENSITIVE) + return 0 == memcmp(pA, pB, len); + for (i = 0; i < len; ++i) + if (MZ_TOLOWER(pA[i]) != MZ_TOLOWER(pB[i])) + return MZ_FALSE; + return MZ_TRUE; +} + +static MZ_FORCEINLINE int mz_zip_filename_compare(const mz_zip_array *pCentral_dir_array, const mz_zip_array *pCentral_dir_offsets, mz_uint l_index, const char *pR, mz_uint r_len) +{ + const mz_uint8 *pL = &MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_array, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(pCentral_dir_offsets, mz_uint32, l_index)), *pE; + mz_uint l_len = MZ_READ_LE16(pL + MZ_ZIP_CDH_FILENAME_LEN_OFS); + mz_uint8 l = 0, r = 0; + pL += MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + pE = pL + MZ_MIN(l_len, r_len); + while (pL < pE) + { + if ((l = MZ_TOLOWER(*pL)) != (r = MZ_TOLOWER(*pR))) + break; + pL++; + pR++; + } + return (pL == pE) ? (int)(l_len - r_len) : (l - r); +} + +static mz_bool mz_zip_locate_file_binary_search(mz_zip_archive *pZip, const char *pFilename, mz_uint32 *pIndex) +{ + mz_zip_internal_state *pState = pZip->m_pState; + const mz_zip_array *pCentral_dir_offsets = &pState->m_central_dir_offsets; + const mz_zip_array *pCentral_dir = &pState->m_central_dir; + mz_uint32 *pIndices = &MZ_ZIP_ARRAY_ELEMENT(&pState->m_sorted_central_dir_offsets, mz_uint32, 0); + const uint32_t size = pZip->m_total_files; + const mz_uint filename_len = (mz_uint)strlen(pFilename); + + if (pIndex) + *pIndex = 0; + + if (size) + { + /* yes I could use uint32_t's, but then we would have to add some special case checks in the loop, argh, and */ + /* honestly the major expense here on 32-bit CPU's will still be the filename compare */ + mz_int64 l = 0, h = (mz_int64)size - 1; + + while (l <= h) + { + mz_int64 m = l + ((h - l) >> 1); + uint32_t file_index = pIndices[(uint32_t)m]; + + int comp = mz_zip_filename_compare(pCentral_dir, pCentral_dir_offsets, file_index, pFilename, filename_len); + if (!comp) + { + if (pIndex) + *pIndex = file_index; + return MZ_TRUE; + } + else if (comp < 0) + l = m + 1; + else + h = m - 1; + } + } + + return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND); +} + +int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags) +{ + mz_uint32 index; + if (!mz_zip_reader_locate_file_v2(pZip, pName, pComment, flags, &index)) + return -1; + else + return (int)index; +} + +mz_bool mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *pIndex) +{ + mz_uint file_index; + size_t name_len, comment_len; + + if (pIndex) + *pIndex = 0; + + if ((!pZip) || (!pZip->m_pState) || (!pName)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + /* See if we can use a binary search */ + if (((pZip->m_pState->m_init_flags & MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY) == 0) && + (pZip->m_zip_mode == MZ_ZIP_MODE_READING) && + ((flags & (MZ_ZIP_FLAG_IGNORE_PATH | MZ_ZIP_FLAG_CASE_SENSITIVE)) == 0) && (!pComment) && (pZip->m_pState->m_sorted_central_dir_offsets.m_size)) + { + return mz_zip_locate_file_binary_search(pZip, pName, pIndex); + } + + /* Locate the entry by scanning the entire central directory */ + name_len = strlen(pName); + if (name_len > MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + comment_len = pComment ? strlen(pComment) : 0; + if (comment_len > MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + for (file_index = 0; file_index < pZip->m_total_files; file_index++) + { + const mz_uint8 *pHeader = &MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir, mz_uint8, MZ_ZIP_ARRAY_ELEMENT(&pZip->m_pState->m_central_dir_offsets, mz_uint32, file_index)); + mz_uint filename_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_FILENAME_LEN_OFS); + const char *pFilename = (const char *)pHeader + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE; + if (filename_len < name_len) + continue; + if (comment_len) + { + mz_uint file_extra_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_EXTRA_LEN_OFS), file_comment_len = MZ_READ_LE16(pHeader + MZ_ZIP_CDH_COMMENT_LEN_OFS); + const char *pFile_comment = pFilename + filename_len + file_extra_len; + if ((file_comment_len != comment_len) || (!mz_zip_string_equal(pComment, pFile_comment, file_comment_len, flags))) + continue; + } + if ((flags & MZ_ZIP_FLAG_IGNORE_PATH) && (filename_len)) + { + int ofs = filename_len - 1; + do + { + if ((pFilename[ofs] == '/') || (pFilename[ofs] == '\\') || (pFilename[ofs] == ':')) + break; + } while (--ofs >= 0); + ofs++; + pFilename += ofs; + filename_len -= ofs; + } + if ((filename_len == name_len) && (mz_zip_string_equal(pName, pFilename, filename_len, flags))) + { + if (pIndex) + *pIndex = file_index; + return MZ_TRUE; + } + } + + return mz_zip_set_error(pZip, MZ_ZIP_FILE_NOT_FOUND); +} + +mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) +{ + int status = TINFL_STATUS_DONE; + mz_uint64 needed_size, cur_file_ofs, comp_remaining, out_buf_ofs = 0, read_buf_size, read_buf_ofs = 0, read_buf_avail; + mz_zip_archive_file_stat file_stat; + void *pRead_buf; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; + mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + tinfl_decompressor inflator; + + if ((!pZip) || (!pZip->m_pState) || ((buf_size) && (!pBuf)) || ((user_read_buf_size) && (!pUser_read_buf)) || (!pZip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + /* A directory or zero length file */ + if ((file_stat.m_is_directory) || (!file_stat.m_comp_size)) + return MZ_TRUE; + + /* Encryption and patch files are not supported. */ + if (file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); + + /* This function only supports decompressing stored and deflate. */ + if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); + + /* Ensure supplied output buffer is large enough. */ + needed_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? file_stat.m_comp_size : file_stat.m_uncomp_size; + if (buf_size < needed_size) + return mz_zip_set_error(pZip, MZ_ZIP_BUF_TOO_SMALL); + + /* Read and parse the local directory entry. */ + cur_file_ofs = file_stat.m_local_header_ofs; + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) + { + /* The file is stored or the caller has requested the compressed data. */ + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pBuf, (size_t)needed_size) != needed_size) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + +#ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS + if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) == 0) + { + if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32) + return mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED); + } +#endif + + return MZ_TRUE; + } + + /* Decompress the file either directly from memory or from a file input buffer. */ + tinfl_init(&inflator); + + if (pZip->m_pState->m_pMem) + { + /* Read directly from the archive in memory. */ + pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; + read_buf_size = read_buf_avail = file_stat.m_comp_size; + comp_remaining = 0; + } + else if (pUser_read_buf) + { + /* Use a user provided read buffer. */ + if (!user_read_buf_size) + return MZ_FALSE; + pRead_buf = (mz_uint8 *)pUser_read_buf; + read_buf_size = user_read_buf_size; + read_buf_avail = 0; + comp_remaining = file_stat.m_comp_size; + } + else + { + /* Temporarily allocate a read buffer. */ + read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); + if (((sizeof(size_t) == sizeof(mz_uint32))) && (read_buf_size > 0x7FFFFFFF)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + read_buf_avail = 0; + comp_remaining = file_stat.m_comp_size; + } + + do + { + /* The size_t cast here should be OK because we've verified that the output buffer is >= file_stat.m_uncomp_size above */ + size_t in_buf_size, out_buf_size = (size_t)(file_stat.m_uncomp_size - out_buf_ofs); + if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) + { + read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + status = TINFL_STATUS_FAILED; + mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); + break; + } + cur_file_ofs += read_buf_avail; + comp_remaining -= read_buf_avail; + read_buf_ofs = 0; + } + in_buf_size = (size_t)read_buf_avail; + status = tinfl_decompress(&inflator, (mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pBuf, (mz_uint8 *)pBuf + out_buf_ofs, &out_buf_size, TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF | (comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0)); + read_buf_avail -= in_buf_size; + read_buf_ofs += in_buf_size; + out_buf_ofs += out_buf_size; + } while (status == TINFL_STATUS_NEEDS_MORE_INPUT); + + if (status == TINFL_STATUS_DONE) + { + /* Make sure the entire file was decompressed, and check its CRC. */ + if (out_buf_ofs != file_stat.m_uncomp_size) + { + mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); + status = TINFL_STATUS_FAILED; + } +#ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS + else if (mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, (size_t)file_stat.m_uncomp_size) != file_stat.m_crc32) + { + mz_zip_set_error(pZip, MZ_ZIP_CRC_CHECK_FAILED); + status = TINFL_STATUS_FAILED; + } +#endif + } + + if ((!pZip->m_pState->m_pMem) && (!pUser_read_buf)) + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + + return status == TINFL_STATUS_DONE; +} + +mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size) +{ + mz_uint32 file_index; + if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) + return MZ_FALSE; + return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, pUser_read_buf, user_read_buf_size); +} + +mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags) +{ + return mz_zip_reader_extract_to_mem_no_alloc(pZip, file_index, pBuf, buf_size, flags, NULL, 0); +} + +mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags) +{ + return mz_zip_reader_extract_file_to_mem_no_alloc(pZip, pFilename, pBuf, buf_size, flags, NULL, 0); +} + +void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags) +{ + mz_uint64 comp_size, uncomp_size, alloc_size; + const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); + void *pBuf; + + if (pSize) + *pSize = 0; + + if (!p) + { + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return NULL; + } + + comp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS); + uncomp_size = MZ_READ_LE32(p + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS); + + alloc_size = (flags & MZ_ZIP_FLAG_COMPRESSED_DATA) ? comp_size : uncomp_size; + if (((sizeof(size_t) == sizeof(mz_uint32))) && (alloc_size > 0x7FFFFFFF)) + { + mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + return NULL; + } + + if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)alloc_size))) + { + mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + return NULL; + } + + if (!mz_zip_reader_extract_to_mem(pZip, file_index, pBuf, (size_t)alloc_size, flags)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return NULL; + } + + if (pSize) + *pSize = (size_t)alloc_size; + return pBuf; +} + +void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags) +{ + mz_uint32 file_index; + if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) + { + if (pSize) + *pSize = 0; + return MZ_FALSE; + } + return mz_zip_reader_extract_to_heap(pZip, file_index, pSize, flags); +} + +mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) +{ + int status = TINFL_STATUS_DONE; + mz_uint file_crc32 = MZ_CRC32_INIT; + mz_uint64 read_buf_size, read_buf_ofs = 0, read_buf_avail, comp_remaining, out_buf_ofs = 0, cur_file_ofs; + mz_zip_archive_file_stat file_stat; + void *pRead_buf = NULL; + void *pWrite_buf = NULL; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; + mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + + if ((!pZip) || (!pZip->m_pState) || (!pCallback) || (!pZip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + /* A directory or zero length file */ + if ((file_stat.m_is_directory) || (!file_stat.m_comp_size)) + return MZ_TRUE; + + /* Encryption and patch files are not supported. */ + if (file_stat.m_bit_flag & (MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_IS_ENCRYPTED | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_USES_STRONG_ENCRYPTION | MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_COMPRESSED_PATCH_FLAG)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); + + /* This function only supports decompressing stored and deflate. */ + if ((!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); + + /* Read and do some minimal validation of the local directory entry (this doesn't crack the zip64 stuff, which we already have from the central dir) */ + cur_file_ofs = file_stat.m_local_header_ofs; + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + cur_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS) + MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + if ((cur_file_ofs + file_stat.m_comp_size) > pZip->m_archive_size) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + /* Decompress the file either directly from memory or from a file input buffer. */ + if (pZip->m_pState->m_pMem) + { + pRead_buf = (mz_uint8 *)pZip->m_pState->m_pMem + cur_file_ofs; + read_buf_size = read_buf_avail = file_stat.m_comp_size; + comp_remaining = 0; + } + else + { + read_buf_size = MZ_MIN(file_stat.m_comp_size, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); + if (NULL == (pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)read_buf_size))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + read_buf_avail = 0; + comp_remaining = file_stat.m_comp_size; + } + + if ((flags & MZ_ZIP_FLAG_COMPRESSED_DATA) || (!file_stat.m_method)) + { + /* The file is stored or the caller has requested the compressed data. */ + if (pZip->m_pState->m_pMem) + { + if (((sizeof(size_t) == sizeof(mz_uint32))) && (file_stat.m_comp_size > MZ_UINT32_MAX)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)file_stat.m_comp_size) != file_stat.m_comp_size) + { + mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); + status = TINFL_STATUS_FAILED; + } + else if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + { +#ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS + file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)file_stat.m_comp_size); +#endif + } + + cur_file_ofs += file_stat.m_comp_size; + out_buf_ofs += file_stat.m_comp_size; + comp_remaining = 0; + } + else + { + while (comp_remaining) + { + read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + status = TINFL_STATUS_FAILED; + break; + } + +#ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS + if (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + { + file_crc32 = (mz_uint32)mz_crc32(file_crc32, (const mz_uint8 *)pRead_buf, (size_t)read_buf_avail); + } +#endif + + if (pCallback(pOpaque, out_buf_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); + status = TINFL_STATUS_FAILED; + break; + } + + cur_file_ofs += read_buf_avail; + out_buf_ofs += read_buf_avail; + comp_remaining -= read_buf_avail; + } + } + } + else + { + tinfl_decompressor inflator; + tinfl_init(&inflator); + + if (NULL == (pWrite_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, TINFL_LZ_DICT_SIZE))) + { + mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + status = TINFL_STATUS_FAILED; + } + else + { + do + { + mz_uint8 *pWrite_buf_cur = (mz_uint8 *)pWrite_buf + (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); + size_t in_buf_size, out_buf_size = TINFL_LZ_DICT_SIZE - (out_buf_ofs & (TINFL_LZ_DICT_SIZE - 1)); + if ((!read_buf_avail) && (!pZip->m_pState->m_pMem)) + { + read_buf_avail = MZ_MIN(read_buf_size, comp_remaining); + if (pZip->m_pRead(pZip->m_pIO_opaque, cur_file_ofs, pRead_buf, (size_t)read_buf_avail) != read_buf_avail) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + status = TINFL_STATUS_FAILED; + break; + } + cur_file_ofs += read_buf_avail; + comp_remaining -= read_buf_avail; + read_buf_ofs = 0; + } + + in_buf_size = (size_t)read_buf_avail; + status = tinfl_decompress(&inflator, (const mz_uint8 *)pRead_buf + read_buf_ofs, &in_buf_size, (mz_uint8 *)pWrite_buf, pWrite_buf_cur, &out_buf_size, comp_remaining ? TINFL_FLAG_HAS_MORE_INPUT : 0); + read_buf_avail -= in_buf_size; + read_buf_ofs += in_buf_size; + + if (out_buf_size) + { + if (pCallback(pOpaque, out_buf_ofs, pWrite_buf_cur, out_buf_size) != out_buf_size) + { + mz_zip_set_error(pZip, MZ_ZIP_WRITE_CALLBACK_FAILED); + status = TINFL_STATUS_FAILED; + break; + } + +#ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS + file_crc32 = (mz_uint32)mz_crc32(file_crc32, pWrite_buf_cur, out_buf_size); +#endif + if ((out_buf_ofs += out_buf_size) > file_stat.m_uncomp_size) + { + mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); + status = TINFL_STATUS_FAILED; + break; + } + } + } while ((status == TINFL_STATUS_NEEDS_MORE_INPUT) || (status == TINFL_STATUS_HAS_MORE_OUTPUT)); + } + } + + if ((status == TINFL_STATUS_DONE) && (!(flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) + { + /* Make sure the entire file was decompressed, and check its CRC. */ + if (out_buf_ofs != file_stat.m_uncomp_size) + { + mz_zip_set_error(pZip, MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE); + status = TINFL_STATUS_FAILED; + } +#ifndef MINIZ_DISABLE_ZIP_READER_CRC32_CHECKS + else if (file_crc32 != file_stat.m_crc32) + { + mz_zip_set_error(pZip, MZ_ZIP_DECOMPRESSION_FAILED); + status = TINFL_STATUS_FAILED; + } +#endif + } + + if (!pZip->m_pState->m_pMem) + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + + if (pWrite_buf) + pZip->m_pFree(pZip->m_pAlloc_opaque, pWrite_buf); + + return status == TINFL_STATUS_DONE; +} + +mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags) +{ + mz_uint32 file_index; + if (!mz_zip_reader_locate_file_v2(pZip, pFilename, NULL, flags, &file_index)) + return MZ_FALSE; + + return mz_zip_reader_extract_to_callback(pZip, file_index, pCallback, pOpaque, flags); +} + +#ifndef MINIZ_NO_STDIO +static size_t mz_zip_file_write_callback(void *pOpaque, mz_uint64 ofs, const void *pBuf, size_t n) +{ + (void)ofs; + + return MZ_FWRITE(pBuf, 1, n, (MZ_FILE *)pOpaque); +} + +mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags) +{ + mz_bool status; + mz_zip_archive_file_stat file_stat; + MZ_FILE *pFile; + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); + + pFile = MZ_FOPEN(pDst_filename, "wb"); + if (!pFile) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + + status = mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); + + if (MZ_FCLOSE(pFile) == EOF) + { + if (status) + mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); + + status = MZ_FALSE; + } + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) + if (status) + mz_zip_set_file_times(pDst_filename, file_stat.m_time, file_stat.m_time); +#endif + + return status; +} + +mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags) +{ + mz_uint32 file_index; + if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL, flags, &file_index)) + return MZ_FALSE; + + return mz_zip_reader_extract_to_file(pZip, file_index, pDst_filename, flags); +} + +mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *pFile, mz_uint flags) +{ + mz_zip_archive_file_stat file_stat; + + if (!mz_zip_reader_file_stat(pZip, file_index, &file_stat)) + return MZ_FALSE; + + if ((file_stat.m_is_directory) || (!file_stat.m_is_supported)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); + + return mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_file_write_callback, pFile, flags); +} + +mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags) +{ + mz_uint32 file_index; + if (!mz_zip_reader_locate_file_v2(pZip, pArchive_filename, NULL, flags, &file_index)) + return MZ_FALSE; + + return mz_zip_reader_extract_to_cfile(pZip, file_index, pFile, flags); +} +#endif /* #ifndef MINIZ_NO_STDIO */ + +static size_t mz_zip_compute_crc32_callback(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) +{ + mz_uint32 *p = (mz_uint32 *)pOpaque; + (void)file_ofs; + *p = (mz_uint32)mz_crc32(*p, (const mz_uint8 *)pBuf, n); + return n; +} + +mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags) +{ + mz_zip_archive_file_stat file_stat; + mz_zip_internal_state *pState; + const mz_uint8 *pCentral_dir_header; + mz_bool found_zip64_ext_data_in_cdir = MZ_FALSE; + mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; + mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + mz_uint64 local_header_ofs = 0; + mz_uint32 local_header_filename_len, local_header_extra_len, local_header_crc32; + mz_uint64 local_header_comp_size, local_header_uncomp_size; + mz_uint32 uncomp_crc32 = MZ_CRC32_INIT; + mz_bool has_data_descriptor; + mz_uint32 local_header_bit_flags; + + mz_zip_array file_data_array; + mz_zip_array_init(&file_data_array, 1); + + if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (!pZip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (file_index > pZip->m_total_files) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState = pZip->m_pState; + + pCentral_dir_header = mz_zip_get_cdh(pZip, file_index); + + if (!mz_zip_file_stat_internal(pZip, file_index, pCentral_dir_header, &file_stat, &found_zip64_ext_data_in_cdir)) + return MZ_FALSE; + + /* A directory or zero length file */ + if ((file_stat.m_is_directory) || (!file_stat.m_uncomp_size)) + return MZ_TRUE; + + /* Encryption and patch files are not supported. */ + if (file_stat.m_is_encrypted) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_ENCRYPTION); + + /* This function only supports stored and deflate. */ + if ((file_stat.m_method != 0) && (file_stat.m_method != MZ_DEFLATED)) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_METHOD); + + if (!file_stat.m_is_supported) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_FEATURE); + + /* Read and parse the local directory entry. */ + local_header_ofs = file_stat.m_local_header_ofs; + if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + local_header_filename_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS); + local_header_extra_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + local_header_comp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS); + local_header_uncomp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS); + local_header_crc32 = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_CRC32_OFS); + local_header_bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); + has_data_descriptor = (local_header_bit_flags & 8) != 0; + + if (local_header_filename_len != strlen(file_stat.m_filename)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if ((local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size) > pZip->m_archive_size) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if (!mz_zip_array_resize(pZip, &file_data_array, MZ_MAX(local_header_filename_len, local_header_extra_len), MZ_FALSE)) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + if (local_header_filename_len) + { + if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE, file_data_array.m_p, local_header_filename_len) != local_header_filename_len) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + goto handle_failure; + } + + /* I've seen 1 archive that had the same pathname, but used backslashes in the local dir and forward slashes in the central dir. Do we care about this? For now, this case will fail validation. */ + if (memcmp(file_stat.m_filename, file_data_array.m_p, local_header_filename_len) != 0) + { + mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); + goto handle_failure; + } + } + + if ((local_header_extra_len) && ((local_header_comp_size == MZ_UINT32_MAX) || (local_header_uncomp_size == MZ_UINT32_MAX))) + { + mz_uint32 extra_size_remaining = local_header_extra_len; + const mz_uint8 *pExtra_data = (const mz_uint8 *)file_data_array.m_p; + + if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len, file_data_array.m_p, local_header_extra_len) != local_header_extra_len) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + goto handle_failure; + } + + do + { + mz_uint32 field_id, field_data_size, field_total_size; + + if (extra_size_remaining < (sizeof(mz_uint16) * 2)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + field_id = MZ_READ_LE16(pExtra_data); + field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); + field_total_size = field_data_size + sizeof(mz_uint16) * 2; + + if (field_total_size > extra_size_remaining) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) + { + const mz_uint8 *pSrc_field_data = pExtra_data + sizeof(mz_uint32); + + if (field_data_size < sizeof(mz_uint64) * 2) + { + mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + goto handle_failure; + } + + local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data); + local_header_comp_size = MZ_READ_LE64(pSrc_field_data + sizeof(mz_uint64)); + + found_zip64_ext_data_in_ldir = MZ_TRUE; + break; + } + + pExtra_data += field_total_size; + extra_size_remaining -= field_total_size; + } while (extra_size_remaining); + } + + /* TODO: parse local header extra data when local_header_comp_size is 0xFFFFFFFF! (big_descriptor.zip) */ + /* I've seen zips in the wild with the data descriptor bit set, but proper local header values and bogus data descriptors */ + if ((has_data_descriptor) && (!local_header_comp_size) && (!local_header_crc32)) + { + mz_uint8 descriptor_buf[32]; + mz_bool has_id; + const mz_uint8 *pSrc; + mz_uint32 file_crc32; + mz_uint64 comp_size = 0, uncomp_size = 0; + + mz_uint32 num_descriptor_uint32s = ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) ? 6 : 4; + + if (pZip->m_pRead(pZip->m_pIO_opaque, local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_len + local_header_extra_len + file_stat.m_comp_size, descriptor_buf, sizeof(mz_uint32) * num_descriptor_uint32s) != (sizeof(mz_uint32) * num_descriptor_uint32s)) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + goto handle_failure; + } + + has_id = (MZ_READ_LE32(descriptor_buf) == MZ_ZIP_DATA_DESCRIPTOR_ID); + pSrc = has_id ? (descriptor_buf + sizeof(mz_uint32)) : descriptor_buf; + + file_crc32 = MZ_READ_LE32(pSrc); + + if ((pState->m_zip64) || (found_zip64_ext_data_in_ldir)) + { + comp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32)); + uncomp_size = MZ_READ_LE64(pSrc + sizeof(mz_uint32) + sizeof(mz_uint64)); + } + else + { + comp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32)); + uncomp_size = MZ_READ_LE32(pSrc + sizeof(mz_uint32) + sizeof(mz_uint32)); + } + + if ((file_crc32 != file_stat.m_crc32) || (comp_size != file_stat.m_comp_size) || (uncomp_size != file_stat.m_uncomp_size)) + { + mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); + goto handle_failure; + } + } + else + { + if ((local_header_crc32 != file_stat.m_crc32) || (local_header_comp_size != file_stat.m_comp_size) || (local_header_uncomp_size != file_stat.m_uncomp_size)) + { + mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); + goto handle_failure; + } + } + + mz_zip_array_clear(pZip, &file_data_array); + + if ((flags & MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY) == 0) + { + if (!mz_zip_reader_extract_to_callback(pZip, file_index, mz_zip_compute_crc32_callback, &uncomp_crc32, 0)) + return MZ_FALSE; + + /* 1 more check to be sure, although the extract checks too. */ + if (uncomp_crc32 != file_stat.m_crc32) + { + mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); + return MZ_FALSE; + } + } + + return MZ_TRUE; + +handle_failure: + mz_zip_array_clear(pZip, &file_data_array); + return MZ_FALSE; +} + +mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags) +{ + mz_zip_internal_state *pState; + uint32_t i; + + if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || (!pZip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState = pZip->m_pState; + + /* Basic sanity checks */ + if (!pState->m_zip64) + { + if (pZip->m_total_files > MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + + if (pZip->m_archive_size > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + } + else + { + if (pZip->m_total_files >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + + if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + } + + for (i = 0; i < pZip->m_total_files; i++) + { + if (MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG & flags) + { + mz_uint32 found_index; + mz_zip_archive_file_stat stat; + + if (!mz_zip_reader_file_stat(pZip, i, &stat)) + return MZ_FALSE; + + if (!mz_zip_reader_locate_file_v2(pZip, stat.m_filename, NULL, 0, &found_index)) + return MZ_FALSE; + + /* This check can fail if there are duplicate filenames in the archive (which we don't check for when writing - that's up to the user) */ + if (found_index != i) + return mz_zip_set_error(pZip, MZ_ZIP_VALIDATION_FAILED); + } + + if (!mz_zip_validate_file(pZip, i, flags)) + return MZ_FALSE; + } + + return MZ_TRUE; +} + +mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr) +{ + mz_bool success = MZ_TRUE; + mz_zip_archive zip; + mz_zip_error actual_err = MZ_ZIP_NO_ERROR; + + if ((!pMem) || (!size)) + { + if (pErr) + *pErr = MZ_ZIP_INVALID_PARAMETER; + return MZ_FALSE; + } + + mz_zip_zero_struct(&zip); + + if (!mz_zip_reader_init_mem(&zip, pMem, size, flags)) + { + if (pErr) + *pErr = zip.m_last_error; + return MZ_FALSE; + } + + if (!mz_zip_validate_archive(&zip, flags)) + { + actual_err = zip.m_last_error; + success = MZ_FALSE; + } + + if (!mz_zip_reader_end_internal(&zip, success)) + { + if (!actual_err) + actual_err = zip.m_last_error; + success = MZ_FALSE; + } + + if (pErr) + *pErr = actual_err; + + return success; +} + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr) +{ + mz_bool success = MZ_TRUE; + mz_zip_archive zip; + mz_zip_error actual_err = MZ_ZIP_NO_ERROR; + + if (!pFilename) + { + if (pErr) + *pErr = MZ_ZIP_INVALID_PARAMETER; + return MZ_FALSE; + } + + mz_zip_zero_struct(&zip); + + if (!mz_zip_reader_init_file_v2(&zip, pFilename, flags, 0, 0)) + { + if (pErr) + *pErr = zip.m_last_error; + return MZ_FALSE; + } + + if (!mz_zip_validate_archive(&zip, flags)) + { + actual_err = zip.m_last_error; + success = MZ_FALSE; + } + + if (!mz_zip_reader_end_internal(&zip, success)) + { + if (!actual_err) + actual_err = zip.m_last_error; + success = MZ_FALSE; + } + + if (pErr) + *pErr = actual_err; + + return success; +} +#endif /* #ifndef MINIZ_NO_STDIO */ + +/* ------------------- .ZIP archive writing */ + +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +static MZ_FORCEINLINE void mz_write_le16(mz_uint8 *p, mz_uint16 v) +{ + p[0] = (mz_uint8)v; + p[1] = (mz_uint8)(v >> 8); +} +static MZ_FORCEINLINE void mz_write_le32(mz_uint8 *p, mz_uint32 v) +{ + p[0] = (mz_uint8)v; + p[1] = (mz_uint8)(v >> 8); + p[2] = (mz_uint8)(v >> 16); + p[3] = (mz_uint8)(v >> 24); +} +static MZ_FORCEINLINE void mz_write_le64(mz_uint8 *p, mz_uint64 v) +{ + mz_write_le32(p, (mz_uint32)v); + mz_write_le32(p + sizeof(mz_uint32), (mz_uint32)(v >> 32)); +} + +#define MZ_WRITE_LE16(p, v) mz_write_le16((mz_uint8 *)(p), (mz_uint16)(v)) +#define MZ_WRITE_LE32(p, v) mz_write_le32((mz_uint8 *)(p), (mz_uint32)(v)) +#define MZ_WRITE_LE64(p, v) mz_write_le64((mz_uint8 *)(p), (mz_uint64)(v)) + +static size_t mz_zip_heap_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + mz_zip_internal_state *pState = pZip->m_pState; + mz_uint64 new_size = MZ_MAX(file_ofs + n, pState->m_mem_size); + + if (!n) + return 0; + + /* An allocation this big is likely to just fail on 32-bit systems, so don't even go there. */ + if ((sizeof(size_t) == sizeof(mz_uint32)) && (new_size > 0x7FFFFFFF)) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); + return 0; + } + + if (new_size > pState->m_mem_capacity) + { + void *pNew_block; + size_t new_capacity = MZ_MAX(64, pState->m_mem_capacity); + + while (new_capacity < new_size) + new_capacity *= 2; + + if (NULL == (pNew_block = pZip->m_pRealloc(pZip->m_pAlloc_opaque, pState->m_pMem, 1, new_capacity))) + { + mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + return 0; + } + + pState->m_pMem = pNew_block; + pState->m_mem_capacity = new_capacity; + } + memcpy((mz_uint8 *)pState->m_pMem + file_ofs, pBuf, n); + pState->m_mem_size = (size_t)new_size; + return n; +} + +static mz_bool mz_zip_writer_end_internal(mz_zip_archive *pZip, mz_bool set_last_error) +{ + mz_zip_internal_state *pState; + mz_bool status = MZ_TRUE; + + if ((!pZip) || (!pZip->m_pState) || (!pZip->m_pAlloc) || (!pZip->m_pFree) || ((pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) && (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED))) + { + if (set_last_error) + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return MZ_FALSE; + } + + pState = pZip->m_pState; + pZip->m_pState = NULL; + mz_zip_array_clear(pZip, &pState->m_central_dir); + mz_zip_array_clear(pZip, &pState->m_central_dir_offsets); + mz_zip_array_clear(pZip, &pState->m_sorted_central_dir_offsets); + +#ifndef MINIZ_NO_STDIO + if (pState->m_pFile) + { + if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) + { + if (MZ_FCLOSE(pState->m_pFile) == EOF) + { + if (set_last_error) + mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); + status = MZ_FALSE; + } + } + + pState->m_pFile = NULL; + } +#endif /* #ifndef MINIZ_NO_STDIO */ + + if ((pZip->m_pWrite == mz_zip_heap_write_func) && (pState->m_pMem)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pState->m_pMem); + pState->m_pMem = NULL; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pState); + pZip->m_zip_mode = MZ_ZIP_MODE_INVALID; + return status; +} + +mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags) +{ + mz_bool zip64 = (flags & MZ_ZIP_FLAG_WRITE_ZIP64) != 0; + + if ((!pZip) || (pZip->m_pState) || (!pZip->m_pWrite) || (pZip->m_zip_mode != MZ_ZIP_MODE_INVALID)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) + { + if (!pZip->m_pRead) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + } + + if (pZip->m_file_offset_alignment) + { + /* Ensure user specified file offset alignment is a power of 2. */ + if (pZip->m_file_offset_alignment & (pZip->m_file_offset_alignment - 1)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + } + + if (!pZip->m_pAlloc) + pZip->m_pAlloc = miniz_def_alloc_func; + if (!pZip->m_pFree) + pZip->m_pFree = miniz_def_free_func; + if (!pZip->m_pRealloc) + pZip->m_pRealloc = miniz_def_realloc_func; + + pZip->m_archive_size = existing_size; + pZip->m_central_directory_file_ofs = 0; + pZip->m_total_files = 0; + + if (NULL == (pZip->m_pState = (mz_zip_internal_state *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(mz_zip_internal_state)))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + memset(pZip->m_pState, 0, sizeof(mz_zip_internal_state)); + + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir, sizeof(mz_uint8)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_central_dir_offsets, sizeof(mz_uint32)); + MZ_ZIP_ARRAY_SET_ELEMENT_SIZE(&pZip->m_pState->m_sorted_central_dir_offsets, sizeof(mz_uint32)); + + pZip->m_pState->m_zip64 = zip64; + pZip->m_pState->m_zip64_has_extended_info_fields = zip64; + + pZip->m_zip_type = MZ_ZIP_TYPE_USER; + pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size) +{ + return mz_zip_writer_init_v2(pZip, existing_size, 0); +} + +mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size, mz_uint flags) +{ + pZip->m_pWrite = mz_zip_heap_write_func; + pZip->m_pNeeds_keepalive = NULL; + + if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) + pZip->m_pRead = mz_zip_mem_read_func; + + pZip->m_pIO_opaque = pZip; + + if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning, flags)) + return MZ_FALSE; + + pZip->m_zip_type = MZ_ZIP_TYPE_HEAP; + + if (0 != (initial_allocation_size = MZ_MAX(initial_allocation_size, size_to_reserve_at_beginning))) + { + if (NULL == (pZip->m_pState->m_pMem = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, initial_allocation_size))) + { + mz_zip_writer_end_internal(pZip, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + pZip->m_pState->m_mem_capacity = initial_allocation_size; + } + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size) +{ + return mz_zip_writer_init_heap_v2(pZip, size_to_reserve_at_beginning, initial_allocation_size, 0); +} + +#ifndef MINIZ_NO_STDIO +static size_t mz_zip_file_write_func(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n) +{ + mz_zip_archive *pZip = (mz_zip_archive *)pOpaque; + mz_int64 cur_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); + + file_ofs += pZip->m_pState->m_file_archive_start_ofs; + + if (((mz_int64)file_ofs < 0) || (((cur_ofs != (mz_int64)file_ofs)) && (MZ_FSEEK64(pZip->m_pState->m_pFile, (mz_int64)file_ofs, SEEK_SET)))) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_SEEK_FAILED); + return 0; + } + + return MZ_FWRITE(pBuf, 1, n, pZip->m_pState->m_pFile); +} + +mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning) +{ + return mz_zip_writer_init_file_v2(pZip, pFilename, size_to_reserve_at_beginning, 0); +} + +mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags) +{ + MZ_FILE *pFile; + + pZip->m_pWrite = mz_zip_file_write_func; + pZip->m_pNeeds_keepalive = NULL; + + if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) + pZip->m_pRead = mz_zip_file_read_func; + + pZip->m_pIO_opaque = pZip; + + if (!mz_zip_writer_init_v2(pZip, size_to_reserve_at_beginning, flags)) + return MZ_FALSE; + + if (NULL == (pFile = MZ_FOPEN(pFilename, (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) ? "w+b" : "wb"))) + { + mz_zip_writer_end(pZip); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + } + + pZip->m_pState->m_pFile = pFile; + pZip->m_zip_type = MZ_ZIP_TYPE_FILE; + + if (size_to_reserve_at_beginning) + { + mz_uint64 cur_ofs = 0; + char buf[4096]; + + MZ_CLEAR_OBJ(buf); + + do + { + size_t n = (size_t)MZ_MIN(sizeof(buf), size_to_reserve_at_beginning); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_ofs, buf, n) != n) + { + mz_zip_writer_end(pZip); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + cur_ofs += n; + size_to_reserve_at_beginning -= n; + } while (size_to_reserve_at_beginning); + } + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags) +{ + pZip->m_pWrite = mz_zip_file_write_func; + pZip->m_pNeeds_keepalive = NULL; + + if (flags & MZ_ZIP_FLAG_WRITE_ALLOW_READING) + pZip->m_pRead = mz_zip_file_read_func; + + pZip->m_pIO_opaque = pZip; + + if (!mz_zip_writer_init_v2(pZip, 0, flags)) + return MZ_FALSE; + + pZip->m_pState->m_pFile = pFile; + pZip->m_pState->m_file_archive_start_ofs = MZ_FTELL64(pZip->m_pState->m_pFile); + pZip->m_zip_type = MZ_ZIP_TYPE_CFILE; + + return MZ_TRUE; +} +#endif /* #ifndef MINIZ_NO_STDIO */ + +mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags) +{ + mz_zip_internal_state *pState; + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_READING)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (flags & MZ_ZIP_FLAG_WRITE_ZIP64) + { + /* We don't support converting a non-zip64 file to zip64 - this seems like more trouble than it's worth. (What about the existing 32-bit data descriptors that could follow the compressed data?) */ + if (!pZip->m_pState->m_zip64) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + } + + /* No sense in trying to write to an archive that's already at the support max size */ + if (pZip->m_pState->m_zip64) + { + if (pZip->m_total_files == MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + else + { + if (pZip->m_total_files == MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + + if ((pZip->m_archive_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + MZ_ZIP_LOCAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); + } + + pState = pZip->m_pState; + + if (pState->m_pFile) + { +#ifdef MINIZ_NO_STDIO + (void)pFilename; + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); +#else + if (pZip->m_pIO_opaque != pZip) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (pZip->m_zip_type == MZ_ZIP_TYPE_FILE) + { + if (!pFilename) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + /* Archive is being read from stdio and was originally opened only for reading. Try to reopen as writable. */ + if (NULL == (pState->m_pFile = MZ_FREOPEN(pFilename, "r+b", pState->m_pFile))) + { + /* The mz_zip_archive is now in a bogus state because pState->m_pFile is NULL, so just close it. */ + mz_zip_reader_end_internal(pZip, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + } + } + + pZip->m_pWrite = mz_zip_file_write_func; + pZip->m_pNeeds_keepalive = NULL; +#endif /* #ifdef MINIZ_NO_STDIO */ + } + else if (pState->m_pMem) + { + /* Archive lives in a memory block. Assume it's from the heap that we can resize using the realloc callback. */ + if (pZip->m_pIO_opaque != pZip) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState->m_mem_capacity = pState->m_mem_size; + pZip->m_pWrite = mz_zip_heap_write_func; + pZip->m_pNeeds_keepalive = NULL; + } + /* Archive is being read via a user provided read function - make sure the user has specified a write function too. */ + else if (!pZip->m_pWrite) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + /* Start writing new files at the archive's current central directory location. */ + /* TODO: We could add a flag that lets the user start writing immediately AFTER the existing central dir - this would be safer. */ + pZip->m_archive_size = pZip->m_central_directory_file_ofs; + pZip->m_central_directory_file_ofs = 0; + + /* Clear the sorted central dir offsets, they aren't useful or maintained now. */ + /* Even though we're now in write mode, files can still be extracted and verified, but file locates will be slow. */ + /* TODO: We could easily maintain the sorted central directory offsets. */ + mz_zip_array_clear(pZip, &pZip->m_pState->m_sorted_central_dir_offsets); + + pZip->m_zip_mode = MZ_ZIP_MODE_WRITING; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename) +{ + return mz_zip_writer_init_from_reader_v2(pZip, pFilename, 0); +} + +/* TODO: pArchive_name is a terrible name here! */ +mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags) +{ + return mz_zip_writer_add_mem_ex(pZip, pArchive_name, pBuf, buf_size, NULL, 0, level_and_flags, 0, 0); +} + +typedef struct +{ + mz_zip_archive *m_pZip; + mz_uint64 m_cur_archive_file_ofs; + mz_uint64 m_comp_size; +} mz_zip_writer_add_state; + +static mz_bool mz_zip_writer_add_put_buf_callback(const void *pBuf, int len, void *pUser) +{ + mz_zip_writer_add_state *pState = (mz_zip_writer_add_state *)pUser; + if ((int)pState->m_pZip->m_pWrite(pState->m_pZip->m_pIO_opaque, pState->m_cur_archive_file_ofs, pBuf, len) != len) + return MZ_FALSE; + + pState->m_cur_archive_file_ofs += len; + pState->m_comp_size += len; + return MZ_TRUE; +} + +#define MZ_ZIP64_MAX_LOCAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 2) +#define MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE (sizeof(mz_uint16) * 2 + sizeof(mz_uint64) * 3) +static mz_uint32 mz_zip_writer_create_zip64_extra_data(mz_uint8 *pBuf, mz_uint64 *pUncomp_size, mz_uint64 *pComp_size, mz_uint64 *pLocal_header_ofs) +{ + mz_uint8 *pDst = pBuf; + mz_uint32 field_size = 0; + + MZ_WRITE_LE16(pDst + 0, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID); + MZ_WRITE_LE16(pDst + 2, 0); + pDst += sizeof(mz_uint16) * 2; + + if (pUncomp_size) + { + MZ_WRITE_LE64(pDst, *pUncomp_size); + pDst += sizeof(mz_uint64); + field_size += sizeof(mz_uint64); + } + + if (pComp_size) + { + MZ_WRITE_LE64(pDst, *pComp_size); + pDst += sizeof(mz_uint64); + field_size += sizeof(mz_uint64); + } + + if (pLocal_header_ofs) + { + MZ_WRITE_LE64(pDst, *pLocal_header_ofs); + pDst += sizeof(mz_uint64); + field_size += sizeof(mz_uint64); + } + + MZ_WRITE_LE16(pBuf + 2, field_size); + + return (mz_uint32)(pDst - pBuf); +} + +static mz_bool mz_zip_writer_create_local_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, mz_uint16 filename_size, mz_uint16 extra_size, mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date) +{ + (void)pZip; + memset(pDst, 0, MZ_ZIP_LOCAL_DIR_HEADER_SIZE); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_SIG_OFS, MZ_ZIP_LOCAL_DIR_HEADER_SIG); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_VERSION_NEEDED_OFS, method ? 20 : 0); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_BIT_FLAG_OFS, bit_flags); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_METHOD_OFS, method); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_TIME_OFS, dos_time); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILE_DATE_OFS, dos_date); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_CRC32_OFS, uncomp_crc32); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS, MZ_MIN(comp_size, MZ_UINT32_MAX)); + MZ_WRITE_LE32(pDst + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS, MZ_MIN(uncomp_size, MZ_UINT32_MAX)); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_FILENAME_LEN_OFS, filename_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_LDH_EXTRA_LEN_OFS, extra_size); + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_create_central_dir_header(mz_zip_archive *pZip, mz_uint8 *pDst, + mz_uint16 filename_size, mz_uint16 extra_size, mz_uint16 comment_size, + mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, + mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, + mz_uint64 local_header_ofs, mz_uint32 ext_attributes) +{ + (void)pZip; + memset(pDst, 0, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_SIG_OFS, MZ_ZIP_CENTRAL_DIR_HEADER_SIG); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_VERSION_NEEDED_OFS, method ? 20 : 0); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_BIT_FLAG_OFS, bit_flags); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_METHOD_OFS, method); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_TIME_OFS, dos_time); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILE_DATE_OFS, dos_date); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_CRC32_OFS, uncomp_crc32); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, MZ_MIN(comp_size, MZ_UINT32_MAX)); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, MZ_MIN(uncomp_size, MZ_UINT32_MAX)); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_FILENAME_LEN_OFS, filename_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_EXTRA_LEN_OFS, extra_size); + MZ_WRITE_LE16(pDst + MZ_ZIP_CDH_COMMENT_LEN_OFS, comment_size); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_EXTERNAL_ATTR_OFS, ext_attributes); + MZ_WRITE_LE32(pDst + MZ_ZIP_CDH_LOCAL_HEADER_OFS, MZ_MIN(local_header_ofs, MZ_UINT32_MAX)); + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_add_to_central_dir(mz_zip_archive *pZip, const char *pFilename, mz_uint16 filename_size, + const void *pExtra, mz_uint16 extra_size, const void *pComment, mz_uint16 comment_size, + mz_uint64 uncomp_size, mz_uint64 comp_size, mz_uint32 uncomp_crc32, + mz_uint16 method, mz_uint16 bit_flags, mz_uint16 dos_time, mz_uint16 dos_date, + mz_uint64 local_header_ofs, mz_uint32 ext_attributes, + const char *user_extra_data, mz_uint user_extra_data_len) +{ + mz_zip_internal_state *pState = pZip->m_pState; + mz_uint32 central_dir_ofs = (mz_uint32)pState->m_central_dir.m_size; + size_t orig_central_dir_size = pState->m_central_dir.m_size; + mz_uint8 central_dir_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; + + if (!pZip->m_pState->m_zip64) + { + if (local_header_ofs > 0xFFFFFFFF) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_TOO_LARGE); + } + + /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ + if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + filename_size + extra_size + user_extra_data_len + comment_size) >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); + + if (!mz_zip_writer_create_central_dir_header(pZip, central_dir_header, filename_size, extra_size + user_extra_data_len, comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_header_ofs, ext_attributes)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if ((!mz_zip_array_push_back(pZip, &pState->m_central_dir, central_dir_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pFilename, filename_size)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pExtra, extra_size)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, user_extra_data, user_extra_data_len)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pComment, comment_size)) || + (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, ¢ral_dir_ofs, 1))) + { + /* Try to resize the central directory array back into its original state. */ + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + return MZ_TRUE; +} + +static mz_bool mz_zip_writer_validate_archive_name(const char *pArchive_name) +{ + /* Basic ZIP archive filename validity checks: Valid filenames cannot start with a forward slash, cannot contain a drive letter, and cannot use DOS-style backward slashes. */ + if (*pArchive_name == '/') + return MZ_FALSE; + + while (*pArchive_name) + { + if ((*pArchive_name == '\\') || (*pArchive_name == ':')) + return MZ_FALSE; + + pArchive_name++; + } + + return MZ_TRUE; +} + +static mz_uint mz_zip_writer_compute_padding_needed_for_file_alignment(mz_zip_archive *pZip) +{ + mz_uint32 n; + if (!pZip->m_file_offset_alignment) + return 0; + n = (mz_uint32)(pZip->m_archive_size & (pZip->m_file_offset_alignment - 1)); + return (mz_uint)((pZip->m_file_offset_alignment - n) & (pZip->m_file_offset_alignment - 1)); +} + +static mz_bool mz_zip_writer_write_zeros(mz_zip_archive *pZip, mz_uint64 cur_file_ofs, mz_uint32 n) +{ + char buf[4096]; + memset(buf, 0, MZ_MIN(sizeof(buf), n)); + while (n) + { + mz_uint32 s = MZ_MIN(sizeof(buf), n); + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_file_ofs, buf, s) != s) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_file_ofs += s; + n -= s; + } + return MZ_TRUE; +} + +mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, + mz_uint64 uncomp_size, mz_uint32 uncomp_crc32) +{ + return mz_zip_writer_add_mem_ex_v2(pZip, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, uncomp_size, uncomp_crc32, NULL, NULL, 0, NULL, 0); +} + +mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, + mz_uint level_and_flags, mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified, + const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) +{ + mz_uint16 method = 0, dos_time = 0, dos_date = 0; + mz_uint level, ext_attributes = 0, num_alignment_padding_bytes; + mz_uint64 local_dir_header_ofs = pZip->m_archive_size, cur_archive_file_ofs = pZip->m_archive_size, comp_size = 0; + size_t archive_name_size; + mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; + tdefl_compressor *pComp = NULL; + mz_bool store_data_uncompressed; + mz_zip_internal_state *pState; + mz_uint8 *pExtra_data = NULL; + mz_uint32 extra_size = 0; + mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE]; + mz_uint16 bit_flags = 0; + + if (uncomp_size || (buf_size && !(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA))) + bit_flags |= MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR; + + if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME)) + bit_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8; + + if ((int)level_and_flags < 0) + level_and_flags = MZ_DEFAULT_LEVEL; + level = level_and_flags & 0xF; + store_data_uncompressed = ((!level) || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)); + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || ((buf_size) && (!pBuf)) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState = pZip->m_pState; + + if (pState->m_zip64) + { + if (pZip->m_total_files == MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + else + { + if (pZip->m_total_files == MZ_UINT16_MAX) + { + pState->m_zip64 = MZ_TRUE; + /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */ + } + if ((buf_size > 0xFFFFFFFF) || (uncomp_size > 0xFFFFFFFF)) + { + pState->m_zip64 = MZ_TRUE; + /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ + } + } + + if ((!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) && (uncomp_size)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!mz_zip_writer_validate_archive_name(pArchive_name)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); + +#ifndef MINIZ_NO_TIME + if (last_modified != NULL) + { + mz_zip_time_t_to_dos_time(*last_modified, &dos_time, &dos_date); + } + else + { + MZ_TIME_T cur_time; + time(&cur_time); + mz_zip_time_t_to_dos_time(cur_time, &dos_time, &dos_date); + } +#endif /* #ifndef MINIZ_NO_TIME */ + + archive_name_size = strlen(pArchive_name); + if (archive_name_size > MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); + + num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); + + /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ + if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); + + if (!pState->m_zip64) + { + /* Bail early if the archive would obviously become too large */ + if ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > 0xFFFFFFFF) + { + pState->m_zip64 = MZ_TRUE; + /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ + } + } + + if ((archive_name_size) && (pArchive_name[archive_name_size - 1] == '/')) + { + /* Set DOS Subdirectory attribute bit. */ + ext_attributes |= MZ_ZIP_DOS_DIR_ATTRIBUTE_BITFLAG; + + /* Subdirectories cannot contain data. */ + if ((buf_size) || (uncomp_size)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + } + + /* Try to do any allocations before writing to the archive, so if an allocation fails the file remains unmodified. (A good idea if we're doing an in-place modification.) */ + if ((!mz_zip_array_ensure_room(pZip, &pState->m_central_dir, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + (pState->m_zip64 ? MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE : 0))) || (!mz_zip_array_ensure_room(pZip, &pState->m_central_dir_offsets, 1))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + if ((!store_data_uncompressed) && (buf_size)) + { + if (NULL == (pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return MZ_FALSE; + } + + local_dir_header_ofs += num_alignment_padding_bytes; + if (pZip->m_file_offset_alignment) + { + MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); + } + cur_archive_file_ofs += num_alignment_padding_bytes; + + MZ_CLEAR_OBJ(local_dir_header); + + if (!store_data_uncompressed || (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + { + method = MZ_DEFLATED; + } + + if (pState->m_zip64) + { + if (uncomp_size >= MZ_UINT32_MAX || local_dir_header_ofs >= MZ_UINT32_MAX) + { + pExtra_data = extra_data; + extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, + (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); + } + + if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, extra_size + user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += sizeof(local_dir_header); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + cur_archive_file_ofs += archive_name_size; + + if (pExtra_data != NULL) + { + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += extra_size; + } + } + else + { + if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, user_extra_data_len, 0, 0, 0, method, bit_flags, dos_time, dos_date)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, local_dir_header_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += sizeof(local_dir_header); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + cur_archive_file_ofs += archive_name_size; + } + + if (user_extra_data_len > 0) + { + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += user_extra_data_len; + } + + if (!(level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA)) + { + uncomp_crc32 = (mz_uint32)mz_crc32(MZ_CRC32_INIT, (const mz_uint8 *)pBuf, buf_size); + uncomp_size = buf_size; + if (uncomp_size <= 3) + { + level = 0; + store_data_uncompressed = MZ_TRUE; + } + } + + if (store_data_uncompressed) + { + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pBuf, buf_size) != buf_size) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + + cur_archive_file_ofs += buf_size; + comp_size = buf_size; + } + else if (buf_size) + { + mz_zip_writer_add_state state; + + state.m_pZip = pZip; + state.m_cur_archive_file_ofs = cur_archive_file_ofs; + state.m_comp_size = 0; + + if ((tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) || + (tdefl_compress_buffer(pComp, pBuf, buf_size, TDEFL_FINISH) != TDEFL_STATUS_DONE)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + return mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED); + } + + comp_size = state.m_comp_size; + cur_archive_file_ofs = state.m_cur_archive_file_ofs; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + pComp = NULL; + + if (uncomp_size) + { + mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64]; + mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32; + + MZ_ASSERT(bit_flags & MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR); + + MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID); + MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32); + if (pExtra_data == NULL) + { + if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + + MZ_WRITE_LE32(local_dir_footer + 8, comp_size); + MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size); + } + else + { + MZ_WRITE_LE64(local_dir_footer + 8, comp_size); + MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size); + local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64; + } + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size) + return MZ_FALSE; + + cur_archive_file_ofs += local_dir_footer_size; + } + + if (pExtra_data != NULL) + { + extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, + (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); + } + + if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, pExtra_data, extra_size, pComment, + comment_size, uncomp_size, comp_size, uncomp_crc32, method, bit_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes, + user_extra_data_central, user_extra_data_central_len)) + return MZ_FALSE; + + pZip->m_total_files++; + pZip->m_archive_size = cur_archive_file_ofs; + + return MZ_TRUE; +} + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 size_to_add, const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, + const char *user_extra_data, mz_uint user_extra_data_len, const char *user_extra_data_central, mz_uint user_extra_data_central_len) +{ + mz_uint16 gen_flags = MZ_ZIP_LDH_BIT_FLAG_HAS_LOCATOR; + mz_uint uncomp_crc32 = MZ_CRC32_INIT, level, num_alignment_padding_bytes; + mz_uint16 method = 0, dos_time = 0, dos_date = 0, ext_attributes = 0; + mz_uint64 local_dir_header_ofs, cur_archive_file_ofs = pZip->m_archive_size, uncomp_size = size_to_add, comp_size = 0; + size_t archive_name_size; + mz_uint8 local_dir_header[MZ_ZIP_LOCAL_DIR_HEADER_SIZE]; + mz_uint8 *pExtra_data = NULL; + mz_uint32 extra_size = 0; + mz_uint8 extra_data[MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE]; + mz_zip_internal_state *pState; + + if (!(level_and_flags & MZ_ZIP_FLAG_ASCII_FILENAME)) + gen_flags |= MZ_ZIP_GENERAL_PURPOSE_BIT_FLAG_UTF8; + + if ((int)level_and_flags < 0) + level_and_flags = MZ_DEFAULT_LEVEL; + level = level_and_flags & 0xF; + + /* Sanity checks */ + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pArchive_name) || ((comment_size) && (!pComment)) || (level > MZ_UBER_COMPRESSION)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState = pZip->m_pState; + + if ((!pState->m_zip64) && (uncomp_size > MZ_UINT32_MAX)) + { + /* Source file is too large for non-zip64 */ + /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ + pState->m_zip64 = MZ_TRUE; + } + + /* We could support this, but why? */ + if (level_and_flags & MZ_ZIP_FLAG_COMPRESSED_DATA) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!mz_zip_writer_validate_archive_name(pArchive_name)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); + + if (pState->m_zip64) + { + if (pZip->m_total_files == MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + else + { + if (pZip->m_total_files == MZ_UINT16_MAX) + { + pState->m_zip64 = MZ_TRUE; + /*return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); */ + } + } + + archive_name_size = strlen(pArchive_name); + if (archive_name_size > MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_FILENAME); + + num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); + + /* miniz doesn't support central dirs >= MZ_UINT32_MAX bytes yet */ + if (((mz_uint64)pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP64_MAX_CENTRAL_EXTRA_FIELD_SIZE + comment_size) >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); + + if (!pState->m_zip64) + { + /* Bail early if the archive would obviously become too large */ + if ((pZip->m_archive_size + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + archive_name_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + archive_name_size + comment_size + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 1024) > 0xFFFFFFFF) + { + pState->m_zip64 = MZ_TRUE; + /*return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); */ + } + } + +#ifndef MINIZ_NO_TIME + if (pFile_time) + { + mz_zip_time_t_to_dos_time(*pFile_time, &dos_time, &dos_date); + } +#endif + + if (uncomp_size <= 3) + level = 0; + + if (!mz_zip_writer_write_zeros(pZip, cur_archive_file_ofs, num_alignment_padding_bytes)) + { + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + + cur_archive_file_ofs += num_alignment_padding_bytes; + local_dir_header_ofs = cur_archive_file_ofs; + + if (pZip->m_file_offset_alignment) + { + MZ_ASSERT((cur_archive_file_ofs & (pZip->m_file_offset_alignment - 1)) == 0); + } + + if (uncomp_size && level) + { + method = MZ_DEFLATED; + } + + MZ_CLEAR_OBJ(local_dir_header); + if (pState->m_zip64) + { + if (uncomp_size >= MZ_UINT32_MAX || local_dir_header_ofs >= MZ_UINT32_MAX) + { + pExtra_data = extra_data; + extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, + (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); + } + + if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, extra_size + user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += sizeof(local_dir_header); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) + { + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + + cur_archive_file_ofs += archive_name_size; + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, extra_data, extra_size) != extra_size) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += extra_size; + } + else + { + if ((comp_size > MZ_UINT32_MAX) || (cur_archive_file_ofs > MZ_UINT32_MAX)) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + if (!mz_zip_writer_create_local_dir_header(pZip, local_dir_header, (mz_uint16)archive_name_size, user_extra_data_len, 0, 0, 0, method, gen_flags, dos_time, dos_date)) + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_header, sizeof(local_dir_header)) != sizeof(local_dir_header)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += sizeof(local_dir_header); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pArchive_name, archive_name_size) != archive_name_size) + { + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + + cur_archive_file_ofs += archive_name_size; + } + + if (user_extra_data_len > 0) + { + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, user_extra_data, user_extra_data_len) != user_extra_data_len) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_archive_file_ofs += user_extra_data_len; + } + + if (uncomp_size) + { + mz_uint64 uncomp_remaining = uncomp_size; + void *pRead_buf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, MZ_ZIP_MAX_IO_BUF_SIZE); + if (!pRead_buf) + { + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (!level) + { + while (uncomp_remaining) + { + mz_uint n = (mz_uint)MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, uncomp_remaining); + if ((MZ_FREAD(pRead_buf, 1, n, pSrc_file) != n) || (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, pRead_buf, n) != n)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + } + uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, n); + uncomp_remaining -= n; + cur_archive_file_ofs += n; + } + comp_size = uncomp_size; + } + else + { + mz_bool result = MZ_FALSE; + mz_zip_writer_add_state state; + tdefl_compressor *pComp = (tdefl_compressor *)pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, sizeof(tdefl_compressor)); + if (!pComp) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + state.m_pZip = pZip; + state.m_cur_archive_file_ofs = cur_archive_file_ofs; + state.m_comp_size = 0; + + if (tdefl_init(pComp, mz_zip_writer_add_put_buf_callback, &state, tdefl_create_comp_flags_from_zip_params(level, -15, MZ_DEFAULT_STRATEGY)) != TDEFL_STATUS_OKAY) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + return mz_zip_set_error(pZip, MZ_ZIP_INTERNAL_ERROR); + } + + for (;;) + { + size_t in_buf_size = (mz_uint32)MZ_MIN(uncomp_remaining, (mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE); + tdefl_status status; + tdefl_flush flush = TDEFL_NO_FLUSH; + + if (MZ_FREAD(pRead_buf, 1, in_buf_size, pSrc_file) != in_buf_size) + { + mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + break; + } + + uncomp_crc32 = (mz_uint32)mz_crc32(uncomp_crc32, (const mz_uint8 *)pRead_buf, in_buf_size); + uncomp_remaining -= in_buf_size; + + if (pZip->m_pNeeds_keepalive != NULL && pZip->m_pNeeds_keepalive(pZip->m_pIO_opaque)) + flush = TDEFL_FULL_FLUSH; + + status = tdefl_compress_buffer(pComp, pRead_buf, in_buf_size, uncomp_remaining ? flush : TDEFL_FINISH); + if (status == TDEFL_STATUS_DONE) + { + result = MZ_TRUE; + break; + } + else if (status != TDEFL_STATUS_OKAY) + { + mz_zip_set_error(pZip, MZ_ZIP_COMPRESSION_FAILED); + break; + } + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pComp); + + if (!result) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + return MZ_FALSE; + } + + comp_size = state.m_comp_size; + cur_archive_file_ofs = state.m_cur_archive_file_ofs; + } + + pZip->m_pFree(pZip->m_pAlloc_opaque, pRead_buf); + } + + { + mz_uint8 local_dir_footer[MZ_ZIP_DATA_DESCRIPTER_SIZE64]; + mz_uint32 local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE32; + + MZ_WRITE_LE32(local_dir_footer + 0, MZ_ZIP_DATA_DESCRIPTOR_ID); + MZ_WRITE_LE32(local_dir_footer + 4, uncomp_crc32); + if (pExtra_data == NULL) + { + if (comp_size > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + + MZ_WRITE_LE32(local_dir_footer + 8, comp_size); + MZ_WRITE_LE32(local_dir_footer + 12, uncomp_size); + } + else + { + MZ_WRITE_LE64(local_dir_footer + 8, comp_size); + MZ_WRITE_LE64(local_dir_footer + 16, uncomp_size); + local_dir_footer_size = MZ_ZIP_DATA_DESCRIPTER_SIZE64; + } + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_archive_file_ofs, local_dir_footer, local_dir_footer_size) != local_dir_footer_size) + return MZ_FALSE; + + cur_archive_file_ofs += local_dir_footer_size; + } + + if (pExtra_data != NULL) + { + extra_size = mz_zip_writer_create_zip64_extra_data(extra_data, (uncomp_size >= MZ_UINT32_MAX) ? &uncomp_size : NULL, + (uncomp_size >= MZ_UINT32_MAX) ? &comp_size : NULL, (local_dir_header_ofs >= MZ_UINT32_MAX) ? &local_dir_header_ofs : NULL); + } + + if (!mz_zip_writer_add_to_central_dir(pZip, pArchive_name, (mz_uint16)archive_name_size, pExtra_data, extra_size, pComment, comment_size, + uncomp_size, comp_size, uncomp_crc32, method, gen_flags, dos_time, dos_date, local_dir_header_ofs, ext_attributes, + user_extra_data_central, user_extra_data_central_len)) + return MZ_FALSE; + + pZip->m_total_files++; + pZip->m_archive_size = cur_archive_file_ofs; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) +{ + MZ_FILE *pSrc_file = NULL; + mz_uint64 uncomp_size = 0; + MZ_TIME_T file_modified_time; + MZ_TIME_T *pFile_time = NULL; + mz_bool status; + + memset(&file_modified_time, 0, sizeof(file_modified_time)); + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_STDIO) + pFile_time = &file_modified_time; + if (!mz_zip_get_file_modified_time(pSrc_filename, &file_modified_time)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_STAT_FAILED); +#endif + + pSrc_file = MZ_FOPEN(pSrc_filename, "rb"); + if (!pSrc_file) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_OPEN_FAILED); + + MZ_FSEEK64(pSrc_file, 0, SEEK_END); + uncomp_size = MZ_FTELL64(pSrc_file); + MZ_FSEEK64(pSrc_file, 0, SEEK_SET); + + status = mz_zip_writer_add_cfile(pZip, pArchive_name, pSrc_file, uncomp_size, pFile_time, pComment, comment_size, level_and_flags, NULL, 0, NULL, 0); + + MZ_FCLOSE(pSrc_file); + + return status; +} +#endif /* #ifndef MINIZ_NO_STDIO */ + +static mz_bool mz_zip_writer_update_zip64_extension_block(mz_zip_array *pNew_ext, mz_zip_archive *pZip, const mz_uint8 *pExt, uint32_t ext_len, mz_uint64 *pComp_size, mz_uint64 *pUncomp_size, mz_uint64 *pLocal_header_ofs, mz_uint32 *pDisk_start) +{ + /* + 64 should be enough for any new zip64 data */ + if (!mz_zip_array_reserve(pZip, pNew_ext, ext_len + 64, MZ_FALSE)) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + mz_zip_array_resize(pZip, pNew_ext, 0, MZ_FALSE); + + if ((pUncomp_size) || (pComp_size) || (pLocal_header_ofs) || (pDisk_start)) + { + mz_uint8 new_ext_block[64]; + mz_uint8 *pDst = new_ext_block; + mz_write_le16(pDst, MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID); + mz_write_le16(pDst + sizeof(mz_uint16), 0); + pDst += sizeof(mz_uint16) * 2; + + if (pUncomp_size) + { + mz_write_le64(pDst, *pUncomp_size); + pDst += sizeof(mz_uint64); + } + + if (pComp_size) + { + mz_write_le64(pDst, *pComp_size); + pDst += sizeof(mz_uint64); + } + + if (pLocal_header_ofs) + { + mz_write_le64(pDst, *pLocal_header_ofs); + pDst += sizeof(mz_uint64); + } + + if (pDisk_start) + { + mz_write_le32(pDst, *pDisk_start); + pDst += sizeof(mz_uint32); + } + + mz_write_le16(new_ext_block + sizeof(mz_uint16), (mz_uint16)((pDst - new_ext_block) - sizeof(mz_uint16) * 2)); + + if (!mz_zip_array_push_back(pZip, pNew_ext, new_ext_block, pDst - new_ext_block)) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if ((pExt) && (ext_len)) + { + mz_uint32 extra_size_remaining = ext_len; + const mz_uint8 *pExtra_data = pExt; + + do + { + mz_uint32 field_id, field_data_size, field_total_size; + + if (extra_size_remaining < (sizeof(mz_uint16) * 2)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + field_id = MZ_READ_LE16(pExtra_data); + field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); + field_total_size = field_data_size + sizeof(mz_uint16) * 2; + + if (field_total_size > extra_size_remaining) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + if (field_id != MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) + { + if (!mz_zip_array_push_back(pZip, pNew_ext, pExtra_data, field_total_size)) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + pExtra_data += field_total_size; + extra_size_remaining -= field_total_size; + } while (extra_size_remaining); + } + + return MZ_TRUE; +} + +/* TODO: This func is now pretty freakin complex due to zip64, split it up? */ +mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index) +{ + mz_uint n, bit_flags, num_alignment_padding_bytes, src_central_dir_following_data_size; + mz_uint64 src_archive_bytes_remaining, local_dir_header_ofs; + mz_uint64 cur_src_file_ofs, cur_dst_file_ofs; + mz_uint32 local_header_u32[(MZ_ZIP_LOCAL_DIR_HEADER_SIZE + sizeof(mz_uint32) - 1) / sizeof(mz_uint32)]; + mz_uint8 *pLocal_header = (mz_uint8 *)local_header_u32; + mz_uint8 new_central_header[MZ_ZIP_CENTRAL_DIR_HEADER_SIZE]; + size_t orig_central_dir_size; + mz_zip_internal_state *pState; + void *pBuf; + const mz_uint8 *pSrc_central_header; + mz_zip_archive_file_stat src_file_stat; + mz_uint32 src_filename_len, src_comment_len, src_ext_len; + mz_uint32 local_header_filename_size, local_header_extra_len; + mz_uint64 local_header_comp_size, local_header_uncomp_size; + mz_bool found_zip64_ext_data_in_ldir = MZ_FALSE; + + /* Sanity checks */ + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING) || (!pSource_zip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState = pZip->m_pState; + + /* Don't support copying files from zip64 archives to non-zip64, even though in some cases this is possible */ + if ((pSource_zip->m_pState->m_zip64) && (!pZip->m_pState->m_zip64)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + /* Get pointer to the source central dir header and crack it */ + if (NULL == (pSrc_central_header = mz_zip_get_cdh(pSource_zip, src_file_index))) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (MZ_READ_LE32(pSrc_central_header + MZ_ZIP_CDH_SIG_OFS) != MZ_ZIP_CENTRAL_DIR_HEADER_SIG) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + src_filename_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_FILENAME_LEN_OFS); + src_comment_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_COMMENT_LEN_OFS); + src_ext_len = MZ_READ_LE16(pSrc_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS); + src_central_dir_following_data_size = src_filename_len + src_ext_len + src_comment_len; + + /* TODO: We don't support central dir's >= MZ_UINT32_MAX bytes right now (+32 fudge factor in case we need to add more extra data) */ + if ((pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_central_dir_following_data_size + 32) >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); + + num_alignment_padding_bytes = mz_zip_writer_compute_padding_needed_for_file_alignment(pZip); + + if (!pState->m_zip64) + { + if (pZip->m_total_files == MZ_UINT16_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + else + { + /* TODO: Our zip64 support still has some 32-bit limits that may not be worth fixing. */ + if (pZip->m_total_files == MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + + if (!mz_zip_file_stat_internal(pSource_zip, src_file_index, pSrc_central_header, &src_file_stat, NULL)) + return MZ_FALSE; + + cur_src_file_ofs = src_file_stat.m_local_header_ofs; + cur_dst_file_ofs = pZip->m_archive_size; + + /* Read the source archive's local dir header */ + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + + if (MZ_READ_LE32(pLocal_header) != MZ_ZIP_LOCAL_DIR_HEADER_SIG) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + + cur_src_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; + + /* Compute the total size we need to copy (filename+extra data+compressed data) */ + local_header_filename_size = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_FILENAME_LEN_OFS); + local_header_extra_len = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_EXTRA_LEN_OFS); + local_header_comp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_COMPRESSED_SIZE_OFS); + local_header_uncomp_size = MZ_READ_LE32(pLocal_header + MZ_ZIP_LDH_DECOMPRESSED_SIZE_OFS); + src_archive_bytes_remaining = local_header_filename_size + local_header_extra_len + src_file_stat.m_comp_size; + + /* Try to find a zip64 extended information field */ + if ((local_header_extra_len) && ((local_header_comp_size == MZ_UINT32_MAX) || (local_header_uncomp_size == MZ_UINT32_MAX))) + { + mz_zip_array file_data_array; + const mz_uint8 *pExtra_data; + mz_uint32 extra_size_remaining = local_header_extra_len; + + mz_zip_array_init(&file_data_array, 1); + if (!mz_zip_array_resize(pZip, &file_data_array, local_header_extra_len, MZ_FALSE)) + { + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, src_file_stat.m_local_header_ofs + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + local_header_filename_size, file_data_array.m_p, local_header_extra_len) != local_header_extra_len) + { + mz_zip_array_clear(pZip, &file_data_array); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + } + + pExtra_data = (const mz_uint8 *)file_data_array.m_p; + + do + { + mz_uint32 field_id, field_data_size, field_total_size; + + if (extra_size_remaining < (sizeof(mz_uint16) * 2)) + { + mz_zip_array_clear(pZip, &file_data_array); + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + } + + field_id = MZ_READ_LE16(pExtra_data); + field_data_size = MZ_READ_LE16(pExtra_data + sizeof(mz_uint16)); + field_total_size = field_data_size + sizeof(mz_uint16) * 2; + + if (field_total_size > extra_size_remaining) + { + mz_zip_array_clear(pZip, &file_data_array); + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + } + + if (field_id == MZ_ZIP64_EXTENDED_INFORMATION_FIELD_HEADER_ID) + { + const mz_uint8 *pSrc_field_data = pExtra_data + sizeof(mz_uint32); + + if (field_data_size < sizeof(mz_uint64) * 2) + { + mz_zip_array_clear(pZip, &file_data_array); + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_HEADER_OR_CORRUPTED); + } + + local_header_uncomp_size = MZ_READ_LE64(pSrc_field_data); + local_header_comp_size = MZ_READ_LE64(pSrc_field_data + sizeof(mz_uint64)); /* may be 0 if there's a descriptor */ + + found_zip64_ext_data_in_ldir = MZ_TRUE; + break; + } + + pExtra_data += field_total_size; + extra_size_remaining -= field_total_size; + } while (extra_size_remaining); + + mz_zip_array_clear(pZip, &file_data_array); + } + + if (!pState->m_zip64) + { + /* Try to detect if the new archive will most likely wind up too big and bail early (+(sizeof(mz_uint32) * 4) is for the optional descriptor which could be present, +64 is a fudge factor). */ + /* We also check when the archive is finalized so this doesn't need to be perfect. */ + mz_uint64 approx_new_archive_size = cur_dst_file_ofs + num_alignment_padding_bytes + MZ_ZIP_LOCAL_DIR_HEADER_SIZE + src_archive_bytes_remaining + (sizeof(mz_uint32) * 4) + + pState->m_central_dir.m_size + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_central_dir_following_data_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE + 64; + + if (approx_new_archive_size >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + } + + /* Write dest archive padding */ + if (!mz_zip_writer_write_zeros(pZip, cur_dst_file_ofs, num_alignment_padding_bytes)) + return MZ_FALSE; + + cur_dst_file_ofs += num_alignment_padding_bytes; + + local_dir_header_ofs = cur_dst_file_ofs; + if (pZip->m_file_offset_alignment) + { + MZ_ASSERT((local_dir_header_ofs & (pZip->m_file_offset_alignment - 1)) == 0); + } + + /* The original zip's local header+ext block doesn't change, even with zip64, so we can just copy it over to the dest zip */ + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pLocal_header, MZ_ZIP_LOCAL_DIR_HEADER_SIZE) != MZ_ZIP_LOCAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + cur_dst_file_ofs += MZ_ZIP_LOCAL_DIR_HEADER_SIZE; + + /* Copy over the source archive bytes to the dest archive, also ensure we have enough buf space to handle optional data descriptor */ + if (NULL == (pBuf = pZip->m_pAlloc(pZip->m_pAlloc_opaque, 1, (size_t)MZ_MAX(32U, MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, src_archive_bytes_remaining))))) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + while (src_archive_bytes_remaining) + { + n = (mz_uint)MZ_MIN((mz_uint64)MZ_ZIP_MAX_IO_BUF_SIZE, src_archive_bytes_remaining); + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, n) != n) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + } + cur_src_file_ofs += n; + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + cur_dst_file_ofs += n; + + src_archive_bytes_remaining -= n; + } + + /* Now deal with the optional data descriptor */ + bit_flags = MZ_READ_LE16(pLocal_header + MZ_ZIP_LDH_BIT_FLAG_OFS); + if (bit_flags & 8) + { + /* Copy data descriptor */ + if ((pSource_zip->m_pState->m_zip64) || (found_zip64_ext_data_in_ldir)) + { + /* src is zip64, dest must be zip64 */ + + /* name uint32_t's */ + /* id 1 (optional in zip64?) */ + /* crc 1 */ + /* comp_size 2 */ + /* uncomp_size 2 */ + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, (sizeof(mz_uint32) * 6)) != (sizeof(mz_uint32) * 6)) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + } + + n = sizeof(mz_uint32) * ((MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID) ? 6 : 5); + } + else + { + /* src is NOT zip64 */ + mz_bool has_id; + + if (pSource_zip->m_pRead(pSource_zip->m_pIO_opaque, cur_src_file_ofs, pBuf, sizeof(mz_uint32) * 4) != sizeof(mz_uint32) * 4) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_READ_FAILED); + } + + has_id = (MZ_READ_LE32(pBuf) == MZ_ZIP_DATA_DESCRIPTOR_ID); + + if (pZip->m_pState->m_zip64) + { + /* dest is zip64, so upgrade the data descriptor */ + const mz_uint32 *pSrc_descriptor = (const mz_uint32 *)((const mz_uint8 *)pBuf + (has_id ? sizeof(mz_uint32) : 0)); + const mz_uint32 src_crc32 = pSrc_descriptor[0]; + const mz_uint64 src_comp_size = pSrc_descriptor[1]; + const mz_uint64 src_uncomp_size = pSrc_descriptor[2]; + + mz_write_le32((mz_uint8 *)pBuf, MZ_ZIP_DATA_DESCRIPTOR_ID); + mz_write_le32((mz_uint8 *)pBuf + sizeof(mz_uint32) * 1, src_crc32); + mz_write_le64((mz_uint8 *)pBuf + sizeof(mz_uint32) * 2, src_comp_size); + mz_write_le64((mz_uint8 *)pBuf + sizeof(mz_uint32) * 4, src_uncomp_size); + + n = sizeof(mz_uint32) * 6; + } + else + { + /* dest is NOT zip64, just copy it as-is */ + n = sizeof(mz_uint32) * (has_id ? 4 : 3); + } + } + + if (pZip->m_pWrite(pZip->m_pIO_opaque, cur_dst_file_ofs, pBuf, n) != n) + { + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + } + + cur_src_file_ofs += n; + cur_dst_file_ofs += n; + } + pZip->m_pFree(pZip->m_pAlloc_opaque, pBuf); + + /* Finally, add the new central dir header */ + orig_central_dir_size = pState->m_central_dir.m_size; + + memcpy(new_central_header, pSrc_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE); + + if (pState->m_zip64) + { + /* This is the painful part: We need to write a new central dir header + ext block with updated zip64 fields, and ensure the old fields (if any) are not included. */ + const mz_uint8 *pSrc_ext = pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_filename_len; + mz_zip_array new_ext_block; + + mz_zip_array_init(&new_ext_block, sizeof(mz_uint8)); + + MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_COMPRESSED_SIZE_OFS, MZ_UINT32_MAX); + MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_DECOMPRESSED_SIZE_OFS, MZ_UINT32_MAX); + MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, MZ_UINT32_MAX); + + if (!mz_zip_writer_update_zip64_extension_block(&new_ext_block, pZip, pSrc_ext, src_ext_len, &src_file_stat.m_comp_size, &src_file_stat.m_uncomp_size, &local_dir_header_ofs, NULL)) + { + mz_zip_array_clear(pZip, &new_ext_block); + return MZ_FALSE; + } + + MZ_WRITE_LE16(new_central_header + MZ_ZIP_CDH_EXTRA_LEN_OFS, new_ext_block.m_size); + + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) + { + mz_zip_array_clear(pZip, &new_ext_block); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, src_filename_len)) + { + mz_zip_array_clear(pZip, &new_ext_block); + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_ext_block.m_p, new_ext_block.m_size)) + { + mz_zip_array_clear(pZip, &new_ext_block); + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE + src_filename_len + src_ext_len, src_comment_len)) + { + mz_zip_array_clear(pZip, &new_ext_block); + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + mz_zip_array_clear(pZip, &new_ext_block); + } + else + { + /* sanity checks */ + if (cur_dst_file_ofs > MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + + if (local_dir_header_ofs >= MZ_UINT32_MAX) + return mz_zip_set_error(pZip, MZ_ZIP_ARCHIVE_TOO_LARGE); + + MZ_WRITE_LE32(new_central_header + MZ_ZIP_CDH_LOCAL_HEADER_OFS, local_dir_header_ofs); + + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, new_central_header, MZ_ZIP_CENTRAL_DIR_HEADER_SIZE)) + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir, pSrc_central_header + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, src_central_dir_following_data_size)) + { + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + } + + /* This shouldn't trigger unless we screwed up during the initial sanity checks */ + if (pState->m_central_dir.m_size >= MZ_UINT32_MAX) + { + /* TODO: Support central dirs >= 32-bits in size */ + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_UNSUPPORTED_CDIR_SIZE); + } + + n = (mz_uint32)orig_central_dir_size; + if (!mz_zip_array_push_back(pZip, &pState->m_central_dir_offsets, &n, 1)) + { + mz_zip_array_resize(pZip, &pState->m_central_dir, orig_central_dir_size, MZ_FALSE); + return mz_zip_set_error(pZip, MZ_ZIP_ALLOC_FAILED); + } + + pZip->m_total_files++; + pZip->m_archive_size = cur_dst_file_ofs; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip) +{ + mz_zip_internal_state *pState; + mz_uint64 central_dir_ofs, central_dir_size; + mz_uint8 hdr[256]; + + if ((!pZip) || (!pZip->m_pState) || (pZip->m_zip_mode != MZ_ZIP_MODE_WRITING)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + pState = pZip->m_pState; + + if (pState->m_zip64) + { + if ((pZip->m_total_files > MZ_UINT32_MAX) || (pState->m_central_dir.m_size >= MZ_UINT32_MAX)) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + else + { + if ((pZip->m_total_files > MZ_UINT16_MAX) || ((pZip->m_archive_size + pState->m_central_dir.m_size + MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) > MZ_UINT32_MAX)) + return mz_zip_set_error(pZip, MZ_ZIP_TOO_MANY_FILES); + } + + central_dir_ofs = 0; + central_dir_size = 0; + if (pZip->m_total_files) + { + /* Write central directory */ + central_dir_ofs = pZip->m_archive_size; + central_dir_size = pState->m_central_dir.m_size; + pZip->m_central_directory_file_ofs = central_dir_ofs; + if (pZip->m_pWrite(pZip->m_pIO_opaque, central_dir_ofs, pState->m_central_dir.m_p, (size_t)central_dir_size) != central_dir_size) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + pZip->m_archive_size += central_dir_size; + } + + if (pState->m_zip64) + { + /* Write zip64 end of central directory header */ + mz_uint64 rel_ofs_to_zip64_ecdr = pZip->m_archive_size; + + MZ_CLEAR_OBJ(hdr); + MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDH_SIG_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIG); + MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_SIZE_OF_RECORD_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE - sizeof(mz_uint32) - sizeof(mz_uint64)); + MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_MADE_BY_OFS, 0x031E); /* TODO: always Unix */ + MZ_WRITE_LE16(hdr + MZ_ZIP64_ECDH_VERSION_NEEDED_OFS, 0x002D); + MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, pZip->m_total_files); + MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_TOTAL_ENTRIES_OFS, pZip->m_total_files); + MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_SIZE_OFS, central_dir_size); + MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDH_CDIR_OFS_OFS, central_dir_ofs); + if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_HEADER_SIZE; + + /* Write zip64 end of central directory locator */ + MZ_CLEAR_OBJ(hdr); + MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_SIG_OFS, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIG); + MZ_WRITE_LE64(hdr + MZ_ZIP64_ECDL_REL_OFS_TO_ZIP64_ECDR_OFS, rel_ofs_to_zip64_ecdr); + MZ_WRITE_LE32(hdr + MZ_ZIP64_ECDL_TOTAL_NUMBER_OF_DISKS_OFS, 1); + if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) != MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + + pZip->m_archive_size += MZ_ZIP64_END_OF_CENTRAL_DIR_LOCATOR_SIZE; + } + + /* Write end of central directory record */ + MZ_CLEAR_OBJ(hdr); + MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_SIG_OFS, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIG); + MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_NUM_ENTRIES_ON_DISK_OFS, MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files)); + MZ_WRITE_LE16(hdr + MZ_ZIP_ECDH_CDIR_TOTAL_ENTRIES_OFS, MZ_MIN(MZ_UINT16_MAX, pZip->m_total_files)); + MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_SIZE_OFS, MZ_MIN(MZ_UINT32_MAX, central_dir_size)); + MZ_WRITE_LE32(hdr + MZ_ZIP_ECDH_CDIR_OFS_OFS, MZ_MIN(MZ_UINT32_MAX, central_dir_ofs)); + + if (pZip->m_pWrite(pZip->m_pIO_opaque, pZip->m_archive_size, hdr, MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) != MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_WRITE_FAILED); + +#ifndef MINIZ_NO_STDIO + if ((pState->m_pFile) && (MZ_FFLUSH(pState->m_pFile) == EOF)) + return mz_zip_set_error(pZip, MZ_ZIP_FILE_CLOSE_FAILED); +#endif /* #ifndef MINIZ_NO_STDIO */ + + pZip->m_archive_size += MZ_ZIP_END_OF_CENTRAL_DIR_HEADER_SIZE; + + pZip->m_zip_mode = MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED; + return MZ_TRUE; +} + +mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize) +{ + if ((!ppBuf) || (!pSize)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + *ppBuf = NULL; + *pSize = 0; + + if ((!pZip) || (!pZip->m_pState)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (pZip->m_pWrite != mz_zip_heap_write_func) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + if (!mz_zip_writer_finalize_archive(pZip)) + return MZ_FALSE; + + *ppBuf = pZip->m_pState->m_pMem; + *pSize = pZip->m_pState->m_mem_size; + pZip->m_pState->m_pMem = NULL; + pZip->m_pState->m_mem_size = pZip->m_pState->m_mem_capacity = 0; + + return MZ_TRUE; +} + +mz_bool mz_zip_writer_end(mz_zip_archive *pZip) +{ + return mz_zip_writer_end_internal(pZip, MZ_TRUE); +} + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags) +{ + return mz_zip_add_mem_to_archive_file_in_place_v2(pZip_filename, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, NULL); +} + +mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr) +{ + mz_bool status, created_new_archive = MZ_FALSE; + mz_zip_archive zip_archive; + struct MZ_FILE_STAT_STRUCT file_stat; + mz_zip_error actual_err = MZ_ZIP_NO_ERROR; + + mz_zip_zero_struct(&zip_archive); + if ((int)level_and_flags < 0) + level_and_flags = MZ_DEFAULT_LEVEL; + + if ((!pZip_filename) || (!pArchive_name) || ((buf_size) && (!pBuf)) || ((comment_size) && (!pComment)) || ((level_and_flags & 0xF) > MZ_UBER_COMPRESSION)) + { + if (pErr) + *pErr = MZ_ZIP_INVALID_PARAMETER; + return MZ_FALSE; + } + + if (!mz_zip_writer_validate_archive_name(pArchive_name)) + { + if (pErr) + *pErr = MZ_ZIP_INVALID_FILENAME; + return MZ_FALSE; + } + + /* Important: The regular non-64 bit version of stat() can fail here if the file is very large, which could cause the archive to be overwritten. */ + /* So be sure to compile with _LARGEFILE64_SOURCE 1 */ + if (MZ_FILE_STAT(pZip_filename, &file_stat) != 0) + { + /* Create a new archive. */ + if (!mz_zip_writer_init_file_v2(&zip_archive, pZip_filename, 0, level_and_flags)) + { + if (pErr) + *pErr = zip_archive.m_last_error; + return MZ_FALSE; + } + + created_new_archive = MZ_TRUE; + } + else + { + /* Append to an existing archive. */ + if (!mz_zip_reader_init_file_v2(&zip_archive, pZip_filename, level_and_flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) + { + if (pErr) + *pErr = zip_archive.m_last_error; + return MZ_FALSE; + } + + if (!mz_zip_writer_init_from_reader_v2(&zip_archive, pZip_filename, level_and_flags)) + { + if (pErr) + *pErr = zip_archive.m_last_error; + + mz_zip_reader_end_internal(&zip_archive, MZ_FALSE); + + return MZ_FALSE; + } + } + + status = mz_zip_writer_add_mem_ex(&zip_archive, pArchive_name, pBuf, buf_size, pComment, comment_size, level_and_flags, 0, 0); + actual_err = zip_archive.m_last_error; + + /* Always finalize, even if adding failed for some reason, so we have a valid central directory. (This may not always succeed, but we can try.) */ + if (!mz_zip_writer_finalize_archive(&zip_archive)) + { + if (!actual_err) + actual_err = zip_archive.m_last_error; + + status = MZ_FALSE; + } + + if (!mz_zip_writer_end_internal(&zip_archive, status)) + { + if (!actual_err) + actual_err = zip_archive.m_last_error; + + status = MZ_FALSE; + } + + if ((!status) && (created_new_archive)) + { + /* It's a new archive and something went wrong, so just delete it. */ + int ignoredStatus = MZ_DELETE_FILE(pZip_filename); + (void)ignoredStatus; + } + + if (pErr) + *pErr = actual_err; + + return status; +} + +void *mz_zip_extract_archive_file_to_heap_v2(const char *pZip_filename, const char *pArchive_name, const char *pComment, size_t *pSize, mz_uint flags, mz_zip_error *pErr) +{ + mz_uint32 file_index; + mz_zip_archive zip_archive; + void *p = NULL; + + if (pSize) + *pSize = 0; + + if ((!pZip_filename) || (!pArchive_name)) + { + if (pErr) + *pErr = MZ_ZIP_INVALID_PARAMETER; + + return NULL; + } + + mz_zip_zero_struct(&zip_archive); + if (!mz_zip_reader_init_file_v2(&zip_archive, pZip_filename, flags | MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY, 0, 0)) + { + if (pErr) + *pErr = zip_archive.m_last_error; + + return NULL; + } + + if (mz_zip_reader_locate_file_v2(&zip_archive, pArchive_name, pComment, flags, &file_index)) + { + p = mz_zip_reader_extract_to_heap(&zip_archive, file_index, pSize, flags); + } + + mz_zip_reader_end_internal(&zip_archive, p != NULL); + + if (pErr) + *pErr = zip_archive.m_last_error; + + return p; +} + +void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags) +{ + return mz_zip_extract_archive_file_to_heap_v2(pZip_filename, pArchive_name, NULL, pSize, flags, NULL); +} + +#endif /* #ifndef MINIZ_NO_STDIO */ + +#endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */ + +/* ------------------- Misc utils */ + +mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip) +{ + return pZip ? pZip->m_zip_mode : MZ_ZIP_MODE_INVALID; +} + +mz_zip_type mz_zip_get_type(mz_zip_archive *pZip) +{ + return pZip ? pZip->m_zip_type : MZ_ZIP_TYPE_INVALID; +} + +mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num) +{ + mz_zip_error prev_err; + + if (!pZip) + return MZ_ZIP_INVALID_PARAMETER; + + prev_err = pZip->m_last_error; + + pZip->m_last_error = err_num; + return prev_err; +} + +mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip) +{ + if (!pZip) + return MZ_ZIP_INVALID_PARAMETER; + + return pZip->m_last_error; +} + +mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip) +{ + return mz_zip_set_last_error(pZip, MZ_ZIP_NO_ERROR); +} + +mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip) +{ + mz_zip_error prev_err; + + if (!pZip) + return MZ_ZIP_INVALID_PARAMETER; + + prev_err = pZip->m_last_error; + + pZip->m_last_error = MZ_ZIP_NO_ERROR; + return prev_err; +} + +const char *mz_zip_get_error_string(mz_zip_error mz_err) +{ + switch (mz_err) + { + case MZ_ZIP_NO_ERROR: + return "no error"; + case MZ_ZIP_UNDEFINED_ERROR: + return "undefined error"; + case MZ_ZIP_TOO_MANY_FILES: + return "too many files"; + case MZ_ZIP_FILE_TOO_LARGE: + return "file too large"; + case MZ_ZIP_UNSUPPORTED_METHOD: + return "unsupported method"; + case MZ_ZIP_UNSUPPORTED_ENCRYPTION: + return "unsupported encryption"; + case MZ_ZIP_UNSUPPORTED_FEATURE: + return "unsupported feature"; + case MZ_ZIP_FAILED_FINDING_CENTRAL_DIR: + return "failed finding central directory"; + case MZ_ZIP_NOT_AN_ARCHIVE: + return "not a ZIP archive"; + case MZ_ZIP_INVALID_HEADER_OR_CORRUPTED: + return "invalid header or archive is corrupted"; + case MZ_ZIP_UNSUPPORTED_MULTIDISK: + return "unsupported multidisk archive"; + case MZ_ZIP_DECOMPRESSION_FAILED: + return "decompression failed or archive is corrupted"; + case MZ_ZIP_COMPRESSION_FAILED: + return "compression failed"; + case MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE: + return "unexpected decompressed size"; + case MZ_ZIP_CRC_CHECK_FAILED: + return "CRC-32 check failed"; + case MZ_ZIP_UNSUPPORTED_CDIR_SIZE: + return "unsupported central directory size"; + case MZ_ZIP_ALLOC_FAILED: + return "allocation failed"; + case MZ_ZIP_FILE_OPEN_FAILED: + return "file open failed"; + case MZ_ZIP_FILE_CREATE_FAILED: + return "file create failed"; + case MZ_ZIP_FILE_WRITE_FAILED: + return "file write failed"; + case MZ_ZIP_FILE_READ_FAILED: + return "file read failed"; + case MZ_ZIP_FILE_CLOSE_FAILED: + return "file close failed"; + case MZ_ZIP_FILE_SEEK_FAILED: + return "file seek failed"; + case MZ_ZIP_FILE_STAT_FAILED: + return "file stat failed"; + case MZ_ZIP_INVALID_PARAMETER: + return "invalid parameter"; + case MZ_ZIP_INVALID_FILENAME: + return "invalid filename"; + case MZ_ZIP_BUF_TOO_SMALL: + return "buffer too small"; + case MZ_ZIP_INTERNAL_ERROR: + return "internal error"; + case MZ_ZIP_FILE_NOT_FOUND: + return "file not found"; + case MZ_ZIP_ARCHIVE_TOO_LARGE: + return "archive is too large"; + case MZ_ZIP_VALIDATION_FAILED: + return "validation failed"; + case MZ_ZIP_WRITE_CALLBACK_FAILED: + return "write calledback failed"; + default: + break; + } + + return "unknown error"; +} + +/* Note: Just because the archive is not zip64 doesn't necessarily mean it doesn't have Zip64 extended information extra field, argh. */ +mz_bool mz_zip_is_zip64(mz_zip_archive *pZip) +{ + if ((!pZip) || (!pZip->m_pState)) + return MZ_FALSE; + + return pZip->m_pState->m_zip64; +} + +size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip) +{ + if ((!pZip) || (!pZip->m_pState)) + return 0; + + return pZip->m_pState->m_central_dir.m_size; +} + +mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip) +{ + return pZip ? pZip->m_total_files : 0; +} + +mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip) +{ + if (!pZip) + return 0; + return pZip->m_archive_size; +} + +mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip) +{ + if ((!pZip) || (!pZip->m_pState)) + return 0; + return pZip->m_pState->m_file_archive_start_ofs; +} + +MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip) +{ + if ((!pZip) || (!pZip->m_pState)) + return 0; + return pZip->m_pState->m_pFile; +} + +size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n) +{ + if ((!pZip) || (!pZip->m_pState) || (!pBuf) || (!pZip->m_pRead)) + return mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + + return pZip->m_pRead(pZip->m_pIO_opaque, file_ofs, pBuf, n); +} + +mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size) +{ + mz_uint n; + const mz_uint8 *p = mz_zip_get_cdh(pZip, file_index); + if (!p) + { + if (filename_buf_size) + pFilename[0] = '\0'; + mz_zip_set_error(pZip, MZ_ZIP_INVALID_PARAMETER); + return 0; + } + n = MZ_READ_LE16(p + MZ_ZIP_CDH_FILENAME_LEN_OFS); + if (filename_buf_size) + { + n = MZ_MIN(n, filename_buf_size - 1); + memcpy(pFilename, p + MZ_ZIP_CENTRAL_DIR_HEADER_SIZE, n); + pFilename[n] = '\0'; + } + return n + 1; +} + +mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat) +{ + return mz_zip_file_stat_internal(pZip, file_index, mz_zip_get_cdh(pZip, file_index), pStat, NULL); +} + +mz_bool mz_zip_end(mz_zip_archive *pZip) +{ + if (!pZip) + return MZ_FALSE; + + if (pZip->m_zip_mode == MZ_ZIP_MODE_READING) + return mz_zip_reader_end(pZip); +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + else if ((pZip->m_zip_mode == MZ_ZIP_MODE_WRITING) || (pZip->m_zip_mode == MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED)) + return mz_zip_writer_end(pZip); +#endif + + return MZ_FALSE; +} + +#ifdef __cplusplus +} +#endif + +#endif /*#ifndef MINIZ_NO_ARCHIVE_APIS*/ + diff --git a/Source/ThirdParty/OpenFBX/miniz.h b/Source/ThirdParty/OpenFBX/miniz.h new file mode 100644 index 000000000..ba253ac26 --- /dev/null +++ b/Source/ThirdParty/OpenFBX/miniz.h @@ -0,0 +1,1296 @@ +/* miniz.c v1.16 beta r1 - public domain deflate/inflate, zlib-subset, ZIP reading/writing/appending, PNG writing + See "unlicense" statement at the end of this file. + Rich Geldreich , last updated Oct. 13, 2013 + Implements RFC 1950: http://www.ietf.org/rfc/rfc1950.txt and RFC 1951: http://www.ietf.org/rfc/rfc1951.txt + + Most API's defined in miniz.c are optional. For example, to disable the archive related functions just define + MINIZ_NO_ARCHIVE_APIS, or to get rid of all stdio usage define MINIZ_NO_STDIO (see the list below for more macros). + + * Low-level Deflate/Inflate implementation notes: + + Compression: Use the "tdefl" API's. The compressor supports raw, static, and dynamic blocks, lazy or + greedy parsing, match length filtering, RLE-only, and Huffman-only streams. It performs and compresses + approximately as well as zlib. + + Decompression: Use the "tinfl" API's. The entire decompressor is implemented as a single function + coroutine: see tinfl_decompress(). It supports decompression into a 32KB (or larger power of 2) wrapping buffer, or into a memory + block large enough to hold the entire file. + + The low-level tdefl/tinfl API's do not make any use of dynamic memory allocation. + + * zlib-style API notes: + + miniz.c implements a fairly large subset of zlib. There's enough functionality present for it to be a drop-in + zlib replacement in many apps: + The z_stream struct, optional memory allocation callbacks + deflateInit/deflateInit2/deflate/deflateReset/deflateEnd/deflateBound + inflateInit/inflateInit2/inflate/inflateEnd + compress, compress2, compressBound, uncompress + CRC-32, Adler-32 - Using modern, minimal code size, CPU cache friendly routines. + Supports raw deflate streams or standard zlib streams with adler-32 checking. + + Limitations: + The callback API's are not implemented yet. No support for gzip headers or zlib static dictionaries. + I've tried to closely emulate zlib's various flavors of stream flushing and return status codes, but + there are no guarantees that miniz.c pulls this off perfectly. + + * PNG writing: See the tdefl_write_image_to_png_file_in_memory() function, originally written by + Alex Evans. Supports 1-4 bytes/pixel images. + + * ZIP archive API notes: + + The ZIP archive API's where designed with simplicity and efficiency in mind, with just enough abstraction to + get the job done with minimal fuss. There are simple API's to retrieve file information, read files from + existing archives, create new archives, append new files to existing archives, or clone archive data from + one archive to another. It supports archives located in memory or the heap, on disk (using stdio.h), + or you can specify custom file read/write callbacks. + + - Archive reading: Just call this function to read a single file from a disk archive: + + void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, + size_t *pSize, mz_uint zip_flags); + + For more complex cases, use the "mz_zip_reader" functions. Upon opening an archive, the entire central + directory is located and read as-is into memory, and subsequent file access only occurs when reading individual files. + + - Archives file scanning: The simple way is to use this function to scan a loaded archive for a specific file: + + int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); + + The locate operation can optionally check file comments too, which (as one example) can be used to identify + multiple versions of the same file in an archive. This function uses a simple linear search through the central + directory, so it's not very fast. + + Alternately, you can iterate through all the files in an archive (using mz_zip_reader_get_num_files()) and + retrieve detailed info on each file by calling mz_zip_reader_file_stat(). + + - Archive creation: Use the "mz_zip_writer" functions. The ZIP writer immediately writes compressed file data + to disk and builds an exact image of the central directory in memory. The central directory image is written + all at once at the end of the archive file when the archive is finalized. + + The archive writer can optionally align each file's local header and file data to any power of 2 alignment, + which can be useful when the archive will be read from optical media. Also, the writer supports placing + arbitrary data blobs at the very beginning of ZIP archives. Archives written using either feature are still + readable by any ZIP tool. + + - Archive appending: The simple way to add a single file to an archive is to call this function: + + mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, + const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); + + The archive will be created if it doesn't already exist, otherwise it'll be appended to. + Note the appending is done in-place and is not an atomic operation, so if something goes wrong + during the operation it's possible the archive could be left without a central directory (although the local + file headers and file data will be fine, so the archive will be recoverable). + + For more complex archive modification scenarios: + 1. The safest way is to use a mz_zip_reader to read the existing archive, cloning only those bits you want to + preserve into a new archive using using the mz_zip_writer_add_from_zip_reader() function (which compiles the + compressed file data as-is). When you're done, delete the old archive and rename the newly written archive, and + you're done. This is safe but requires a bunch of temporary disk space or heap memory. + + 2. Or, you can convert an mz_zip_reader in-place to an mz_zip_writer using mz_zip_writer_init_from_reader(), + append new files as needed, then finalize the archive which will write an updated central directory to the + original archive. (This is basically what mz_zip_add_mem_to_archive_file_in_place() does.) There's a + possibility that the archive's central directory could be lost with this method if anything goes wrong, though. + + - ZIP archive support limitations: + No zip64 or spanning support. Extraction functions can only handle unencrypted, stored or deflated files. + Requires streams capable of seeking. + + * This is a header file library, like stb_image.c. To get only a header file, either cut and paste the + below header, or create miniz.h, #define MINIZ_HEADER_FILE_ONLY, and then include miniz.c from it. + + * Important: For best perf. be sure to customize the below macros for your target platform: + #define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 + #define MINIZ_LITTLE_ENDIAN 1 + #define MINIZ_HAS_64BIT_REGISTERS 1 + + * On platforms using glibc, Be sure to "#define _LARGEFILE64_SOURCE 1" before including miniz.c to ensure miniz + uses the 64-bit variants: fopen64(), stat64(), etc. Otherwise you won't be able to process large files + (i.e. 32-bit stat() fails for me on files > 0x7FFFFFFF bytes). +*/ +#pragma once + + + + + +/* Defines to completely disable specific portions of miniz.c: + If all macros here are defined the only functionality remaining will be CRC-32, adler-32, tinfl, and tdefl. */ + +/* Define MINIZ_NO_STDIO to disable all usage and any functions which rely on stdio for file I/O. */ +/*#define MINIZ_NO_STDIO */ + +/* If MINIZ_NO_TIME is specified then the ZIP archive functions will not be able to get the current time, or */ +/* get/set file times, and the C run-time funcs that get/set times won't be called. */ +/* The current downside is the times written to your archives will be from 1979. */ +/*#define MINIZ_NO_TIME */ + +/* Define MINIZ_NO_ARCHIVE_APIS to disable all ZIP archive API's. */ +/*#define MINIZ_NO_ARCHIVE_APIS */ + +/* Define MINIZ_NO_ARCHIVE_WRITING_APIS to disable all writing related ZIP archive API's. */ +/*#define MINIZ_NO_ARCHIVE_WRITING_APIS */ + +/* Define MINIZ_NO_ZLIB_APIS to remove all ZLIB-style compression/decompression API's. */ +/*#define MINIZ_NO_ZLIB_APIS */ + +/* Define MINIZ_NO_ZLIB_COMPATIBLE_NAME to disable zlib names, to prevent conflicts against stock zlib. */ +/*#define MINIZ_NO_ZLIB_COMPATIBLE_NAMES */ + +/* Define MINIZ_NO_MALLOC to disable all calls to malloc, free, and realloc. + Note if MINIZ_NO_MALLOC is defined then the user must always provide custom user alloc/free/realloc + callbacks to the zlib and archive API's, and a few stand-alone helper API's which don't provide custom user + functions (such as tdefl_compress_mem_to_heap() and tinfl_decompress_mem_to_heap()) won't work. */ +/*#define MINIZ_NO_MALLOC */ + +#if defined(__TINYC__) && (defined(__linux) || defined(__linux__)) +/* TODO: Work around "error: include file 'sys\utime.h' when compiling with tcc on Linux */ +#define MINIZ_NO_TIME +#endif + +#include + +#if !defined(MINIZ_NO_TIME) && !defined(MINIZ_NO_ARCHIVE_APIS) +#include +#endif + +#if defined(_M_IX86) || defined(_M_X64) || defined(__i386__) || defined(__i386) || defined(__i486__) || defined(__i486) || defined(i386) || defined(__ia64__) || defined(__x86_64__) +/* MINIZ_X86_OR_X64_CPU is only used to help set the below macros. */ +#define MINIZ_X86_OR_X64_CPU 1 +#endif + +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__) || MINIZ_X86_OR_X64_CPU +/* Set MINIZ_LITTLE_ENDIAN to 1 if the processor is little endian. */ +#define MINIZ_LITTLE_ENDIAN 1 +#endif + +#if MINIZ_X86_OR_X64_CPU +/* Set MINIZ_USE_UNALIGNED_LOADS_AND_STORES to 1 on CPU's that permit efficient integer loads and stores from unaligned addresses. */ +#define MINIZ_USE_UNALIGNED_LOADS_AND_STORES 1 +#endif + +#if defined(_M_X64) || defined(_WIN64) || defined(__MINGW64__) || defined(_LP64) || defined(__LP64__) || defined(__ia64__) || defined(__x86_64__) +/* Set MINIZ_HAS_64BIT_REGISTERS to 1 if operations on 64-bit integers are reasonably fast (and don't involve compiler generated calls to helper functions). */ +#define MINIZ_HAS_64BIT_REGISTERS 1 +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/* ------------------- zlib-style API Definitions. */ + +/* For more compatibility with zlib, miniz.c uses unsigned long for some parameters/struct members. Beware: mz_ulong can be either 32 or 64-bits! */ +typedef unsigned long mz_ulong; + +/* mz_free() internally uses the MZ_FREE() macro (which by default calls free() unless you've modified the MZ_MALLOC macro) to release a block allocated from the heap. */ +void mz_free(void *p); + +#define MZ_ADLER32_INIT (1) +/* mz_adler32() returns the initial adler-32 value to use when called with ptr==NULL. */ +mz_ulong mz_adler32(mz_ulong adler, const unsigned char *ptr, size_t buf_len); + +#define MZ_CRC32_INIT (0) +/* mz_crc32() returns the initial CRC-32 value to use when called with ptr==NULL. */ +mz_ulong mz_crc32(mz_ulong crc, const unsigned char *ptr, size_t buf_len); + +/* Compression strategies. */ +enum +{ + MZ_DEFAULT_STRATEGY = 0, + MZ_FILTERED = 1, + MZ_HUFFMAN_ONLY = 2, + MZ_RLE = 3, + MZ_FIXED = 4 +}; + +/* Method */ +#define MZ_DEFLATED 8 + +/* Heap allocation callbacks. +Note that mz_alloc_func parameter types purpsosely differ from zlib's: items/size is size_t, not unsigned long. */ +typedef void *(*mz_alloc_func)(void *opaque, size_t items, size_t size); +typedef void(*mz_free_func)(void *opaque, void *address); +typedef void *(*mz_realloc_func)(void *opaque, void *address, size_t items, size_t size); + +/* Compression levels: 0-9 are the standard zlib-style levels, 10 is best possible compression (not zlib compatible, and may be very slow), MZ_DEFAULT_COMPRESSION=MZ_DEFAULT_LEVEL. */ +enum +{ + MZ_NO_COMPRESSION = 0, + MZ_BEST_SPEED = 1, + MZ_BEST_COMPRESSION = 9, + MZ_UBER_COMPRESSION = 10, + MZ_DEFAULT_LEVEL = 6, + MZ_DEFAULT_COMPRESSION = -1 +}; + +#define MZ_VERSION "10.0.0" +#define MZ_VERNUM 0xA000 +#define MZ_VER_MAJOR 10 +#define MZ_VER_MINOR 0 +#define MZ_VER_REVISION 0 +#define MZ_VER_SUBREVISION 0 + +#ifndef MINIZ_NO_ZLIB_APIS + +/* Flush values. For typical usage you only need MZ_NO_FLUSH and MZ_FINISH. The other values are for advanced use (refer to the zlib docs). */ +enum +{ + MZ_NO_FLUSH = 0, + MZ_PARTIAL_FLUSH = 1, + MZ_SYNC_FLUSH = 2, + MZ_FULL_FLUSH = 3, + MZ_FINISH = 4, + MZ_BLOCK = 5 +}; + +/* Return status codes. MZ_PARAM_ERROR is non-standard. */ +enum +{ + MZ_OK = 0, + MZ_STREAM_END = 1, + MZ_NEED_DICT = 2, + MZ_ERRNO = -1, + MZ_STREAM_ERROR = -2, + MZ_DATA_ERROR = -3, + MZ_MEM_ERROR = -4, + MZ_BUF_ERROR = -5, + MZ_VERSION_ERROR = -6, + MZ_PARAM_ERROR = -10000 +}; + +/* Window bits */ +#define MZ_DEFAULT_WINDOW_BITS 15 + +struct mz_internal_state; + +/* Compression/decompression stream struct. */ +typedef struct mz_stream_s +{ + const unsigned char *next_in; /* pointer to next byte to read */ + unsigned int avail_in; /* number of bytes available at next_in */ + mz_ulong total_in; /* total number of bytes consumed so far */ + + unsigned char *next_out; /* pointer to next byte to write */ + unsigned int avail_out; /* number of bytes that can be written to next_out */ + mz_ulong total_out; /* total number of bytes produced so far */ + + char *msg; /* error msg (unused) */ + struct mz_internal_state *state; /* internal state, allocated by zalloc/zfree */ + + mz_alloc_func zalloc; /* optional heap allocation function (defaults to malloc) */ + mz_free_func zfree; /* optional heap free function (defaults to free) */ + void *opaque; /* heap alloc function user pointer */ + + int data_type; /* data_type (unused) */ + mz_ulong adler; /* adler32 of the source or uncompressed data */ + mz_ulong reserved; /* not used */ +} mz_stream; + +typedef mz_stream *mz_streamp; + +/* Returns the version string of miniz.c. */ +const char *mz_version(void); + +/* mz_deflateInit() initializes a compressor with default options: */ +/* Parameters: */ +/* pStream must point to an initialized mz_stream struct. */ +/* level must be between [MZ_NO_COMPRESSION, MZ_BEST_COMPRESSION]. */ +/* level 1 enables a specially optimized compression function that's been optimized purely for performance, not ratio. */ +/* (This special func. is currently only enabled when MINIZ_USE_UNALIGNED_LOADS_AND_STORES and MINIZ_LITTLE_ENDIAN are defined.) */ +/* Return values: */ +/* MZ_OK on success. */ +/* MZ_STREAM_ERROR if the stream is bogus. */ +/* MZ_PARAM_ERROR if the input parameters are bogus. */ +/* MZ_MEM_ERROR on out of memory. */ +int mz_deflateInit(mz_streamp pStream, int level); + +/* mz_deflateInit2() is like mz_deflate(), except with more control: */ +/* Additional parameters: */ +/* method must be MZ_DEFLATED */ +/* window_bits must be MZ_DEFAULT_WINDOW_BITS (to wrap the deflate stream with zlib header/adler-32 footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate/no header or footer) */ +/* mem_level must be between [1, 9] (it's checked but ignored by miniz.c) */ +int mz_deflateInit2(mz_streamp pStream, int level, int method, int window_bits, int mem_level, int strategy); + +/* Quickly resets a compressor without having to reallocate anything. Same as calling mz_deflateEnd() followed by mz_deflateInit()/mz_deflateInit2(). */ +int mz_deflateReset(mz_streamp pStream); + +/* mz_deflate() compresses the input to output, consuming as much of the input and producing as much output as possible. */ +/* Parameters: */ +/* pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. */ +/* flush may be MZ_NO_FLUSH, MZ_PARTIAL_FLUSH/MZ_SYNC_FLUSH, MZ_FULL_FLUSH, or MZ_FINISH. */ +/* Return values: */ +/* MZ_OK on success (when flushing, or if more input is needed but not available, and/or there's more output to be written but the output buffer is full). */ +/* MZ_STREAM_END if all input has been consumed and all output bytes have been written. Don't call mz_deflate() on the stream anymore. */ +/* MZ_STREAM_ERROR if the stream is bogus. */ +/* MZ_PARAM_ERROR if one of the parameters is invalid. */ +/* MZ_BUF_ERROR if no forward progress is possible because the input and/or output buffers are empty. (Fill up the input buffer or free up some output space and try again.) */ +int mz_deflate(mz_streamp pStream, int flush); + +/* mz_deflateEnd() deinitializes a compressor: */ +/* Return values: */ +/* MZ_OK on success. */ +/* MZ_STREAM_ERROR if the stream is bogus. */ +int mz_deflateEnd(mz_streamp pStream); + +/* mz_deflateBound() returns a (very) conservative upper bound on the amount of data that could be generated by deflate(), assuming flush is set to only MZ_NO_FLUSH or MZ_FINISH. */ +mz_ulong mz_deflateBound(mz_streamp pStream, mz_ulong source_len); + +/* Single-call compression functions mz_compress() and mz_compress2(): */ +/* Returns MZ_OK on success, or one of the error codes from mz_deflate() on failure. */ +int mz_compress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); +int mz_compress2(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len, int level); + +/* mz_compressBound() returns a (very) conservative upper bound on the amount of data that could be generated by calling mz_compress(). */ +mz_ulong mz_compressBound(mz_ulong source_len); + +/* Initializes a decompressor. */ +int mz_inflateInit(mz_streamp pStream); + +/* mz_inflateInit2() is like mz_inflateInit() with an additional option that controls the window size and whether or not the stream has been wrapped with a zlib header/footer: */ +/* window_bits must be MZ_DEFAULT_WINDOW_BITS (to parse zlib header/footer) or -MZ_DEFAULT_WINDOW_BITS (raw deflate). */ +int mz_inflateInit2(mz_streamp pStream, int window_bits); + +/* Decompresses the input stream to the output, consuming only as much of the input as needed, and writing as much to the output as possible. */ +/* Parameters: */ +/* pStream is the stream to read from and write to. You must initialize/update the next_in, avail_in, next_out, and avail_out members. */ +/* flush may be MZ_NO_FLUSH, MZ_SYNC_FLUSH, or MZ_FINISH. */ +/* On the first call, if flush is MZ_FINISH it's assumed the input and output buffers are both sized large enough to decompress the entire stream in a single call (this is slightly faster). */ +/* MZ_FINISH implies that there are no more source bytes available beside what's already in the input buffer, and that the output buffer is large enough to hold the rest of the decompressed data. */ +/* Return values: */ +/* MZ_OK on success. Either more input is needed but not available, and/or there's more output to be written but the output buffer is full. */ +/* MZ_STREAM_END if all needed input has been consumed and all output bytes have been written. For zlib streams, the adler-32 of the decompressed data has also been verified. */ +/* MZ_STREAM_ERROR if the stream is bogus. */ +/* MZ_DATA_ERROR if the deflate stream is invalid. */ +/* MZ_PARAM_ERROR if one of the parameters is invalid. */ +/* MZ_BUF_ERROR if no forward progress is possible because the input buffer is empty but the inflater needs more input to continue, or if the output buffer is not large enough. Call mz_inflate() again */ +/* with more input data, or with more room in the output buffer (except when using single call decompression, described above). */ +int mz_inflate(mz_streamp pStream, int flush); + +/* Deinitializes a decompressor. */ +int mz_inflateEnd(mz_streamp pStream); + +/* Single-call decompression. */ +/* Returns MZ_OK on success, or one of the error codes from mz_inflate() on failure. */ +int mz_uncompress(unsigned char *pDest, mz_ulong *pDest_len, const unsigned char *pSource, mz_ulong source_len); + +/* Returns a string description of the specified error code, or NULL if the error code is invalid. */ +const char *mz_error(int err); + +/* Redefine zlib-compatible names to miniz equivalents, so miniz.c can be used as a drop-in replacement for the subset of zlib that miniz.c supports. */ +/* Define MINIZ_NO_ZLIB_COMPATIBLE_NAMES to disable zlib-compatibility if you use zlib in the same project. */ +#ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES +typedef unsigned char Byte; +typedef unsigned int uInt; +typedef mz_ulong uLong; +typedef Byte Bytef; +typedef uInt uIntf; +typedef char charf; +typedef int intf; +typedef void *voidpf; +typedef uLong uLongf; +typedef void *voidp; +typedef void *const voidpc; +#define Z_NULL 0 +#define Z_NO_FLUSH MZ_NO_FLUSH +#define Z_PARTIAL_FLUSH MZ_PARTIAL_FLUSH +#define Z_SYNC_FLUSH MZ_SYNC_FLUSH +#define Z_FULL_FLUSH MZ_FULL_FLUSH +#define Z_FINISH MZ_FINISH +#define Z_BLOCK MZ_BLOCK +#define Z_OK MZ_OK +#define Z_STREAM_END MZ_STREAM_END +#define Z_NEED_DICT MZ_NEED_DICT +#define Z_ERRNO MZ_ERRNO +#define Z_STREAM_ERROR MZ_STREAM_ERROR +#define Z_DATA_ERROR MZ_DATA_ERROR +#define Z_MEM_ERROR MZ_MEM_ERROR +#define Z_BUF_ERROR MZ_BUF_ERROR +#define Z_VERSION_ERROR MZ_VERSION_ERROR +#define Z_PARAM_ERROR MZ_PARAM_ERROR +#define Z_NO_COMPRESSION MZ_NO_COMPRESSION +#define Z_BEST_SPEED MZ_BEST_SPEED +#define Z_BEST_COMPRESSION MZ_BEST_COMPRESSION +#define Z_DEFAULT_COMPRESSION MZ_DEFAULT_COMPRESSION +#define Z_DEFAULT_STRATEGY MZ_DEFAULT_STRATEGY +#define Z_FILTERED MZ_FILTERED +#define Z_HUFFMAN_ONLY MZ_HUFFMAN_ONLY +#define Z_RLE MZ_RLE +#define Z_FIXED MZ_FIXED +#define Z_DEFLATED MZ_DEFLATED +#define Z_DEFAULT_WINDOW_BITS MZ_DEFAULT_WINDOW_BITS +#define alloc_func mz_alloc_func +#define free_func mz_free_func +#define internal_state mz_internal_state +#define z_stream mz_stream +#define deflateInit mz_deflateInit +#define deflateInit2 mz_deflateInit2 +#define deflateReset mz_deflateReset +#define deflate mz_deflate +#define deflateEnd mz_deflateEnd +#define deflateBound mz_deflateBound +#define compress mz_compress +#define compress2 mz_compress2 +#define compressBound mz_compressBound +#define inflateInit mz_inflateInit +#define inflateInit2 mz_inflateInit2 +#define inflate mz_inflate +#define inflateEnd mz_inflateEnd +#define uncompress mz_uncompress +#define crc32 mz_crc32 +#define adler32 mz_adler32 +#define MAX_WBITS 15 +#define MAX_MEM_LEVEL 9 +#define zError mz_error +#define ZLIB_VERSION MZ_VERSION +#define ZLIB_VERNUM MZ_VERNUM +#define ZLIB_VER_MAJOR MZ_VER_MAJOR +#define ZLIB_VER_MINOR MZ_VER_MINOR +#define ZLIB_VER_REVISION MZ_VER_REVISION +#define ZLIB_VER_SUBREVISION MZ_VER_SUBREVISION +#define zlibVersion mz_version +#define zlib_version mz_version() +#endif /* #ifndef MINIZ_NO_ZLIB_COMPATIBLE_NAMES */ + +#endif /* MINIZ_NO_ZLIB_APIS */ + +#ifdef __cplusplus +} +#endif +#pragma once +#include +#include +#include +#include + +/* ------------------- Types and macros */ +typedef unsigned char mz_uint8; +typedef signed short mz_int16; +typedef unsigned short mz_uint16; +typedef unsigned int mz_uint32; +typedef unsigned int mz_uint; +typedef int64_t mz_int64; +typedef uint64_t mz_uint64; +typedef int mz_bool; + +#define MZ_FALSE (0) +#define MZ_TRUE (1) + +/* Works around MSVC's spammy "warning C4127: conditional expression is constant" message. */ +#ifdef _MSC_VER +#define MZ_MACRO_END while (0, 0) +#else +#define MZ_MACRO_END while (0) +#endif + +#ifdef MINIZ_NO_STDIO +#define MZ_FILE void * +#else +#include +#define MZ_FILE FILE +#endif /* #ifdef MINIZ_NO_STDIO */ + +#ifdef MINIZ_NO_TIME +typedef struct mz_dummy_time_t_tag +{ + int m_dummy; +} mz_dummy_time_t; +#define MZ_TIME_T mz_dummy_time_t +#else +#define MZ_TIME_T time_t +#endif + +#define MZ_ASSERT(x) assert(x) + +#ifdef MINIZ_NO_MALLOC +#define MZ_MALLOC(x) NULL +#define MZ_FREE(x) (void) x, ((void)0) +#define MZ_REALLOC(p, x) NULL +#else +#define MZ_MALLOC(x) malloc(x) +#define MZ_FREE(x) free(x) +#define MZ_REALLOC(p, x) realloc(p, x) +#endif + +#define MZ_MAX(a, b) (((a) > (b)) ? (a) : (b)) +#define MZ_MIN(a, b) (((a) < (b)) ? (a) : (b)) +#define MZ_CLEAR_OBJ(obj) memset(&(obj), 0, sizeof(obj)) + +#if MINIZ_USE_UNALIGNED_LOADS_AND_STORES &&MINIZ_LITTLE_ENDIAN +#define MZ_READ_LE16(p) *((const mz_uint16 *)(p)) +#define MZ_READ_LE32(p) *((const mz_uint32 *)(p)) +#else +#define MZ_READ_LE16(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U)) +#define MZ_READ_LE32(p) ((mz_uint32)(((const mz_uint8 *)(p))[0]) | ((mz_uint32)(((const mz_uint8 *)(p))[1]) << 8U) | ((mz_uint32)(((const mz_uint8 *)(p))[2]) << 16U) | ((mz_uint32)(((const mz_uint8 *)(p))[3]) << 24U)) +#endif + +#define MZ_READ_LE64(p) (((mz_uint64)MZ_READ_LE32(p)) | (((mz_uint64)MZ_READ_LE32((const mz_uint8 *)(p) + sizeof(mz_uint32))) << 32U)) + +#ifdef _MSC_VER +#define MZ_FORCEINLINE __forceinline +#elif defined(__GNUC__) +#define MZ_FORCEINLINE __inline__ __attribute__((__always_inline__)) +#else +#define MZ_FORCEINLINE inline +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +extern void *miniz_def_alloc_func(void *opaque, size_t items, size_t size); +extern void miniz_def_free_func(void *opaque, void *address); +extern void *miniz_def_realloc_func(void *opaque, void *address, size_t items, size_t size); + +#define MZ_UINT16_MAX (0xFFFFU) +#define MZ_UINT32_MAX (0xFFFFFFFFU) + +#ifdef __cplusplus +} +#endif +#pragma once + + +#ifdef __cplusplus +extern "C" { +#endif +/* ------------------- Low-level Compression API Definitions */ + +/* Set TDEFL_LESS_MEMORY to 1 to use less memory (compression will be slightly slower, and raw/dynamic blocks will be output more frequently). */ +#define TDEFL_LESS_MEMORY 0 + +/* tdefl_init() compression flags logically OR'd together (low 12 bits contain the max. number of probes per dictionary search): */ +/* TDEFL_DEFAULT_MAX_PROBES: The compressor defaults to 128 dictionary probes per dictionary search. 0=Huffman only, 1=Huffman+LZ (fastest/crap compression), 4095=Huffman+LZ (slowest/best compression). */ +enum +{ + TDEFL_HUFFMAN_ONLY = 0, + TDEFL_DEFAULT_MAX_PROBES = 128, + TDEFL_MAX_PROBES_MASK = 0xFFF +}; + +/* TDEFL_WRITE_ZLIB_HEADER: If set, the compressor outputs a zlib header before the deflate data, and the Adler-32 of the source data at the end. Otherwise, you'll get raw deflate data. */ +/* TDEFL_COMPUTE_ADLER32: Always compute the adler-32 of the input data (even when not writing zlib headers). */ +/* TDEFL_GREEDY_PARSING_FLAG: Set to use faster greedy parsing, instead of more efficient lazy parsing. */ +/* TDEFL_NONDETERMINISTIC_PARSING_FLAG: Enable to decrease the compressor's initialization time to the minimum, but the output may vary from run to run given the same input (depending on the contents of memory). */ +/* TDEFL_RLE_MATCHES: Only look for RLE matches (matches with a distance of 1) */ +/* TDEFL_FILTER_MATCHES: Discards matches <= 5 chars if enabled. */ +/* TDEFL_FORCE_ALL_STATIC_BLOCKS: Disable usage of optimized Huffman tables. */ +/* TDEFL_FORCE_ALL_RAW_BLOCKS: Only use raw (uncompressed) deflate blocks. */ +/* The low 12 bits are reserved to control the max # of hash probes per dictionary lookup (see TDEFL_MAX_PROBES_MASK). */ +enum +{ + TDEFL_WRITE_ZLIB_HEADER = 0x01000, + TDEFL_COMPUTE_ADLER32 = 0x02000, + TDEFL_GREEDY_PARSING_FLAG = 0x04000, + TDEFL_NONDETERMINISTIC_PARSING_FLAG = 0x08000, + TDEFL_RLE_MATCHES = 0x10000, + TDEFL_FILTER_MATCHES = 0x20000, + TDEFL_FORCE_ALL_STATIC_BLOCKS = 0x40000, + TDEFL_FORCE_ALL_RAW_BLOCKS = 0x80000 +}; + +/* High level compression functions: */ +/* tdefl_compress_mem_to_heap() compresses a block in memory to a heap block allocated via malloc(). */ +/* On entry: */ +/* pSrc_buf, src_buf_len: Pointer and size of source block to compress. */ +/* flags: The max match finder probes (default is 128) logically OR'd against the above flags. Higher probes are slower but improve compression. */ +/* On return: */ +/* Function returns a pointer to the compressed data, or NULL on failure. */ +/* *pOut_len will be set to the compressed data's size, which could be larger than src_buf_len on uncompressible data. */ +/* The caller must free() the returned block when it's no longer needed. */ +void *tdefl_compress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +/* tdefl_compress_mem_to_mem() compresses a block in memory to another block in memory. */ +/* Returns 0 on failure. */ +size_t tdefl_compress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +/* Compresses an image to a compressed PNG file in memory. */ +/* On entry: */ +/* pImage, w, h, and num_chans describe the image to compress. num_chans may be 1, 2, 3, or 4. */ +/* The image pitch in bytes per scanline will be w*num_chans. The leftmost pixel on the top scanline is stored first in memory. */ +/* level may range from [0,10], use MZ_NO_COMPRESSION, MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc. or a decent default is MZ_DEFAULT_LEVEL */ +/* If flip is true, the image will be flipped on the Y axis (useful for OpenGL apps). */ +/* On return: */ +/* Function returns a pointer to the compressed data, or NULL on failure. */ +/* *pLen_out will be set to the size of the PNG image file. */ +/* The caller must mz_free() the returned heap block (which will typically be larger than *pLen_out) when it's no longer needed. */ +void *tdefl_write_image_to_png_file_in_memory_ex(const void *pImage, int w, int h, int num_chans, size_t *pLen_out, mz_uint level, mz_bool flip); +void *tdefl_write_image_to_png_file_in_memory(const void *pImage, int w, int h, int num_chans, size_t *pLen_out); + +/* Output stream interface. The compressor uses this interface to write compressed data. It'll typically be called TDEFL_OUT_BUF_SIZE at a time. */ +typedef mz_bool (*tdefl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); + +/* tdefl_compress_mem_to_output() compresses a block to an output stream. The above helpers use this function internally. */ +mz_bool tdefl_compress_mem_to_output(const void *pBuf, size_t buf_len, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +enum +{ + TDEFL_MAX_HUFF_TABLES = 3, + TDEFL_MAX_HUFF_SYMBOLS_0 = 288, + TDEFL_MAX_HUFF_SYMBOLS_1 = 32, + TDEFL_MAX_HUFF_SYMBOLS_2 = 19, + TDEFL_LZ_DICT_SIZE = 32768, + TDEFL_LZ_DICT_SIZE_MASK = TDEFL_LZ_DICT_SIZE - 1, + TDEFL_MIN_MATCH_LEN = 3, + TDEFL_MAX_MATCH_LEN = 258 +}; + +/* TDEFL_OUT_BUF_SIZE MUST be large enough to hold a single entire compressed output block (using static/fixed Huffman codes). */ +#if TDEFL_LESS_MEMORY +enum +{ + TDEFL_LZ_CODE_BUF_SIZE = 24 * 1024, + TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, + TDEFL_MAX_HUFF_SYMBOLS = 288, + TDEFL_LZ_HASH_BITS = 12, + TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, + TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, + TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS +}; +#else +enum +{ + TDEFL_LZ_CODE_BUF_SIZE = 64 * 1024, + TDEFL_OUT_BUF_SIZE = (TDEFL_LZ_CODE_BUF_SIZE * 13) / 10, + TDEFL_MAX_HUFF_SYMBOLS = 288, + TDEFL_LZ_HASH_BITS = 15, + TDEFL_LEVEL1_HASH_SIZE_MASK = 4095, + TDEFL_LZ_HASH_SHIFT = (TDEFL_LZ_HASH_BITS + 2) / 3, + TDEFL_LZ_HASH_SIZE = 1 << TDEFL_LZ_HASH_BITS +}; +#endif + +/* The low-level tdefl functions below may be used directly if the above helper functions aren't flexible enough. The low-level functions don't make any heap allocations, unlike the above helper functions. */ +typedef enum +{ + TDEFL_STATUS_BAD_PARAM = -2, + TDEFL_STATUS_PUT_BUF_FAILED = -1, + TDEFL_STATUS_OKAY = 0, + TDEFL_STATUS_DONE = 1 +} tdefl_status; + +/* Must map to MZ_NO_FLUSH, MZ_SYNC_FLUSH, etc. enums */ +typedef enum +{ + TDEFL_NO_FLUSH = 0, + TDEFL_SYNC_FLUSH = 2, + TDEFL_FULL_FLUSH = 3, + TDEFL_FINISH = 4 +} tdefl_flush; + +/* tdefl's compression state structure. */ +typedef struct +{ + tdefl_put_buf_func_ptr m_pPut_buf_func; + void *m_pPut_buf_user; + mz_uint m_flags, m_max_probes[2]; + int m_greedy_parsing; + mz_uint m_adler32, m_lookahead_pos, m_lookahead_size, m_dict_size; + mz_uint8 *m_pLZ_code_buf, *m_pLZ_flags, *m_pOutput_buf, *m_pOutput_buf_end; + mz_uint m_num_flags_left, m_total_lz_bytes, m_lz_code_buf_dict_pos, m_bits_in, m_bit_buffer; + mz_uint m_saved_match_dist, m_saved_match_len, m_saved_lit, m_output_flush_ofs, m_output_flush_remaining, m_finished, m_block_index, m_wants_to_finish; + tdefl_status m_prev_return_status; + const void *m_pIn_buf; + void *m_pOut_buf; + size_t *m_pIn_buf_size, *m_pOut_buf_size; + tdefl_flush m_flush; + const mz_uint8 *m_pSrc; + size_t m_src_buf_left, m_out_buf_ofs; + mz_uint8 m_dict[TDEFL_LZ_DICT_SIZE + TDEFL_MAX_MATCH_LEN - 1]; + mz_uint16 m_huff_count[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint16 m_huff_codes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_huff_code_sizes[TDEFL_MAX_HUFF_TABLES][TDEFL_MAX_HUFF_SYMBOLS]; + mz_uint8 m_lz_code_buf[TDEFL_LZ_CODE_BUF_SIZE]; + mz_uint16 m_next[TDEFL_LZ_DICT_SIZE]; + mz_uint16 m_hash[TDEFL_LZ_HASH_SIZE]; + mz_uint8 m_output_buf[TDEFL_OUT_BUF_SIZE]; +} tdefl_compressor; + +/* Initializes the compressor. */ +/* There is no corresponding deinit() function because the tdefl API's do not dynamically allocate memory. */ +/* pBut_buf_func: If NULL, output data will be supplied to the specified callback. In this case, the user should call the tdefl_compress_buffer() API for compression. */ +/* If pBut_buf_func is NULL the user should always call the tdefl_compress() API. */ +/* flags: See the above enums (TDEFL_HUFFMAN_ONLY, TDEFL_WRITE_ZLIB_HEADER, etc.) */ +tdefl_status tdefl_init(tdefl_compressor *d, tdefl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +/* Compresses a block of data, consuming as much of the specified input buffer as possible, and writing as much compressed data to the specified output buffer as possible. */ +tdefl_status tdefl_compress(tdefl_compressor *d, const void *pIn_buf, size_t *pIn_buf_size, void *pOut_buf, size_t *pOut_buf_size, tdefl_flush flush); + +/* tdefl_compress_buffer() is only usable when the tdefl_init() is called with a non-NULL tdefl_put_buf_func_ptr. */ +/* tdefl_compress_buffer() always consumes the entire input buffer. */ +tdefl_status tdefl_compress_buffer(tdefl_compressor *d, const void *pIn_buf, size_t in_buf_size, tdefl_flush flush); + +tdefl_status tdefl_get_prev_return_status(tdefl_compressor *d); +mz_uint32 tdefl_get_adler32(tdefl_compressor *d); + +/* Create tdefl_compress() flags given zlib-style compression parameters. */ +/* level may range from [0,10] (where 10 is absolute max compression, but may be much slower on some files) */ +/* window_bits may be -15 (raw deflate) or 15 (zlib) */ +/* strategy may be either MZ_DEFAULT_STRATEGY, MZ_FILTERED, MZ_HUFFMAN_ONLY, MZ_RLE, or MZ_FIXED */ +mz_uint tdefl_create_comp_flags_from_zip_params(int level, int window_bits, int strategy); + +/* Allocate the tdefl_compressor structure in C so that */ +/* non-C language bindings to tdefl_ API don't need to worry about */ +/* structure size and allocation mechanism. */ +tdefl_compressor *tdefl_compressor_alloc(); +void tdefl_compressor_free(tdefl_compressor *pComp); + +#ifdef __cplusplus +} +#endif +#pragma once + +/* ------------------- Low-level Decompression API Definitions */ + +#ifdef __cplusplus +extern "C" { +#endif +/* Decompression flags used by tinfl_decompress(). */ +/* TINFL_FLAG_PARSE_ZLIB_HEADER: If set, the input has a valid zlib header and ends with an adler32 checksum (it's a valid zlib stream). Otherwise, the input is a raw deflate stream. */ +/* TINFL_FLAG_HAS_MORE_INPUT: If set, there are more input bytes available beyond the end of the supplied input buffer. If clear, the input buffer contains all remaining input. */ +/* TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF: If set, the output buffer is large enough to hold the entire decompressed stream. If clear, the output buffer is at least the size of the dictionary (typically 32KB). */ +/* TINFL_FLAG_COMPUTE_ADLER32: Force adler-32 checksum computation of the decompressed bytes. */ +enum +{ + TINFL_FLAG_PARSE_ZLIB_HEADER = 1, + TINFL_FLAG_HAS_MORE_INPUT = 2, + TINFL_FLAG_USING_NON_WRAPPING_OUTPUT_BUF = 4, + TINFL_FLAG_COMPUTE_ADLER32 = 8 +}; + +/* High level decompression functions: */ +/* tinfl_decompress_mem_to_heap() decompresses a block in memory to a heap block allocated via malloc(). */ +/* On entry: */ +/* pSrc_buf, src_buf_len: Pointer and size of the Deflate or zlib source data to decompress. */ +/* On return: */ +/* Function returns a pointer to the decompressed data, or NULL on failure. */ +/* *pOut_len will be set to the decompressed data's size, which could be larger than src_buf_len on uncompressible data. */ +/* The caller must call mz_free() on the returned block when it's no longer needed. */ +void *tinfl_decompress_mem_to_heap(const void *pSrc_buf, size_t src_buf_len, size_t *pOut_len, int flags); + +/* tinfl_decompress_mem_to_mem() decompresses a block in memory to another block in memory. */ +/* Returns TINFL_DECOMPRESS_MEM_TO_MEM_FAILED on failure, or the number of bytes written on success. */ +#define TINFL_DECOMPRESS_MEM_TO_MEM_FAILED ((size_t)(-1)) +size_t tinfl_decompress_mem_to_mem(void *pOut_buf, size_t out_buf_len, const void *pSrc_buf, size_t src_buf_len, int flags); + +/* tinfl_decompress_mem_to_callback() decompresses a block in memory to an internal 32KB buffer, and a user provided callback function will be called to flush the buffer. */ +/* Returns 1 on success or 0 on failure. */ +typedef int (*tinfl_put_buf_func_ptr)(const void *pBuf, int len, void *pUser); +int tinfl_decompress_mem_to_callback(const void *pIn_buf, size_t *pIn_buf_size, tinfl_put_buf_func_ptr pPut_buf_func, void *pPut_buf_user, int flags); + +struct tinfl_decompressor_tag; +typedef struct tinfl_decompressor_tag tinfl_decompressor; + +/* Allocate the tinfl_decompressor structure in C so that */ +/* non-C language bindings to tinfl_ API don't need to worry about */ +/* structure size and allocation mechanism. */ + +tinfl_decompressor *tinfl_decompressor_alloc(); +void tinfl_decompressor_free(tinfl_decompressor *pDecomp); + +/* Max size of LZ dictionary. */ +#define TINFL_LZ_DICT_SIZE 32768 + +/* Return status. */ +typedef enum +{ + /* This flags indicates the inflator needs 1 or more input bytes to make forward progress, but the caller is indicating that no more are available. The compressed data */ + /* is probably corrupted. If you call the inflator again with more bytes it'll try to continue processing the input but this is a BAD sign (either the data is corrupted or you called it incorrectly). */ + /* If you call it again with no input you'll just get TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS again. */ + TINFL_STATUS_FAILED_CANNOT_MAKE_PROGRESS = -4, + + /* This flag indicates that one or more of the input parameters was obviously bogus. (You can try calling it again, but if you get this error the calling code is wrong.) */ + TINFL_STATUS_BAD_PARAM = -3, + + /* This flags indicate the inflator is finished but the adler32 check of the uncompressed data didn't match. If you call it again it'll return TINFL_STATUS_DONE. */ + TINFL_STATUS_ADLER32_MISMATCH = -2, + + /* This flags indicate the inflator has somehow failed (bad code, corrupted input, etc.). If you call it again without resetting via tinfl_init() it it'll just keep on returning the same status failure code. */ + TINFL_STATUS_FAILED = -1, + + /* Any status code less than TINFL_STATUS_DONE must indicate a failure. */ + + /* This flag indicates the inflator has returned every byte of uncompressed data that it can, has consumed every byte that it needed, has successfully reached the end of the deflate stream, and */ + /* if zlib headers and adler32 checking enabled that it has successfully checked the uncompressed data's adler32. If you call it again you'll just get TINFL_STATUS_DONE over and over again. */ + TINFL_STATUS_DONE = 0, + + /* This flag indicates the inflator MUST have more input data (even 1 byte) before it can make any more forward progress, or you need to clear the TINFL_FLAG_HAS_MORE_INPUT */ + /* flag on the next call if you don't have any more source data. If the source data was somehow corrupted it's also possible (but unlikely) for the inflator to keep on demanding input to */ + /* proceed, so be sure to properly set the TINFL_FLAG_HAS_MORE_INPUT flag. */ + TINFL_STATUS_NEEDS_MORE_INPUT = 1, + + /* This flag indicates the inflator definitely has 1 or more bytes of uncompressed data available, but it cannot write this data into the output buffer. */ + /* Note if the source compressed data was corrupted it's possible for the inflator to return a lot of uncompressed data to the caller. I've been assuming you know how much uncompressed data to expect */ + /* (either exact or worst case) and will stop calling the inflator and fail after receiving too much. In pure streaming scenarios where you have no idea how many bytes to expect this may not be possible */ + /* so I may need to add some code to address this. */ + TINFL_STATUS_HAS_MORE_OUTPUT = 2 +} tinfl_status; + +/* Initializes the decompressor to its initial state. */ +#define tinfl_init(r) \ + do \ + { \ + (r)->m_state = 0; \ + } \ + MZ_MACRO_END +#define tinfl_get_adler32(r) (r)->m_check_adler32 + +/* Main low-level decompressor coroutine function. This is the only function actually needed for decompression. All the other functions are just high-level helpers for improved usability. */ +/* This is a universal API, i.e. it can be used as a building block to build any desired higher level decompression API. In the limit case, it can be called once per every byte input or output. */ +tinfl_status tinfl_decompress(tinfl_decompressor *r, const mz_uint8 *pIn_buf_next, size_t *pIn_buf_size, mz_uint8 *pOut_buf_start, mz_uint8 *pOut_buf_next, size_t *pOut_buf_size, const mz_uint32 decomp_flags); + +/* Internal/private bits follow. */ +enum +{ + TINFL_MAX_HUFF_TABLES = 3, + TINFL_MAX_HUFF_SYMBOLS_0 = 288, + TINFL_MAX_HUFF_SYMBOLS_1 = 32, + TINFL_MAX_HUFF_SYMBOLS_2 = 19, + TINFL_FAST_LOOKUP_BITS = 10, + TINFL_FAST_LOOKUP_SIZE = 1 << TINFL_FAST_LOOKUP_BITS +}; + +typedef struct +{ + mz_uint8 m_code_size[TINFL_MAX_HUFF_SYMBOLS_0]; + mz_int16 m_look_up[TINFL_FAST_LOOKUP_SIZE], m_tree[TINFL_MAX_HUFF_SYMBOLS_0 * 2]; +} tinfl_huff_table; + +#if MINIZ_HAS_64BIT_REGISTERS +#define TINFL_USE_64BIT_BITBUF 1 +#endif + +#if TINFL_USE_64BIT_BITBUF +typedef mz_uint64 tinfl_bit_buf_t; +#define TINFL_BITBUF_SIZE (64) +#else +typedef mz_uint32 tinfl_bit_buf_t; +#define TINFL_BITBUF_SIZE (32) +#endif + +struct tinfl_decompressor_tag +{ + mz_uint32 m_state, m_num_bits, m_zhdr0, m_zhdr1, m_z_adler32, m_final, m_type, m_check_adler32, m_dist, m_counter, m_num_extra, m_table_sizes[TINFL_MAX_HUFF_TABLES]; + tinfl_bit_buf_t m_bit_buf; + size_t m_dist_from_out_buf_start; + tinfl_huff_table m_tables[TINFL_MAX_HUFF_TABLES]; + mz_uint8 m_raw_header[4], m_len_codes[TINFL_MAX_HUFF_SYMBOLS_0 + TINFL_MAX_HUFF_SYMBOLS_1 + 137]; +}; + +#ifdef __cplusplus +} +#endif + +#pragma once + + +/* ------------------- ZIP archive reading/writing */ + +#ifndef MINIZ_NO_ARCHIVE_APIS + +#ifdef __cplusplus +extern "C" { +#endif + +enum +{ + /* Note: These enums can be reduced as needed to save memory or stack space - they are pretty conservative. */ + MZ_ZIP_MAX_IO_BUF_SIZE = 64 * 1024, + MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE = 512, + MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE = 512 +}; + +typedef struct +{ + /* Central directory file index. */ + mz_uint32 m_file_index; + + /* Byte offset of this entry in the archive's central directory. Note we currently only support up to UINT_MAX or less bytes in the central dir. */ + mz_uint64 m_central_dir_ofs; + + /* These fields are copied directly from the zip's central dir. */ + mz_uint16 m_version_made_by; + mz_uint16 m_version_needed; + mz_uint16 m_bit_flag; + mz_uint16 m_method; + +#ifndef MINIZ_NO_TIME + MZ_TIME_T m_time; +#endif + + /* CRC-32 of uncompressed data. */ + mz_uint32 m_crc32; + + /* File's compressed size. */ + mz_uint64 m_comp_size; + + /* File's uncompressed size. Note, I've seen some old archives where directory entries had 512 bytes for their uncompressed sizes, but when you try to unpack them you actually get 0 bytes. */ + mz_uint64 m_uncomp_size; + + /* Zip internal and external file attributes. */ + mz_uint16 m_internal_attr; + mz_uint32 m_external_attr; + + /* Entry's local header file offset in bytes. */ + mz_uint64 m_local_header_ofs; + + /* Size of comment in bytes. */ + mz_uint32 m_comment_size; + + /* MZ_TRUE if the entry appears to be a directory. */ + mz_bool m_is_directory; + + /* MZ_TRUE if the entry uses encryption/strong encryption (which miniz_zip doesn't support) */ + mz_bool m_is_encrypted; + + /* MZ_TRUE if the file is not encrypted, a patch file, and if it uses a compression method we support. */ + mz_bool m_is_supported; + + /* Filename. If string ends in '/' it's a subdirectory entry. */ + /* Guaranteed to be zero terminated, may be truncated to fit. */ + char m_filename[MZ_ZIP_MAX_ARCHIVE_FILENAME_SIZE]; + + /* Comment field. */ + /* Guaranteed to be zero terminated, may be truncated to fit. */ + char m_comment[MZ_ZIP_MAX_ARCHIVE_FILE_COMMENT_SIZE]; + +} mz_zip_archive_file_stat; + +typedef size_t (*mz_file_read_func)(void *pOpaque, mz_uint64 file_ofs, void *pBuf, size_t n); +typedef size_t (*mz_file_write_func)(void *pOpaque, mz_uint64 file_ofs, const void *pBuf, size_t n); +typedef mz_bool (*mz_file_needs_keepalive)(void *pOpaque); + +struct mz_zip_internal_state_tag; +typedef struct mz_zip_internal_state_tag mz_zip_internal_state; + +typedef enum +{ + MZ_ZIP_MODE_INVALID = 0, + MZ_ZIP_MODE_READING = 1, + MZ_ZIP_MODE_WRITING = 2, + MZ_ZIP_MODE_WRITING_HAS_BEEN_FINALIZED = 3 +} mz_zip_mode; + +typedef enum +{ + MZ_ZIP_FLAG_CASE_SENSITIVE = 0x0100, + MZ_ZIP_FLAG_IGNORE_PATH = 0x0200, + MZ_ZIP_FLAG_COMPRESSED_DATA = 0x0400, + MZ_ZIP_FLAG_DO_NOT_SORT_CENTRAL_DIRECTORY = 0x0800, + MZ_ZIP_FLAG_VALIDATE_LOCATE_FILE_FLAG = 0x1000, /* if enabled, mz_zip_reader_locate_file() will be called on each file as its validated to ensure the func finds the file in the central dir (intended for testing) */ + MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY = 0x2000, /* validate the local headers, but don't decompress the entire file and check the crc32 */ + MZ_ZIP_FLAG_WRITE_ZIP64 = 0x4000, /* use the zip64 file format, instead of the original zip file format */ + MZ_ZIP_FLAG_WRITE_ALLOW_READING = 0x8000, + MZ_ZIP_FLAG_ASCII_FILENAME = 0x10000 +} mz_zip_flags; + +typedef enum +{ + MZ_ZIP_TYPE_INVALID = 0, + MZ_ZIP_TYPE_USER, + MZ_ZIP_TYPE_MEMORY, + MZ_ZIP_TYPE_HEAP, + MZ_ZIP_TYPE_FILE, + MZ_ZIP_TYPE_CFILE, + MZ_ZIP_TOTAL_TYPES +} mz_zip_type; + +/* miniz error codes. Be sure to update mz_zip_get_error_string() if you add or modify this enum. */ +typedef enum +{ + MZ_ZIP_NO_ERROR = 0, + MZ_ZIP_UNDEFINED_ERROR, + MZ_ZIP_TOO_MANY_FILES, + MZ_ZIP_FILE_TOO_LARGE, + MZ_ZIP_UNSUPPORTED_METHOD, + MZ_ZIP_UNSUPPORTED_ENCRYPTION, + MZ_ZIP_UNSUPPORTED_FEATURE, + MZ_ZIP_FAILED_FINDING_CENTRAL_DIR, + MZ_ZIP_NOT_AN_ARCHIVE, + MZ_ZIP_INVALID_HEADER_OR_CORRUPTED, + MZ_ZIP_UNSUPPORTED_MULTIDISK, + MZ_ZIP_DECOMPRESSION_FAILED, + MZ_ZIP_COMPRESSION_FAILED, + MZ_ZIP_UNEXPECTED_DECOMPRESSED_SIZE, + MZ_ZIP_CRC_CHECK_FAILED, + MZ_ZIP_UNSUPPORTED_CDIR_SIZE, + MZ_ZIP_ALLOC_FAILED, + MZ_ZIP_FILE_OPEN_FAILED, + MZ_ZIP_FILE_CREATE_FAILED, + MZ_ZIP_FILE_WRITE_FAILED, + MZ_ZIP_FILE_READ_FAILED, + MZ_ZIP_FILE_CLOSE_FAILED, + MZ_ZIP_FILE_SEEK_FAILED, + MZ_ZIP_FILE_STAT_FAILED, + MZ_ZIP_INVALID_PARAMETER, + MZ_ZIP_INVALID_FILENAME, + MZ_ZIP_BUF_TOO_SMALL, + MZ_ZIP_INTERNAL_ERROR, + MZ_ZIP_FILE_NOT_FOUND, + MZ_ZIP_ARCHIVE_TOO_LARGE, + MZ_ZIP_VALIDATION_FAILED, + MZ_ZIP_WRITE_CALLBACK_FAILED, + MZ_ZIP_TOTAL_ERRORS +} mz_zip_error; + +typedef struct +{ + mz_uint64 m_archive_size; + mz_uint64 m_central_directory_file_ofs; + + /* We only support up to UINT32_MAX files in zip64 mode. */ + mz_uint32 m_total_files; + mz_zip_mode m_zip_mode; + mz_zip_type m_zip_type; + mz_zip_error m_last_error; + + mz_uint64 m_file_offset_alignment; + + mz_alloc_func m_pAlloc; + mz_free_func m_pFree; + mz_realloc_func m_pRealloc; + void *m_pAlloc_opaque; + + mz_file_read_func m_pRead; + mz_file_write_func m_pWrite; + mz_file_needs_keepalive m_pNeeds_keepalive; + void *m_pIO_opaque; + + mz_zip_internal_state *m_pState; + +} mz_zip_archive; + +/* -------- ZIP reading */ + +/* Inits a ZIP archive reader. */ +/* These functions read and validate the archive's central directory. */ +mz_bool mz_zip_reader_init(mz_zip_archive *pZip, mz_uint64 size, mz_uint flags); + +mz_bool mz_zip_reader_init_mem(mz_zip_archive *pZip, const void *pMem, size_t size, mz_uint flags); + +#ifndef MINIZ_NO_STDIO +/* Read a archive from a disk file. */ +/* file_start_ofs is the file offset where the archive actually begins, or 0. */ +/* actual_archive_size is the true total size of the archive, which may be smaller than the file's actual size on disk. If zero the entire file is treated as the archive. */ +mz_bool mz_zip_reader_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint32 flags); +mz_bool mz_zip_reader_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags, mz_uint64 file_start_ofs, mz_uint64 archive_size); + +/* Read an archive from an already opened FILE, beginning at the current file position. */ +/* The archive is assumed to be archive_size bytes long. If archive_size is < 0, then the entire rest of the file is assumed to contain the archive. */ +/* The FILE will NOT be closed when mz_zip_reader_end() is called. */ +mz_bool mz_zip_reader_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint64 archive_size, mz_uint flags); +#endif + +/* Ends archive reading, freeing all allocations, and closing the input archive file if mz_zip_reader_init_file() was used. */ +mz_bool mz_zip_reader_end(mz_zip_archive *pZip); + +/* -------- ZIP reading or writing */ + +/* Clears a mz_zip_archive struct to all zeros. */ +/* Important: This must be done before passing the struct to any mz_zip functions. */ +void mz_zip_zero_struct(mz_zip_archive *pZip); + +mz_zip_mode mz_zip_get_mode(mz_zip_archive *pZip); +mz_zip_type mz_zip_get_type(mz_zip_archive *pZip); + +/* Returns the total number of files in the archive. */ +mz_uint mz_zip_reader_get_num_files(mz_zip_archive *pZip); + +mz_uint64 mz_zip_get_archive_size(mz_zip_archive *pZip); +mz_uint64 mz_zip_get_archive_file_start_offset(mz_zip_archive *pZip); +MZ_FILE *mz_zip_get_cfile(mz_zip_archive *pZip); + +/* Reads n bytes of raw archive data, starting at file offset file_ofs, to pBuf. */ +size_t mz_zip_read_archive_data(mz_zip_archive *pZip, mz_uint64 file_ofs, void *pBuf, size_t n); + +/* Attempts to locates a file in the archive's central directory. */ +/* Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH */ +/* Returns -1 if the file cannot be found. */ +int mz_zip_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); +/* Returns MZ_FALSE if the file cannot be found. */ +mz_bool mz_zip_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *pIndex); + +/* All mz_zip funcs set the m_last_error field in the mz_zip_archive struct. These functions retrieve/manipulate this field. */ +/* Note that the m_last_error functionality is not thread safe. */ +mz_zip_error mz_zip_set_last_error(mz_zip_archive *pZip, mz_zip_error err_num); +mz_zip_error mz_zip_peek_last_error(mz_zip_archive *pZip); +mz_zip_error mz_zip_clear_last_error(mz_zip_archive *pZip); +mz_zip_error mz_zip_get_last_error(mz_zip_archive *pZip); +const char *mz_zip_get_error_string(mz_zip_error mz_err); + +/* MZ_TRUE if the archive file entry is a directory entry. */ +mz_bool mz_zip_reader_is_file_a_directory(mz_zip_archive *pZip, mz_uint file_index); + +/* MZ_TRUE if the file is encrypted/strong encrypted. */ +mz_bool mz_zip_reader_is_file_encrypted(mz_zip_archive *pZip, mz_uint file_index); + +/* MZ_TRUE if the compression method is supported, and the file is not encrypted, and the file is not a compressed patch file. */ +mz_bool mz_zip_reader_is_file_supported(mz_zip_archive *pZip, mz_uint file_index); + +/* Retrieves the filename of an archive file entry. */ +/* Returns the number of bytes written to pFilename, or if filename_buf_size is 0 this function returns the number of bytes needed to fully store the filename. */ +mz_uint mz_zip_reader_get_filename(mz_zip_archive *pZip, mz_uint file_index, char *pFilename, mz_uint filename_buf_size); + +/* Attempts to locates a file in the archive's central directory. */ +/* Valid flags: MZ_ZIP_FLAG_CASE_SENSITIVE, MZ_ZIP_FLAG_IGNORE_PATH */ +/* Returns -1 if the file cannot be found. */ +int mz_zip_reader_locate_file(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags); +int mz_zip_reader_locate_file_v2(mz_zip_archive *pZip, const char *pName, const char *pComment, mz_uint flags, mz_uint32 *file_index); + +/* Returns detailed information about an archive file entry. */ +mz_bool mz_zip_reader_file_stat(mz_zip_archive *pZip, mz_uint file_index, mz_zip_archive_file_stat *pStat); + +/* MZ_TRUE if the file is in zip64 format. */ +/* A file is considered zip64 if it contained a zip64 end of central directory marker, or if it contained any zip64 extended file information fields in the central directory. */ +mz_bool mz_zip_is_zip64(mz_zip_archive *pZip); + +/* Returns the total central directory size in bytes. */ +/* The current max supported size is <= MZ_UINT32_MAX. */ +size_t mz_zip_get_central_dir_size(mz_zip_archive *pZip); + +/* Extracts a archive file to a memory buffer using no memory allocation. */ +/* There must be at least enough room on the stack to store the inflator's state (~34KB or so). */ +mz_bool mz_zip_reader_extract_to_mem_no_alloc(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); +mz_bool mz_zip_reader_extract_file_to_mem_no_alloc(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags, void *pUser_read_buf, size_t user_read_buf_size); + +/* Extracts a archive file to a memory buffer. */ +mz_bool mz_zip_reader_extract_to_mem(mz_zip_archive *pZip, mz_uint file_index, void *pBuf, size_t buf_size, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_mem(mz_zip_archive *pZip, const char *pFilename, void *pBuf, size_t buf_size, mz_uint flags); + +/* Extracts a archive file to a dynamically allocated heap buffer. */ +/* The memory will be allocated via the mz_zip_archive's alloc/realloc functions. */ +/* Returns NULL and sets the last error on failure. */ +void *mz_zip_reader_extract_to_heap(mz_zip_archive *pZip, mz_uint file_index, size_t *pSize, mz_uint flags); +void *mz_zip_reader_extract_file_to_heap(mz_zip_archive *pZip, const char *pFilename, size_t *pSize, mz_uint flags); + +/* Extracts a archive file using a callback function to output the file's data. */ +mz_bool mz_zip_reader_extract_to_callback(mz_zip_archive *pZip, mz_uint file_index, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_callback(mz_zip_archive *pZip, const char *pFilename, mz_file_write_func pCallback, void *pOpaque, mz_uint flags); + +#ifndef MINIZ_NO_STDIO +/* Extracts a archive file to a disk file and sets its last accessed and modified times. */ +/* This function only extracts files, not archive directory records. */ +mz_bool mz_zip_reader_extract_to_file(mz_zip_archive *pZip, mz_uint file_index, const char *pDst_filename, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_file(mz_zip_archive *pZip, const char *pArchive_filename, const char *pDst_filename, mz_uint flags); + +/* Extracts a archive file starting at the current position in the destination FILE stream. */ +mz_bool mz_zip_reader_extract_to_cfile(mz_zip_archive *pZip, mz_uint file_index, MZ_FILE *File, mz_uint flags); +mz_bool mz_zip_reader_extract_file_to_cfile(mz_zip_archive *pZip, const char *pArchive_filename, MZ_FILE *pFile, mz_uint flags); +#endif + +#if 0 +/* TODO */ + typedef void *mz_zip_streaming_extract_state_ptr; + mz_zip_streaming_extract_state_ptr mz_zip_streaming_extract_begin(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); + uint64_t mz_zip_streaming_extract_get_size(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); + uint64_t mz_zip_streaming_extract_get_cur_ofs(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); + mz_bool mz_zip_streaming_extract_seek(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, uint64_t new_ofs); + size_t mz_zip_streaming_extract_read(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState, void *pBuf, size_t buf_size); + mz_bool mz_zip_streaming_extract_end(mz_zip_archive *pZip, mz_zip_streaming_extract_state_ptr pState); +#endif + +/* This function compares the archive's local headers, the optional local zip64 extended information block, and the optional descriptor following the compressed data vs. the data in the central directory. */ +/* It also validates that each file can be successfully uncompressed unless the MZ_ZIP_FLAG_VALIDATE_HEADERS_ONLY is specified. */ +mz_bool mz_zip_validate_file(mz_zip_archive *pZip, mz_uint file_index, mz_uint flags); + +/* Validates an entire archive by calling mz_zip_validate_file() on each file. */ +mz_bool mz_zip_validate_archive(mz_zip_archive *pZip, mz_uint flags); + +/* Misc utils/helpers, valid for ZIP reading or writing */ +mz_bool mz_zip_validate_mem_archive(const void *pMem, size_t size, mz_uint flags, mz_zip_error *pErr); +mz_bool mz_zip_validate_file_archive(const char *pFilename, mz_uint flags, mz_zip_error *pErr); + +/* Universal end function - calls either mz_zip_reader_end() or mz_zip_writer_end(). */ +mz_bool mz_zip_end(mz_zip_archive *pZip); + +/* -------- ZIP writing */ + +#ifndef MINIZ_NO_ARCHIVE_WRITING_APIS + +/* Inits a ZIP archive writer. */ +mz_bool mz_zip_writer_init(mz_zip_archive *pZip, mz_uint64 existing_size); +mz_bool mz_zip_writer_init_v2(mz_zip_archive *pZip, mz_uint64 existing_size, mz_uint flags); +mz_bool mz_zip_writer_init_heap(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size); +mz_bool mz_zip_writer_init_heap_v2(mz_zip_archive *pZip, size_t size_to_reserve_at_beginning, size_t initial_allocation_size, mz_uint flags); + +#ifndef MINIZ_NO_STDIO +mz_bool mz_zip_writer_init_file(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning); +mz_bool mz_zip_writer_init_file_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint64 size_to_reserve_at_beginning, mz_uint flags); +mz_bool mz_zip_writer_init_cfile(mz_zip_archive *pZip, MZ_FILE *pFile, mz_uint flags); +#endif + +/* Converts a ZIP archive reader object into a writer object, to allow efficient in-place file appends to occur on an existing archive. */ +/* For archives opened using mz_zip_reader_init_file, pFilename must be the archive's filename so it can be reopened for writing. If the file can't be reopened, mz_zip_reader_end() will be called. */ +/* For archives opened using mz_zip_reader_init_mem, the memory block must be growable using the realloc callback (which defaults to realloc unless you've overridden it). */ +/* Finally, for archives opened using mz_zip_reader_init, the mz_zip_archive's user provided m_pWrite function cannot be NULL. */ +/* Note: In-place archive modification is not recommended unless you know what you're doing, because if execution stops or something goes wrong before */ +/* the archive is finalized the file's central directory will be hosed. */ +mz_bool mz_zip_writer_init_from_reader(mz_zip_archive *pZip, const char *pFilename); +mz_bool mz_zip_writer_init_from_reader_v2(mz_zip_archive *pZip, const char *pFilename, mz_uint flags); + +/* Adds the contents of a memory buffer to an archive. These functions record the current local time into the archive. */ +/* To add a directory entry, call this method with an archive name ending in a forwardslash with an empty buffer. */ +/* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ +mz_bool mz_zip_writer_add_mem(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, mz_uint level_and_flags); + +/* Like mz_zip_writer_add_mem(), except you can specify a file comment field, and optionally supply the function with already compressed data. */ +/* uncomp_size/uncomp_crc32 are only used if the MZ_ZIP_FLAG_COMPRESSED_DATA flag is specified. */ +mz_bool mz_zip_writer_add_mem_ex(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, + mz_uint64 uncomp_size, mz_uint32 uncomp_crc32); + +mz_bool mz_zip_writer_add_mem_ex_v2(mz_zip_archive *pZip, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, + mz_uint64 uncomp_size, mz_uint32 uncomp_crc32, MZ_TIME_T *last_modified, const char *user_extra_data_local, mz_uint user_extra_data_local_len, + const char *user_extra_data_central, mz_uint user_extra_data_central_len); + +#ifndef MINIZ_NO_STDIO +/* Adds the contents of a disk file to an archive. This function also records the disk file's modified time into the archive. */ +/* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ +mz_bool mz_zip_writer_add_file(mz_zip_archive *pZip, const char *pArchive_name, const char *pSrc_filename, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); + +/* Like mz_zip_writer_add_file(), except the file data is read from the specified FILE stream. */ +mz_bool mz_zip_writer_add_cfile(mz_zip_archive *pZip, const char *pArchive_name, MZ_FILE *pSrc_file, mz_uint64 size_to_add, + const MZ_TIME_T *pFile_time, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, const char *user_extra_data_local, mz_uint user_extra_data_local_len, + const char *user_extra_data_central, mz_uint user_extra_data_central_len); +#endif + +/* Adds a file to an archive by fully cloning the data from another archive. */ +/* This function fully clones the source file's compressed data (no recompression), along with its full filename, extra data (it may add or modify the zip64 local header extra data field), and the optional descriptor following the compressed data. */ +mz_bool mz_zip_writer_add_from_zip_reader(mz_zip_archive *pZip, mz_zip_archive *pSource_zip, mz_uint src_file_index); + +/* Finalizes the archive by writing the central directory records followed by the end of central directory record. */ +/* After an archive is finalized, the only valid call on the mz_zip_archive struct is mz_zip_writer_end(). */ +/* An archive must be manually finalized by calling this function for it to be valid. */ +mz_bool mz_zip_writer_finalize_archive(mz_zip_archive *pZip); + +/* Finalizes a heap archive, returning a poiner to the heap block and its size. */ +/* The heap block will be allocated using the mz_zip_archive's alloc/realloc callbacks. */ +mz_bool mz_zip_writer_finalize_heap_archive(mz_zip_archive *pZip, void **ppBuf, size_t *pSize); + +/* Ends archive writing, freeing all allocations, and closing the output file if mz_zip_writer_init_file() was used. */ +/* Note for the archive to be valid, it *must* have been finalized before ending (this function will not do it for you). */ +mz_bool mz_zip_writer_end(mz_zip_archive *pZip); + +/* -------- Misc. high-level helper functions: */ + +/* mz_zip_add_mem_to_archive_file_in_place() efficiently (but not atomically) appends a memory blob to a ZIP archive. */ +/* Note this is NOT a fully safe operation. If it crashes or dies in some way your archive can be left in a screwed up state (without a central directory). */ +/* level_and_flags - compression level (0-10, see MZ_BEST_SPEED, MZ_BEST_COMPRESSION, etc.) logically OR'd with zero or more mz_zip_flags, or just set to MZ_DEFAULT_COMPRESSION. */ +/* TODO: Perhaps add an option to leave the existing central dir in place in case the add dies? We could then truncate the file (so the old central dir would be at the end) if something goes wrong. */ +mz_bool mz_zip_add_mem_to_archive_file_in_place(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags); +mz_bool mz_zip_add_mem_to_archive_file_in_place_v2(const char *pZip_filename, const char *pArchive_name, const void *pBuf, size_t buf_size, const void *pComment, mz_uint16 comment_size, mz_uint level_and_flags, mz_zip_error *pErr); + +/* Reads a single file from an archive into a heap block. */ +/* If pComment is not NULL, only the file with the specified comment will be extracted. */ +/* Returns NULL on failure. */ +void *mz_zip_extract_archive_file_to_heap(const char *pZip_filename, const char *pArchive_name, size_t *pSize, mz_uint flags); +void *mz_zip_extract_archive_file_to_heap_v2(const char *pZip_filename, const char *pArchive_name, const char *pComment, size_t *pSize, mz_uint flags, mz_zip_error *pErr); + +#endif /* #ifndef MINIZ_NO_ARCHIVE_WRITING_APIS */ + +#ifdef __cplusplus +} +#endif + +#endif /* MINIZ_NO_ARCHIVE_APIS */ diff --git a/Source/ThirdParty/OpenFBX/ofbx.cpp b/Source/ThirdParty/OpenFBX/ofbx.cpp new file mode 100644 index 000000000..dc7c92718 --- /dev/null +++ b/Source/ThirdParty/OpenFBX/ofbx.cpp @@ -0,0 +1,3612 @@ +#include "ofbx.h" +#include "miniz.h" +#include +#include +#include +#include +#include +#include +#include +#include + + +namespace ofbx +{ + + +struct Allocator { + struct Page { + struct { + Page* next = nullptr; + u32 offset = 0; + } header; + u8 data[4096 * 1024 - 12]; + }; + Page* first = nullptr; + + ~Allocator() { + while (first) { + Page* page = first; + first = first->header.next; + delete page; + } + } + + template T* allocate(Args&&... args) + { + assert(sizeof(T) <= sizeof(first->data)); + if (!first) { + first = new Page; + } + Page* p = first; + if (p->header.offset % alignof(T) != 0) { + p->header.offset += alignof(T) - p->header.offset % alignof(T); + } + + if (p->header.offset + sizeof(T) > sizeof(p->data)) { + p = new Page; + p->header.next = first; + first = p; + } + T* res = new (p->data + p->header.offset) T(args...); + p->header.offset += sizeof(T); + return res; + } + + // store temporary data, can be reused + std::vector tmp; + std::vector int_tmp; + std::vector vec3_tmp; + std::vector double_tmp; + std::vector vec3_tmp2; +}; + + +struct Temporaries { + std::vector f; + std::vector i; + std::vector v2; + std::vector v3; + std::vector v4; +}; + + +struct Video +{ + DataView filename; + DataView content; + DataView media; +}; + + +struct Error +{ + Error() {} + Error(const char* msg) { s_message = msg; } + + static const char* s_message; +}; + + +const char* Error::s_message = ""; + + +template struct OptionalError +{ + OptionalError(Error error) + : is_error(true) + { + } + + + OptionalError(T _value) + : value(_value) + , is_error(false) + { + } + + + T getValue() const + { +#ifdef _DEBUG + assert(error_checked); +#endif + return value; + } + + + bool isError() + { +#ifdef _DEBUG + error_checked = true; +#endif + return is_error; + } + + +private: + T value; + bool is_error; +#ifdef _DEBUG + bool error_checked = false; +#endif +}; + + +#pragma pack(1) +struct Header +{ + u8 magic[21]; + u8 reserved[2]; + u32 version; +}; +#pragma pack() + + +struct Cursor +{ + const u8* current; + const u8* begin; + const u8* end; +}; + + +static void setTranslation(const Vec3& t, Matrix* mtx) +{ + mtx->m[12] = t.x; + mtx->m[13] = t.y; + mtx->m[14] = t.z; +} + + +static Vec3 operator-(const Vec3& v) +{ + return {-v.x, -v.y, -v.z}; +} + + +static Matrix operator*(const Matrix& lhs, const Matrix& rhs) +{ + Matrix res; + for (int j = 0; j < 4; ++j) + { + for (int i = 0; i < 4; ++i) + { + double tmp = 0; + for (int k = 0; k < 4; ++k) + { + tmp += lhs.m[i + k * 4] * rhs.m[k + j * 4]; + } + res.m[i + j * 4] = tmp; + } + } + return res; +} + + +static Matrix makeIdentity() +{ + return {1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}; +} + + +static Matrix rotationX(double angle) +{ + Matrix m = makeIdentity(); + double c = cos(angle); + double s = sin(angle); + + m.m[5] = m.m[10] = c; + m.m[9] = -s; + m.m[6] = s; + + return m; +} + + +static Matrix rotationY(double angle) +{ + Matrix m = makeIdentity(); + double c = cos(angle); + double s = sin(angle); + + m.m[0] = m.m[10] = c; + m.m[8] = s; + m.m[2] = -s; + + return m; +} + + +static Matrix rotationZ(double angle) +{ + Matrix m = makeIdentity(); + double c = cos(angle); + double s = sin(angle); + + m.m[0] = m.m[5] = c; + m.m[4] = -s; + m.m[1] = s; + + return m; +} + + +static Matrix getRotationMatrix(const Vec3& euler, RotationOrder order) +{ + const double TO_RAD = 3.1415926535897932384626433832795028 / 180.0; + Matrix rx = rotationX(euler.x * TO_RAD); + Matrix ry = rotationY(euler.y * TO_RAD); + Matrix rz = rotationZ(euler.z * TO_RAD); + switch (order) + { + default: + case RotationOrder::EULER_XYZ: return rz * ry * rx; + case RotationOrder::EULER_XZY: return ry * rz * rx; + case RotationOrder::EULER_YXZ: return rz * rx * ry; + case RotationOrder::EULER_YZX: return rx * rz * ry; + case RotationOrder::EULER_ZXY: return ry * rx * rz; + case RotationOrder::EULER_ZYX: return rx * ry * rz; + case RotationOrder::SPHERIC_XYZ: assert(false); Error::s_message = "Unsupported rotation order."; return rx * ry * rz; + } +} + + +double fbxTimeToSeconds(i64 value) +{ + return double(value) / 46186158000L; +} + + +i64 secondsToFbxTime(double value) +{ + return i64(value * 46186158000L); +} + + +static Vec3 operator*(const Vec3& v, float f) +{ + return {v.x * f, v.y * f, v.z * f}; +} + + +static Vec3 operator+(const Vec3& a, const Vec3& b) +{ + return {a.x + b.x, a.y + b.y, a.z + b.z}; +} + + +template static bool copyString(char (&destination)[SIZE], const char* source) +{ + const char* src = source; + char* dest = destination; + int length = SIZE; + if (!src) return false; + + while (*src && length > 1) + { + *dest = *src; + --length; + ++dest; + ++src; + } + *dest = 0; + return *src == '\0'; +} + + +u64 DataView::toU64() const +{ + if (is_binary) + { + assert(end - begin == sizeof(u64)); + return *(u64*)begin; + } + static_assert(sizeof(unsigned long long) >= sizeof(u64), "can't use strtoull"); + return strtoull((const char*)begin, nullptr, 10); +} + + +i64 DataView::toI64() const +{ + if (is_binary) + { + assert(end - begin == sizeof(i64)); + return *(i64*)begin; + } + static_assert(sizeof(long long) >= sizeof(i64), "can't use atoll"); + return atoll((const char*)begin); +} + + +int DataView::toInt() const +{ + if (is_binary) + { + assert(end - begin == sizeof(int)); + return *(int*)begin; + } + return atoi((const char*)begin); +} + + +u32 DataView::toU32() const +{ + if (is_binary) + { + assert(end - begin == sizeof(u32)); + return *(u32*)begin; + } + return (u32)atoll((const char*)begin); +} + + +double DataView::toDouble() const +{ + if (is_binary) + { + assert(end - begin == sizeof(double)); + return *(double*)begin; + } + return atof((const char*)begin); +} + + +float DataView::toFloat() const +{ + if (is_binary) + { + assert(end - begin == sizeof(float)); + return *(float*)begin; + } + return (float)atof((const char*)begin); +} + + +bool DataView::operator==(const char* rhs) const +{ + const char* c = rhs; + const char* c2 = (const char*)begin; + while (*c && c2 != (const char*)end) + { + if (*c != *c2) return false; + ++c; + ++c2; + } + return c2 == (const char*)end && *c == '\0'; +} + + +struct Property; +template static bool parseArrayRaw(const Property& property, T* out, int max_size); +template static bool parseBinaryArray(const Property& property, std::vector* out); +static bool parseDouble(Property& property, double* out); + + +struct Property : IElementProperty +{ + Type getType() const override { return (Type)type; } + IElementProperty* getNext() const override { return next; } + DataView getValue() const override { return value; } + int getCount() const override + { + assert(type == ARRAY_DOUBLE || type == ARRAY_INT || type == ARRAY_FLOAT || type == ARRAY_LONG); + if (value.is_binary) + { + return int(*(u32*)value.begin); + } + return count; + } + + bool getValues(double* values, int max_size) const override { return parseArrayRaw(*this, values, max_size); } + + bool getValues(float* values, int max_size) const override { return parseArrayRaw(*this, values, max_size); } + + bool getValues(u64* values, int max_size) const override { return parseArrayRaw(*this, values, max_size); } + + bool getValues(i64* values, int max_size) const override { return parseArrayRaw(*this, values, max_size); } + + bool getValues(int* values, int max_size) const override { return parseArrayRaw(*this, values, max_size); } + + int count = 0; + u8 type = INTEGER; + DataView value; + Property* next = nullptr; +}; + + +struct Element : IElement +{ + IElement* getFirstChild() const override { return child; } + IElement* getSibling() const override { return sibling; } + DataView getID() const override { return id; } + IElementProperty* getFirstProperty() const override { return first_property; } + IElementProperty* getProperty(int idx) const + { + IElementProperty* prop = first_property; + for (int i = 0; i < idx; ++i) + { + if (prop == nullptr) return nullptr; + prop = prop->getNext(); + } + return prop; + } + + DataView id; + Element* child = nullptr; + Element* sibling = nullptr; + Property* first_property = nullptr; +}; + + +static const Element* findChild(const Element& element, const char* id) +{ + Element* const* iter = &element.child; + while (*iter) + { + if ((*iter)->id == id) return *iter; + iter = &(*iter)->sibling; + } + return nullptr; +} + + +static IElement* resolveProperty(const Object& obj, const char* name) +{ + const Element* props = findChild((const Element&)obj.element, "Properties70"); + if (!props) return nullptr; + + Element* prop = props->child; + while (prop) + { + if (prop->first_property && prop->first_property->value == name) + { + return prop; + } + prop = prop->sibling; + } + return nullptr; +} + + +static int resolveEnumProperty(const Object& object, const char* name, int default_value) +{ + Element* element = (Element*)resolveProperty(object, name); + if (!element) return default_value; + Property* x = (Property*)element->getProperty(4); + if (!x) return default_value; + + return x->value.toInt(); +} + + +static Vec3 resolveVec3Property(const Object& object, const char* name, const Vec3& default_value) +{ + Element* element = (Element*)resolveProperty(object, name); + if (!element) return default_value; + Property* x = (Property*)element->getProperty(4); + if (!x || !x->next || !x->next->next) return default_value; + + return {x->value.toDouble(), x->next->value.toDouble(), x->next->next->value.toDouble()}; +} + + +Object::Object(const Scene& _scene, const IElement& _element) + : scene(_scene) + , element(_element) + , is_node(false) + , node_attribute(nullptr) +{ + auto& e = (Element&)_element; + if (e.first_property && e.first_property->next) + { + e.first_property->next->value.toString(name); + } + else + { + name[0] = '\0'; + } +} + + +static bool decompress(const u8* in, size_t in_size, u8* out, size_t out_size) +{ + mz_stream stream = {}; + mz_inflateInit(&stream); + + stream.avail_in = (int)in_size; + stream.next_in = in; + stream.avail_out = (int)out_size; + stream.next_out = out; + + int status = mz_inflate(&stream, Z_SYNC_FLUSH); + + if (status != Z_STREAM_END) return false; + + return mz_inflateEnd(&stream) == Z_OK; +} + + +template static OptionalError read(Cursor* cursor) +{ + if (cursor->current + sizeof(T) > cursor->end) return Error("Reading past the end"); + T value = *(const T*)cursor->current; + cursor->current += sizeof(T); + return value; +} + + +static OptionalError readShortString(Cursor* cursor) +{ + DataView value; + OptionalError length = read(cursor); + if (length.isError()) return Error(); + + if (cursor->current + length.getValue() > cursor->end) return Error("Reading past the end"); + value.begin = cursor->current; + cursor->current += length.getValue(); + + value.end = cursor->current; + + return value; +} + + +static OptionalError readLongString(Cursor* cursor) +{ + DataView value; + OptionalError length = read(cursor); + if (length.isError()) return Error(); + + if (cursor->current + length.getValue() > cursor->end) return Error("Reading past the end"); + value.begin = cursor->current; + cursor->current += length.getValue(); + + value.end = cursor->current; + + return value; +} + + +static OptionalError readProperty(Cursor* cursor, Allocator& allocator) +{ + if (cursor->current == cursor->end) return Error("Reading past the end"); + + Property* prop = allocator.allocate(); + prop->next = nullptr; + prop->type = *cursor->current; + ++cursor->current; + prop->value.begin = cursor->current; + + switch (prop->type) + { + case 'S': + { + OptionalError val = readLongString(cursor); + if (val.isError()) return Error(); + prop->value = val.getValue(); + break; + } + case 'Y': cursor->current += 2; break; + case 'C': cursor->current += 1; break; + case 'I': cursor->current += 4; break; + case 'F': cursor->current += 4; break; + case 'D': cursor->current += 8; break; + case 'L': cursor->current += 8; break; + case 'R': + { + OptionalError len = read(cursor); + if (len.isError()) return Error(); + if (cursor->current + len.getValue() > cursor->end) return Error("Reading past the end"); + cursor->current += len.getValue(); + break; + } + case 'b': + case 'f': + case 'd': + case 'l': + case 'i': + { + OptionalError length = read(cursor); + OptionalError encoding = read(cursor); + OptionalError comp_len = read(cursor); + if (length.isError() || encoding.isError() || comp_len.isError()) return Error(); + if (cursor->current + comp_len.getValue() > cursor->end) return Error("Reading past the end"); + cursor->current += comp_len.getValue(); + break; + } + default: return Error("Unknown property type"); + } + prop->value.end = cursor->current; + return prop; +} + + +static OptionalError readElementOffset(Cursor* cursor, u16 version) +{ + if (version >= 7500) + { + OptionalError tmp = read(cursor); + if (tmp.isError()) return Error(); + return tmp.getValue(); + } + + OptionalError tmp = read(cursor); + if (tmp.isError()) return Error(); + return tmp.getValue(); +} + + +static OptionalError readElement(Cursor* cursor, u32 version, Allocator& allocator) +{ + OptionalError end_offset = readElementOffset(cursor, version); + if (end_offset.isError()) return Error(); + if (end_offset.getValue() == 0) return nullptr; + + OptionalError prop_count = readElementOffset(cursor, version); + OptionalError prop_length = readElementOffset(cursor, version); + if (prop_count.isError() || prop_length.isError()) return Error(); + + OptionalError id = readShortString(cursor); + if (id.isError()) return Error(); + + Element* element = allocator.allocate(); + element->first_property = nullptr; + element->id = id.getValue(); + + element->child = nullptr; + element->sibling = nullptr; + + Property** prop_link = &element->first_property; + for (u32 i = 0; i < prop_count.getValue(); ++i) + { + OptionalError prop = readProperty(cursor, allocator); + if (prop.isError()) + { + return Error(); + } + + *prop_link = prop.getValue(); + prop_link = &(*prop_link)->next; + } + + if (cursor->current - cursor->begin >= (ptrdiff_t)end_offset.getValue()) return element; + + int BLOCK_SENTINEL_LENGTH = version >= 7500 ? 25 : 13; + + Element** link = &element->child; + while (cursor->current - cursor->begin < ((ptrdiff_t)end_offset.getValue() - BLOCK_SENTINEL_LENGTH)) + { + OptionalError child = readElement(cursor, version, allocator); + if (child.isError()) + { + return Error(); + } + + *link = child.getValue(); + if (child.getValue() == 0) break; + link = &(*link)->sibling; + } + + if (cursor->current + BLOCK_SENTINEL_LENGTH > cursor->end) + { + return Error("Reading past the end"); + } + + cursor->current += BLOCK_SENTINEL_LENGTH; + return element; +} + + +static bool isEndLine(const Cursor& cursor) +{ + return *cursor.current == '\n'; +} + + +static void skipInsignificantWhitespaces(Cursor* cursor) +{ + while (cursor->current < cursor->end && isspace(*cursor->current) && *cursor->current != '\n') + { + ++cursor->current; + } +} + + +static void skipLine(Cursor* cursor) +{ + while (cursor->current < cursor->end && !isEndLine(*cursor)) + { + ++cursor->current; + } + if (cursor->current < cursor->end) ++cursor->current; + skipInsignificantWhitespaces(cursor); +} + + +static void skipWhitespaces(Cursor* cursor) +{ + while (cursor->current < cursor->end && isspace(*cursor->current)) + { + ++cursor->current; + } + while (cursor->current < cursor->end && *cursor->current == ';') skipLine(cursor); +} + + +static bool isTextTokenChar(char c) +{ + return isalnum(c) || c == '_' || c == '-'; +} + + +static DataView readTextToken(Cursor* cursor) +{ + DataView ret; + ret.begin = cursor->current; + while (cursor->current < cursor->end && isTextTokenChar(*cursor->current)) + { + ++cursor->current; + } + ret.end = cursor->current; + return ret; +} + + +static OptionalError readTextProperty(Cursor* cursor, Allocator& allocator) +{ + Property* prop = allocator.allocate(); + prop->value.is_binary = false; + prop->next = nullptr; + if (*cursor->current == '"') + { + prop->type = 'S'; + ++cursor->current; + prop->value.begin = cursor->current; + while (cursor->current < cursor->end && *cursor->current != '"') + { + ++cursor->current; + } + prop->value.end = cursor->current; + if (cursor->current < cursor->end) ++cursor->current; // skip '"' + return prop; + } + + if (isdigit(*cursor->current) || *cursor->current == '-') + { + prop->type = 'L'; + prop->value.begin = cursor->current; + if (*cursor->current == '-') ++cursor->current; + while (cursor->current < cursor->end && isdigit(*cursor->current)) + { + ++cursor->current; + } + prop->value.end = cursor->current; + + if (cursor->current < cursor->end && *cursor->current == '.') + { + prop->type = 'D'; + ++cursor->current; + while (cursor->current < cursor->end && isdigit(*cursor->current)) + { + ++cursor->current; + } + if (cursor->current < cursor->end && (*cursor->current == 'e' || *cursor->current == 'E')) + { + // 10.5e-013 + ++cursor->current; + if (cursor->current < cursor->end && *cursor->current == '-') ++cursor->current; + while (cursor->current < cursor->end && isdigit(*cursor->current)) ++cursor->current; + } + + + prop->value.end = cursor->current; + } + return prop; + } + + if (*cursor->current == 'T' || *cursor->current == 'Y' || *cursor->current == 'W' || *cursor->current == 'C') + { + // WTF is this + prop->type = *cursor->current; + prop->value.begin = cursor->current; + ++cursor->current; + prop->value.end = cursor->current; + return prop; + } + + if (*cursor->current == '*') + { + prop->type = 'l'; + ++cursor->current; + // Vertices: *10740 { a: 14.2760353088379,... } + while (cursor->current < cursor->end && *cursor->current != ':') + { + ++cursor->current; + } + if (cursor->current < cursor->end) ++cursor->current; // skip ':' + skipInsignificantWhitespaces(cursor); + prop->value.begin = cursor->current; + prop->count = 0; + bool is_any = false; + while (cursor->current < cursor->end && *cursor->current != '}') + { + if (*cursor->current == ',') + { + if (is_any) ++prop->count; + is_any = false; + } + else if (!isspace(*cursor->current) && *cursor->current != '\n') + is_any = true; + if (*cursor->current == '.') prop->type = 'd'; + ++cursor->current; + } + if (is_any) ++prop->count; + prop->value.end = cursor->current; + if (cursor->current < cursor->end) ++cursor->current; // skip '}' + return prop; + } + + assert(false); + return Error("TODO"); +} + + +static OptionalError readTextElement(Cursor* cursor, Allocator& allocator) +{ + DataView id = readTextToken(cursor); + if (cursor->current == cursor->end) return Error("Unexpected end of file"); + if (*cursor->current != ':') return Error("Unexpected character"); + ++cursor->current; + + skipInsignificantWhitespaces(cursor); + if (cursor->current == cursor->end) return Error("Unexpected end of file"); + + Element* element = allocator.allocate(); + element->id = id; + + Property** prop_link = &element->first_property; + while (cursor->current < cursor->end && *cursor->current != '\n' && *cursor->current != '{') + { + OptionalError prop = readTextProperty(cursor, allocator); + if (prop.isError()) + { + return Error(); + } + if (cursor->current < cursor->end && *cursor->current == ',') + { + ++cursor->current; + skipWhitespaces(cursor); + } + skipInsignificantWhitespaces(cursor); + + *prop_link = prop.getValue(); + prop_link = &(*prop_link)->next; + } + + Element** link = &element->child; + if (*cursor->current == '{') + { + ++cursor->current; + skipWhitespaces(cursor); + while (cursor->current < cursor->end && *cursor->current != '}') + { + OptionalError child = readTextElement(cursor, allocator); + if (child.isError()) + { + return Error(); + } + skipWhitespaces(cursor); + + *link = child.getValue(); + link = &(*link)->sibling; + } + if (cursor->current < cursor->end) ++cursor->current; // skip '}' + } + return element; +} + + +static OptionalError tokenizeText(const u8* data, size_t size, Allocator& allocator) +{ + Cursor cursor; + cursor.begin = data; + cursor.current = data; + cursor.end = data + size; + + Element* root = allocator.allocate(); + root->first_property = nullptr; + root->id.begin = nullptr; + root->id.end = nullptr; + root->child = nullptr; + root->sibling = nullptr; + + Element** element = &root->child; + while (cursor.current < cursor.end) + { + if (*cursor.current == ';' || *cursor.current == '\r' || *cursor.current == '\n') + { + skipLine(&cursor); + } + else + { + OptionalError child = readTextElement(&cursor, allocator); + if (child.isError()) + { + return Error(); + } + *element = child.getValue(); + if (!*element) return root; + element = &(*element)->sibling; + } + } + + return root; +} + + +static OptionalError tokenize(const u8* data, size_t size, u32& version, Allocator& allocator) +{ + Cursor cursor; + cursor.begin = data; + cursor.current = data; + cursor.end = data + size; + + const Header* header = (const Header*)cursor.current; + cursor.current += sizeof(*header); + version = header->version; + + Element* root = allocator.allocate(); + root->first_property = nullptr; + root->id.begin = nullptr; + root->id.end = nullptr; + root->child = nullptr; + root->sibling = nullptr; + + Element** element = &root->child; + for (;;) + { + OptionalError child = readElement(&cursor, header->version, allocator); + if (child.isError()) { + return Error(); + } + *element = child.getValue(); + if (!*element) return root; + element = &(*element)->sibling; + } +} + + +static void parseTemplates(const Element& root) +{ + const Element* defs = findChild(root, "Definitions"); + if (!defs) return; + + std::unordered_map templates; + Element* def = defs->child; + while (def) + { + if (def->id == "ObjectType") + { + Element* subdef = def->child; + while (subdef) + { + if (subdef->id == "PropertyTemplate") + { + DataView prop1 = def->first_property->value; + DataView prop2 = subdef->first_property->value; + std::string key((const char*)prop1.begin, prop1.end - prop1.begin); + key += std::string((const char*)prop1.begin, prop1.end - prop1.begin); + templates[key] = subdef; + } + subdef = subdef->sibling; + } + } + def = def->sibling; + } + // TODO +} + + +struct Scene; + + +Mesh::Mesh(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct MeshImpl : Mesh +{ + MeshImpl(const Scene& _scene, const IElement& _element) + : Mesh(_scene, _element) + { + is_node = true; + } + + + Matrix getGeometricMatrix() const override + { + Vec3 translation = resolveVec3Property(*this, "GeometricTranslation", {0, 0, 0}); + Vec3 rotation = resolveVec3Property(*this, "GeometricRotation", {0, 0, 0}); + Vec3 scale = resolveVec3Property(*this, "GeometricScaling", {1, 1, 1}); + + Matrix scale_mtx = makeIdentity(); + scale_mtx.m[0] = (float)scale.x; + scale_mtx.m[5] = (float)scale.y; + scale_mtx.m[10] = (float)scale.z; + Matrix mtx = getRotationMatrix(rotation, RotationOrder::EULER_XYZ); + setTranslation(translation, &mtx); + + return scale_mtx * mtx; + } + + + Type getType() const override { return Type::MESH; } + + + const Pose* getPose() const override { return pose; } + const Geometry* getGeometry() const override { return geometry; } + const Material* getMaterial(int index) const override { return materials[index]; } + int getMaterialCount() const override { return (int)materials.size(); } + + + const Pose* pose = nullptr; + const Geometry* geometry = nullptr; + std::vector materials; +}; + + +Material::Material(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct MaterialImpl : Material +{ + MaterialImpl(const Scene& _scene, const IElement& _element) + : Material(_scene, _element) + { + for (const Texture*& tex : textures) tex = nullptr; + } + + Type getType() const override { return Type::MATERIAL; } + + const Texture* getTexture(Texture::TextureType type) const override { return textures[type]; } + Color getDiffuseColor() const override { return diffuse_color; } + Color getSpecularColor() const override { return specular_color; } + Color getReflectionColor() const override { return reflection_color; }; + Color getAmbientColor() const override { return ambient_color; }; + Color getEmissiveColor() const override { return emissive_color; }; + + double getDiffuseFactor() const override { return diffuse_factor; }; + double getSpecularFactor() const override { return specular_factor; }; + double getReflectionFactor() const override { return reflection_factor; }; + double getShininess() const override { return shininess; }; + double getShininessExponent() const override { return shininess_exponent; }; + double getAmbientFactor() const override { return ambient_factor; }; + double getBumpFactor() const override { return bump_factor; }; + double getEmissiveFactor() const override { return emissive_factor; }; + + const Texture* textures[Texture::TextureType::COUNT]; + Color diffuse_color; + Color specular_color; + Color reflection_color; + Color ambient_color; + Color emissive_color; + + double diffuse_factor; + double specular_factor; + double reflection_factor; + double shininess; + double shininess_exponent; + double ambient_factor; + double bump_factor; + double emissive_factor; + }; + + +struct LimbNodeImpl : Object +{ + LimbNodeImpl(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) + { + is_node = true; + } + Type getType() const override { return Type::LIMB_NODE; } +}; + + +struct NullImpl : Object +{ + NullImpl(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) + { + is_node = true; + } + Type getType() const override { return Type::NULL_NODE; } +}; + + +NodeAttribute::NodeAttribute(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct NodeAttributeImpl : NodeAttribute +{ + NodeAttributeImpl(const Scene& _scene, const IElement& _element) + : NodeAttribute(_scene, _element) + { + } + Type getType() const override { return Type::NODE_ATTRIBUTE; } + DataView getAttributeType() const override { return attribute_type; } + + + DataView attribute_type; +}; + + +Geometry::Geometry(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct GeometryImpl : Geometry +{ + enum VertexDataMapping + { + BY_POLYGON_VERTEX, + BY_POLYGON, + BY_VERTEX + }; + + struct NewVertex + { + ~NewVertex() { delete next; } + + int index = -1; + NewVertex* next = nullptr; + }; + + std::vector vertices; + std::vector normals; + std::vector uvs[s_uvs_max]; + std::vector colors; + std::vector tangents; + std::vector materials; + + const Skin* skin = nullptr; + const BlendShape* blendShape = nullptr; + + std::vector indices; + std::vector to_old_vertices; + std::vector to_new_vertices; + + GeometryImpl(const Scene& _scene, const IElement& _element) + : Geometry(_scene, _element) + { + } + + + Type getType() const override { return Type::GEOMETRY; } + int getVertexCount() const override { return (int)vertices.size(); } + const int* getFaceIndices() const override { return indices.empty() ? nullptr : &indices[0]; } + int getIndexCount() const override { return (int)indices.size(); } + const Vec3* getVertices() const override { return &vertices[0]; } + const Vec3* getNormals() const override { return normals.empty() ? nullptr : &normals[0]; } + const Vec2* getUVs(int index = 0) const override { return index < 0 || index >= s_uvs_max || uvs[index].empty() ? nullptr : &uvs[index][0]; } + const Vec4* getColors() const override { return colors.empty() ? nullptr : &colors[0]; } + const Vec3* getTangents() const override { return tangents.empty() ? nullptr : &tangents[0]; } + const Skin* getSkin() const override { return skin; } + const BlendShape* getBlendShape() const override { return blendShape; } + const int* getMaterials() const override { return materials.empty() ? nullptr : &materials[0]; } +}; + + +Shape::Shape(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct ShapeImpl : Shape +{ + std::vector vertices; + std::vector normals; + + ShapeImpl(const Scene& _scene, const IElement& _element) + : Shape(_scene, _element) + { + } + + + bool postprocess(GeometryImpl* geom, Allocator& allocator); + + + Type getType() const override { return Type::SHAPE; } + int getVertexCount() const override { return (int)vertices.size(); } + const Vec3* getVertices() const override { return &vertices[0]; } + const Vec3* getNormals() const override { return normals.empty() ? nullptr : &normals[0]; } +}; + + +Cluster::Cluster(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct ClusterImpl : Cluster +{ + ClusterImpl(const Scene& _scene, const IElement& _element) + : Cluster(_scene, _element) + { + } + + const int* getIndices() const override { return &indices[0]; } + int getIndicesCount() const override { return (int)indices.size(); } + const double* getWeights() const override { return &weights[0]; } + int getWeightsCount() const override { return (int)weights.size(); } + Matrix getTransformMatrix() const override { return transform_matrix; } + Matrix getTransformLinkMatrix() const override { return transform_link_matrix; } + Object* getLink() const override { return link; } + + + bool postprocess(Allocator& allocator) + { + assert(skin); + + GeometryImpl* geom = (GeometryImpl*)skin->resolveObjectLinkReverse(Object::Type::GEOMETRY); + if (!geom) return false; + + allocator.int_tmp.clear(); // old indices + const Element* indexes = findChild((const Element&)element, "Indexes"); + if (indexes && indexes->first_property) + { + if (!parseBinaryArray(*indexes->first_property, &allocator.int_tmp)) return false; + } + + allocator.double_tmp.clear(); // old weights + const Element* weights_el = findChild((const Element&)element, "Weights"); + if (weights_el && weights_el->first_property) + { + if (!parseBinaryArray(*weights_el->first_property, &allocator.double_tmp)) return false; + } + + if (allocator.int_tmp.size() != allocator.double_tmp.size()) return false; + + indices.reserve(allocator.int_tmp.size()); + weights.reserve(allocator.int_tmp.size()); + int* ir = allocator.int_tmp.empty() ? nullptr : &allocator.int_tmp[0]; + double* wr = allocator.double_tmp.empty() ? nullptr : &allocator.double_tmp[0]; + for (int i = 0, c = (int)allocator.int_tmp.size(); i < c; ++i) + { + int old_idx = ir[i]; + double w = wr[i]; + GeometryImpl::NewVertex* n = &geom->to_new_vertices[old_idx]; + if (n->index == -1) continue; // skip vertices which aren't indexed. + while (n) + { + indices.push_back(n->index); + weights.push_back(w); + n = n->next; + } + } + + return true; + } + + + Object* link = nullptr; + Skin* skin = nullptr; + std::vector indices; + std::vector weights; + Matrix transform_matrix; + Matrix transform_link_matrix; + Type getType() const override { return Type::CLUSTER; } +}; + + +AnimationStack::AnimationStack(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +AnimationLayer::AnimationLayer(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +AnimationCurve::AnimationCurve(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +AnimationCurveNode::AnimationCurveNode(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct AnimationStackImpl : AnimationStack +{ + AnimationStackImpl(const Scene& _scene, const IElement& _element) + : AnimationStack(_scene, _element) + { + } + + + const AnimationLayer* getLayer(int index) const override + { + return resolveObjectLink(index); + } + + + Type getType() const override { return Type::ANIMATION_STACK; } +}; + + +struct AnimationCurveImpl : AnimationCurve +{ + AnimationCurveImpl(const Scene& _scene, const IElement& _element) + : AnimationCurve(_scene, _element) + { + } + + int getKeyCount() const override { return (int)times.size(); } + const i64* getKeyTime() const override { return ×[0]; } + const float* getKeyValue() const override { return &values[0]; } + + std::vector times; + std::vector values; + Type getType() const override { return Type::ANIMATION_CURVE; } +}; + + +Skin::Skin(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct SkinImpl : Skin +{ + SkinImpl(const Scene& _scene, const IElement& _element) + : Skin(_scene, _element) + { + } + + int getClusterCount() const override { return (int)clusters.size(); } + const Cluster* getCluster(int idx) const override { return clusters[idx]; } + + Type getType() const override { return Type::SKIN; } + + std::vector clusters; +}; + + +BlendShapeChannel::BlendShapeChannel(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct BlendShapeChannelImpl : BlendShapeChannel +{ + BlendShapeChannelImpl(const Scene& _scene, const IElement& _element) + : BlendShapeChannel(_scene, _element) + { + } + + double getDeformPercent() const override { return deformPercent; } + int getShapeCount() const override { return (int)shapes.size(); } + const Shape* getShape(int idx) const override { return shapes[idx]; } + + Type getType() const override { return Type::BLEND_SHAPE_CHANNEL; } + + bool postprocess(Allocator& allocator) + { + assert(blendShape); + + GeometryImpl* geom = (GeometryImpl*)blendShape->resolveObjectLinkReverse(Object::Type::GEOMETRY); + if (!geom) return false; + + const Element* deform_percent_el = findChild((const Element&)element, "DeformPercent"); + if (deform_percent_el && deform_percent_el->first_property) + { + if (!parseDouble(*deform_percent_el->first_property, &deformPercent)) return false; + } + + const Element* full_weights_el = findChild((const Element&)element, "FullWeights"); + if (full_weights_el && full_weights_el->first_property) + { + if (!parseBinaryArray(*full_weights_el->first_property, &fullWeights)) return false; + } + + for (int i = 0; i < shapes.size(); i++) + { + auto shape = (ShapeImpl*)shapes[i]; + if (!shape->postprocess(geom, allocator)) return false; + } + + return true; + } + + + BlendShape* blendShape = nullptr; + double deformPercent = 0; + std::vector fullWeights; + std::vector shapes; +}; + + +BlendShape::BlendShape(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct BlendShapeImpl : BlendShape +{ + BlendShapeImpl(const Scene& _scene, const IElement& _element) + : BlendShape(_scene, _element) + { + } + + int getBlendShapeChannelCount() const override { return (int)blendShapeChannels.size(); } + const BlendShapeChannel* getBlendShapeChannel(int idx) const override { return blendShapeChannels[idx]; } + + Type getType() const override { return Type::BLEND_SHAPE; } + + std::vector blendShapeChannels; +}; + + +Texture::Texture(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +Pose::Pose(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) +{ +} + + +struct PoseImpl : Pose +{ + PoseImpl(const Scene& _scene, const IElement& _element) + : Pose(_scene, _element) + { + } + + bool postprocess(Scene* scene); + + + Matrix getMatrix() const override { return matrix; } + const Object* getNode() const override { return node; } + + Type getType() const override { return Type::POSE; } + + Matrix matrix; + Object* node = nullptr; + DataView node_id; +}; + + +struct TextureImpl : Texture +{ + TextureImpl(const Scene& _scene, const IElement& _element) + : Texture(_scene, _element) + { + } + + DataView getRelativeFileName() const override { return relative_filename; } + DataView getFileName() const override { return filename; } + DataView getEmbeddedData() const override; + + DataView media; + DataView filename; + DataView relative_filename; + Type getType() const override { return Type::TEXTURE; } +}; + + +struct Root : Object +{ + Root(const Scene& _scene, const IElement& _element) + : Object(_scene, _element) + { + copyString(name, "RootNode"); + is_node = true; + } + Type getType() const override { return Type::ROOT; } +}; + + +struct Scene : IScene +{ + struct Connection + { + enum Type + { + OBJECT_OBJECT, + OBJECT_PROPERTY + }; + + Type type = OBJECT_OBJECT; + u64 from = 0; + u64 to = 0; + DataView property; + }; + + struct ObjectPair + { + const Element* element; + Object* object; + }; + + + int getAnimationStackCount() const override { return (int)m_animation_stacks.size(); } + int getMeshCount() const override { return (int)m_meshes.size(); } + float getSceneFrameRate() const override { return m_scene_frame_rate; } + const GlobalSettings* getGlobalSettings() const override { return &m_settings; } + + const Object* const* getAllObjects() const override { return m_all_objects.empty() ? nullptr : &m_all_objects[0]; } + + + int getAllObjectCount() const override { return (int)m_all_objects.size(); } + + int getEmbeddedDataCount() const override { + return (int)m_videos.size(); + } + + DataView getEmbeddedData(int index) const override { + return m_videos[index].content; + } + + DataView getEmbeddedFilename(int index) const override { + return m_videos[index].filename; + } + + const AnimationStack* getAnimationStack(int index) const override + { + assert(index >= 0); + assert(index < m_animation_stacks.size()); + return m_animation_stacks[index]; + } + + + const Mesh* getMesh(int index) const override + { + assert(index >= 0); + assert(index < m_meshes.size()); + return m_meshes[index]; + } + + + const TakeInfo* getTakeInfo(const char* name) const override + { + for (const TakeInfo& info : m_take_infos) + { + if (info.name == name) return &info; + } + return nullptr; + } + + + const IElement* getRootElement() const override { return m_root_element; } + const Object* getRoot() const override { return m_root; } + + + void destroy() override { delete this; } + + + ~Scene() override + { + for(auto ptr : m_all_objects) + ptr->~Object(); + } + + + Element* m_root_element = nullptr; + Root* m_root = nullptr; + float m_scene_frame_rate = -1; + GlobalSettings m_settings; + std::unordered_map m_object_map; + std::vector m_all_objects; + std::vector m_meshes; + std::vector m_animation_stacks; + std::vector m_connections; + std::vector m_data; + std::vector m_take_infos; + std::vector