diff --git a/.hgignore b/.hgignore
old mode 100644
new mode 100755
diff --git a/.hgtags b/.hgtags
old mode 100644
new mode 100755
index c3cfbeb4f7397920a85d8e6aaa3f92e3bd08ded2..c614db0d3e6ab5e840e5da4ec22102591b78b4be
--- a/.hgtags
+++ b/.hgtags
@@ -72,35 +72,35 @@ b53a0576eec80614d7767ed72b40ed67aeff27c9 DRTVWR-38_2.5.2-release
 461c8c65b5c799ddfe365422f9be9c0095d91e7d 2.6.0-beta1-tip
 9e4641f4a7870c0f565a25a2971368d5a29516a1 2.6.0-beta2
 9e4641f4a7870c0f565a25a2971368d5a29516a1 DRTVWR-41_2.6.0-beta2
+42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
+42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
 c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-beta1
 c5bdef3aaa2744626aef3c217ce29e1900d357b3 2.6.1-start
 c5bdef3aaa2744626aef3c217ce29e1900d357b3 DRTVWR-43_2.6.1-beta1
+c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
+c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
 56b2778c743c2a964d82e1caf11084d76a87de2c 2.6.2-start
 d1203046bb653b763f835b04d184646949d8dd5c 2.6.2-beta1
 d1203046bb653b763f835b04d184646949d8dd5c DRTVWR-45_2.6.2-beta1
-42f32494bac475d0737799346f6831558ae8bf5d 2.6.0-release
-42f32494bac475d0737799346f6831558ae8bf5d DRTVWR-39_2.6.0-release
-c9182ed77d427c759cfacf49a7b71a2e20d522aa 2.6.1-release
-c9182ed77d427c759cfacf49a7b71a2e20d522aa DRTVWR-42_2.6.1-release
+214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
+214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
 52b2263ab28f0976c689fd0b76c55a9eb027cdbf end-of-develop.py
 ec32f1045e7c2644015245df3a9933620aa194b8 2.6.3-start
 d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc 2.6.3-beta1
 d7fcefabdf32bb61a9ea6d6037c1bb26190a85bc DRTVWR-47_2.6.3-beta1
 0630e977504af5ea320c58d33cae4e1ddee793e9 2.6.3-beta2
 0630e977504af5ea320c58d33cae4e1ddee793e9 DRTVWR-48_2.6.3-beta2
+8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
+8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
 3178e311da3a8739a85363665006ea3c4610cad4 dons-headless-hackathon-work
-214180ad5714ce8392b82bbebcc92f4babd98300 2.6.2-release
-214180ad5714ce8392b82bbebcc92f4babd98300 DRTVWR-44_2.6.2-release
 7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd 2.6.5-beta1
 7db558aaa7c176f2022b3e9cfe38ac72f6d1fccd DRTVWR-50_2.6.5-beta1
-8f2da1701c81a62352df2b8d413d27fb2cade9a6 2.6.3-release
-8f2da1701c81a62352df2b8d413d27fb2cade9a6 DRTVWR-46_2.6.3-release
 800cefce8d364ffdd2f383cbecb91294da3ea424 2.6.6-start
 bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 2.6.6-beta1
 bb1075286b3b147b1dae2e3d6b2d56f04ff03f35 DRTVWR-52_2.6.6-beta1
-5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
 dac76a711da5f1489a01c1fa62ec97d99c25736d 2.6.6-release
 dac76a711da5f1489a01c1fa62ec97d99c25736d DRTVWR-51_2.6.6-release
+5e349dbe9cc84ea5795af8aeb6d473a0af9d4953 2.6.8-start
 beafa8a9bd1d1b670b7523d865204dc4a4b38eef 2.6.8-beta1
 beafa8a9bd1d1b670b7523d865204dc4a4b38eef DRTVWR-55_2.6.8-beta1
 be2000b946f8cb3de5f44b2d419287d4c48ec4eb 2.6.8-release
@@ -119,50 +119,50 @@ e67da2c6e3125966dd49eef98b36317afac1fcfe 2.6.9-start
 9f79a6ed8fdcd2f3dac33ea6b3236eeb278dccfe 2.7.2-start
 e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb 2.7.2-beta1
 e0dc8b741eaa27dcdfbc9e956bb2579b954d15eb DRTVWR-63_2.7.2-beta1
-6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
 fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.1-release
 fe3a8e7973072ea62043c08b19b66626c1a720eb 2.7.2-release
 fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-60_2.7.1-release
 fe3a8e7973072ea62043c08b19b66626c1a720eb DRTVWR-62_2.7.2-release
+6a3e7e403bd19e45fdfc2fcc716867af3ab80861 2.7.3-start
 6af10678de4736222b2c3f7e010e984fb5b327de 2.7.4-start
 be963a4eef635542f9617d7f5fd22ba48fb71958 2.7.4-beta1
 be963a4eef635542f9617d7f5fd22ba48fb71958 DRTVWR-67_2.7.4-beta1
+057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
+057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
 19a498fa62570f352d7d246f17e3c81cc1d82d8b 2.7.5-start
 09984bfa6cae17e0f72d02b75c1b7393c65eecfc 2.7.5-beta1
 09984bfa6cae17e0f72d02b75c1b7393c65eecfc DRTVWR-69_2.7.5-beta1
+6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
+6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
 e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-beta1
 e1ed60913230dd64269a7f7fc52cbc6004f6d52c 2.8.0-start
 e1ed60913230dd64269a7f7fc52cbc6004f6d52c DRTVWR-71_2.8.0-beta1
-057f319dd8eccdf63a54d99686c68cdcb31b6abc 2.7.4-release
-057f319dd8eccdf63a54d99686c68cdcb31b6abc DRTVWR-66_2.7.4-release
-6866d9df6efbd441c66451debd376d21211de39c 2.7.5-release
-6866d9df6efbd441c66451debd376d21211de39c DRTVWR-68_2.7.5-release
+493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release
+493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
 502f6a5deca9365ddae57db4f1e30172668e171e 2.8.1-start
 2c7e459e0c883f8e406b932e41e60097e9ee077e 2.8.1-beta1
 2c7e459e0c883f8e406b932e41e60097e9ee077e DRTVWR-73_2.8.1-beta1
-493d9127ee50e84ba08a736a65a23ca86f7a5b01 2.8.0-release
-493d9127ee50e84ba08a736a65a23ca86f7a5b01 DRTVWR-70_2.8.0-release
-54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start
-ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start
 29e93d7e19991011bd12b5748142b11a5dcb4370 2.8.1-release
 29e93d7e19991011bd12b5748142b11a5dcb4370 DRTVWR-72_2.8.1-release
 4780e3bd2b3042f91be3426151f28c30d199bb3b 2.8.1-hotfix
 4780e3bd2b3042f91be3426151f28c30d199bb3b DRTVWR-76_2.8.1-hotfix
+54bc7823ad4e3a436fef79710f685a7372bbf795 2.8.2-start
+ac0f1a132d35c02a58861d37cca75b0429ac9137 2.8.3-start
 599677276b227357140dda35bea4a2c18e2e67b5 2.8.3-beta1
 599677276b227357140dda35bea4a2c18e2e67b5 DRTVWR-75_2.8.3-beta1
+fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release
+fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
 6b678ea52f90d5c14181661dcd2546e25bde483e 3.0.0-start
 b0be6ce3adfef3a014a2389d360539f8a86c5439 3.0.0-beta1
 b0be6ce3adfef3a014a2389d360539f8a86c5439 DRTVWR-78_3.0.0-beta1
-fb85792b84bf28428889c4cc966469d92e5dac4c 2.8.3-release
-fb85792b84bf28428889c4cc966469d92e5dac4c DRTVWR-74_2.8.3-release
+1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
+1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release
 82a2079ffcb57ecb1b3849cb41376b443e1eb912 3.0.1-start
 364fd63517fbacbbcb9129d096187171ba8c9e48 3.0.1-beta1
 364fd63517fbacbbcb9129d096187171ba8c9e48 DRTVWR-81_3.0.1-beta1
 f2412ecd6740803ea9452f1d17fd872e263a0df7 3.0.2-start
 42784bf50fa01974bada2a1af3892ee09c93fcda 3.0.2-beta1
 42784bf50fa01974bada2a1af3892ee09c93fcda DRTVWR-83_3.0.2-beta1
-1778f26b6d0ae762dec3ca37140f66620f2485d9 3.0.0-release
-1778f26b6d0ae762dec3ca37140f66620f2485d9 DRTVWR-77_3.0.0-release
 e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e 3.0.2-beta2
 e5c9af2d7980a99a71650be3a0cf7b2b3c3b897e DRTVWR-86_3.0.2-beta2
 b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start
@@ -170,9 +170,9 @@ b95ddac176ac944efdc85cbee94ac2e1eab44c79 3.0.3-start
 6694f3f062aa45f64ab391d25a3eb3d5eb1b0871 DRTVWR-85_3.0.3-beta1
 61aa7974df089e8621fe9a4c69bcdefdb3cc208a 3.0.3-beta2
 61aa7974df089e8621fe9a4c69bcdefdb3cc208a DRTVWR-89_3.0.3-beta2
-586907287be581817b2422b5137971b22d54ea48 3.0.4-start
 0496d2f74043cf4e6058e76ac3db03d44cff42ce 3.0.3-release
 0496d2f74043cf4e6058e76ac3db03d44cff42ce DRTVWR-84_3.0.3-release
+586907287be581817b2422b5137971b22d54ea48 3.0.4-start
 92a3aa04775438226399b19deee12ac3b5a62838 3.0.5-start
 c7282e59f374ee904bd793c3c444455e3399b0c5 3.1.0-start
 2657fa785bbfac115852c41bd0adaff74c2ad5da 3.1.0-beta1
@@ -193,11 +193,11 @@ e440cd1dfbd128d7d5467019e497f7f803640ad6 DRTVWR-95_3.2.0-beta1
 c4911ec8cd81e676dfd2af438b3e065407a94a7a 3.2.1-start
 9e390d76807fa70d356b8716fb83b8ce42a629ef 3.2.1-beta1
 9e390d76807fa70d356b8716fb83b8ce42a629ef DRTVWR-100_3.2.1-beta1
+a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
+a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
 40b46edba007d15d0059c80864b708b99c1da368 3.2.2-start
 523df3e67378541498d516d52af4402176a26bac 3.2.2-beta1
 523df3e67378541498d516d52af4402176a26bac DRTVWR-102_3.2.2-beta1
-a8c7030d6845186fac7c188be4323a0e887b4184 3.2.1-release
-a8c7030d6845186fac7c188be4323a0e887b4184 DRTVWR-99_3.2.1-release
 80f3e30d8aa4d8f674a48bd742aaa6d8e9eae0b5 3.2.3-start
 3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-beta1
 3fe994349fae64fc40874bb59db387131eb35a41 3.2.4-start
@@ -279,6 +279,10 @@ a8057e1b9a1246b434a27405be35e030f7d28b0c 3.3.4-beta3
 9cd174d3a54d93d409a7c346a15b8bfb40fc58f4 DRTVWR-184
 ab2ffc547c8a8950ff187c4f6c95e5334fab597b 3.3.4-beta5
 28e100d0379a2b0710c57647a28fc5239d3d7b99 3.3.4-release
+6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199
+7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2
+8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207
+351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3
 005dfe5c4c377207d065fb27858d2eb0b53b143a DRTVWR-167
 888768f162d2c0a8de1dcc5fb9a08bd8bd120a6b DRTVWR-175
 a8b3eca451a9eaab59987efb0ab1c4217e3f2dcc DRTVWR-182
@@ -294,13 +298,9 @@ ae5c83dd61d2d37c45f1d5b8bf2b036d87599f1b DRTVWR-198
 b1dbb1a83f48f93f6f878cff9e52d2cb635e145c 3.4.0-beta2
 37402e2b19af970d51b0a814d79892cc5647532b DRTVWR-200
 182a9bf30e81070361bb020a78003b1cf398e79c 3.4.0-beta3
-6dfb0fba782c9233dd95f24ec48146db0d3f210b DRTVWR-199
-7c9102fb998885621919f2474a002c35b583539b 3.3.4-release2
 7649a3dff5ec22d3727377e5f02efd0f421e4cb5 DRTVWR-201
 84fb70dfe3444e75a44fb4bee43e2fc8221cebdd 3.4.0-beta4
 573e863be2f26d3687161def4b9fea9b7038dda8 3.4.0-beta5
-8c9085066c78ed5f6c9379dc054c82a6fcdb1851 DRTVWR-207
-351eea5f9dc192fc5ddea3b02958de97677a0a12 3.3.4-release3
 af7b28e75bd5a629cd9e0dc46fb3f1757626f493 DRTVWR-212
 015012c2b740ccdec8a8c3d6e5f898449ecfe0b8 DRTVWR-213
 62b07aa81b1957897c3846292bb9412977b0af6c 3.3.4-beta6
@@ -434,12 +434,31 @@ fd6b510e83f56830e45670c428653134899d3e25 DRTVWR-305
 902caf2b9fdbdbc5c399c4d5ebcecaf9cb97bab8 DRTVWR-306
 5c6098fd17d40ee3a38ca6b64f6be9db7f61f0a8 3.5.0-beta7
 adc360e6bf21390d2665380951d85937cd29a604 3.5.0-release
-0ca3910763cec967703e45bc6208a325dccb9f95 3.5.1-beta1
 1ada73295ed0eaa4a772ef079c29f57069342c32 DRTVWR-310
-0ca3910763cec967703e45bc6208a325dccb9f95 3.5.1-beta1
 20cdf370f5c8be6193bef6fb3a81cc3f81275191 3.5.1-beta1
 2319904200de367646b9a9442239a38d52c1eeb5 DRTVWR-313
 9d8726eca785acad694564516f16dd639faf45c0 3.5.1-beta2
 4b7fa963b80e2056ab648f83a4d61310b3cedb3d DRTVWR-314
 65ae89aeb7ea674a555e439e963f17949322ac94 3.5.1-beta3
 13149a524874b608aeb76325b35faff113a5ea53 3.5.1-release
+78a8fe6abf331944d6b6bb1ce1024a6bc08141f4 DRTVWR-298
+50ccc12f38c3c99f03b374e32429cb043b73e2a6 DRTVWR-294
+c2b1066514308dff1eeb91162392dfe08bf1c0fe DRTVWR-309
+e6b8a92acffd693cd1459e4212e3dff1050acf67 DRTVWR-278
+106f19cc011aafdfc9a6d12b641fe8db6e9735a7 3.5.2-beta1
+509b97acc4ca1f2644197f1b555773ac0bb6838c 3.5.2-beta2
+6cb3689d89c13876ce8fa8faefa7b05e4279502d DRTVWR-316
+cfc3e650e5b2063288e7b832e9c9f521bbdacc92 DRTVWR-315
+e6e35501f1fea252ef83080adcf30c3cb7c2f75c DRTVWR-299
+b6a4ac8f1916ede76e8a023e1cf35c045d0ac707 3.5.2-beta3
+a314f1c94374ab1f6633dd2983f7090a68663eb2 3.5.2-beta4
+1cfa86d604909dfdb8b372069ff61f9afaa2aac1 MAINT-2647
+895628bb5e162410cfdf4bca58f0a57d22ccfcde 3.5.2-beta5
+9013c07bfe1c51107233f1924dccdcc5057dd909 3.5.2-beta6
+9b1b6f33aa5394b27bb652b31b5cb81ef6060370 3.5.2-release
+a277b841729f2a62ba1e34acacc964bc13c1ad6f 3.5.3-release
+fb1630153bac5552046ea914af3f14deabc1def8 3.6.0-materials-beta1
+69429d81ae4dd321eda2607901ef0a0fde71b54c 3.6.0-release
+69429d81ae4dd321eda2607901ef0a0fde71b54c 3.6.0-release
+0a56f33ad6aa112032b14a41dad759ad377bdde9 3.6.0-release
+75cf8e855ae1af6895a35da475314c2b5acf1850 3.6.1-release
diff --git a/BuildParams b/BuildParams
old mode 100644
new mode 100755
index c929c2d90d1a9ea1db0adfef985e8a5e627a13ba..84d30f651bad54782baf50b8fb0f3dcb4e8c4900
--- a/BuildParams
+++ b/BuildParams
@@ -26,40 +26,36 @@ codeticket_since = 3.3.0-release
 Linux.gcc_version = /usr/bin/gcc-4.6
 Linux.cxx_version = /usr/bin/g++-4.6
 
-# ========================================
-# Viewer Development
-# ========================================
+################################################################
+####      Examples of how to set the viewer_channel         ####
+#
+# To build a Release or Release candidate in build bingo:
+#    bingo.viewer_channel = "Second Life Release"
+#
+# To build a Beta for the 'Bingo' project in build bingo:
+#    bingo.viewer_channel = "Second Life Beta Bingo"
+#
+# To build a Project viewer for the 'Bingo' project in build bingo:
+#    bingo.viewer_channel = "Second Life Project Bingo"
+#
+# If left unset, viewer_channel defaults to 'Second Life Test',
+# which is appropriate for individual developer builds.
+#
+# All Linden Lab builds (and only Linden Lab builds)
+# should use a viewer_channel that begins with "Second Life"
+################################################################
+viewer_channel = "Second Life Test"
 
 # Report changes since...
 viewer-development.show_changes_since = last_sprint
 
 # Build Settings
-viewer-development_coverity.coverity_product = viewer
-viewer-development_coverity.run_tests = false
 viewer-development.build_debug_release_separately = true
 
 # Notifications - to configure email notices, add a setting like this:
 # <username>_<reponame>.email = <email-address>
 
-
-# =================================================================
-# Canonical viewer integration builds - Oz Linden
-# =================================================================
-integration_viewer-development.viewer_channel = "Second Life Development"
-integration_viewer-development.login_channel = "Second Life Development"
-integration_viewer-development.build_viewer_update_version_manager = false
-integration_viewer-development.email = viewer-development-builds@lists.secondlife.com
-integration_viewer-development.build_enforce_coding_policy = false
-integration_viewer-development.codeticket_add_context = false
-
-viewer-beta.viewer_channel = "Second Life Beta Viewer"
-viewer-beta.login_channel = "Second Life Beta Viewer"
-viewer-beta.build_debug_release_separately = true
-viewer-beta.build_viewer_update_version_manager = true
-viewer-beta.codeticket_add_context = false
-
 viewer-release.viewer_channel = "Second Life Release"
-viewer-release.login_channel = "Second Life Release"
 viewer-release.build_debug_release_separately = true
 viewer-release.build_viewer_update_version_manager = true
 viewer-release.codeticket_add_context = false
@@ -69,7 +65,6 @@ viewer-release.codeticket_add_context = false
 # mesh-development
 # ========================================
 mesh-development.viewer_channel = "Project Viewer - Mesh"
-mesh-development.login_channel = "Project Viewer - Mesh"
 mesh-development.viewer_grid = aditi
 mesh-development.build_debug_release_separately = true
 mesh-development.build_CYGWIN_Debug = false
@@ -79,7 +74,6 @@ mesh-development.build_viewer_update_version_manager = false
 # mesh-development-release-1-candidate
 # ========================================
 mesh-development-release-1-candidate.viewer_channel = "Project Viewer - Mesh"
-mesh-development-release-1-candidate.login_channel = "Project Viewer - Mesh"
 mesh-development-release-1-candidate.viewer_grid = agni
 mesh-development-release-1-candidate.build_debug_release_separately = true
 mesh-development-release-1-candidate.build_CYGWIN_Debug = false
@@ -89,7 +83,6 @@ mesh-development-release-1-candidate.build_viewer_update_version_manager = false
 # mesh-development-rc
 # ========================================
 mesh-development-rc.viewer_channel = "Project Viewer - Mesh"
-mesh-development-rc.login_channel = "Project Viewer - Mesh"
 mesh-development-rc.viewer_grid = agni
 mesh-development-rc.build_debug_release_separately = true
 mesh-development-rc.build_CYGWIN_Debug = false
@@ -99,7 +92,6 @@ mesh-development-rc.build_viewer_update_version_manager = false
 # mesh-asset-deprecation
 # ========================================
 mesh-asset-deprecation.viewer_channel = "Project Viewer - Mesh Asset Deprecation"
-mesh-asset-deprecation.login_channel = "Project Viewer - Mesh Asset Deprecation"
 mesh-asset-deprecation.viewer_grid = aditi
 mesh-asset-deprecation.build_debug_release_separately = true
 mesh-asset-deprecation.build_CYGWIN_Debug = false
@@ -117,7 +109,6 @@ viewer-mesh.build_viewer_update_version_manager = false
 viewer-mesh.build_Debug = false
 viewer-mesh.build_RelWithDebInfo = false
 viewer-mesh.viewer_channel = "Project Viewer - Mesh"
-viewer-mesh.login_channel = "Project Viewer - Mesh"
 viewer-mesh.viewer_grid = aditi
 viewer-mesh.email = shining@lists.lindenlab.com
 
@@ -126,13 +117,20 @@ viewer-mesh.email = shining@lists.lindenlab.com
 # ========================================
 
 viewer-pathfinding.viewer_channel = "Project Viewer - Pathfinding"
-viewer-pathfinding.login_channel = "Project Viewer - Pathfinding"
 viewer-pathfinding.viewer_grid = agni
 viewer-pathfinding.build_debug_release_separately = true
 viewer-pathfinding.build_CYGWIN_Debug = false
 viewer-pathfinding.build_viewer_update_version_manager = false
 
 # ========================================
+# viewer-materials
+# ========================================
+
+viewer-materials.viewer_channel = "Second Life Beta Materials"
+viewer-materials.build_debug_release_separately = true
+viewer-materials.build_CYGWIN_Debug = false
+viewer-materials.build_viewer_update_version_manager = false
+
 # viewer-chui
 #
 # ========================================
@@ -148,14 +146,12 @@ viewer-chui.build_viewer_update_version_manager = false
 # asset delivery 2010 projects
 # =================================================================
 viewer-asset-delivery.viewer_channel = "Second Life Development"
-viewer-asset-delivery.login_channel = "Second Life Development"
 viewer-asset-delivery.build_viewer_update_version_manager = false
 viewer-asset-delivery.email = monty@lindenlab.com
 viewer-asset-delivery.build_server = false
 viewer-asset-delivery.build_server_tests = false
 
 viewer-asset-delivery-metrics.viewer_channel = "Second Life Development"
-viewer-asset-delivery-metrics.login_channel = "Second Life Development"
 viewer-asset-delivery-metrics.build_viewer_update_version_manager = false
 viewer-asset-delivery-metrics.email = monty@lindenlab.com
 viewer-asset-delivery-metrics.build_server = false
@@ -172,34 +168,29 @@ simon_viewer-dev-private.email_status_this_is_os = false
 # Vir
 # ========================================
 vir-project-1.viewer_channel = "Second Life Release"
-vir-project-1.login_channel = "Second Life Release"
 
 # ========================================
 # THX-1138 / Runway projects
 # ========================================
 viewer-thx1138-runway-shared.viewer_channel = "Project Viewer - THX-1138 Runway"
-viewer-thx1138-runway-shared.login_channel = "Project Viewer - THX-1138 Runway"
 viewer-thx1138-runway-shared.viewer_grid = uma
 viewer-thx1138-runway-shared.build_debug_release_separately = true
 viewer-thx1138-runway-shared.build_CYGWIN_Debug = false
 viewer-thx1138-runway-shared.build_viewer_update_version_manager = false
 
 viewer-thx1138.viewer_channel = "Project Viewer - THX-1138"
-viewer-thx1138.login_channel = "Project Viewer - THX-1138"
 viewer-thx1138.viewer_grid = uma
 viewer-thx1138.build_debug_release_separately = true
 viewer-thx1138.build_CYGWIN_Debug = false
 viewer-thx1138.build_viewer_update_version_manager = false
 
 runway-merge.viewer_channel = "Project Viewer - Runway Merge"
-runway-merge.login_channel = "Project Viewer - Runway Merge"
 runway-merge.viewer_grid = agni
 runway-merge.build_debug_release_separately = true
 runway-merge.build_CYGWIN_Debug = false
 runway-merge.build_viewer_update_version_manager = false
 
 runway.viewer_channel = "Project Viewer - Runway"
-runway.login_channel = "Project Viewer - Runway"
 runway.viewer_grid = agni
 runway.build_debug_release_separately = true
 runway.build_CYGWIN_Debug = false
@@ -207,3 +198,5 @@ runway.build_viewer_update_version_manager = false
 
 
 # eof
+
+
diff --git a/NORSPEC-207.patch b/NORSPEC-207.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a1c1447bdab6fdb46bd916532862eedb00bc36e0
--- /dev/null
+++ b/NORSPEC-207.patch
@@ -0,0 +1,164 @@
+diff -r fe4bab01522e indra/llprimitive/llrendermaterialtable.cpp
+--- a/indra/llprimitive/llrendermaterialtable.cpp	Wed May 15 17:57:21 2013 +0000
++++ b/indra/llprimitive/llrendermaterialtable.cpp	Wed May 22 14:23:04 2013 -0700
+@@ -184,6 +184,44 @@
+ 	}
+ }
+ 
++// 'v' is an integer value for 100ths of radians (don't ask...)
++//
++void LLRenderMaterialEntry::LLRenderMaterial::setSpecularMapRotation(S32 v) const
++{
++	// Store the fact that we're using the new rotation rep
++	//
++	m_flags |= kNewSpecularMapRotation;
++
++	// Store 'sign bit' in our m_flags
++	//
++	m_flags &= ~kSpecularMapRotationNegative;
++	m_flags |= (specularMapRotation < 0) ? kSpecularMapRotationNegative : 0;
++
++	specularRotation = abs(specularRotation);
++	specularRotation = llmin(specularRotation, MAX_MATERIAL_MAP_ROTATION);
++
++	m_specularRotation = (U16)(abs(specularMapRotation));
++}
++
++// 'v' is an integer value for 100ths of radians (don't ask...)
++//
++void LLRenderMaterialEntry::LLRenderMaterial::setNormalMapRotation(S32 v) const
++{
++
++	// Store the fact that we're using the new rep for this material
++	//
++	m_flags |= kNewNormalMapRotation;
++
++	// Store 'sign bit' in our m_flags
++	//
++	m_flags &= ~kNormalMapRotationNegative;
++	m_flags |= (normalMapRotation < 0) ? kNormalMapRotationNegative : 0;
++
++	normalRotation = abs(normalRotation);
++	normalRotation = llmin(normalRotation, MAX_MATERIAL_MAP_ROTATION);
++
++	m_normalRotation = (U16)(abs(normalMapRotation));
++}
+ 
+ void LLRenderMaterialEntry::LLRenderMaterial::asLLSD( LLSD& dest ) const
+ {
+@@ -193,20 +231,45 @@
+ 	dest["NormOffsetY"] = (S32)m_normalOffsetY;
+ 	dest["NormRepeatX"] = m_normalRepeatX;
+ 	dest["NormRepeatY"] = m_normalRepeatY;
+-	dest["NormRotation"] = (S32)m_normalRotation;
++
++	S32 value = (S32)m_normalMapRotation;
++
++	// If we don't have the flag for new rotations set,
++	// then we need to convert it now
++	if (!(m_flags & kNewNormalMapRotation))
++	{
++		F32 old_radians = ((F32)m_normalMapRotation / 10000.0f)
++		S32 new_val	    = (S32)(old_radians * 100.0f);
++		setNormalMapRotation(new_Val);
++	}
++
++	dest["NormRotation"] = (m_flags & kNormalMapRotationNegative) ? -(S32)m_normalRotation : (S32)m_normalRotation;
+ 
+ 	dest["SpecOffsetX"] = (S32)m_specularOffsetX;
+ 	dest["SpecOffsetY"] = (S32)m_specularOffsetY;
+ 	dest["SpecRepeatX"] = m_specularRepeatX;
+ 	dest["SpecRepeatY"] = m_specularRepeatY;
+-	dest["SpecRotation"] = (S32)m_specularRotation;
++
++
++	value = (S32)m_specularRotation;
++
++	// If we don't have the flag for new rotations set,
++	// then we need to convert it now
++	if (!(m_flags & kNewSpecularMapRotation))
++	{
++		F32 old_radians = ((F32)m_specularMapRotation / 10000.0f)
++		S32 new_val	    = (S32)(old_radians * 100.0f);
++		setSpecularMapRotation(new_Val);
++	}
++
++	dest["SpecRotation"] = (m_flags & kSpecularMapRotationNegative) ? -(S32)m_specularRotation : (S32)m_specularRotation;
+ 
+ 	dest["SpecMap"] = m_specularMap;
+ 	dest["SpecColor"] = m_specularLightColor.getValue();
+ 	dest["SpecExp"] = (S32)m_specularLightExponent;
+ 	dest["EnvIntensity"] = (S32)m_environmentIntensity;
+ 	dest["AlphaMaskCutoff"] = (S32)m_alphaMaskCutoff;
+-	dest["DiffuseAlphaMode"] = (S32)m_diffuseAlphaMode;
++	dest["DiffuseAlphaMode"] = (S32)(m_diffuseAlphaMode & 0xF);
+ 	
+ }
+ 
+@@ -217,7 +280,10 @@
+ 	m_normalOffsetY = (U16)materialDefinition["NormOffsetY"].asInteger();
+ 	m_normalRepeatX = materialDefinition["NormRepeatX"].asInteger();
+ 	m_normalRepeatY = materialDefinition["NormRepeatY"].asInteger();
+-	m_normalRotation = (U16)materialDefinition["NormRotation"].asInteger();
++
++	S32 normalRotation = materialDefinition["NormRotation"].asInteger();
++
++	setNormalMapRotation(normalRotation);
+ 
+ 	m_specularMap = materialDefinition["SpecMap"].asUUID();
+ 
+@@ -225,7 +291,10 @@
+ 	m_specularOffsetY = (U16)materialDefinition["SpecOffsetY"].asInteger();
+ 	m_specularRepeatX = materialDefinition["SpecRepeatX"].asInteger();
+ 	m_specularRepeatY = materialDefinition["SpecRepeatY"].asInteger();
+-	m_specularRotation = (U16)materialDefinition["SpecRotation"].asInteger();
++
++	S32 specularRotation = materialDefinition["SpecRotation"].asInteger();
++
++	setSpecularMapRotation(specularRotation);
+ 
+ 	m_specularLightColor.setValue( materialDefinition["SpecColor"] );
+ 	m_specularLightExponent = (U8)materialDefinition["SpecExp"].asInteger();
+diff -r fe4bab01522e indra/llprimitive/llrendermaterialtable.h
+--- a/indra/llprimitive/llrendermaterialtable.h	Wed May 15 17:57:21 2013 +0000
++++ b/indra/llprimitive/llrendermaterialtable.h	Wed May 22 14:23:04 2013 -0700
+@@ -89,11 +89,17 @@
+ 
+ 	void computeID();
+ 
++
+ 	struct LLRenderMaterial
+ 	{
+ 		void asLLSD( LLSD& dest ) const;
+ 		void setFromLLSD( const LLSD& materialDefinition );
+ 
++		void setNormalMapRotation(S32 v);
++		void setSpecularMapRotation(S32 v);
++
++		const S32 MAX_MATERIAL_MAP_ROTATION = 62800;
++
+ 		// 36 bytes
+ 		LLUUID m_normalMap;
+ 		LLUUID m_specularMap;
+@@ -119,7 +125,20 @@
+ 		U8 m_specularLightExponent;
+ 		U8 m_environmentIntensity;
+ 		U8 m_alphaMaskCutoff;
+-		U8 m_diffuseAlphaMode;
++		U8 m_diffuseAlphaMode : 4;
++		U8 m_flags            : 4;
++	};
++
++	// Flags stored in LLRenderMaterial::m_flags to differentiate 'old' rotation format
++	// which doesn't handle negative or large rotations correctly from new format.
++	// All ancient materials will have these flags unset as the values for diffuseAlphaMode
++	// from which the bits were stolen never used more than the bottom 2 bits.
++	//
++	enum RenderMaterialFlags {
++	 kNewNormalMapRotation 		= 0x1,
++	 kNewSpecularMapRotation 	= 0x2,
++	 kNormalMapRotationNegative 	= 0x4,
++	 kSpecularMapRotationNegative   = 0x8
+ 	};
+ 
+ 	friend struct eastl::hash<LLRenderMaterial>;
diff --git a/autobuild.xml b/autobuild.xml
old mode 100644
new mode 100755
index 726003858648e209bdd22bc80d080189a13f52ba..0472eada03d795e81b334225a38e6648c0b0960d
--- a/autobuild.xml
+++ b/autobuild.xml
@@ -186,9 +186,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ac37d0038c91b0672fa31a02731f0eac</string>
+              <string>06dd7af75e1eb179aed54fd58d8688af</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Darwin/installer/boost-1.52.0-darwin-20121218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/Darwin/installer/boost-1.52.0-darwin-20130221.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -198,9 +198,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>146ed8a8c2ef8ab3f0a6c4f214fc5c22</string>
+              <string>50c8b50b7cced52cc5656fb44e9b12cf</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/Linux/installer/boost-1.52.0-linux-20121218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/Linux/installer/boost-1.52.0-linux-20130222.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -210,9 +210,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>3ea60f17d986b7e8a3351298734bdca4</string>
+              <string>742fc9675b033df7f9c6f215ff250f6c</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/268347/arch/CYGWIN/installer/boost-1.52.0-windows-20121218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-boost/rev/270698/arch/CYGWIN/installer/boost-1.52.0-windows-20130221.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -483,14 +483,14 @@
           </map>
         </map>
       </map>
-      <key>fmod</key>
+      <key>fmodex</key>
       <map>
         <key>license</key>
-        <string>fmod</string>
+        <string>fmodex</string>
         <key>license_file</key>
-        <string>LICENSES/fmod.txt</string>
+        <string>LICENSES/fmodex.txt</string>
         <key>name</key>
-        <string>fmod</string>
+        <string>fmodex</string>
         <key>platforms</key>
         <map>
           <key>darwin</key>
@@ -498,9 +498,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>61ead113e6479452e6b690c84b4e9d30</string>
+              <string>10352aab979c333a52dbad21b6e6fba9</string>
               <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Darwin/installer/fmod-3.75-darwin-20110222.tar.bz2</string>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/274403/arch/Darwin/installer/fmodex-4.44-darwin-20130419.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -510,9 +510,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>0c61d643db54d2e5999be8254569d8b3</string>
+              <string>79e45527aa9fb90b813599dff5ce01a7</string>
               <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/Linux/installer/fmod-3.75-linux-20110223.tar.bz2</string>
+              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/274378/arch/Linux/installer/fmodex-4.44-linux-20130419.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -522,9 +522,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>d9a9a6ad86895353bcd63374a4c1a91d</string>
+	      <string>91752db72202807cffb33c1ec3fd90fc</string>
               <key>url</key>
-              <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmod-private/rev/221852/arch/CYGWIN/installer/fmod-3.75-windows-20110222.tar.bz2</string>
+	      <string>http://s3-proxy.lindenlab.com/private-builds-secondlife-com/hg/repo/3p-fmodex-private/rev/276321/arch/CYGWIN/installer/fmodex-4.44-windows-20130521.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -606,9 +606,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>ca95bbdabd2bed612af79a3704fdbe79</string>
+              <string>bd6f84f9fb3c2e68850676d06935373f</string>
               <key>url</key>
-              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/265843/arch/Linux/installer/freetype-2.3.9-linux-20121013.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-freetype/rev/271684/arch/Linux/installer/freetype-2.4.4-linux-20130312.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -761,10 +761,10 @@
           <map>
             <key>archive</key>
             <map>
-              <key>hash</key>
-              <string>21babc394dbf8572830f2e85adec7b9f</string>
-              <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-darwin-20110202.tar.bz2</string>
+           <key>hash</key>
+	      <string>aff5566e04003de0383941981198e04e</string>
+          <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/Darwin/installer/google_breakpad-0.0.0-rev1099-darwin-20130329.tar.bz2</string>
             </map>
             <key>name</key>
             <string>darwin</string>
@@ -773,10 +773,10 @@
           <map>
             <key>archive</key>
             <map>
-              <key>hash</key>
-              <string>204b02a9480c411232255798839431a2</string>
-              <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-linux-20110311.tar.bz2</string>
+             <key>hash</key>
+	         <string>52257e5eb166a0b69c9c0c38f6e1920e</string>
+             <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273079/arch/Linux/installer/google_breakpad-0.0.0-rev1099-linux-20130329.tar.bz2</string>
             </map>
             <key>name</key>
             <string>linux</string>
@@ -786,9 +786,9 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>627c51136e14e64c5d39933f3abd3bdf</string>
+	      <string>d812a6dfcabe6528198a3191068dac09</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/google_breakpad-0.0.0-rev599-windows-20110218.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-breakpad/rev/273073/arch/CYGWIN/installer/google_breakpad-0.0.0-rev1099-windows-20130329.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -834,9 +834,45 @@
             <key>archive</key>
             <map>
               <key>hash</key>
-              <string>212701468920519f3989677cea9ca4f1</string>
+              <string>d2542614df9dd99cbb5ff67e76d4a6c1</string>
               <key>url</key>
-              <string>http://s3.amazonaws.com/viewer-source-downloads/install_pkgs/gmock-1.5.0-windows-20110224.tar.bz2</string>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-mock/rev/274899/arch/CYGWIN/installer/gmock-1.6.0-windows-20130426.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>windows</string>
+          </map>
+        </map>
+      </map>
+      <key>gperftools</key>
+      <map>
+        <key>license</key>
+        <string>bsd</string>
+        <key>license_file</key>
+        <string>LICENSES/gperftools.txt</string>
+        <key>name</key>
+        <string>gperftools</string>
+        <key>platforms</key>
+        <map>
+          <key>linux</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>8aedfdcf670348c18a9991ae1b384a61</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/Linux/installer/gperftools-2.0-linux-20120727.tar.bz2</string>
+            </map>
+            <key>name</key>
+            <string>linux</string>
+          </map>
+          <key>windows</key>
+          <map>
+            <key>archive</key>
+            <map>
+              <key>hash</key>
+              <string>f62841804acb91e1309603a84f3f0ce8</string>
+              <key>url</key>
+              <string>http://automated-builds-secondlife-com.s3.amazonaws.com/hg/repo/3p-google-perftools/rev/262672/arch/CYGWIN/installer/gperftools-2.0-windows-20120727.tar.bz2</string>
             </map>
             <key>name</key>
             <string>windows</string>
@@ -2531,8 +2567,7 @@
                   <string>"Visual Studio 10"</string>
                   <string>-DUNATTENDED:BOOL=ON</string>
                   <string>-DUSE_KDU=FALSE</string>
-                  <string>-DFMOD=FALSE</string>
-                </array>
+                  </array>
               </map>
               <key>name</key>
               <string>DebugOS</string>
@@ -2620,8 +2655,7 @@
                   <string>-DUNATTENDED:BOOL=ON</string>
                   <string>-DINSTALL_PROPRIETARY=FALSE</string>
                   <string>-DUSE_KDU=FALSE</string>
-                  <string>-DFMOD=FALSE</string>
-                </array>
+                  </array>
               </map>
               <key>name</key>
               <string>RelWithDebInfoOS</string>
@@ -2708,8 +2742,7 @@
                   <string>-DUNATTENDED:BOOL=ON</string>
                   <string>-DINSTALL_PROPRIETARY=FALSE</string>
                   <string>-DUSE_KDU=FALSE</string>
-                  <string>-DFMOD=FALSE</string>
-                </array>
+                  </array>
               </map>
               <key>name</key>
               <string>ReleaseOS</string>
diff --git a/build.sh b/build.sh
index 964f9ef0a60a5de2b8bfe95630ba4b23ceeb1073..a78f368e475aa9a52c1aa42ade842ff093fa29c4 100755
--- a/build.sh
+++ b/build.sh
@@ -65,19 +65,16 @@ pre_build()
     && [ -r "$master_message_template_checkout/message_template.msg" ] \
     && template_verifier_master_url="-DTEMPLATE_VERIFIER_MASTER_URL=file://$master_message_template_checkout/message_template.msg"
 
-    check_for "Before 'autobuild configure'" ${build_dir}/packages/dictionaries
+    check_for "Confirm dictionaries are installed before 'autobuild configure'" ${build_dir}/packages/dictionaries
 
     "$AUTOBUILD" configure -c $variant -- \
      -DPACKAGE:BOOL=ON \
      -DRELEASE_CRASH_REPORTING:BOOL=ON \
      -DVIEWER_CHANNEL:STRING="\"$viewer_channel\"" \
-     -DVIEWER_LOGIN_CHANNEL:STRING="\"$viewer_login_channel\"" \
      -DGRID:STRING="\"$viewer_grid\"" \
      -DLL_TESTS:BOOL="$run_tests" \
      -DTEMPLATE_VERIFIER_OPTIONS:STRING="$template_verifier_options" $template_verifier_master_url
 
-    check_for "After 'autobuild configure'" ${build_dir}/packages/dictionaries
-
  end_section "Pre$variant"
 }
 
@@ -110,7 +107,6 @@ build()
   if $build_viewer
   then
     begin_section "Viewer$variant"
-    check_for "Before 'autobuild build'" ${build_dir}/packages/dictionaries
 
     "$AUTOBUILD" build --no-configure -c $variant
     build_ok=$?
@@ -135,8 +131,6 @@ build()
     else
       echo false >"$build_dir"/build_ok
     fi
-    check_for "After 'autobuild configure'" ${build_dir}/packages/dictionaries
-
   fi
 }
 
@@ -171,21 +165,6 @@ fi
 # Check to see if we're skipping the platform
 eval '$build_'"$arch" || pass
 
-# Run the version number update script
-# File no longer exists in code-sep branch, so let's make sure it exists in order to use it.
-if test -f scripts/update_version_files.py ; then
-  begin_section UpdateVer
-  eval $(python scripts/update_version_files.py \
-                --channel="$viewer_channel" \
-                --server_channel="$server_channel" \
-                --revision=$revision \
-                --verbose \
-         | sed -n -e "s,Setting viewer channel/version: '\([^']*\)' / '\([^']*\)',VIEWER_CHANNEL='\1';VIEWER_VERSION='\2',p")\
-  || fail update_version_files.py
-  echo "{\"Type\":\"viewer\",\"Version\":\"${VIEWER_VERSION}\"}" > summary.json
-  end_section UpdateVer
-fi
-
 if [ -z "$AUTOBUILD" ]
 then
   export autobuild_dir="$here/../../../autobuild/bin/"
@@ -209,27 +188,11 @@ then
 fi
 
 # load autbuild provided shell functions and variables
-# Merov: going back to the previous code that passes even if it fails catching a failure
-# TODO: use the correct code here under and fix the llbase import in python code
-#if "$AUTOBUILD" source_environment > source_environment
-#then
-#  . source_environment
-#else
-  # dump environment variables for debugging
-#  env|sort
-#  record_failure "autobuild source_environment failed"
-#  cat source_environment >&3
-#  exit 1
-#fi
 eval "$("$AUTOBUILD" source_environment)"
 
 # dump environment variables for debugging
 env|sort
 
-check_for "Before 'autobuild install'" ${build_dir}/packages/dictionaries
-
-
-check_for "After 'autobuild install'" ${build_dir}/packages/dictionaries
 # Now run the build
 succeeded=true
 build_processes=
@@ -394,7 +357,7 @@ then
     else
       upload_item installer "$package" binary/octet-stream
       upload_item quicklink "$package" binary/octet-stream
-      [ -f summary.json ] && upload_item installer summary.json text/plain
+      [ -f $build_dir/summary.json ] && upload_item installer $build_dir/summary.json text/plain
 
       case "$last_built_variant" in
       Release)
diff --git a/doc/LGPL-licence.txt b/doc/LGPL-licence.txt
old mode 100644
new mode 100755
diff --git a/doc/LICENSE-logos.txt b/doc/LICENSE-logos.txt
old mode 100644
new mode 100755
diff --git a/doc/LICENSE-source.txt b/doc/LICENSE-source.txt
old mode 100644
new mode 100755
diff --git a/doc/contributions.txt b/doc/contributions.txt
old mode 100644
new mode 100755
index d7f050a916834624b8e4d73b96e3d16e126a86cb..66ccb404a8cfee9255f7796bdddab580f35cd6ba
--- a/doc/contributions.txt
+++ b/doc/contributions.txt
@@ -404,6 +404,7 @@ Ganymedes Costagravas
 Geenz Spad
 	STORM-1823
 	STORM-1900
+	NORSPEC-229
 Gene Frostbite
 GeneJ Composer
 Geneko Nemeth
@@ -647,6 +648,7 @@ Jonathan Yap
 	STORM-1872
 	STORM-1858
 	STORM-1862
+	OPEN-161
 Kadah Coba
 	STORM-1060
     STORM-1843
@@ -900,6 +902,7 @@ Nicky Dasmijn
 	VWR-29228
 	MAINT-873
 	SUN-72
+	BUG-2432
 Nicky Perian
 	OPEN-1
 	STORM-1087
@@ -1022,6 +1025,7 @@ Ryozu Kojima
 	VWR-287
 Sachi Vixen
 Sahkolihaa Contepomi
+	MATBUG-102
 Saii Hallard
 SaintLEOlions Zimer
 Salahzar Stenvaag
@@ -1069,10 +1073,12 @@ Sheet Spotter
 Shnurui Troughton
 Shyotl Kuhr
 	MAINT-1138
+	MAINT-2334
 Siana Gearz
 	STORM-960
 	STORM-1088
 	MAINT-1138
+	MAINT-2334
 sicarius Thorne
 Sicarius Toxx
 SignpostMarv Martin
@@ -1090,6 +1096,8 @@ SLB Wirefly
 Slee Mayo
     SEC-1075
 snowy Sidran
+Sovereign Engineer
+    MAINT-2334
 SpacedOut Frye
 	VWR-34
 	VWR-45
@@ -1168,6 +1176,7 @@ Techwolf Lupindo
 	SNOW-746
 	VWR-12385
 	VWR-20893
+	OPEN-161
 Templar Merlin
 tenebrous pau
 	VWR-247
@@ -1235,6 +1244,7 @@ Vadim Bigbear
 	VWR-2681
 Vaalith Jinn
     STORM-64
+    MATBUG-8
 Vector Hastings
 	VWR-8726
 Veritas Raymaker
@@ -1343,3 +1353,4 @@ Zoex Flanagan
 
 
 
+
diff --git a/doc/releasenotes-where.txt b/doc/releasenotes-where.txt
old mode 100644
new mode 100755
diff --git a/doc/translations.txt b/doc/translations.txt
old mode 100644
new mode 100755
diff --git a/etc/message.xml b/etc/message.xml
old mode 100644
new mode 100755
diff --git a/indra/CMakeLists.txt b/indra/CMakeLists.txt
old mode 100644
new mode 100755
index 0a54163644cc09fdf8d43060fafa940e91992d67..bdbfc55fa28af0b77992704e6b73471bb7910b0c
--- a/indra/CMakeLists.txt
+++ b/indra/CMakeLists.txt
@@ -3,14 +3,8 @@
 # cmake_minimum_required should appear before any
 # other commands to guarantee full compatibility
 # with the version specified
-
-# The "cmake -E touch" command was released with 2.4.8.
-cmake_minimum_required(VERSION 2.4.8 FATAL_ERROR)
-
-# This makes cmake 2.6 not complain about version 2.4 compatibility.
-if (COMMAND cmake_policy)
-  cmake_policy(SET CMP0003 OLD)
-endif (COMMAND cmake_policy)
+## prior to 2.8, the add_custom_target commands used in setting the version did not work correctly
+cmake_minimum_required(VERSION 2.8.8 FATAL_ERROR)
 
 set(ROOT_PROJECT_NAME "SecondLife" CACHE STRING
     "The root project/makefile/solution name. Defaults to SecondLife.")
@@ -19,13 +13,7 @@ project(${ROOT_PROJECT_NAME})
 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
 
 include(Variables)
-
-if (DARWIN)
-  # 2.6.4 fixes a Mac bug in get_target_property(... "SLPlugin" LOCATION):
-  # before that version it returns "pathname/SLPlugin", whereas the correct
-  # answer is "pathname/SLPlugin.app/Contents/MacOS/SLPlugin".
-  cmake_minimum_required(VERSION 2.6.4 FATAL_ERROR)
-endif (DARWIN)
+include(BuildVersion)
 
 if (NOT CMAKE_BUILD_TYPE)
   set(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
@@ -90,8 +78,7 @@ if (LINUX)
   add_dependencies(viewer linux-crash-logger-strip-target linux-updater)
 elseif (DARWIN)
   add_subdirectory(${VIEWER_PREFIX}mac_crash_logger)
-  add_subdirectory(${VIEWER_PREFIX}mac_updater)
-  add_dependencies(viewer mac-updater mac-crash-logger)
+  add_dependencies(viewer mac-crash-logger)
 elseif (WINDOWS)
   add_subdirectory(${VIEWER_PREFIX}win_crash_logger)
   # cmake EXISTS requires an absolute path, see indra/cmake/Variables.cmake
diff --git a/indra/cmake/00-Common.cmake b/indra/cmake/00-Common.cmake
old mode 100644
new mode 100755
index fb5c759493672cfd968cb3a0535c01f59df91d80..472f271fa8dc5e5d6c03c98594932d8c8ed2f892
--- a/indra/cmake/00-Common.cmake
+++ b/indra/cmake/00-Common.cmake
@@ -175,12 +175,7 @@ endif (LINUX)
 
 
 if (DARWIN)
-  # NOTE (per http://lists.apple.com/archives/darwin-dev/2008/Jan/msg00232.html):
-  # > Why the bus error? What am I doing wrong? 
-  # This is a known issue where getcontext(3) is writing past the end of the
-  # ucontext_t struct when _XOPEN_SOURCE is not defined (rdar://problem/5578699 ).
-  # As a workaround, define _XOPEN_SOURCE before including ucontext.h.
-  add_definitions(-DLL_DARWIN=1 -D_XOPEN_SOURCE)
+  add_definitions(-DLL_DARWIN=1)
   set(CMAKE_CXX_LINK_FLAGS "-Wl,-no_compact_unwind -Wl,-headerpad_max_install_names,-search_paths_first")
   set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_CXX_LINK_FLAGS}")
   set(DARWIN_extra_cstar_flags "-mlong-branch -g")
diff --git a/indra/cmake/APR.cmake b/indra/cmake/APR.cmake
old mode 100644
new mode 100755
index 492ba2adea1249606fe704ad404f42b791e5a80e..a87027f5f64ba898a5e145d0ccf1cd32699213b9
--- a/indra/cmake/APR.cmake
+++ b/indra/cmake/APR.cmake
@@ -49,7 +49,7 @@ else (STANDALONE)
   set(APR_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/apr-1)
 
   if (LINUX)
-    list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid)
+      list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} uuid)
     list(APPEND APRUTIL_LIBRARIES ${DB_LIBRARIES} rt)
   endif (LINUX)
 endif (STANDALONE)
diff --git a/indra/cmake/Audio.cmake b/indra/cmake/Audio.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/BerkeleyDB.cmake b/indra/cmake/BerkeleyDB.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Boost.cmake b/indra/cmake/Boost.cmake
old mode 100644
new mode 100755
index 1acb2bbbfdfb3650cc66809d01a315e2816fec25..cff762e1f024cb447e68d40e4151253b4640a86d
--- a/indra/cmake/Boost.cmake
+++ b/indra/cmake/Boost.cmake
@@ -7,11 +7,12 @@ set(Boost_FIND_REQUIRED ON)
 if (STANDALONE)
   include(FindBoost)
 
+  set(BOOST_CONTEXT_LIBRARY boost_context-mt)
+  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
   set(BOOST_PROGRAM_OPTIONS_LIBRARY boost_program_options-mt)
   set(BOOST_REGEX_LIBRARY boost_regex-mt)
   set(BOOST_SIGNALS_LIBRARY boost_signals-mt)
   set(BOOST_SYSTEM_LIBRARY boost_system-mt)
-  set(BOOST_FILESYSTEM_LIBRARY boost_filesystem-mt)
   set(BOOST_THREAD_LIBRARY boost_thread-mt)
 else (STANDALONE)
   use_prebuilt_binary(boost)
@@ -20,6 +21,12 @@ else (STANDALONE)
 
   if (WINDOWS)
     if(MSVC80)
+      set(BOOST_CONTEXT_LIBRARY 
+          optimized libboost_context-vc80-mt-${BOOST_VERSION}
+          debug libboost_context-vc80-mt-gd-${BOOST_VERSION})
+      set(BOOST_FILESYSTEM_LIBRARY 
+          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION}
+          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION})
       set(BOOST_PROGRAM_OPTIONS_LIBRARY 
           optimized libboost_program_options-vc80-mt-${BOOST_VERSION}
           debug libboost_program_options-vc80-mt-gd-${BOOST_VERSION})
@@ -32,59 +39,74 @@ else (STANDALONE)
       set(BOOST_SYSTEM_LIBRARY 
           optimized libboost_system-vc80-mt-${BOOST_VERSION}
           debug libboost_system-vc80-mt-gd-${BOOST_VERSION})
-      set(BOOST_FILESYSTEM_LIBRARY 
-          optimized libboost_filesystem-vc80-mt-${BOOST_VERSION}
-          debug libboost_filesystem-vc80-mt-gd-${BOOST_VERSION})
+      set(BOOST_THREAD_LIBRARY 
+          optimized libboost_thread-vc80-mt-${BOOST_VERSION}
+          debug libboost_thread-vc80-mt-gd-${BOOST_VERSION})
     else(MSVC80)
       # MSVC 10.0 config
+      set(BOOST_CONTEXT_LIBRARY 
+          optimized libboost_context-mt
+          debug libboost_context-mt-gd)
+      set(BOOST_FILESYSTEM_LIBRARY 
+          optimized libboost_filesystem-mt
+          debug libboost_filesystem-mt-gd)
       set(BOOST_PROGRAM_OPTIONS_LIBRARY 
           optimized libboost_program_options-mt
           debug libboost_program_options-mt-gd)
       set(BOOST_REGEX_LIBRARY
           optimized libboost_regex-mt
           debug libboost_regex-mt-gd)
+      set(BOOST_SIGNALS_LIBRARY 
+          optimized libboost_signals-mt
+          debug libboost_signals-mt-gd)
       set(BOOST_SYSTEM_LIBRARY 
           optimized libboost_system-mt
           debug libboost_system-mt-gd)
-      set(BOOST_FILESYSTEM_LIBRARY 
-          optimized libboost_filesystem-mt
-          debug libboost_filesystem-mt-gd)
       set(BOOST_THREAD_LIBRARY 
           optimized libboost_thread-mt
           debug libboost_thread-mt-gd)
     endif (MSVC80)
   elseif (LINUX)
+    set(BOOST_CONTEXT_LIBRARY
+        optimized boost_context-mt
+        debug boost_context-mt-d)
+    set(BOOST_FILESYSTEM_LIBRARY
+        optimized boost_filesystem-mt
+        debug boost_filesystem-mt-d)
     set(BOOST_PROGRAM_OPTIONS_LIBRARY
         optimized boost_program_options-mt
         debug boost_program_options-mt-d)
     set(BOOST_REGEX_LIBRARY
         optimized boost_regex-mt
         debug boost_regex-mt-d)
+    set(BOOST_SIGNALS_LIBRARY
+        optimized boost_signals-mt
+        debug boost_signals-mt-d)
     set(BOOST_SYSTEM_LIBRARY
         optimized boost_system-mt
         debug boost_system-mt-d)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized boost_filesystem-mt
-        debug boost_filesystem-mt-d)
     set(BOOST_THREAD_LIBRARY
         optimized boost_thread-mt
         debug boost_thread-mt-d)
   elseif (DARWIN)
-    set(BOOST_PROGRAM_OPTIONS_LIBRARY
-        optimized boost_program_options-mt
-        debug boost_program_options-mt-d)
+    set(BOOST_CONTEXT_LIBRARY
+        optimized boost_context-mt
+        debug boost_context-mt-d)
+    set(BOOST_FILESYSTEM_LIBRARY
+        optimized boost_filesystem-mt
+        debug boost_filesystem-mt-d)
     set(BOOST_PROGRAM_OPTIONS_LIBRARY
         optimized boost_program_options-mt
         debug boost_program_options-mt-d)
     set(BOOST_REGEX_LIBRARY
         optimized boost_regex-mt
         debug boost_regex-mt-d)
+    set(BOOST_SIGNALS_LIBRARY
+        optimized boost_signals-mt
+        debug boost_signals-mt-d)
     set(BOOST_SYSTEM_LIBRARY
         optimized boost_system-mt
         debug boost_system-mt-d)
-    set(BOOST_FILESYSTEM_LIBRARY
-        optimized boost_filesystem-mt
-        debug boost_filesystem-mt-d)
     set(BOOST_THREAD_LIBRARY
         optimized boost_thread-mt
         debug boost_thread-mt-d)
diff --git a/indra/cmake/BuildVersion.cmake b/indra/cmake/BuildVersion.cmake
old mode 100644
new mode 100755
index 60a519c9af53255f2718ea4a8c5b77003f07ca56..b9ec8f5266beb054d97c26544b03c294b6ffcfde
--- a/indra/cmake/BuildVersion.cmake
+++ b/indra/cmake/BuildVersion.cmake
@@ -1,18 +1,48 @@
 # -*- cmake -*-
+# Construct the viewer version number based on the indra/VIEWER_VERSION file
 
-include(Python)
+if (NOT DEFINED VIEWER_SHORT_VERSION) # will be true in indra/, false in indra/newview/
+    set(VIEWER_VERSION_BASE_FILE "${CMAKE_CURRENT_SOURCE_DIR}/newview/VIEWER_VERSION.txt")
 
-macro (build_version _target)
-  execute_process(
-      COMMAND ${PYTHON_EXECUTABLE} ${SCRIPTS_DIR}/build_version.py
-        llversion${_target}.h ${LLCOMMON_INCLUDE_DIRS}
-      OUTPUT_VARIABLE ${_target}_VERSION
-      OUTPUT_STRIP_TRAILING_WHITESPACE
-      )
+    if ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
+        file(STRINGS ${VIEWER_VERSION_BASE_FILE} VIEWER_SHORT_VERSION REGEX "^[0-9]+\\.[0-9]+\\.[0-9]+")
+        string(REGEX REPLACE "^([0-9]+)\\.[0-9]+\\.[0-9]+" "\\1" VIEWER_VERSION_MAJOR ${VIEWER_SHORT_VERSION})
+        string(REGEX REPLACE "^[0-9]+\\.([0-9]+)\\.[0-9]+" "\\1" VIEWER_VERSION_MINOR ${VIEWER_SHORT_VERSION})
+        string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.([0-9]+)" "\\1" VIEWER_VERSION_PATCH ${VIEWER_SHORT_VERSION})
 
-  if (${_target}_VERSION)
-    message(STATUS "Version of ${_target} is ${${_target}_VERSION}")
-  else (${_target}_VERSION)
-    message(SEND_ERROR "Could not determine ${_target} version")
-  endif (${_target}_VERSION)
-endmacro (build_version)
+        if (DEFINED ENV{revision})
+           set(VIEWER_VERSION_REVISION $ENV{revision})
+           message("Revision (from environment): ${VIEWER_VERSION_REVISION}")
+
+        else (DEFINED ENV{revision})
+           find_program(MERCURIAL hg)
+           if (DEFINED MERCURIAL)
+              execute_process(
+                 COMMAND ${MERCURIAL} log -r tip --template "{p1rev}"
+                 OUTPUT_VARIABLE VIEWER_VERSION_REVISION
+                 OUTPUT_STRIP_TRAILING_WHITESPACE
+                 )
+              if ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+                 message("Revision (from hg) ${VIEWER_VERSION_REVISION}")
+              else ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+                 set(VIEWER_VERSION_REVISION 0 )
+                 message("Revision not set, repository not found, using ${VIEWER_VERSION_REVISION}")
+              endif ("${VIEWER_VERSION_REVISION}" MATCHES "^[0-9]+$")
+           else (DEFINED MERCURIAL)
+              set(VIEWER_VERSION_REVISION 0)
+              message("Revision not set, 'hg' not found (${MERCURIAL}), using ${VIEWER_VERSION_REVISION}")
+           endif (DEFINED MERCURIAL)
+        endif (DEFINED ENV{revision})
+        message("Building '${VIEWER_CHANNEL}' Version ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}")
+    else ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
+        message(SEND_ERROR "Cannot get viewer version from '${VIEWER_VERSION_BASE_FILE}'") 
+    endif ( EXISTS ${VIEWER_VERSION_BASE_FILE} )
+
+    set(VIEWER_CHANNEL_VERSION_DEFINES
+        "LL_VIEWER_CHANNEL=\"${VIEWER_CHANNEL}\""
+        "LL_VIEWER_VERSION_MAJOR=${VIEWER_VERSION_MAJOR}"
+        "LL_VIEWER_VERSION_MINOR=${VIEWER_VERSION_MINOR}"
+        "LL_VIEWER_VERSION_PATCH=${VIEWER_VERSION_PATCH}"
+        "LL_VIEWER_VERSION_BUILD=${VIEWER_VERSION_REVISION}"
+        )
+endif (NOT DEFINED VIEWER_SHORT_VERSION)
diff --git a/indra/cmake/CARes.cmake b/indra/cmake/CARes.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/CMakeCopyIfDifferent.cmake b/indra/cmake/CMakeCopyIfDifferent.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/CMakeLists.txt b/indra/cmake/CMakeLists.txt
old mode 100644
new mode 100755
index a21fa9095073456a2dad5a9ad18bf07e44729c82..10a23ea068f91945d0071edf1a6b9bf349ea913e
--- a/indra/cmake/CMakeLists.txt
+++ b/indra/cmake/CMakeLists.txt
@@ -24,12 +24,11 @@ set(cmake_SOURCE_FILES
     DragDrop.cmake
     EXPAT.cmake
     ExamplePlugin.cmake
-    FMOD.cmake
     FindAPR.cmake
     FindAutobuild.cmake
     FindBerkeleyDB.cmake
     FindCARes.cmake
-    FindFMOD.cmake
+    FindFMODEX.cmake
     FindGLH.cmake
     FindGoogleBreakpad.cmake
     FindGooglePerfTools.cmake
@@ -40,6 +39,7 @@ set(cmake_SOURCE_FILES
     FindSCP.cmake
     FindXmlRpcEpi.cmake
     FindZLIB.cmake
+    FMODEX.cmake
     FreeType.cmake
     GLEXT.cmake
     GLH.cmake
diff --git a/indra/cmake/CURL.cmake b/indra/cmake/CURL.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake
old mode 100644
new mode 100755
index 26b1a626aaf745dd361e627ab62ee676adefcf91..1b211ca7b9d5f360f1e89d3effd64315fea76767
--- a/indra/cmake/Copy3rdPartyLibs.cmake
+++ b/indra/cmake/Copy3rdPartyLibs.cmake
@@ -63,10 +63,9 @@ if(WINDOWS)
       set(release_files ${release_files} libtcmalloc_minimal.dll)
     endif(USE_TCMALLOC)
 
-    if (FMOD)
-      set(debug_files ${debug_files} fmod.dll)
-      set(release_files ${release_files} fmod.dll)
-    endif (FMOD)
+    if (FMODEX)
+      set(release_files ${release_files} fmodex.dll)
+    endif (FMODEX)
 
 #*******************************
 # Copy MS C runtime dlls, required for packaging.
@@ -224,8 +223,10 @@ elseif(DARWIN)
         libcollada14dom.dylib
        )
 
-    # fmod is statically linked on darwin
-    set(fmod_files "")
+    if (FMODEX)
+      set(debug_files ${debug_files} libfmodexL.dylib)
+      set(release_files ${release_files} libfmodex.dylib)
+    endif (FMODEX)
 
 elseif(LINUX)
     # linux is weird, multiple side by side configurations aren't supported
@@ -257,13 +258,13 @@ elseif(LINUX)
         libapr-1.so.0
         libaprutil-1.so.0
         libatk-1.0.so
+        libboost_context-mt.so.${BOOST_VERSION}.0
+        libboost_filesystem-mt.so.${BOOST_VERSION}.0
         libboost_program_options-mt.so.${BOOST_VERSION}.0
         libboost_regex-mt.so.${BOOST_VERSION}.0
-        libboost_thread-mt.so.${BOOST_VERSION}.0
-        libboost_filesystem-mt.so.${BOOST_VERSION}.0
         libboost_signals-mt.so.${BOOST_VERSION}.0
         libboost_system-mt.so.${BOOST_VERSION}.0
-        libbreakpad_client.so.0
+        libboost_thread-mt.so.${BOOST_VERSION}.0
         libcollada14dom.so
         libcrypto.so.1.0.0
         libdb-5.1.so
@@ -291,9 +292,9 @@ elseif(LINUX)
       set(release_files ${release_files} "libtcmalloc_minimal.so")
     endif (USE_TCMALLOC)
 
-    if (FMOD)
-      set(release_files ${release_files} "libfmod-3.75.so")
-    endif (FMOD)
+    if (FMODEX)
+      set(release_file ${release_files} "libfmodex.so")
+    endif (FMODEX)
 
 else(WINDOWS)
     message(STATUS "WARNING: unrecognized platform for staging 3rd party libs, skipping...")
@@ -308,8 +309,6 @@ else(WINDOWS)
     set(release_src_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-linux/lib/release")
     set(release_files "")
 
-    set(fmod_files "")
-
     set(debug_llkdu_src "")
     set(debug_llkdu_dst "")
     set(release_llkdu_src "")
@@ -372,30 +371,6 @@ copy_if_different(
     )
 set(third_party_targets ${third_party_targets} ${out_targets})
 
-if (FMOD_SDK_DIR)
-    copy_if_different(
-        ${FMOD_SDK_DIR} 
-        "${CMAKE_CURRENT_BINARY_DIR}/Debug"
-        out_targets 
-        ${fmod_files}
-        )
-    set(all_targets ${all_targets} ${out_targets})
-    copy_if_different(
-        ${FMOD_SDK_DIR} 
-        "${CMAKE_CURRENT_BINARY_DIR}/Release"
-        out_targets 
-        ${fmod_files}
-        )
-    set(all_targets ${all_targets} ${out_targets})
-    copy_if_different(
-        ${FMOD_SDK_DIR} 
-        "${CMAKE_CURRENT_BINARY_DIR}/RelWithDbgInfo"
-        out_targets 
-        ${fmod_files}
-        )
-    set(all_targets ${all_targets} ${out_targets})
-endif (FMOD_SDK_DIR)
-
 if(NOT STANDALONE)
   add_custom_target(
       stage_third_party_libs ALL
diff --git a/indra/cmake/DBusGlib.cmake b/indra/cmake/DBusGlib.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/DeploySharedLibs.cmake b/indra/cmake/DeploySharedLibs.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/DirectX.cmake b/indra/cmake/DirectX.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/DragDrop.cmake b/indra/cmake/DragDrop.cmake
old mode 100644
new mode 100755
index b70aa6b6ee8c28c3b3887ac961cbafd0227a4160..73ef59b18fc35724c94e0b8d4a5ade89e63aa246
--- a/indra/cmake/DragDrop.cmake
+++ b/indra/cmake/DragDrop.cmake
@@ -1,20 +1,20 @@
 # -*- cmake -*-
 
-set(OS_DRAG_DROP ON CACHE BOOL "Build the viewer with OS level drag and drop turned on or off")
+  set(OS_DRAG_DROP ON CACHE BOOL "Build the viewer with OS level drag and drop turned on or off")
 
-if (OS_DRAG_DROP)
+  if (OS_DRAG_DROP)
 
-  if (WINDOWS)
-    add_definitions(-DLL_OS_DRAGDROP_ENABLED=1)
-  endif (WINDOWS)
+    if (WINDOWS)
+      add_definitions(-DLL_OS_DRAGDROP_ENABLED=1)
+    endif (WINDOWS)
 
-  if (DARWIN)
-    add_definitions(-DLL_OS_DRAGDROP_ENABLED=1)
-  endif (DARWIN)
+    if (DARWIN)
+      add_definitions(-DLL_OS_DRAGDROP_ENABLED=1)
+    endif (DARWIN)
 
-  if (LINUX)
-    add_definitions(-DLL_OS_DRAGDROP_ENABLED=0)
-  endif (LINUX)
+    if (LINUX)
+      add_definitions(-DLL_OS_DRAGDROP_ENABLED=0)
+    endif (LINUX)
 
-endif (OS_DRAG_DROP)
+  endif (OS_DRAG_DROP)
 
diff --git a/indra/cmake/EXPAT.cmake b/indra/cmake/EXPAT.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/ExamplePlugin.cmake b/indra/cmake/ExamplePlugin.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FMOD.cmake b/indra/cmake/FMOD.cmake
deleted file mode 100644
index 3586c1160aa9e72cdfdc65f08acf659beb509d6f..0000000000000000000000000000000000000000
--- a/indra/cmake/FMOD.cmake
+++ /dev/null
@@ -1,39 +0,0 @@
-# -*- cmake -*-
-
-# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON
-# When building using proprietary binaries though (i.e. having access to LL private servers),
-# we always build with FMOD.
-# Open source devs should use the -DFMOD:BOOL=ON then if they want to build with FMOD, whether
-# they are using STANDALONE or not.
-if (INSTALL_PROPRIETARY)
-  set(FMOD ON CACHE BOOL "Use FMOD sound library.")
-endif (INSTALL_PROPRIETARY)
-
-if (FMOD)
-  if (STANDALONE)
-    # In that case, we use the version of the library installed on the system
-    set(FMOD_FIND_REQUIRED ON)
-    include(FindFMOD)
-  else (STANDALONE)
-    if (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
-      # If the path have been specified in the arguments, use that
-      set(FMOD_LIBRARIES ${FMOD_LIBRARY})
-      MESSAGE(STATUS "Using FMOD path: ${FMOD_LIBRARIES}, ${FMOD_INCLUDE_DIR}")
-    else (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
-      # If not, we're going to try to get the package listed in autobuild.xml
-      # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL) 
-      # as accessing the private LL location will fail if you don't have the credential
-      include(Prebuilt)
-      use_prebuilt_binary(fmod)    
-      if (WINDOWS)
-        set(FMOD_LIBRARY fmod)
-      elseif (DARWIN)
-        set(FMOD_LIBRARY fmod)
-      elseif (LINUX)
-        set(FMOD_LIBRARY fmod-3.75)
-      endif (WINDOWS)
-      set(FMOD_LIBRARIES ${FMOD_LIBRARY})
-      set(FMOD_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include)
-    endif (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
-  endif (STANDALONE)
-endif (FMOD)
diff --git a/indra/cmake/FMODEX.cmake b/indra/cmake/FMODEX.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..65bc1cabeb8fd77340ea80cf78d50dd1c7bd5d75
--- /dev/null
+++ b/indra/cmake/FMODEX.cmake
@@ -0,0 +1,46 @@
+# -*- cmake -*-
+
+# FMOD can be set when launching the make using the argument -DFMOD:BOOL=ON
+# When building using proprietary binaries though (i.e. having access to LL private servers),
+# we always build with FMODEX.
+# Open source devs should use the -DFMODEX:BOOL=ON then if they want to build with FMOD, whether
+# they are using STANDALONE or not.
+if (INSTALL_PROPRIETARY)
+  set(FMODEX ON CACHE BOOL "Using FMOD Ex sound library.")
+endif (INSTALL_PROPRIETARY)
+
+if (FMODEX)
+  if (STANDALONE)
+    # In that case, we use the version of the library installed on the system
+    set(FMODEX_FIND_REQUIRED ON)
+    include(FindFMODEX)
+  else (STANDALONE)
+    if (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
+      # If the path have been specified in the arguments, use that
+      set(FMODEX_LIBRARIES ${FMODEX_LIBRARY})
+      MESSAGE(STATUS "Using FMODEX path: ${FMODEX_LIBRARIES}, ${FMODEX_INCLUDE_DIR}")
+    else (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
+      # If not, we're going to try to get the package listed in autobuild.xml
+      # Note: if you're not using INSTALL_PROPRIETARY, the package URL should be local (file:/// URL) 
+      # as accessing the private LL location will fail if you don't have the credential
+      include(Prebuilt)
+      use_prebuilt_binary(fmodex)    
+      if (WINDOWS)
+        set(FMODEX_LIBRARY 
+            debug fmodexL_vc
+            optimized fmodex_vc)
+      elseif (DARWIN)
+        set(FMODEX_LIBRARY 
+            debug fmodexL
+            optimized fmodex)
+      elseif (LINUX)
+        set(FMODEX_LIBRARY 
+            debug fmodexL
+            optimized fmodex)
+      endif (WINDOWS)
+      set(FMODEX_LIBRARIES ${FMODEX_LIBRARY})
+      set(FMODEX_INCLUDE_DIR ${LIBS_PREBUILT_DIR}/include/fmodex)
+    endif (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
+  endif (STANDALONE)
+endif (FMODEX)
+
diff --git a/indra/cmake/FindAPR.cmake b/indra/cmake/FindAPR.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindAutobuild.cmake b/indra/cmake/FindAutobuild.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindBerkeleyDB.cmake b/indra/cmake/FindBerkeleyDB.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindCARes.cmake b/indra/cmake/FindCARes.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindFMOD.cmake b/indra/cmake/FindFMOD.cmake
deleted file mode 100644
index 1ebbc8c96e5e3627f2de7d434ff2e73e5add235c..0000000000000000000000000000000000000000
--- a/indra/cmake/FindFMOD.cmake
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- cmake -*-
-
-# - Find FMOD
-# Find the FMOD includes and library
-# This module defines
-#  FMOD_INCLUDE_DIR, where to find fmod.h and fmod_errors.h
-#  FMOD_LIBRARIES, the libraries needed to use FMOD.
-#  FMOD, If false, do not try to use FMOD.
-# also defined, but not for general use are
-#  FMOD_LIBRARY, where to find the FMOD library.
-
-FIND_PATH(FMOD_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod)
-
-SET(FMOD_NAMES ${FMOD_NAMES} fmod fmodvc fmodex fmod-3.75)
-FIND_LIBRARY(FMOD_LIBRARY
-  NAMES ${FMOD_NAMES}
-  PATH_SUFFIXES fmod
-  )
-
-IF (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
-  SET(FMOD_LIBRARIES ${FMOD_LIBRARY})
-  SET(FMOD_FOUND "YES")
-ELSE (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
-  SET(FMOD_FOUND "NO")
-ENDIF (FMOD_LIBRARY AND FMOD_INCLUDE_DIR)
-
-IF (FMOD_FOUND)
-  IF (NOT FMOD_FIND_QUIETLY)
-    MESSAGE(STATUS "Found FMOD: ${FMOD_LIBRARIES}")
-  ENDIF (NOT FMOD_FIND_QUIETLY)
-ELSE (FMOD_FOUND)
-  IF (FMOD_FIND_REQUIRED)
-    MESSAGE(FATAL_ERROR "Could not find FMOD library")
-  ENDIF (FMOD_FIND_REQUIRED)
-ENDIF (FMOD_FOUND)
-
-# Deprecated declarations.
-SET (NATIVE_FMOD_INCLUDE_PATH ${FMOD_INCLUDE_DIR} )
-GET_FILENAME_COMPONENT (NATIVE_FMOD_LIB_PATH ${FMOD_LIBRARY} PATH)
-
-MARK_AS_ADVANCED(
-  FMOD_LIBRARY
-  FMOD_INCLUDE_DIR
-  )
diff --git a/indra/cmake/FindFMODEX.cmake b/indra/cmake/FindFMODEX.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..b621727c0ea490c8d55c7d89f243813ab698bda6
--- /dev/null
+++ b/indra/cmake/FindFMODEX.cmake
@@ -0,0 +1,65 @@
+# -*- cmake -*-
+
+# - Find FMODEX
+# Find the FMODEX includes and library
+# This module defines
+#  FMODEX_INCLUDE_DIR, where to find fmod.h and fmod_errors.h
+#  FMODEX_LIBRARIES, the libraries needed to use FMODEX.
+#  FMODEX, If false, do not try to use FMODEX.
+# also defined, but not for general use are
+#  FMODEX_LIBRARY, where to find the FMODEX library.
+
+FIND_PATH(FMODEX_INCLUDE_DIR fmod.h PATH_SUFFIXES fmod)
+
+SET(FMODEX_NAMES ${FMODEX_NAMES} fmodex fmodvc fmodexL_vc)
+FIND_LIBRARY(FMODEX_LIBRARY
+  NAMES ${FMODEX_NAMES}
+  PATH_SUFFIXES fmodex
+  )
+
+IF (FMODEX_SDK_DIR OR WINDOWS)
+    if(WINDOWS)
+        set(FMODEX_SDK_DIR "$ENV{PROGRAMFILES}/FMOD SoundSystem/FMOD Programmers API Windows" CACHE PATH "Path to FMODEX")
+        STRING(REGEX REPLACE "\\\\" "/" FMODEX_SDK_DIR ${FMODEX_SDK_DIR}) 
+    endif(WINDOWS)
+    find_library(FMODEX_LIBRARY
+             fmodex_vc fmodexL_vc 
+             PATHS
+             ${FMODEX_SDK_DIR}/api/lib
+             ${FMODEX_SDK_DIR}/api
+             ${FMODEX_SDK_DIR}
+             )
+    find_path(FMODEX_INCLUDE_DIR fmod.h
+        ${FMODEX_SDK_DIR}/api/inc
+        ${FMODEX_SDK_DIR}/api
+        ${FMODEX_SDK_DIR}
+      )
+    find_path(FMODEX_INCLUDE_DIR fmod.h
+        ${FMODEX_SDK_DIR}/api/inc
+        ${FMODEX_SDK_DIR}/api
+        ${FMODEX_SDK_DIR}
+      )
+    IF (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
+      SET(FMODEX_LIBRARIES ${FMODEX_LIBRARY})
+      SET(FMODEX_FOUND "YES")
+    endif (FMODEX_LIBRARY AND FMODEX_INCLUDE_DIR)
+ENDIF (FMODEX_SDK_DIR OR WINDOWS)
+
+IF (FMODEX_FOUND)
+  IF (NOT FMODEX_FIND_QUIETLY)
+    MESSAGE(STATUS "Found FMODEX: ${FMODEX_LIBRARIES}")
+  ENDIF (NOT FMODEX_FIND_QUIETLY)
+ELSE (FMODEX_FOUND)
+  IF (FMODEX_FIND_REQUIRED)
+    MESSAGE(FATAL_ERROR "Could not find FMODEX library")
+  ENDIF (FMODEX_FIND_REQUIRED)
+ENDIF (FMODEX_FOUND)
+
+# Deprecated declarations.
+SET (NATIVE_FMODEX_INCLUDE_PATH ${FMODEX_INCLUDE_DIR} )
+GET_FILENAME_COMPONENT (NATIVE_FMODEX_LIB_PATH ${FMODEX_LIBRARY} PATH)
+
+MARK_AS_ADVANCED(
+  FMODEX_LIBRARY
+  FMODEX_INCLUDE_DIR
+  )
diff --git a/indra/cmake/FindGLH.cmake b/indra/cmake/FindGLH.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindGoogleBreakpad.cmake b/indra/cmake/FindGoogleBreakpad.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindGooglePerfTools.cmake b/indra/cmake/FindGooglePerfTools.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindHUNSPELL.cmake b/indra/cmake/FindHUNSPELL.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindJsonCpp.cmake b/indra/cmake/FindJsonCpp.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindNDOF.cmake b/indra/cmake/FindNDOF.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindOpenJPEG.cmake b/indra/cmake/FindOpenJPEG.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindSCP.cmake b/indra/cmake/FindSCP.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindXmlRpcEpi.cmake b/indra/cmake/FindXmlRpcEpi.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FindZLIB.cmake b/indra/cmake/FindZLIB.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/FreeType.cmake b/indra/cmake/FreeType.cmake
old mode 100644
new mode 100755
index 43a9d282d0e95d6cc7cc8f75e4bd5d03a45e3ecb..baa61d73c8f43c6c01e1a3dbbb46851ebf761b97
--- a/indra/cmake/FreeType.cmake
+++ b/indra/cmake/FreeType.cmake
@@ -7,13 +7,7 @@ if (STANDALONE)
   pkg_check_modules(FREETYPE REQUIRED freetype2)
 else (STANDALONE)
   use_prebuilt_binary(freetype)
-  if (LINUX)
-    set(FREETYPE_INCLUDE_DIRS
-        ${LIBS_PREBUILT_DIR}/include)
-  else (LINUX)
     set(FREETYPE_INCLUDE_DIRS ${LIBS_PREBUILT_DIR}/include)
-  endif (LINUX)
-
   set(FREETYPE_LIBRARIES freetype)
 endif (STANDALONE)
 
diff --git a/indra/cmake/GLH.cmake b/indra/cmake/GLH.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/GLOD.cmake b/indra/cmake/GLOD.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/GStreamer010Plugin.cmake b/indra/cmake/GStreamer010Plugin.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/GetPrerequisites_2_8.cmake b/indra/cmake/GetPrerequisites_2_8.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Glui.cmake b/indra/cmake/Glui.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Glut.cmake b/indra/cmake/Glut.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/GoogleBreakpad.cmake b/indra/cmake/GoogleBreakpad.cmake
old mode 100644
new mode 100755
index 7498674042a9707c3e35f8e1e7ba95dad735cf49..96e22791ec8a239e59766ec23b06b901f12309ee
--- a/indra/cmake/GoogleBreakpad.cmake
+++ b/indra/cmake/GoogleBreakpad.cmake
@@ -15,5 +15,8 @@ else (STANDALONE)
   if (WINDOWS)
     set(BREAKPAD_EXCEPTION_HANDLER_LIBRARIES exception_handler crash_generation_client common)
   endif (WINDOWS)
+  # yes, this does look dumb, no, it's not incorrect
+  #
+  set(BREAKPAD_INCLUDE_DIRECTORIES "${LIBS_PREBUILT_DIR}/include/google_breakpad" "${LIBS_PREBUILT_DIR}/include/google_breakpad/google_breakpad")
 endif (STANDALONE)
 
diff --git a/indra/cmake/GoogleMock.cmake b/indra/cmake/GoogleMock.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/GooglePerfTools.cmake b/indra/cmake/GooglePerfTools.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Havok.cmake b/indra/cmake/Havok.cmake
old mode 100644
new mode 100755
index 44f81ce332a92a6b77b786d2e88773bb70ed7aca..8b7f01d20b5020e9811eacc288ee4827bd9581c0
--- a/indra/cmake/Havok.cmake
+++ b/indra/cmake/Havok.cmake
@@ -12,14 +12,14 @@ set(HAVOK_DEBUG_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-fulldebug)
 set(HAVOK_RELEASE_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/release/havok)
 
 if (LL_DEBUG_HAVOK)
-  if (WIN32)
-    # Always link relwithdebinfo to havok-hybrid on windows.
-    set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-hybrid)
-  else (WIN32)
-    set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-fulldebug)
-  endif (WIN32)
+   if (WIN32)
+      # Always link relwithdebinfo to havok-hybrid on windows.
+      set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-hybrid)
+   else (WIN32)
+      set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/debug/havok-fulldebug)
+   endif (WIN32)
 else (LL_DEBUG_HAVOK)
-  set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/release/havok)
+   set(HAVOK_RELWITHDEBINFO_LIBRARY_PATH ${LIBS_PREBUILT_DIR}/lib/release/havok)
 endif (LL_DEBUG_HAVOK)
 
 set(HAVOK_LIBS
@@ -51,14 +51,14 @@ unset(HK_RELWITHDEBINFO_LIBRARIES)
 
 # *TODO: Figure out why we need to extract like this...
 foreach(HAVOK_LIB ${HAVOK_LIBS})
-  find_library(HAVOK_DEBUG_LIB_${HAVOK_LIB}   ${HAVOK_LIB} PATHS ${HAVOK_DEBUG_LIBRARY_PATH})
-  find_library(HAVOK_RELEASE_LIB_${HAVOK_LIB} ${HAVOK_LIB} PATHS ${HAVOK_RELEASE_LIBRARY_PATH})
-  find_library(HAVOK_RELWITHDEBINFO_LIB_${HAVOK_LIB} ${HAVOK_LIB} PATHS ${HAVOK_RELWITHDEBINFO_LIBRARY_PATH})
-  
-  if(LINUX)
-    set(debug_dir "${HAVOK_DEBUG_LIBRARY_PATH}/${HAVOK_LIB}")
-    set(release_dir "${HAVOK_RELEASE_LIBRARY_PATH}/${HAVOK_LIB}")
-    set(relwithdebinfo_dir "${HAVOK_RELWITHDEBINFO_LIBRARY_PATH}/${HAVOK_LIB}")
+        find_library(HAVOK_DEBUG_LIB_${HAVOK_LIB}   ${HAVOK_LIB} PATHS ${HAVOK_DEBUG_LIBRARY_PATH})
+        find_library(HAVOK_RELEASE_LIB_${HAVOK_LIB} ${HAVOK_LIB} PATHS ${HAVOK_RELEASE_LIBRARY_PATH})
+        find_library(HAVOK_RELWITHDEBINFO_LIB_${HAVOK_LIB} ${HAVOK_LIB} PATHS ${HAVOK_RELWITHDEBINFO_LIBRARY_PATH})
+        
+        if(LINUX)
+            set(debug_dir "${HAVOK_DEBUG_LIBRARY_PATH}/${HAVOK_LIB}")
+            set(release_dir "${HAVOK_RELEASE_LIBRARY_PATH}/${HAVOK_LIB}")
+            set(relwithdebinfo_dir "${HAVOK_RELWITHDEBINFO_LIBRARY_PATH}/${HAVOK_LIB}")
 
     # Try to avoid extracting havok library each time we run cmake.
     if("${havok_${HAVOK_LIB}_extracted}" STREQUAL "" AND EXISTS "${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted")
@@ -77,35 +77,35 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})
       if(DEBUG_PREBUILT)
         MESSAGE(STATUS "${cmd} ${debug_dir}")
       endif(DEBUG_PREBUILT)
-      exec_program( ${cmd} ${HAVOK_DEBUG_LIBRARY_PATH} ARGS ${debug_dir} OUTPUT_VARIABLE rv)
+            exec_program( ${cmd} ${HAVOK_DEBUG_LIBRARY_PATH} ARGS ${debug_dir} OUTPUT_VARIABLE rv)
 
       if(DEBUG_PREBUILT)
         MESSAGE(STATUS "${cmd} ${release_dir}")
       endif(DEBUG_PREBUILT)
-      exec_program( ${cmd} ${HAVOK_RELEASE_LIBRARY_PATH} ARGS ${release_dir} OUTPUT_VARIABLE rv)
+            exec_program( ${cmd} ${HAVOK_RELEASE_LIBRARY_PATH} ARGS ${release_dir} OUTPUT_VARIABLE rv)
 
       if(DEBUG_PREBUILT)
         MESSAGE(STATUS "${cmd} ${relwithdebinfo_dir}")
       endif(DEBUG_PREBUILT)
-      exec_program( ${cmd} ${HAVOK_RELWITHDEBINFO_LIBRARY_PATH} ARGS ${relwithdebinfo_dir} OUTPUT_VARIABLE rv)
+            exec_program( ${cmd} ${HAVOK_RELWITHDEBINFO_LIBRARY_PATH} ARGS ${relwithdebinfo_dir} OUTPUT_VARIABLE rv)
 
-      set(cmd "ar")
-      set(arg " -xv")
-      set(arg "${arg} ../lib${HAVOK_LIB}.a")
+            set(cmd "ar")
+            set(arg " -xv")
+            set(arg "${arg} ../lib${HAVOK_LIB}.a")
       if(DEBUG_PREBUILT)
         MESSAGE(STATUS "cd ${debug_dir} && ${cmd} ${arg}")
       endif(DEBUG_PREBUILT)
-      exec_program( ${cmd} ${debug_dir} ARGS ${arg} OUTPUT_VARIABLE rv)
+            exec_program( ${cmd} ${debug_dir} ARGS ${arg} OUTPUT_VARIABLE rv)
 
       if(DEBUG_PREBUILT)
         MESSAGE(STATUS "cd ${release_dir} && ${cmd} ${arg}")
       endif(DEBUG_PREBUILT)
-      exec_program( ${cmd} ${release_dir} ARGS ${arg} OUTPUT_VARIABLE rv)
+            exec_program( ${cmd} ${release_dir} ARGS ${arg} OUTPUT_VARIABLE rv)
 
       if(DEBUG_PREBUILT)
         MESSAGE(STATUS "cd ${relwithdebinfo_dir} && ${cmd} ${arg}")
       endif(DEBUG_PREBUILT)
-      exec_program( ${cmd} ${relwithdebinfo_dir} ARGS ${arg} OUTPUT_VARIABLE rv)
+            exec_program( ${cmd} ${relwithdebinfo_dir} ARGS ${arg} OUTPUT_VARIABLE rv)
 
       # Just assume success for now.
       set(havok_${HAVOK_LIB}_extracted 0)
@@ -113,9 +113,9 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})
 
     endif(${CMAKE_BINARY_DIR}/temp/havok-source_installed IS_NEWER_THAN ${CMAKE_BINARY_DIR}/temp/havok_${HAVOK_LIB}_extracted OR NOT ${havok_${HAVOK_LIB}_extracted} EQUAL 0)
 
-    file(GLOB extracted_debug "${debug_dir}/*.o")
-    file(GLOB extracted_release "${release_dir}/*.o")
-    file(GLOB extracted_relwithdebinfo "${relwithdebinfo_dir}/*.o")
+            file(GLOB extracted_debug "${debug_dir}/*.o")
+            file(GLOB extracted_release "${release_dir}/*.o")
+            file(GLOB extracted_relwithdebinfo "${relwithdebinfo_dir}/*.o")
 
     if(DEBUG_PREBUILT)
       MESSAGE(STATUS "extracted_debug ${debug_dir}/*.o")
@@ -123,15 +123,15 @@ foreach(HAVOK_LIB ${HAVOK_LIBS})
       MESSAGE(STATUS "extracted_relwithdebinfo ${relwithdebinfo_dir}/*.o")
     endif(DEBUG_PREBUILT)
 
-    list(APPEND HK_DEBUG_LIBRARIES ${extracted_debug})
-    list(APPEND HK_RELEASE_LIBRARIES ${extracted_release})
-    list(APPEND HK_RELWITHDEBINFO_LIBRARIES ${extracted_relwithdebinfo})
-  else(LINUX)
-  # Win32
-    list(APPEND HK_DEBUG_LIBRARIES   ${HAVOK_DEBUG_LIB_${HAVOK_LIB}})
-    list(APPEND HK_RELEASE_LIBRARIES ${HAVOK_RELEASE_LIB_${HAVOK_LIB}})
-    list(APPEND HK_RELWITHDEBINFO_LIBRARIES ${HAVOK_RELWITHDEBINFO_LIB_${HAVOK_LIB}})
-  endif (LINUX)
+            list(APPEND HK_DEBUG_LIBRARIES ${extracted_debug})
+            list(APPEND HK_RELEASE_LIBRARIES ${extracted_release})
+            list(APPEND HK_RELWITHDEBINFO_LIBRARIES ${extracted_relwithdebinfo})
+        else(LINUX)
+        # Win32
+            list(APPEND HK_DEBUG_LIBRARIES   ${HAVOK_DEBUG_LIB_${HAVOK_LIB}})
+            list(APPEND HK_RELEASE_LIBRARIES ${HAVOK_RELEASE_LIB_${HAVOK_LIB}})
+            list(APPEND HK_RELWITHDEBINFO_LIBRARIES ${HAVOK_RELWITHDEBINFO_LIB_${HAVOK_LIB}})
+        endif (LINUX)
 endforeach(HAVOK_LIB)
 
 endif(NOT DEFINED ${CMAKE_CURRENT_LIST_FILE}_INCLUDED)
diff --git a/indra/cmake/Hunspell.cmake b/indra/cmake/Hunspell.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/JPEG.cmake b/indra/cmake/JPEG.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/JsonCpp.cmake b/indra/cmake/JsonCpp.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLAudio.cmake b/indra/cmake/LLAudio.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLCharacter.cmake b/indra/cmake/LLCharacter.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLCommon.cmake b/indra/cmake/LLCommon.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLCoreHttp.cmake b/indra/cmake/LLCoreHttp.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLCrashLogger.cmake b/indra/cmake/LLCrashLogger.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLImage.cmake b/indra/cmake/LLImage.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLImageJ2COJ.cmake b/indra/cmake/LLImageJ2COJ.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLInventory.cmake b/indra/cmake/LLInventory.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLKDU.cmake b/indra/cmake/LLKDU.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLLogin.cmake b/indra/cmake/LLLogin.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLMath.cmake b/indra/cmake/LLMath.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLMessage.cmake b/indra/cmake/LLMessage.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLPhysicsExtensions.cmake b/indra/cmake/LLPhysicsExtensions.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLPlugin.cmake b/indra/cmake/LLPlugin.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLPrimitive.cmake b/indra/cmake/LLPrimitive.cmake
old mode 100644
new mode 100755
index ab39cbb6be88597566dfac2d3c3c256100e44018..0d87ff579a870e41bdc184803f14e545df524b13
--- a/indra/cmake/LLPrimitive.cmake
+++ b/indra/cmake/LLPrimitive.cmake
@@ -2,6 +2,8 @@
 
 # these should be moved to their own cmake file
 include(Prebuilt)
+include(Boost)
+
 use_prebuilt_binary(colladadom)
 use_prebuilt_binary(pcre)
 use_prebuilt_binary(libxml)
@@ -15,10 +17,7 @@ if (WINDOWS)
         optimized llprimitive
         debug libcollada14dom22-d
         optimized libcollada14dom22
-        debug libboost_filesystem-mt-gd
-        optimized libboost_filesystem-mt
-        debug libboost_system-mt-gd
-        optimized libboost_system-mt
+        ${BOOST_SYSTEM_LIBRARIES}
         )
 else (WINDOWS)
     set(LLPRIMITIVE_LIBRARIES 
diff --git a/indra/cmake/LLRender.cmake b/indra/cmake/LLRender.cmake
old mode 100644
new mode 100755
index ae71ee4c0d611e09cd9e8d98f16bb21ececc4c1d..868922451f0008135f92ce7f97abdea9ef53fcbe
--- a/indra/cmake/LLRender.cmake
+++ b/indra/cmake/LLRender.cmake
@@ -11,8 +11,8 @@ set(LLRENDER_INCLUDE_DIRS
 
 if (BUILD_HEADLESS)
   set(LLRENDER_HEADLESS_LIBRARIES
-    llrenderheadless
-    )
+      llrenderheadless
+      )
 endif (BUILD_HEADLESS)
 set(LLRENDER_LIBRARIES
     llrender
diff --git a/indra/cmake/LLSharedLibs.cmake b/indra/cmake/LLSharedLibs.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLTestCommand.cmake b/indra/cmake/LLTestCommand.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLUI.cmake b/indra/cmake/LLUI.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLVFS.cmake b/indra/cmake/LLVFS.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LLWindow.cmake b/indra/cmake/LLWindow.cmake
old mode 100644
new mode 100755
index 0def507e659aca39bd2cc67a3f496f55c79e71d2..ad732ef650d71f3707ff224daa75db2064cf8b41
--- a/indra/cmake/LLWindow.cmake
+++ b/indra/cmake/LLWindow.cmake
@@ -33,10 +33,10 @@ set(LLWINDOW_INCLUDE_DIRS
 
 if (BUILD_HEADLESS)
   set(LLWINDOW_HEADLESS_LIBRARIES
-    llwindowheadless
-    )
+      llwindowheadless
+      )
 endif (BUILD_HEADLESS)
 
-set(LLWINDOW_LIBRARIES
-    llwindow
-    )
+  set(LLWINDOW_LIBRARIES
+      llwindow
+      )
diff --git a/indra/cmake/LLXML.cmake b/indra/cmake/LLXML.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/LScript.cmake b/indra/cmake/LScript.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Linking.cmake b/indra/cmake/Linking.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/MediaPluginBase.cmake b/indra/cmake/MediaPluginBase.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/NDOF.cmake b/indra/cmake/NDOF.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/NVAPI.cmake b/indra/cmake/NVAPI.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/OPENAL.cmake b/indra/cmake/OPENAL.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/OpenGL.cmake b/indra/cmake/OpenGL.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/OpenJPEG.cmake b/indra/cmake/OpenJPEG.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/OpenSSL.cmake b/indra/cmake/OpenSSL.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/PNG.cmake b/indra/cmake/PNG.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/PluginAPI.cmake b/indra/cmake/PluginAPI.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Prebuilt.cmake b/indra/cmake/Prebuilt.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/PulseAudio.cmake b/indra/cmake/PulseAudio.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Python.cmake b/indra/cmake/Python.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/QuickTimePlugin.cmake b/indra/cmake/QuickTimePlugin.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/TemplateCheck.cmake b/indra/cmake/TemplateCheck.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Tut.cmake b/indra/cmake/Tut.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/UI.cmake b/indra/cmake/UI.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/UnixInstall.cmake b/indra/cmake/UnixInstall.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/Variables.cmake b/indra/cmake/Variables.cmake
old mode 100644
new mode 100755
index 6ec621632b8356213e145e33bd04a0a73d7b134e..7c310ba9c372a2738a7f9c95ef1763e7dd722440
--- a/indra/cmake/Variables.cmake
+++ b/indra/cmake/Variables.cmake
@@ -170,8 +170,7 @@ endif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 # Default deploy grid
 set(GRID agni CACHE STRING "Target Grid")
 
-set(VIEWER_CHANNEL "LindenDeveloper" CACHE STRING "Viewer Channel Name")
-set(VIEWER_LOGIN_CHANNEL ${VIEWER_CHANNEL} CACHE STRING "Fake login channel for A/B Testing")
+set(VIEWER_CHANNEL "Second Life Test" CACHE STRING "Viewer Channel Name")
 
 if (XCODE_VERSION GREATER 4.2)
   set(ENABLE_SIGNING OFF CACHE BOOL "Enable signing the viewer")
diff --git a/indra/cmake/ViewerMiscLibs.cmake b/indra/cmake/ViewerMiscLibs.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/VisualLeakDetector.cmake b/indra/cmake/VisualLeakDetector.cmake
old mode 100644
new mode 100755
index 27e93e28bb483f85fd9980beb5404f7339babca5..6a20148b47b497ed26a0025839deb35f988b310b
--- a/indra/cmake/VisualLeakDetector.cmake
+++ b/indra/cmake/VisualLeakDetector.cmake
@@ -1,12 +1,12 @@
 # -*- cmake -*-
 
-set(INCLUDE_VLD_CMAKE OFF CACHE BOOL "Build the Windows viewer with Visual Leak Detector turned on or off")
+  set(INCLUDE_VLD_CMAKE OFF CACHE BOOL "Build the Windows viewer with Visual Leak Detector turned on or off")
 
-if (INCLUDE_VLD_CMAKE)
+  if (INCLUDE_VLD_CMAKE)
 
-  if (WINDOWS)
-    add_definitions(-DINCLUDE_VLD=1)
-  endif (WINDOWS)
+    if (WINDOWS)
+      add_definitions(-DINCLUDE_VLD=1)
+    endif (WINDOWS)
 
-endif (INCLUDE_VLD_CMAKE)
+  endif (INCLUDE_VLD_CMAKE)
 
diff --git a/indra/cmake/WebKitLibPlugin.cmake b/indra/cmake/WebKitLibPlugin.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/XmlRpcEpi.cmake b/indra/cmake/XmlRpcEpi.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/ZLIB.cmake b/indra/cmake/ZLIB.cmake
old mode 100644
new mode 100755
diff --git a/indra/cmake/cmake_dummy.cpp b/indra/cmake/cmake_dummy.cpp
old mode 100644
new mode 100755
diff --git a/indra/cmake/run_build_test.py b/indra/cmake/run_build_test.py
old mode 100644
new mode 100755
diff --git a/indra/copy_win_scripts/CMakeLists.txt b/indra/copy_win_scripts/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/copy_win_scripts/start-client.py b/indra/copy_win_scripts/start-client.py
old mode 100644
new mode 100755
diff --git a/indra/edit-me-to-trigger-new-build.txt b/indra/edit-me-to-trigger-new-build.txt
old mode 100644
new mode 100755
index 0f6a8b8a1d73fadcaacb312bae8893a6ff54e099..e003ed77883684fd8f54604332e49d048c263048
--- a/indra/edit-me-to-trigger-new-build.txt
+++ b/indra/edit-me-to-trigger-new-build.txt
@@ -1 +1,5 @@
 Wed Nov  7 00:25:19 UTC 2012
+
+
+
+
diff --git a/indra/fix-incredibuild.py b/indra/fix-incredibuild.py
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/CMakeLists.txt b/indra/integration_tests/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llimage_libtest/CMakeLists.txt b/indra/integration_tests/llimage_libtest/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.cpp b/indra/integration_tests/llimage_libtest/llimage_libtest.cpp
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llimage_libtest/llimage_libtest.h b/indra/integration_tests/llimage_libtest/llimage_libtest.h
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llui_libtest/CMakeLists.txt b/indra/integration_tests/llui_libtest/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llui_libtest/llui_libtest.cpp b/indra/integration_tests/llui_libtest/llui_libtest.cpp
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llui_libtest/llui_libtest.h b/indra/integration_tests/llui_libtest/llui_libtest.h
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.cpp b/indra/integration_tests/llui_libtest/llwidgetreg.cpp
old mode 100644
new mode 100755
diff --git a/indra/integration_tests/llui_libtest/llwidgetreg.h b/indra/integration_tests/llui_libtest/llwidgetreg.h
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/__init__.py b/indra/lib/python/indra/__init__.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/base/__init__.py b/indra/lib/python/indra/base/__init__.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/base/cllsd_test.py b/indra/lib/python/indra/base/cllsd_test.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/base/config.py b/indra/lib/python/indra/base/config.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/base/llsd.py b/indra/lib/python/indra/base/llsd.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/base/lluuid.py b/indra/lib/python/indra/base/lluuid.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/base/metrics.py b/indra/lib/python/indra/base/metrics.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/__init__.py b/indra/lib/python/indra/ipc/__init__.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/compatibility.py b/indra/lib/python/indra/ipc/compatibility.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/httputil.py b/indra/lib/python/indra/ipc/httputil.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/llmessage.py b/indra/lib/python/indra/ipc/llmessage.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/llsdhttp.py b/indra/lib/python/indra/ipc/llsdhttp.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/mysql_pool.py b/indra/lib/python/indra/ipc/mysql_pool.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/russ.py b/indra/lib/python/indra/ipc/russ.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/servicebuilder.py b/indra/lib/python/indra/ipc/servicebuilder.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/siesta.py b/indra/lib/python/indra/ipc/siesta.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/siesta_test.py b/indra/lib/python/indra/ipc/siesta_test.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/tokenstream.py b/indra/lib/python/indra/ipc/tokenstream.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/webdav.py b/indra/lib/python/indra/ipc/webdav.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/ipc/xml_rpc.py b/indra/lib/python/indra/ipc/xml_rpc.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/__init__.py b/indra/lib/python/indra/util/__init__.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/fastest_elementtree.py b/indra/lib/python/indra/util/fastest_elementtree.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/helpformatter.py b/indra/lib/python/indra/util/helpformatter.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/iterators.py b/indra/lib/python/indra/util/iterators.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py
old mode 100644
new mode 100755
index 97cc31bba0cd58650644ec03e9b8586ec0ba4734..9cb830a2dbd1956424cbfb3063f2f6dfcf569ef2
--- a/indra/lib/python/indra/util/llmanifest.py
+++ b/indra/lib/python/indra/util/llmanifest.py
@@ -84,30 +84,8 @@ def get_default_platform(dummy):
             'darwin':'darwin'
             }[sys.platform]
 
-def get_default_version(srctree):
-    # look up llversion.h and parse out the version info
-    paths = [os.path.join(srctree, x, 'llversionviewer.h') for x in ['llcommon', '../llcommon', '../../indra/llcommon.h']]
-    for p in paths:
-        if os.path.exists(p):
-            contents = open(p, 'r').read()
-            major = re.search("LL_VERSION_MAJOR\s=\s([0-9]+)", contents).group(1)
-            minor = re.search("LL_VERSION_MINOR\s=\s([0-9]+)", contents).group(1)
-            patch = re.search("LL_VERSION_PATCH\s=\s([0-9]+)", contents).group(1)
-            build = re.search("LL_VERSION_BUILD\s=\s([0-9]+)", contents).group(1)
-            return major, minor, patch, build
-
-def get_channel(srctree):
-    # look up llversionserver.h and parse out the version info
-    paths = [os.path.join(srctree, x, 'llversionviewer.h') for x in ['llcommon', '../llcommon', '../../indra/llcommon.h']]
-    for p in paths:
-        if os.path.exists(p):
-            contents = open(p, 'r').read()
-            channel = re.search("LL_CHANNEL\s=\s\"(.+)\";\s*$", contents, flags = re.M).group(1)
-            return channel
-    
-
 DEFAULT_SRCTREE = os.path.dirname(sys.argv[0])
-DEFAULT_CHANNEL = 'Second Life Release'
+RELEASE_CHANNEL = 'Second Life Release'
 
 ARGUMENTS=[
     dict(name='actions',
@@ -140,10 +118,7 @@ def get_channel(srctree):
          default=""),
     dict(name='channel',
          description="""The channel to use for updates, packaging, settings name, etc.""",
-         default=get_channel),
-    dict(name='login_channel',
-         description="""The channel to use for login handshake/updates only.""",
-         default=None),
+         default='CHANNEL UNSET'),
     dict(name='installer_name',
          description=""" The name of the file that the installer should be
         packaged up into. Only used on Linux at the moment.""",
@@ -164,10 +139,8 @@ def get_channel(srctree):
         contain the name of the final package in a form suitable
         for use by a .bat file.""",
          default=None),
-    dict(name='version',
-         description="""This specifies the version of Second Life that is
-        being packaged up.""",
-         default=get_default_version),
+    dict(name='versionfile',
+         description="""The name of a file containing the full version number."""),
     dict(name='signature',
          description="""This specifies an identity to sign the viewer with, if any.
         If no value is supplied, the default signature will be used, if any. Currently
@@ -232,9 +205,14 @@ def main():
                 args[arg['name']] = default
 
     # fix up version
-    if isinstance(args.get('version'), str):
-        args['version'] = args['version'].split('.')
-        
+    if isinstance(args.get('versionfile'), str):
+        try: # read in the version string
+            vf = open(args['versionfile'], 'r')
+            args['version'] = vf.read().strip().split('.')
+        except:
+            print "Unable to read versionfile '%s'" % args['versionfile']
+            raise
+
     # default and agni are default
     if args['grid'] in ['default', 'agni']:
         args['grid'] = ''
@@ -291,7 +269,7 @@ def __init__(self, args):
     def default_grid(self):
         return self.args.get('grid', None) == ''
     def default_channel(self):
-        return self.args.get('channel', None) == DEFAULT_CHANNEL
+        return self.args.get('channel', None) == RELEASE_CHANNEL
 
     def construct(self):
         """ Meant to be overriden by LLManifest implementors with code that
diff --git a/indra/lib/python/indra/util/llsubprocess.py b/indra/lib/python/indra/util/llsubprocess.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/llversion.py b/indra/lib/python/indra/util/llversion.py
deleted file mode 100644
index ba6f567b607f43792231d18a19857068d587f408..0000000000000000000000000000000000000000
--- a/indra/lib/python/indra/util/llversion.py
+++ /dev/null
@@ -1,107 +0,0 @@
-#!/usr/bin/env python
-"""\
-@file  llversion.py
-@brief Parses llcommon/llversionserver.h and llcommon/llversionviewer.h
-       for the version string and channel string.
-       Parses hg info for branch and revision.
-
-$LicenseInfo:firstyear=2006&license=mit$
-
-Copyright (c) 2006-2009, Linden Research, Inc.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
-$/LicenseInfo$
-"""
-
-import re, sys, os, subprocess
-
-# Methods for gathering version information from
-# llversionviewer.h and llversionserver.h
-
-def get_src_root():
-    indra_lib_python_indra_path = os.path.dirname(__file__)
-    return os.path.abspath(os.path.realpath(indra_lib_python_indra_path + "/../../../../../"))
-
-def get_version_file_contents(version_type):
-    filepath = get_src_root() + '/indra/llcommon/llversion%s.h' % version_type
-    file = open(filepath,"r")
-    file_str = file.read()
-    file.close()
-    return file_str
-
-def get_version(version_type):
-    file_str = get_version_file_contents(version_type)
-    m = re.search('const S32 LL_VERSION_MAJOR = (\d+);', file_str)
-    VER_MAJOR = m.group(1)
-    m = re.search('const S32 LL_VERSION_MINOR = (\d+);', file_str)
-    VER_MINOR = m.group(1)
-    m = re.search('const S32 LL_VERSION_PATCH = (\d+);', file_str)
-    VER_PATCH = m.group(1)
-    m = re.search('const S32 LL_VERSION_BUILD = (\d+);', file_str)
-    VER_BUILD = m.group(1)
-    version = "%(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s" % locals()
-    return version
-
-def get_channel(version_type):
-    file_str = get_version_file_contents(version_type)
-    m = re.search('const char \* const LL_CHANNEL = "(.+)";', file_str)
-    return m.group(1)
-    
-def get_viewer_version():
-    return get_version('viewer')
-
-def get_server_version():
-    return get_version('server')
-
-def get_viewer_channel():
-    return get_channel('viewer')
-
-def get_server_channel():
-    return get_channel('server')
-
-# Methods for gathering hg information
-def get_hg_repo():
-    child = subprocess.Popen(["hg","showconfig","paths.default"], stdout=subprocess.PIPE)
-    output, error = child.communicate()
-    status = child.returncode
-    if status:
-        print >> sys.stderr, error
-        sys.exit(1)
-    if not output:
-        print >> sys.stderr, 'ERROR: cannot find repo we cloned from'
-        sys.exit(1)
-    return output
-
-def get_hg_changeset():
-    # The right thing to do would be to use the *global* revision id:
-    #     "hg id -i"
-    # For the moment though, we use the parent revision:
-    child = subprocess.Popen(["hg","parents","--template","{rev}"], stdout=subprocess.PIPE)
-    output, error = child.communicate()
-    status = child.returncode
-    if status:
-        print >> sys.stderr, error
-        sys.exit(1)
-    lines = output.splitlines()
-    if len(lines) > 1:
-        print >> sys.stderr, 'ERROR: working directory has %d parents' % len(lines)
-    return lines[0]
-
-def using_hg():
-    return os.path.isdir(os.path.join(get_src_root(), '.hg'))
diff --git a/indra/lib/python/indra/util/named_query.py b/indra/lib/python/indra/util/named_query.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/shutil2.py b/indra/lib/python/indra/util/shutil2.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/term.py b/indra/lib/python/indra/util/term.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/indra/util/test_win32_manifest.py b/indra/lib/python/indra/util/test_win32_manifest.py
old mode 100644
new mode 100755
diff --git a/indra/lib/python/uuid.py b/indra/lib/python/uuid.py
old mode 100644
new mode 100755
diff --git a/indra/linux_crash_logger/CMakeLists.txt b/indra/linux_crash_logger/CMakeLists.txt
old mode 100644
new mode 100755
index e0d0c9fc6974639f7bd9d3f3735c1d01194448e3..c0fc1b2be0ecce2bceb1b2263c6e29a77c3ca09f
--- a/indra/linux_crash_logger/CMakeLists.txt
+++ b/indra/linux_crash_logger/CMakeLists.txt
@@ -12,6 +12,7 @@ include(LLVFS)
 include(LLXML)
 include(Linking)
 include(UI)
+include(FreeType)
 
 include_directories(
     ${LLCOMMON_INCLUDE_DIRS}
@@ -19,6 +20,11 @@ include_directories(
     ${LLMATH_INCLUDE_DIRS}
     ${LLVFS_INCLUDE_DIRS}
     ${LLXML_INCLUDE_DIRS}
+    ${FREETYPE_INCLUDE_DIRS}
+    )
+include_directories(SYSTEM
+    ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
+    ${LLXML_SYSTEM_INCLUDE_DIRS}
     )
 include_directories(SYSTEM
     ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
@@ -57,6 +63,7 @@ target_link_libraries(linux-crash-logger
     ${LLCOMMON_LIBRARIES}
     ${UI_LIBRARIES}
     ${DB_LIBRARIES}
+    ${FREETYPE_LIBRARIES}
     )
 
 add_custom_target(linux-crash-logger-target ALL
diff --git a/indra/linux_crash_logger/linux_crash_logger.cpp b/indra/linux_crash_logger/linux_crash_logger.cpp
old mode 100644
new mode 100755
diff --git a/indra/linux_crash_logger/llcrashloggerlinux.cpp b/indra/linux_crash_logger/llcrashloggerlinux.cpp
old mode 100644
new mode 100755
diff --git a/indra/linux_crash_logger/llcrashloggerlinux.h b/indra/linux_crash_logger/llcrashloggerlinux.h
old mode 100644
new mode 100755
diff --git a/indra/llappearance/llpolymorph.cpp b/indra/llappearance/llpolymorph.cpp
index 8a178190833ca463c15499e9722cb4e7300ca8af..93c2f15a535e378ffbdc74562d3867b5697123db 100644
--- a/indra/llappearance/llpolymorph.cpp
+++ b/indra/llappearance/llpolymorph.cpp
@@ -597,19 +597,31 @@ void LLPolyMorphTarget::apply( ESex avatar_sex )
 			norm.mul(delta_weight*maskWeight*NORMAL_SOFTEN_FACTOR);
 			scaled_normals[vert_index_mesh].add(norm);
 			norm = scaled_normals[vert_index_mesh];
+
+			// guard against degenerate input data before we create NaNs below!
+			//
 			norm.normalize3fast();
 			normals[vert_index_mesh] = norm;
 
 			// calculate new binormals
 			LLVector4a binorm = mMorphData->mBinormals[vert_index_morph];
+
+			// guard against degenerate input data before we create NaNs below!
+			//
+			if (!binorm.isFinite3() || (binorm.dot3(binorm).getF32() <= F_APPROXIMATELY_ZERO))
+			{
+				binorm.set(1,0,0,1);
+			}
+
 			binorm.mul(delta_weight*maskWeight*NORMAL_SOFTEN_FACTOR);
 			scaled_binormals[vert_index_mesh].add(binorm);
 			LLVector4a tangent;
 			tangent.setCross3(scaled_binormals[vert_index_mesh], norm);
 			LLVector4a& normalized_binormal = binormals[vert_index_mesh];
-			normalized_binormal.setCross3(norm, tangent); 
+
+			normalized_binormal.setCross3(norm, tangent); 			
 			normalized_binormal.normalize3fast();
-			
+
 			tex_coords[vert_index_mesh] += mMorphData->mTexCoords[vert_index_morph] * delta_weight * maskWeight;
 		}
 
diff --git a/indra/llaudio/CMakeLists.txt b/indra/llaudio/CMakeLists.txt
old mode 100644
new mode 100755
index 24d25311065c5db5772b21019d52390bd366a6cc..1b2bdb9888c7005beb56ef4f220c049cf2b892dc
--- a/indra/llaudio/CMakeLists.txt
+++ b/indra/llaudio/CMakeLists.txt
@@ -5,7 +5,7 @@ project(llaudio)
 include(00-Common)
 include(Audio)
 include(LLAudio)
-include(FMOD)
+include(FMODEX)
 include(OPENAL)
 include(LLCommon)
 include(LLMath)
@@ -24,7 +24,6 @@ include_directories(
     ${VORBIS_INCLUDE_DIRS}
     ${OPENAL_LIB_INCLUDE_DIRS}
     ${FREEAULT_LIB_INCLUDE_DIRS}
-    ${FMOD_INCLUDE_DIR}
     )
 
 set(llaudio_SOURCE_FILES
@@ -44,29 +43,22 @@ set(llaudio_HEADER_FILES
     llwindgen.h
     )
 
-if (FMOD)
+if (FMODEX)
     include_directories(
-        ${FMOD_INCLUDE_DIR}
+        ${FMODEX_INCLUDE_DIR}
         )
-
     list(APPEND llaudio_SOURCE_FILES
-         llaudioengine_fmod.cpp
-         lllistener_fmod.cpp
-         llstreamingaudio_fmod.cpp
+         llaudioengine_fmodex.cpp
+         lllistener_fmodex.cpp
+         llstreamingaudio_fmodex.cpp
          )
 
     list(APPEND llaudio_HEADER_FILES
-         llaudioengine_fmod.h
-         lllistener_fmod.h
-         llstreamingaudio_fmod.h
+         llaudioengine_fmodex.h
+         lllistener_fmodex.h
+         llstreamingaudio_fmodex.h
          )
-
-    if (LINUX OR DARWIN)
-      set_source_files_properties(llaudioengine_fmod.cpp
-                                  llstreamingaudio_fmod.cpp
-                                  COMPILE_FLAGS -Wno-write-strings)
-    endif (LINUX OR DARWIN)
-endif (FMOD)
+endif (FMODEX)
 
 if (OPENAL)
   list(APPEND llaudio_SOURCE_FILES
diff --git a/indra/llaudio/llaudiodecodemgr.cpp b/indra/llaudio/llaudiodecodemgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/llaudio/llaudiodecodemgr.h b/indra/llaudio/llaudiodecodemgr.h
old mode 100644
new mode 100755
diff --git a/indra/llaudio/llaudioengine.cpp b/indra/llaudio/llaudioengine.cpp
old mode 100644
new mode 100755
diff --git a/indra/llaudio/llaudioengine.h b/indra/llaudio/llaudioengine.h
old mode 100644
new mode 100755
index 99b96c3c38b21d1df09462699d48dff17204a288..da1629a1db57a7c1fda86305a06e6ced52e90898
--- a/indra/llaudio/llaudioengine.h
+++ b/indra/llaudio/llaudioengine.h
@@ -42,7 +42,6 @@
 #include "lllistener.h"
 
 const F32 LL_WIND_UPDATE_INTERVAL = 0.1f;
-const F32 LL_ROLLOFF_MULTIPLIER_UNDER_WATER = 5.f;			//  How much sounds are weaker under water
 const F32 LL_WIND_UNDERWATER_CENTER_FREQ = 20.f;
 
 const F32 ATTACHED_OBJECT_TIMEOUT = 5.0f;
diff --git a/indra/llaudio/llaudioengine_fmod.cpp b/indra/llaudio/llaudioengine_fmod.cpp
deleted file mode 100644
index a40de9fa68b21afe656d862642d2b7992a33829f..0000000000000000000000000000000000000000
--- a/indra/llaudio/llaudioengine_fmod.cpp
+++ /dev/null
@@ -1,781 +0,0 @@
-/** 
- * @file audioengine_fmod.cpp
- * @brief Implementation of LLAudioEngine class abstracting the audio support as a FMOD 3D implementation
- *
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser 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
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include "llstreamingaudio.h"
-#include "llstreamingaudio_fmod.h"
-
-#include "llaudioengine_fmod.h"
-#include "lllistener_fmod.h"
-
-#include "llerror.h"
-#include "llmath.h"
-#include "llrand.h"
-
-#include "fmod.h"
-#include "fmod_errors.h"
-#include "lldir.h"
-#include "llapr.h"
-
-#include "sound_ids.h"
-
-
-extern "C" {
-	void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int length, void* userdata);
-}
-
-
-LLAudioEngine_FMOD::LLAudioEngine_FMOD()
-{
-	mInited = false;
-	mWindGen = NULL;
-	mWindDSP = NULL;
-}
-
-
-LLAudioEngine_FMOD::~LLAudioEngine_FMOD()
-{
-}
-
-
-bool LLAudioEngine_FMOD::init(const S32 num_channels, void* userdata)
-{
-	LLAudioEngine::init(num_channels, userdata);
-
-	// Reserve one extra channel for the http stream.
-	if (!FSOUND_SetMinHardwareChannels(num_channels + 1))
-	{
-		LL_WARNS("AppInit") << "FMOD::init[0](), error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-	}
-
-	LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() initializing FMOD" << LL_ENDL;
-
-	F32 version = FSOUND_GetVersion();
-	if (version < FMOD_VERSION)
-	{
-		LL_WARNS("AppInit") << "Error : You are using the wrong FMOD version (" << version
-			<< ")!  You should be using FMOD " << FMOD_VERSION << LL_ENDL;
-		//return false;
-	}
-
-	U32 fmod_flags = 0x0;
-
-#if LL_WINDOWS
-	// Windows needs to know which window is frontmost.
-	// This must be called before FSOUND_Init() per the FMOD docs.
-	// This could be used to let FMOD handle muting when we lose focus,
-	// but we don't actually want to do that because we want to distinguish
-	// between minimized and not-focused states.
-	if (!FSOUND_SetHWND(userdata))
-	{
-		LL_WARNS("AppInit") << "Error setting FMOD window: "
-			<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-		return false;
-	}
-	// Play audio when we don't have focus.
-	// (For example, IM client on top of us.)
-	// This means we also try to play audio when minimized,
-	// so we manually handle muting in that case. JC
-	fmod_flags |= FSOUND_INIT_GLOBALFOCUS;
-#endif
-
-#if LL_LINUX
-	// initialize the FMOD engine
-
-	// This is a hack to use only FMOD's basic FPU mixer
-	// when the LL_VALGRIND environmental variable is set,
-	// otherwise valgrind will fall over on FMOD's MMX detection
-	if (getenv("LL_VALGRIND"))		/*Flawfinder: ignore*/
-	{
-		LL_INFOS("AppInit") << "Pacifying valgrind in FMOD init." << LL_ENDL;
-		FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU);
-	}
-
-	// If we don't set an output method, Linux FMOD always
-	// decides on OSS and fails otherwise.  So we'll manually
-	// try ESD, then OSS, then ALSA.
-	// Why this order?  See SL-13250, but in short, OSS emulated
-	// on top of ALSA is ironically more reliable than raw ALSA.
-	// Ack, and ESD has more reliable failure modes - but has worse
-	// latency - than all of them, so wins for now.
-	bool audio_ok = false;
-
-	if (!audio_ok)
-	{
-		if (NULL == getenv("LL_BAD_FMOD_ESD")) /*Flawfinder: ignore*/
-		{
-			LL_DEBUGS("AppInit") << "Trying ESD audio output..." << LL_ENDL;
-			if(FSOUND_SetOutput(FSOUND_OUTPUT_ESD) &&
-			   FSOUND_Init(44100, num_channels, fmod_flags))
-			{
-				LL_DEBUGS("AppInit") << "ESD audio output initialized OKAY"
-					<< LL_ENDL;
-				audio_ok = true;
-			} else {
-				LL_WARNS("AppInit") << "ESD audio output FAILED to initialize: "
-					<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-			}
-		} else {
-			LL_DEBUGS("AppInit") << "ESD audio output SKIPPED" << LL_ENDL;
-		}
-	}
-	if (!audio_ok)
-	{
-		if (NULL == getenv("LL_BAD_FMOD_OSS")) 	 /*Flawfinder: ignore*/
-		{
-			LL_DEBUGS("AppInit") << "Trying OSS audio output..."	<< LL_ENDL;
-			if(FSOUND_SetOutput(FSOUND_OUTPUT_OSS) &&
-			   FSOUND_Init(44100, num_channels, fmod_flags))
-			{
-				LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL;
-				audio_ok = true;
-			} else {
-				LL_WARNS("AppInit") << "OSS audio output FAILED to initialize: "
-					<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-			}
-		} else {
-			LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
-		}
-	}
-	if (!audio_ok)
-	{
-		if (NULL == getenv("LL_BAD_FMOD_ALSA"))		/*Flawfinder: ignore*/
-		{
-			LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
-			if(FSOUND_SetOutput(FSOUND_OUTPUT_ALSA) &&
-			   FSOUND_Init(44100, num_channels, fmod_flags))
-			{
-				LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
-				audio_ok = true;
-			} else {
-				LL_WARNS("AppInit") << "ALSA audio output FAILED to initialize: "
-					<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-			}
-		} else {
-			LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
-		}
-	}
-	if (!audio_ok)
-	{
-		LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL;
-		return false;
-	}
-
-	// On Linux, FMOD causes a SIGPIPE for some netstream error
-	// conditions (an FMOD bug); ignore SIGPIPE so it doesn't crash us.
-	// NOW FIXED in FMOD 3.x since 2006-10-01.
-	//signal(SIGPIPE, SIG_IGN);
-
-	// We're interested in logging which output method we
-	// ended up with, for QA purposes.
-	switch (FSOUND_GetOutput())
-	{
-	case FSOUND_OUTPUT_NOSOUND: LL_DEBUGS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
-	case FSOUND_OUTPUT_OSS:	LL_DEBUGS("AppInit") << "Audio output: OSS" << LL_ENDL; break;
-	case FSOUND_OUTPUT_ESD:	LL_DEBUGS("AppInit") << "Audio output: ESD" << LL_ENDL; break;
-	case FSOUND_OUTPUT_ALSA: LL_DEBUGS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
-	default: LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
-	};
-
-#else // LL_LINUX
-
-	// initialize the FMOD engine
-	if (!FSOUND_Init(44100, num_channels, fmod_flags))
-	{
-		LL_WARNS("AppInit") << "Error initializing FMOD: "
-			<< FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-		return false;
-	}
-	
-#endif
-
-	// set up our favourite FMOD-native streaming audio implementation if none has already been added
-	if (!getStreamingAudioImpl()) // no existing implementation added
-		setStreamingAudioImpl(new LLStreamingAudio_FMOD());
-
-	LL_DEBUGS("AppInit") << "LLAudioEngine_FMOD::init() FMOD initialized correctly" << LL_ENDL;
-
-	mInited = true;
-
-	return true;
-}
-
-
-std::string LLAudioEngine_FMOD::getDriverName(bool verbose)
-{
-	if (verbose)
-	{
-		F32 version = FSOUND_GetVersion();
-		return llformat("FMOD version %f", version);
-	}
-	else
-	{
-		return "FMOD";
-	}
-}
-
-
-void LLAudioEngine_FMOD::allocateListener(void)
-{	
-	mListenerp = (LLListener *) new LLListener_FMOD();
-	if (!mListenerp)
-	{
-		llwarns << "Listener creation failed" << llendl;
-	}
-}
-
-
-void LLAudioEngine_FMOD::shutdown()
-{
-	if (mWindDSP)
-	{
-		FSOUND_DSP_SetActive(mWindDSP,false);
-		FSOUND_DSP_Free(mWindDSP);
-	}
-
-	stopInternetStream();
-
-	LLAudioEngine::shutdown();
-	
-	llinfos << "LLAudioEngine_FMOD::shutdown() closing FMOD" << llendl;
-	FSOUND_Close();
-	llinfos << "LLAudioEngine_FMOD::shutdown() done closing FMOD" << llendl;
-
-	delete mListenerp;
-	mListenerp = NULL;
-}
-
-
-LLAudioBuffer * LLAudioEngine_FMOD::createBuffer()
-{
-	return new LLAudioBufferFMOD();
-}
-
-
-LLAudioChannel * LLAudioEngine_FMOD::createChannel()
-{
-	return new LLAudioChannelFMOD();
-}
-
-
-bool LLAudioEngine_FMOD::initWind()
-{
-	if (!mWindGen)
-	{
-		bool enable;
-		
-		switch (FSOUND_GetMixer())
-		{
-			case FSOUND_MIXER_MMXP5:
-			case FSOUND_MIXER_MMXP6:
-			case FSOUND_MIXER_QUALITY_MMXP5:
-			case FSOUND_MIXER_QUALITY_MMXP6:
-				enable = (typeid(MIXBUFFERFORMAT) == typeid(S16));
-				break;
-			case FSOUND_MIXER_BLENDMODE:
-				enable = (typeid(MIXBUFFERFORMAT) == typeid(S32));
-				break;
-			case FSOUND_MIXER_QUALITY_FPU:
-				enable = (typeid(MIXBUFFERFORMAT) == typeid(F32));
-				break;
-			default:
-				// FSOUND_GetMixer() does not return a valid mixer type on Darwin
-				LL_INFOS("AppInit") << "Unknown FMOD mixer type, assuming default" << LL_ENDL;
-				enable = true;
-				break;
-		}
-		
-		if (enable)
-		{
-			mWindGen = new LLWindGen<MIXBUFFERFORMAT>(FSOUND_GetOutputRate());
-		}
-		else
-		{
-			LL_WARNS("AppInit") << "Incompatible FMOD mixer type, wind noise disabled" << LL_ENDL;
-		}
-	}
-
-	mNextWindUpdate = 0.0;
-
-	if (mWindGen && !mWindDSP)
-	{
-		mWindDSP = FSOUND_DSP_Create(&windCallback, FSOUND_DSP_DEFAULTPRIORITY_CLEARUNIT + 20, mWindGen);
-	}
-	if (mWindDSP)
-	{
-		FSOUND_DSP_SetActive(mWindDSP, true);
-		return true;
-	}
-	
-	return false;
-}
-
-
-void LLAudioEngine_FMOD::cleanupWind()
-{
-	if (mWindDSP)
-	{
-		FSOUND_DSP_SetActive(mWindDSP, false);
-		FSOUND_DSP_Free(mWindDSP);
-		mWindDSP = NULL;
-	}
-
-	delete mWindGen;
-	mWindGen = NULL;
-}
-
-
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMOD::updateWind(LLVector3 wind_vec, F32 camera_height_above_water)
-{
-	LLVector3 wind_pos;
-	F64 pitch;
-	F64 center_freq;
-
-	if (!mEnableWind)
-	{
-		return;
-	}
-	
-	if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL))
-	{
-		
-		// wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up)
-		// need to convert this to the conventional orientation DS3D and OpenAL use
-		// where +X = right, +Y = up, +Z = backwards
-
-		wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]);
-
-		// cerr << "Wind update" << endl;
-
-		pitch = 1.0 + mapWindVecToPitch(wind_vec);
-		center_freq = 80.0 * pow(pitch,2.5*(mapWindVecToGain(wind_vec)+1.0));
-		
-		mWindGen->mTargetFreq = (F32)center_freq;
-		mWindGen->mTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain;
-		mWindGen->mTargetPanGainR = (F32)mapWindVecToPan(wind_vec);
-  	}
-}
-
-/*
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMOD::setSourceMinDistance(U16 source_num, F64 distance)
-{
-	if (!mInited)
-	{
-		return;
-	}
-	if (mBuffer[source_num])
-	{
-		mMinDistance[source_num] = (F32) distance;
-		if (!FSOUND_Sample_SetMinMaxDistance(mBuffer[source_num],mMinDistance[source_num], mMaxDistance[source_num]))
-		{
-			llwarns << "FMOD::setSourceMinDistance(" << source_num << "), error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-		}
-	}
-}
-
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMOD::setSourceMaxDistance(U16 source_num, F64 distance)
-{
-	if (!mInited)
-	{
-		return;
-	}
-	if (mBuffer[source_num])
-	{
-		mMaxDistance[source_num] = (F32) distance;
-		if (!FSOUND_Sample_SetMinMaxDistance(mBuffer[source_num],mMinDistance[source_num], mMaxDistance[source_num]))
-		{
-			llwarns << "FMOD::setSourceMaxDistance(" << source_num << "), error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-		}
-	}
-}
-
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMOD::get3DParams(S32 source_num, S32 *volume, S32 *freq, S32 *inside, S32 *outside, LLVector3 *orient, S32 *out_volume, F32 *min_dist, F32 *max_dist)
-{
-	*volume = 0;
-	*freq = 0;
-	*inside = 0;
-	*outside = 0;
-	*orient = LLVector3::zero;
-	*out_volume = 0;
-	*min_dist = 0.f;
-	*max_dist = 0.f;
-}
-
-*/
-
-
-//-----------------------------------------------------------------------
-void LLAudioEngine_FMOD::setInternalGain(F32 gain)
-{
-	if (!mInited)
-	{
-		return;
-	}
-
-	gain = llclamp( gain, 0.0f, 1.0f );
-	FSOUND_SetSFXMasterVolume( llround( 255.0f * gain ) );
-
-	LLStreamingAudioInterface *saimpl = getStreamingAudioImpl();
-	if ( saimpl )
-	{
-		// fmod likes its streaming audio channel gain re-asserted after
-		// master volume change.
-		saimpl->setGain(saimpl->getGain());
-	}
-}
-
-//
-// LLAudioChannelFMOD implementation
-//
-
-LLAudioChannelFMOD::LLAudioChannelFMOD() : LLAudioChannel(), mChannelID(0), mLastSamplePos(0)
-{
-}
-
-
-LLAudioChannelFMOD::~LLAudioChannelFMOD()
-{
-	cleanup();
-}
-
-
-bool LLAudioChannelFMOD::updateBuffer()
-{
-	if (LLAudioChannel::updateBuffer())
-	{
-		// Base class update returned true, which means that we need to actually
-		// set up the channel for a different buffer.
-
-		LLAudioBufferFMOD *bufferp = (LLAudioBufferFMOD *)mCurrentSourcep->getCurrentBuffer();
-
-		// Grab the FMOD sample associated with the buffer
-		FSOUND_SAMPLE *samplep = bufferp->getSample();
-		if (!samplep)
-		{
-			// This is bad, there should ALWAYS be a sample associated with a legit
-			// buffer.
-			llerrs << "No FMOD sample!" << llendl;
-			return false;
-		}
-
-
-		// Actually play the sound.  Start it off paused so we can do all the necessary
-		// setup.
-		mChannelID = FSOUND_PlaySoundEx(FSOUND_FREE, samplep, FSOUND_DSP_GetSFXUnit(), true);
-
-		//llinfos << "Setting up channel " << std::hex << mChannelID << std::dec << llendl;
-	}
-
-	// If we have a source for the channel, we need to update its gain.
-	if (mCurrentSourcep)
-	{
-		// SJB: warnings can spam and hurt framerate, disabling
-		if (!FSOUND_SetVolume(mChannelID, llround(getSecondaryGain() * mCurrentSourcep->getGain() * 255.0f)))
-		{
-// 			llwarns << "LLAudioChannelFMOD::updateBuffer error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-		}
-		
-		if (!FSOUND_SetLoopMode(mChannelID, mCurrentSourcep->isLoop() ? FSOUND_LOOP_NORMAL : FSOUND_LOOP_OFF))
-		{
-// 			llwarns << "Channel " << mChannelID << "Source ID: " << mCurrentSourcep->getID()
-// 					<< " at " << mCurrentSourcep->getPositionGlobal() << llendl;
-// 			llwarns << "LLAudioChannelFMOD::updateBuffer error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-		}
-	}
-
-	return true;
-}
-
-
-void LLAudioChannelFMOD::update3DPosition()
-{
-	if (!mChannelID)
-	{
-		// We're not actually a live channel (i.e., we're not playing back anything)
-		return;
-	}
-
-	LLAudioBufferFMOD *bufferp = (LLAudioBufferFMOD *)mCurrentBufferp;
-	if (!bufferp)
-	{
-		// We don't have a buffer associated with us (should really have been picked up
-		// by the above if.
-		return;
-	}
-
-	if (mCurrentSourcep->isAmbient())
-	{
-		// Ambient sound, don't need to do any positional updates.
-		bufferp->set3DMode(false);
-	}
-	else
-	{
-		// Localized sound.  Update the position and velocity of the sound.
-		bufferp->set3DMode(true);
-
-		LLVector3 float_pos;
-		float_pos.setVec(mCurrentSourcep->getPositionGlobal());
-		if (!FSOUND_3D_SetAttributes(mChannelID, float_pos.mV, mCurrentSourcep->getVelocity().mV))
-		{
-			LL_DEBUGS("FMOD") << "LLAudioChannelFMOD::update3DPosition error: " << FMOD_ErrorString(FSOUND_GetError()) << LL_ENDL;
-		}
-	}
-}
-
-
-void LLAudioChannelFMOD::updateLoop()
-{
-	if (!mChannelID)
-	{
-		// May want to clear up the loop/sample counters.
-		return;
-	}
-
-	//
-	// Hack:  We keep track of whether we looped or not by seeing when the
-	// sample position looks like it's going backwards.  Not reliable; may
-	// yield false negatives.
-	//
-	U32 cur_pos = FSOUND_GetCurrentPosition(mChannelID);
-	if (cur_pos < (U32)mLastSamplePos)
-	{
-		mLoopedThisFrame = true;
-	}
-	mLastSamplePos = cur_pos;
-}
-
-
-void LLAudioChannelFMOD::cleanup()
-{
-	if (!mChannelID)
-	{
-		//llinfos << "Aborting cleanup with no channelID." << llendl;
-		return;
-	}
-
-	//llinfos << "Cleaning up channel: " << mChannelID << llendl;
-	if (!FSOUND_StopSound(mChannelID))
-	{
-		LL_DEBUGS("FMOD") << "LLAudioChannelFMOD::cleanup error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-	}
-
-	mCurrentBufferp = NULL;
-	mChannelID = 0;
-}
-
-
-void LLAudioChannelFMOD::play()
-{
-	if (!mChannelID)
-	{
-		llwarns << "Playing without a channelID, aborting" << llendl;
-		return;
-	}
-
-	if (!FSOUND_SetPaused(mChannelID, false))
-	{
-		llwarns << "LLAudioChannelFMOD::play error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-	}
-	getSource()->setPlayedOnce(true);
-}
-
-
-void LLAudioChannelFMOD::playSynced(LLAudioChannel *channelp)
-{
-	LLAudioChannelFMOD *fmod_channelp = (LLAudioChannelFMOD*)channelp;
-	if (!(fmod_channelp->mChannelID && mChannelID))
-	{
-		// Don't have channels allocated to both the master and the slave
-		return;
-	}
-
-	U32 position = FSOUND_GetCurrentPosition(fmod_channelp->mChannelID) % mCurrentBufferp->getLength();
-	// Try to match the position of our sync master
-	if (!FSOUND_SetCurrentPosition(mChannelID, position))
-	{
-		llwarns << "LLAudioChannelFMOD::playSynced unable to set current position" << llendl;
-	}
-
-	// Start us playing
-	play();
-}
-
-
-bool LLAudioChannelFMOD::isPlaying()
-{
-	if (!mChannelID)
-	{
-		return false;
-	}
-
-	return FSOUND_IsPlaying(mChannelID) && (!FSOUND_GetPaused(mChannelID));
-}
-
-
-
-//
-// LLAudioBufferFMOD implementation
-//
-
-
-LLAudioBufferFMOD::LLAudioBufferFMOD()
-{
-	mSamplep = NULL;
-}
-
-
-LLAudioBufferFMOD::~LLAudioBufferFMOD()
-{
-	if (mSamplep)
-	{
-		// Clean up the associated FMOD sample if it exists.
-		FSOUND_Sample_Free(mSamplep);
-		mSamplep = NULL;
-	}
-}
-
-
-bool LLAudioBufferFMOD::loadWAV(const std::string& filename)
-{
-	// Try to open a wav file from disk.  This will eventually go away, as we don't
-	// really want to block doing this.
-	if (filename.empty())
-	{
-		// invalid filename, abort.
-		return false;
-	}
-
-	if (!LLAPRFile::isExist(filename, NULL, LL_APR_RPB))
-	{
-		// File not found, abort.
-		return false;
-	}
-	
-	if (mSamplep)
-	{
-		// If there's already something loaded in this buffer, clean it up.
-		FSOUND_Sample_Free(mSamplep);
-		mSamplep = NULL;
-	}
-
-	// Load up the wav file into an fmod sample
-#if LL_WINDOWS
-	// MikeS. - Loading the sound file manually and then handing it over to FMOD,
-	//	since FMOD uses posix IO internally,
-	// which doesn't work with unicode file paths.
-	LLFILE* sound_file = LLFile::fopen(filename,"rb");	/* Flawfinder: ignore */
-	if (sound_file)
-	{
-		fseek(sound_file,0,SEEK_END);
-		U32	file_length = ftell(sound_file);	//Find the length of the file by seeking to the end and getting the offset
-		size_t	read_count;
-		fseek(sound_file,0,SEEK_SET);	//Seek back to the beginning
-		char*	buffer = new char[file_length];
-		llassert(buffer);
-		read_count = fread((void*)buffer,file_length,1,sound_file);//Load it..
-		if(ferror(sound_file)==0 && (read_count == 1)){//No read error, and we got 1 chunk of our size...
-			unsigned int mode_flags = FSOUND_LOOP_NORMAL | FSOUND_LOADMEMORY;
-									//FSOUND_16BITS | FSOUND_MONO | FSOUND_LOADMEMORY | FSOUND_LOOP_NORMAL;
-			mSamplep = FSOUND_Sample_Load(FSOUND_UNMANAGED, buffer, mode_flags , 0, file_length);
-		}
-		delete[] buffer;
-		fclose(sound_file);
-	}
-#else
-	mSamplep = FSOUND_Sample_Load(FSOUND_UNMANAGED, filename.c_str(), FSOUND_LOOP_NORMAL, 0, 0);
-#endif
-
-	if (!mSamplep)
-	{
-		// We failed to load the file for some reason.
-		llwarns << "Could not load data '" << filename << "': "
-				<< FMOD_ErrorString(FSOUND_GetError()) << llendl;
-
-		//
-		// If we EVER want to load wav files provided by end users, we need
-		// to rethink this!
-		//
-		// file is probably corrupt - remove it.
-		LLFile::remove(filename);
-		return false;
-	}
-
-	// Everything went well, return true
-	return true;
-}
-
-
-U32 LLAudioBufferFMOD::getLength()
-{
-	if (!mSamplep)
-	{
-		return 0;
-	}
-
-	return FSOUND_Sample_GetLength(mSamplep);
-}
-
-
-void LLAudioBufferFMOD::set3DMode(bool use3d)
-{
-	U16 current_mode = FSOUND_Sample_GetMode(mSamplep);
-	
-	if (use3d)
-	{
-		if (!FSOUND_Sample_SetMode(mSamplep, (current_mode & (~FSOUND_2D))))
-		{
-			llwarns << "LLAudioBufferFMOD::set3DMode error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-		}
-	}
-	else
-	{
-		if (!FSOUND_Sample_SetMode(mSamplep, current_mode | FSOUND_2D))
-		{
-			llwarns << "LLAudioBufferFMOD::set3DMode error: " << FMOD_ErrorString(FSOUND_GetError()) << llendl;
-		}
-	}
-}
-
-
-void * F_CALLBACKAPI windCallback(void *originalbuffer, void *newbuffer, int length, void* userdata)
-{
-	// originalbuffer = fmod's original mixbuffer.
-	// newbuffer = the buffer passed from the previous DSP unit.
-	// length = length in samples at this mix time.
-	// userdata = user parameter passed through in FSOUND_DSP_Create.
-
-	LLWindGen<LLAudioEngine_FMOD::MIXBUFFERFORMAT> *windgen =
-		(LLWindGen<LLAudioEngine_FMOD::MIXBUFFERFORMAT> *)userdata;
-	
-	newbuffer = windgen->windGenerate((LLAudioEngine_FMOD::MIXBUFFERFORMAT *)newbuffer, length);
-
-	return newbuffer;
-}
diff --git a/indra/llaudio/llaudioengine_fmodex.cpp b/indra/llaudio/llaudioengine_fmodex.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e9b74b8f41836985fb356e57e0db680c8b284ef3
--- /dev/null
+++ b/indra/llaudio/llaudioengine_fmodex.cpp
@@ -0,0 +1,762 @@
+/** 
+ * @file audioengine_fmodex.cpp
+ * @brief Implementation of LLAudioEngine class abstracting the audio 
+ * support as a FMODEX implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llstreamingaudio.h"
+#include "llstreamingaudio_fmodex.h"
+
+#include "llaudioengine_fmodex.h"
+#include "lllistener_fmodex.h"
+
+#include "llerror.h"
+#include "llmath.h"
+#include "llrand.h"
+
+#include "fmod.hpp"
+#include "fmod_errors.h"
+#include "lldir.h"
+#include "llapr.h"
+
+#include "sound_ids.h"
+
+FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *inbuffer, float *outbuffer, unsigned int length, int inchannels, int outchannels);
+
+FMOD::ChannelGroup *LLAudioEngine_FMODEX::mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT] = {0};
+
+LLAudioEngine_FMODEX::LLAudioEngine_FMODEX(bool enable_profiler)
+{
+	mInited = false;
+	mWindGen = NULL;
+	mWindDSP = NULL;
+	mSystem = NULL;
+	mEnableProfiler = enable_profiler;
+}
+
+
+LLAudioEngine_FMODEX::~LLAudioEngine_FMODEX()
+{
+}
+
+
+inline bool Check_FMOD_Error(FMOD_RESULT result, const char *string)
+{
+	if(result == FMOD_OK)
+		return false;
+	lldebugs << string << " Error: " << FMOD_ErrorString(result) << llendl;
+	return true;
+}
+
+void* F_STDCALL decode_alloc(unsigned int size, FMOD_MEMORY_TYPE type, const char *sourcestr)
+{
+	if(type & FMOD_MEMORY_STREAM_DECODE)
+	{
+		llinfos << "Decode buffer size: " << size << llendl;
+	}
+	else if(type & FMOD_MEMORY_STREAM_FILE)
+	{
+		llinfos << "Strean buffer size: " << size << llendl;
+	}
+	return new char[size];
+}
+void* F_STDCALL decode_realloc(void *ptr, unsigned int size, FMOD_MEMORY_TYPE type, const char *sourcestr)
+{
+	memset(ptr,0,size);
+	return ptr;
+}
+void F_STDCALL decode_dealloc(void *ptr, FMOD_MEMORY_TYPE type, const char *sourcestr)
+{
+	delete[] (char*)ptr;
+}
+
+bool LLAudioEngine_FMODEX::init(const S32 num_channels, void* userdata)
+{
+	U32 version;
+	FMOD_RESULT result;
+
+	LL_DEBUGS("AppInit") << "LLAudioEngine_FMODEX::init() initializing FMOD" << LL_ENDL;
+
+	//result = FMOD::Memory_Initialize(NULL, 0, &decode_alloc, &decode_realloc, &decode_dealloc, FMOD_MEMORY_STREAM_DECODE | FMOD_MEMORY_STREAM_FILE);
+	//if(Check_FMOD_Error(result, "FMOD::Memory_Initialize"))
+	//	return false;
+
+	// turn off non-error log spam to fmod.log (TODO: why do we even have an fmod.log if we don't link against log lib?)
+	FMOD::Debug_SetLevel(FMOD_DEBUG_LEVEL_ERROR);
+
+	result = FMOD::System_Create(&mSystem);
+	if(Check_FMOD_Error(result, "FMOD::System_Create"))
+		return false;
+
+	//will call LLAudioEngine_FMODEX::allocateListener, which needs a valid mSystem pointer.
+	LLAudioEngine::init(num_channels, userdata);	
+	
+	result = mSystem->getVersion(&version);
+	Check_FMOD_Error(result, "FMOD::System::getVersion");
+
+	if (version < FMOD_VERSION)
+	{
+		LL_WARNS("AppInit") << "Error : You are using the wrong FMOD Ex version (" << version
+			<< ")!  You should be using FMOD Ex" << FMOD_VERSION << LL_ENDL;
+	}
+
+	result = mSystem->setSoftwareFormat(44100, FMOD_SOUND_FORMAT_PCM16, 0, 0, FMOD_DSP_RESAMPLER_LINEAR);
+	Check_FMOD_Error(result,"FMOD::System::setSoftwareFormat");
+
+	// In this case, all sounds, PLUS wind and stream will be software.
+	result = mSystem->setSoftwareChannels(num_channels + 2);
+	Check_FMOD_Error(result,"FMOD::System::setSoftwareChannels");
+
+	U32 fmod_flags = FMOD_INIT_NORMAL;
+	if(mEnableProfiler)
+	{
+		fmod_flags |= FMOD_INIT_ENABLE_PROFILE;
+		mSystem->createChannelGroup("None", &mChannelGroups[AUDIO_TYPE_NONE]);
+		mSystem->createChannelGroup("SFX", &mChannelGroups[AUDIO_TYPE_SFX]);
+		mSystem->createChannelGroup("UI", &mChannelGroups[AUDIO_TYPE_UI]);
+		mSystem->createChannelGroup("Ambient", &mChannelGroups[AUDIO_TYPE_AMBIENT]);
+	}
+
+#if LL_LINUX
+	bool audio_ok = false;
+
+	if (!audio_ok)
+	{
+		if (NULL == getenv("LL_BAD_FMOD_PULSEAUDIO")) /*Flawfinder: ignore*/
+		{
+			LL_DEBUGS("AppInit") << "Trying PulseAudio audio output..." << LL_ENDL;
+			if(mSystem->setOutput(FMOD_OUTPUTTYPE_PULSEAUDIO) == FMOD_OK &&
+				(result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
+			{
+				LL_DEBUGS("AppInit") << "PulseAudio output initialized OKAY"	<< LL_ENDL;
+				audio_ok = true;
+			}
+			else 
+			{
+				Check_FMOD_Error(result, "PulseAudio audio output FAILED to initialize");
+			}
+		} 
+		else 
+		{
+			LL_DEBUGS("AppInit") << "PulseAudio audio output SKIPPED" << LL_ENDL;
+		}	
+	}
+	if (!audio_ok)
+	{
+		if (NULL == getenv("LL_BAD_FMOD_ALSA"))		/*Flawfinder: ignore*/
+		{
+			LL_DEBUGS("AppInit") << "Trying ALSA audio output..." << LL_ENDL;
+			if(mSystem->setOutput(FMOD_OUTPUTTYPE_ALSA) == FMOD_OK &&
+			    (result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
+			{
+				LL_DEBUGS("AppInit") << "ALSA audio output initialized OKAY" << LL_ENDL;
+				audio_ok = true;
+			} 
+			else 
+			{
+				Check_FMOD_Error(result, "ALSA audio output FAILED to initialize");
+			}
+		} 
+		else 
+		{
+			LL_DEBUGS("AppInit") << "ALSA audio output SKIPPED" << LL_ENDL;
+		}
+	}
+	if (!audio_ok)
+	{
+		if (NULL == getenv("LL_BAD_FMOD_OSS")) 	 /*Flawfinder: ignore*/
+		{
+			LL_DEBUGS("AppInit") << "Trying OSS audio output..." << LL_ENDL;
+			if(mSystem->setOutput(FMOD_OUTPUTTYPE_OSS) == FMOD_OK &&
+			    (result = mSystem->init(num_channels + 2, fmod_flags, 0)) == FMOD_OK)
+			{
+				LL_DEBUGS("AppInit") << "OSS audio output initialized OKAY" << LL_ENDL;
+				audio_ok = true;
+			}
+			else
+			{
+				Check_FMOD_Error(result, "OSS audio output FAILED to initialize");
+			}
+		}
+		else 
+		{
+			LL_DEBUGS("AppInit") << "OSS audio output SKIPPED" << LL_ENDL;
+		}
+	}
+	if (!audio_ok)
+	{
+		LL_WARNS("AppInit") << "Overall audio init failure." << LL_ENDL;
+		return false;
+	}
+
+	// We're interested in logging which output method we
+	// ended up with, for QA purposes.
+	FMOD_OUTPUTTYPE output_type;
+	mSystem->getOutput(&output_type);
+	switch (output_type)
+	{
+		case FMOD_OUTPUTTYPE_NOSOUND: 
+			LL_INFOS("AppInit") << "Audio output: NoSound" << LL_ENDL; break;
+		case FMOD_OUTPUTTYPE_PULSEAUDIO:	
+			LL_INFOS("AppInit") << "Audio output: PulseAudio" << LL_ENDL; break;
+		case FMOD_OUTPUTTYPE_ALSA: 
+			LL_INFOS("AppInit") << "Audio output: ALSA" << LL_ENDL; break;
+		case FMOD_OUTPUTTYPE_OSS:	
+			LL_INFOS("AppInit") << "Audio output: OSS" << LL_ENDL; break;
+		default:
+			LL_INFOS("AppInit") << "Audio output: Unknown!" << LL_ENDL; break;
+	};
+#else // LL_LINUX
+
+	// initialize the FMOD engine
+	result = mSystem->init( num_channels + 2, fmod_flags, 0);
+	if (result == FMOD_ERR_OUTPUT_CREATEBUFFER)
+	{
+		/*
+		Ok, the speaker mode selected isn't supported by this soundcard. Switch it
+		back to stereo...
+		*/
+		result = mSystem->setSpeakerMode(FMOD_SPEAKERMODE_STEREO);
+		Check_FMOD_Error(result,"Error falling back to stereo mode");
+		/*
+		... and re-init.
+		*/
+		result = mSystem->init( num_channels + 2, fmod_flags, 0);
+	}
+	if(Check_FMOD_Error(result, "Error initializing FMOD Ex"))
+		return false;
+#endif
+
+	// set up our favourite FMOD-native streaming audio implementation if none has already been added
+	if (!getStreamingAudioImpl()) // no existing implementation added
+		setStreamingAudioImpl(new LLStreamingAudio_FMODEX(mSystem));
+
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init() FMOD Ex initialized correctly" << LL_ENDL;
+
+	int r_numbuffers, r_samplerate, r_channels, r_bits;
+	unsigned int r_bufferlength;
+	mSystem->getDSPBufferSize(&r_bufferlength, &r_numbuffers);
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): r_bufferlength=" << r_bufferlength << " bytes" << LL_ENDL;
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): r_numbuffers=" << r_numbuffers << LL_ENDL;
+
+	mSystem->getSoftwareFormat(&r_samplerate, NULL, &r_channels, NULL, NULL, &r_bits);
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): r_samplerate=" << r_samplerate << "Hz" << LL_ENDL;
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): r_channels=" << r_channels << LL_ENDL;
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): r_bits =" << r_bits << LL_ENDL;
+
+	char r_name[512];
+	mSystem->getDriverInfo(0, r_name, 511, 0);
+	r_name[511] = '\0';
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): r_name=\"" << r_name << "\"" <<  LL_ENDL;
+
+	int latency = 100; // optimistic default - i suspect if sample rate is 0, everything breaks. 
+	if ( r_samplerate != 0 )
+		latency = (int)(1000.0f * r_bufferlength * r_numbuffers / r_samplerate);
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): latency=" << latency << "ms" << LL_ENDL;
+
+	mInited = true;
+
+	LL_INFOS("AppInit") << "LLAudioEngine_FMODEX::init(): initialization complete." << LL_ENDL;
+
+	return true;
+}
+
+
+std::string LLAudioEngine_FMODEX::getDriverName(bool verbose)
+{
+	llassert_always(mSystem);
+	if (verbose)
+	{
+		U32 version;
+		if(!Check_FMOD_Error(mSystem->getVersion(&version), "FMOD::System::getVersion"))
+		{
+			return llformat("FMOD Ex %1x.%02x.%02x", version >> 16, version >> 8 & 0x000000FF, version & 0x000000FF);
+		}
+	}
+	return "FMODEx";
+}
+
+
+void LLAudioEngine_FMODEX::allocateListener(void)
+{	
+	mListenerp = (LLListener *) new LLListener_FMODEX(mSystem);
+	if (!mListenerp)
+	{
+		llwarns << "Listener creation failed" << llendl;
+	}
+}
+
+
+void LLAudioEngine_FMODEX::shutdown()
+{
+	stopInternetStream();
+
+	llinfos << "About to LLAudioEngine::shutdown()" << llendl;
+	LLAudioEngine::shutdown();
+	
+	llinfos << "LLAudioEngine_FMODEX::shutdown() closing FMOD Ex" << llendl;
+	if ( mSystem ) // speculative fix for MAINT-2657
+	{
+	mSystem->close();
+	mSystem->release();
+	}
+	llinfos << "LLAudioEngine_FMODEX::shutdown() done closing FMOD Ex" << llendl;
+
+	delete mListenerp;
+	mListenerp = NULL;
+}
+
+
+LLAudioBuffer * LLAudioEngine_FMODEX::createBuffer()
+{
+	return new LLAudioBufferFMODEX(mSystem);
+}
+
+
+LLAudioChannel * LLAudioEngine_FMODEX::createChannel()
+{
+	return new LLAudioChannelFMODEX(mSystem);
+}
+
+bool LLAudioEngine_FMODEX::initWind()
+{
+	mNextWindUpdate = 0.0;
+
+	if (!mWindDSP)
+	{
+		FMOD_DSP_DESCRIPTION dspdesc;
+		memset(&dspdesc, 0, sizeof(FMOD_DSP_DESCRIPTION));	//Set everything to zero
+		strncpy(dspdesc.name,"Wind Unit", sizeof(dspdesc.name));	//Set name to "Wind Unit"
+		dspdesc.channels=2;
+		dspdesc.read = &windCallback; //Assign callback.
+		if(Check_FMOD_Error(mSystem->createDSP(&dspdesc, &mWindDSP), "FMOD::createDSP"))
+			return false;
+
+		if(mWindGen)
+			delete mWindGen;
+	
+		float frequency = 44100;
+		mWindDSP->getDefaults(&frequency,0,0,0);
+		mWindGen = new LLWindGen<MIXBUFFERFORMAT>((U32)frequency);
+		mWindDSP->setUserData((void*)mWindGen);
+	}
+
+	if (mWindDSP)
+	{
+		mSystem->playDSP(FMOD_CHANNEL_FREE, mWindDSP, false, 0);
+		return true;
+	}
+	return false;
+}
+
+
+void LLAudioEngine_FMODEX::cleanupWind()
+{
+	if (mWindDSP)
+	{
+		mWindDSP->remove();
+		mWindDSP->release();
+		mWindDSP = NULL;
+	}
+
+	delete mWindGen;
+	mWindGen = NULL;
+}
+
+
+//-----------------------------------------------------------------------
+void LLAudioEngine_FMODEX::updateWind(LLVector3 wind_vec, F32 camera_height_above_water)
+{
+	LLVector3 wind_pos;
+	F64 pitch;
+	F64 center_freq;
+
+	if (!mEnableWind)
+	{
+		return;
+	}
+	
+	if (mWindUpdateTimer.checkExpirationAndReset(LL_WIND_UPDATE_INTERVAL))
+	{
+		
+		// wind comes in as Linden coordinate (+X = forward, +Y = left, +Z = up)
+		// need to convert this to the conventional orientation DS3D and OpenAL use
+		// where +X = right, +Y = up, +Z = backwards
+
+		wind_vec.setVec(-wind_vec.mV[1], wind_vec.mV[2], -wind_vec.mV[0]);
+
+		// cerr << "Wind update" << endl;
+
+		pitch = 1.0 + mapWindVecToPitch(wind_vec);
+		center_freq = 80.0 * pow(pitch,2.5*(mapWindVecToGain(wind_vec)+1.0));
+		
+		mWindGen->mTargetFreq = (F32)center_freq;
+		mWindGen->mTargetGain = (F32)mapWindVecToGain(wind_vec) * mMaxWindGain;
+		mWindGen->mTargetPanGainR = (F32)mapWindVecToPan(wind_vec);
+  	}
+}
+
+//-----------------------------------------------------------------------
+void LLAudioEngine_FMODEX::setInternalGain(F32 gain)
+{
+	if (!mInited)
+	{
+		return;
+	}
+
+	gain = llclamp( gain, 0.0f, 1.0f );
+
+	FMOD::ChannelGroup *master_group;
+	mSystem->getMasterChannelGroup(&master_group);
+
+	master_group->setVolume(gain);
+
+	LLStreamingAudioInterface *saimpl = getStreamingAudioImpl();
+	if ( saimpl )
+	{
+		// fmod likes its streaming audio channel gain re-asserted after
+		// master volume change.
+		saimpl->setGain(saimpl->getGain());
+	}
+}
+
+//
+// LLAudioChannelFMODEX implementation
+//
+
+LLAudioChannelFMODEX::LLAudioChannelFMODEX(FMOD::System *system) : LLAudioChannel(), mSystemp(system), mChannelp(NULL), mLastSamplePos(0)
+{
+}
+
+
+LLAudioChannelFMODEX::~LLAudioChannelFMODEX()
+{
+	cleanup();
+}
+
+bool LLAudioChannelFMODEX::updateBuffer()
+{
+	if (LLAudioChannel::updateBuffer())
+	{
+		// Base class update returned true, which means that we need to actually
+		// set up the channel for a different buffer.
+
+		LLAudioBufferFMODEX *bufferp = (LLAudioBufferFMODEX *)mCurrentSourcep->getCurrentBuffer();
+
+		// Grab the FMOD sample associated with the buffer
+		FMOD::Sound *soundp = bufferp->getSound();
+		if (!soundp)
+		{
+			// This is bad, there should ALWAYS be a sound associated with a legit
+			// buffer.
+			llerrs << "No FMOD sound!" << llendl;
+			return false;
+		}
+
+
+		// Actually play the sound.  Start it off paused so we can do all the necessary
+		// setup.
+		if(!mChannelp)
+		{
+			FMOD_RESULT result = getSystem()->playSound(FMOD_CHANNEL_FREE, soundp, true, &mChannelp);
+			Check_FMOD_Error(result, "FMOD::System::playSound");
+		}
+
+		//llinfos << "Setting up channel " << std::hex << mChannelID << std::dec << llendl;
+	}
+
+	// If we have a source for the channel, we need to update its gain.
+	if (mCurrentSourcep)
+	{
+		// SJB: warnings can spam and hurt framerate, disabling
+		//FMOD_RESULT result;
+
+		mChannelp->setVolume(getSecondaryGain() * mCurrentSourcep->getGain());
+		//Check_FMOD_Error(result, "FMOD::Channel::setVolume");
+
+		mChannelp->setMode(mCurrentSourcep->isLoop() ? FMOD_LOOP_NORMAL : FMOD_LOOP_OFF);
+		/*if(Check_FMOD_Error(result, "FMOD::Channel::setMode"))
+		{
+			S32 index;
+			mChannelp->getIndex(&index);
+ 			llwarns << "Channel " << index << "Source ID: " << mCurrentSourcep->getID()
+ 					<< " at " << mCurrentSourcep->getPositionGlobal() << llendl;		
+		}*/
+	}
+
+	return true;
+}
+
+
+void LLAudioChannelFMODEX::update3DPosition()
+{
+	if (!mChannelp)
+	{
+		// We're not actually a live channel (i.e., we're not playing back anything)
+		return;
+	}
+
+	LLAudioBufferFMODEX  *bufferp = (LLAudioBufferFMODEX  *)mCurrentBufferp;
+	if (!bufferp)
+	{
+		// We don't have a buffer associated with us (should really have been picked up
+		// by the above if.
+		return;
+	}
+
+	if (mCurrentSourcep->isAmbient())
+	{
+		// Ambient sound, don't need to do any positional updates.
+		set3DMode(false);
+	}
+	else
+	{
+		// Localized sound.  Update the position and velocity of the sound.
+		set3DMode(true);
+
+		LLVector3 float_pos;
+		float_pos.setVec(mCurrentSourcep->getPositionGlobal());
+		FMOD_RESULT result = mChannelp->set3DAttributes((FMOD_VECTOR*)float_pos.mV, (FMOD_VECTOR*)mCurrentSourcep->getVelocity().mV);
+		Check_FMOD_Error(result, "FMOD::Channel::set3DAttributes");
+	}
+}
+
+
+void LLAudioChannelFMODEX::updateLoop()
+{
+	if (!mChannelp)
+	{
+		// May want to clear up the loop/sample counters.
+		return;
+	}
+
+	//
+	// Hack:  We keep track of whether we looped or not by seeing when the
+	// sample position looks like it's going backwards.  Not reliable; may
+	// yield false negatives.
+	//
+	U32 cur_pos;
+	mChannelp->getPosition(&cur_pos,FMOD_TIMEUNIT_PCMBYTES);
+
+	if (cur_pos < (U32)mLastSamplePos)
+	{
+		mLoopedThisFrame = true;
+	}
+	mLastSamplePos = cur_pos;
+}
+
+
+void LLAudioChannelFMODEX::cleanup()
+{
+	if (!mChannelp)
+	{
+		//llinfos << "Aborting cleanup with no channel handle." << llendl;
+		return;
+	}
+
+	//llinfos << "Cleaning up channel: " << mChannelID << llendl;
+	Check_FMOD_Error(mChannelp->stop(),"FMOD::Channel::stop");
+
+	mCurrentBufferp = NULL;
+	mChannelp = NULL;
+}
+
+
+void LLAudioChannelFMODEX::play()
+{
+	if (!mChannelp)
+	{
+		llwarns << "Playing without a channel handle, aborting" << llendl;
+		return;
+	}
+
+	Check_FMOD_Error(mChannelp->setPaused(false), "FMOD::Channel::pause");
+
+	getSource()->setPlayedOnce(true);
+
+	if(LLAudioEngine_FMODEX::mChannelGroups[getSource()->getType()])
+		mChannelp->setChannelGroup(LLAudioEngine_FMODEX::mChannelGroups[getSource()->getType()]);
+}
+
+
+void LLAudioChannelFMODEX::playSynced(LLAudioChannel *channelp)
+{
+	LLAudioChannelFMODEX *fmod_channelp = (LLAudioChannelFMODEX*)channelp;
+	if (!(fmod_channelp->mChannelp && mChannelp))
+	{
+		// Don't have channels allocated to both the master and the slave
+		return;
+	}
+
+	U32 cur_pos;
+	if(Check_FMOD_Error(mChannelp->getPosition(&cur_pos,FMOD_TIMEUNIT_PCMBYTES), "Unable to retrieve current position"))
+		return;
+
+	cur_pos %= mCurrentBufferp->getLength();
+	
+	// Try to match the position of our sync master
+	Check_FMOD_Error(mChannelp->setPosition(cur_pos,FMOD_TIMEUNIT_PCMBYTES),"Unable to set current position");
+
+	// Start us playing
+	play();
+}
+
+
+bool LLAudioChannelFMODEX::isPlaying()
+{
+	if (!mChannelp)
+	{
+		return false;
+	}
+
+	bool paused, playing;
+	mChannelp->getPaused(&paused);
+	mChannelp->isPlaying(&playing);
+	return !paused && playing;
+}
+
+
+//
+// LLAudioChannelFMODEX implementation
+//
+
+
+LLAudioBufferFMODEX::LLAudioBufferFMODEX(FMOD::System *system) : mSystemp(system), mSoundp(NULL)
+{
+}
+
+
+LLAudioBufferFMODEX::~LLAudioBufferFMODEX()
+{
+	if(mSoundp)
+	{
+		mSoundp->release();
+		mSoundp = NULL;
+	}
+}
+
+
+bool LLAudioBufferFMODEX::loadWAV(const std::string& filename)
+{
+	// Try to open a wav file from disk.  This will eventually go away, as we don't
+	// really want to block doing this.
+	if (filename.empty())
+	{
+		// invalid filename, abort.
+		return false;
+	}
+
+	if (!LLAPRFile::isExist(filename, NULL, LL_APR_RPB))
+	{
+		// File not found, abort.
+		return false;
+	}
+	
+	if (mSoundp)
+	{
+		// If there's already something loaded in this buffer, clean it up.
+		mSoundp->release();
+		mSoundp = NULL;
+	}
+
+	FMOD_MODE base_mode = FMOD_LOOP_NORMAL | FMOD_SOFTWARE;
+	FMOD_CREATESOUNDEXINFO exinfo;
+	memset(&exinfo,0,sizeof(exinfo));
+	exinfo.cbsize = sizeof(exinfo);
+	exinfo.suggestedsoundtype = FMOD_SOUND_TYPE_WAV;	//Hint to speed up loading.
+	// Load up the wav file into an fmod sample
+#if LL_WINDOWS
+	FMOD_RESULT result = getSystem()->createSound((const char*)utf8str_to_utf16str(filename).c_str(), base_mode | FMOD_UNICODE, &exinfo, &mSoundp);
+#else
+	FMOD_RESULT result = getSystem()->createSound(filename.c_str(), base_mode, &exinfo, &mSoundp);
+#endif
+
+	if (result != FMOD_OK)
+	{
+		// We failed to load the file for some reason.
+		llwarns << "Could not load data '" << filename << "': " << FMOD_ErrorString(result) << llendl;
+
+		//
+		// If we EVER want to load wav files provided by end users, we need
+		// to rethink this!
+		//
+		// file is probably corrupt - remove it.
+		LLFile::remove(filename);
+		return false;
+	}
+
+	// Everything went well, return true
+	return true;
+}
+
+
+U32 LLAudioBufferFMODEX::getLength()
+{
+	if (!mSoundp)
+	{
+		return 0;
+	}
+
+	U32 length;
+	mSoundp->getLength(&length, FMOD_TIMEUNIT_PCMBYTES);
+	return length;
+}
+
+
+void LLAudioChannelFMODEX::set3DMode(bool use3d)
+{
+	FMOD_MODE current_mode;
+	if(mChannelp->getMode(&current_mode) != FMOD_OK)
+		return;
+	FMOD_MODE new_mode = current_mode;	
+	new_mode &= ~(use3d ? FMOD_2D : FMOD_3D);
+	new_mode |= use3d ? FMOD_3D : FMOD_2D;
+
+	if(current_mode != new_mode)
+	{
+		mChannelp->setMode(new_mode);
+	}
+}
+
+
+FMOD_RESULT F_CALLBACK windCallback(FMOD_DSP_STATE *dsp_state, float *originalbuffer, float *newbuffer, unsigned int length, int inchannels, int outchannels)
+{
+	// originalbuffer = fmod's original mixbuffer.
+	// newbuffer = the buffer passed from the previous DSP unit.
+	// length = length in samples at this mix time.
+	// userdata = user parameter passed through in FSOUND_DSP_Create.
+	
+	LLWindGen<LLAudioEngine_FMODEX::MIXBUFFERFORMAT> *windgen;
+	FMOD::DSP *thisdsp = (FMOD::DSP *)dsp_state->instance;
+
+	thisdsp->getUserData((void **)&windgen);
+	S32 channels, configwidth, configheight;
+	thisdsp->getInfo(0, 0, &channels, &configwidth, &configheight);
+	
+	windgen->windGenerate((LLAudioEngine_FMODEX::MIXBUFFERFORMAT *)newbuffer, length);
+
+	return FMOD_OK;
+}
diff --git a/indra/llaudio/llaudioengine_fmod.h b/indra/llaudio/llaudioengine_fmodex.h
similarity index 62%
rename from indra/llaudio/llaudioengine_fmod.h
rename to indra/llaudio/llaudioengine_fmodex.h
index 4582a5d57e1cf83696e98481f3a78db0e1adb8ea..415a9ed0efb7d244bb2d6bcca6a179f9939156a8 100644
--- a/indra/llaudio/llaudioengine_fmod.h
+++ b/indra/llaudio/llaudioengine_fmodex.h
@@ -1,7 +1,7 @@
 /** 
- * @file audioengine_fmod.h
- * @brief Definition of LLAudioEngine class abstracting the audio
- * support as a FMOD 3D implementation
+ * @file audioengine_fmodex.h
+ * @brief Definition of LLAudioEngine class abstracting the audio 
+ * support as a FMODEX implementation
  *
  * $LicenseInfo:firstyear=2002&license=viewerlgpl$
  * Second Life Viewer Source Code
@@ -25,26 +25,33 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_AUDIOENGINE_FMOD_H
-#define LL_AUDIOENGINE_FMOD_H
+#ifndef LL_AUDIOENGINE_FMODEX_H
+#define LL_AUDIOENGINE_FMODEX_H
 
 #include "llaudioengine.h"
-#include "lllistener_fmod.h"
 #include "llwindgen.h"
 
-#include "fmod.h"
-
-class LLAudioStreamManagerFMOD;
-
-class LLAudioEngine_FMOD : public LLAudioEngine 
+//Stubs
+class LLAudioStreamManagerFMODEX;
+namespace FMOD
+{
+	class System;
+	class Channel;
+	class ChannelGroup;
+	class Sound;
+	class DSP;
+}
+
+//Interfaces
+class LLAudioEngine_FMODEX : public LLAudioEngine 
 {
 public:
-	LLAudioEngine_FMOD();
-	virtual ~LLAudioEngine_FMOD();
+	LLAudioEngine_FMODEX(bool enable_profiler);
+	virtual ~LLAudioEngine_FMODEX();
 
 	// initialization/startup/shutdown
 	virtual bool init(const S32 num_channels, void *user_data);
-       	virtual std::string getDriverName(bool verbose);
+	virtual std::string getDriverName(bool verbose);
 	virtual void allocateListener();
 
 	virtual void shutdown();
@@ -54,38 +61,33 @@ class LLAudioEngine_FMOD : public LLAudioEngine
 
 	/*virtual*/void updateWind(LLVector3 direction, F32 camera_height_above_water);
 
-#if LL_DARWIN
-	typedef S32 MIXBUFFERFORMAT;
-#else
-	typedef S16 MIXBUFFERFORMAT;
-#endif
+	typedef F32 MIXBUFFERFORMAT;
 
+	FMOD::System *getSystem()				const {return mSystem;}
 protected:
 	/*virtual*/ LLAudioBuffer *createBuffer(); // Get a free buffer, or flush an existing one if you have to.
 	/*virtual*/ LLAudioChannel *createChannel(); // Create a new audio channel.
 
 	/*virtual*/ void setInternalGain(F32 gain);
-protected:
-	static signed char F_CALLBACKAPI callbackMetaData(char* name, char* value, void* userdata);
-
-	//F32 mMinDistance[MAX_BUFFERS];
-	//F32 mMaxDistance[MAX_BUFFERS];
 
 	bool mInited;
 
-	// On Windows, userdata is the HWND of the application window.
-	void* mUserData;
-
 	LLWindGen<MIXBUFFERFORMAT> *mWindGen;
-	FSOUND_DSPUNIT *mWindDSP;
+
+	FMOD::DSP *mWindDSP;
+	FMOD::System *mSystem;
+	bool mEnableProfiler;
+
+public:
+	static FMOD::ChannelGroup *mChannelGroups[LLAudioEngine::AUDIO_TYPE_COUNT];
 };
 
 
-class LLAudioChannelFMOD : public LLAudioChannel
+class LLAudioChannelFMODEX : public LLAudioChannel
 {
 public:
-	LLAudioChannelFMOD();
-	virtual ~LLAudioChannelFMOD();
+	LLAudioChannelFMODEX(FMOD::System *audioengine);
+	virtual ~LLAudioChannelFMODEX();
 
 protected:
 	/*virtual*/ void play();
@@ -97,28 +99,30 @@ class LLAudioChannelFMOD : public LLAudioChannel
 	/*virtual*/ void update3DPosition();
 	/*virtual*/ void updateLoop();
 
+	void set3DMode(bool use3d);
 protected:
-	int mChannelID;
+	FMOD::System *getSystem()	const {return mSystemp;}
+	FMOD::System *mSystemp;
+	FMOD::Channel *mChannelp;
 	S32 mLastSamplePos;
 };
 
 
-class LLAudioBufferFMOD : public LLAudioBuffer
+class LLAudioBufferFMODEX : public LLAudioBuffer
 {
 public:
-	LLAudioBufferFMOD();
-	virtual ~LLAudioBufferFMOD();
+	LLAudioBufferFMODEX(FMOD::System *audioengine);
+	virtual ~LLAudioBufferFMODEX();
 
 	/*virtual*/ bool loadWAV(const std::string& filename);
 	/*virtual*/ U32 getLength();
-	friend class LLAudioChannelFMOD;
-
-	void set3DMode(bool use3d);
-protected:
-	FSOUND_SAMPLE *getSample()	{ return mSamplep; }
+	friend class LLAudioChannelFMODEX;
 protected:
-	FSOUND_SAMPLE *mSamplep;
+	FMOD::System *getSystem()	const {return mSystemp;}
+	FMOD::System *mSystemp;
+	FMOD::Sound *getSound()		const{ return mSoundp; }
+	FMOD::Sound *mSoundp;
 };
 
 
-#endif // LL_AUDIOENGINE_FMOD_H
+#endif // LL_AUDIOENGINE_FMODEX_H
diff --git a/indra/llaudio/llaudioengine_openal.cpp b/indra/llaudio/llaudioengine_openal.cpp
old mode 100644
new mode 100755
diff --git a/indra/llaudio/llaudioengine_openal.h b/indra/llaudio/llaudioengine_openal.h
old mode 100644
new mode 100755
diff --git a/indra/llaudio/lllistener.cpp b/indra/llaudio/lllistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/llaudio/lllistener.h b/indra/llaudio/lllistener.h
old mode 100644
new mode 100755
diff --git a/indra/llaudio/lllistener_ds3d.h b/indra/llaudio/lllistener_ds3d.h
old mode 100644
new mode 100755
diff --git a/indra/llaudio/lllistener_fmod.cpp b/indra/llaudio/lllistener_fmodex.cpp
similarity index 53%
rename from indra/llaudio/lllistener_fmod.cpp
rename to indra/llaudio/lllistener_fmodex.cpp
index 0138f4345e3f683e522e505aedd6a5fc71d2495b..2509a7aebc9c67bb4e016549377017c1a10dd424 100644
--- a/indra/llaudio/lllistener_fmod.cpp
+++ b/indra/llaudio/lllistener_fmodex.cpp
@@ -1,7 +1,7 @@
 /** 
- * @file listener_fmod.cpp
- * @brief implementation of LISTENER class abstracting the audio
- * support as a FMOD 3D implementation (windows only)
+ * @file listener_fmodex.cpp
+ * @brief Implementation of LISTENER class abstracting the audio
+ * support as a FMODEX implementation
  *
  * $LicenseInfo:firstyear=2002&license=viewerlgpl$
  * Second Life Viewer Source Code
@@ -27,24 +27,25 @@
 
 #include "linden_common.h"
 #include "llaudioengine.h"
-#include "lllistener_fmod.h"
-#include "fmod.h"
+#include "lllistener_fmodex.h"
+#include "fmod.hpp"
 
 //-----------------------------------------------------------------------
 // constructor
 //-----------------------------------------------------------------------
-LLListener_FMOD::LLListener_FMOD()
+LLListener_FMODEX::LLListener_FMODEX(FMOD::System *system)
 {
+	mSystem = system;
 	init();
 }
 
 //-----------------------------------------------------------------------
-LLListener_FMOD::~LLListener_FMOD()
+LLListener_FMODEX::~LLListener_FMODEX()
 {
 }
 
 //-----------------------------------------------------------------------
-void LLListener_FMOD::init(void)
+void LLListener_FMODEX::init(void)
 {
 	// do inherited
 	LLListener::init();
@@ -53,31 +54,31 @@ void LLListener_FMOD::init(void)
 }
 
 //-----------------------------------------------------------------------
-void LLListener_FMOD::translate(LLVector3 offset)
+void LLListener_FMODEX::translate(LLVector3 offset)
 {
 	LLListener::translate(offset);
 
-	FSOUND_3D_Listener_SetAttributes(mPosition.mV, NULL, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]);
+	mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
 }
 
 //-----------------------------------------------------------------------
-void LLListener_FMOD::setPosition(LLVector3 pos)
+void LLListener_FMODEX::setPosition(LLVector3 pos)
 {
 	LLListener::setPosition(pos);
 
-	FSOUND_3D_Listener_SetAttributes(pos.mV, NULL, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]);
+	mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mPosition.mV, NULL, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
 }
 
 //-----------------------------------------------------------------------
-void LLListener_FMOD::setVelocity(LLVector3 vel)
+void LLListener_FMODEX::setVelocity(LLVector3 vel)
 {
 	LLListener::setVelocity(vel);
 
-	FSOUND_3D_Listener_SetAttributes(NULL, vel.mV, mListenAt.mV[0],mListenAt.mV[1],mListenAt.mV[2], mListenUp.mV[0],mListenUp.mV[1],mListenUp.mV[2]);
+	mSystem->set3DListenerAttributes(0, NULL, (FMOD_VECTOR*)mVelocity.mV, (FMOD_VECTOR*)mListenAt.mV, (FMOD_VECTOR*)mListenUp.mV);
 }
 
 //-----------------------------------------------------------------------
-void LLListener_FMOD::orient(LLVector3 up, LLVector3 at)
+void LLListener_FMODEX::orient(LLVector3 up, LLVector3 at)
 {
 	LLListener::orient(up, at);
 
@@ -87,37 +88,46 @@ void LLListener_FMOD::orient(LLVector3 up, LLVector3 at)
 	// since DX is left-handed and we (LL, OpenGL, OpenAL) are right-handed
 	at = -at;
 
-	FSOUND_3D_Listener_SetAttributes(NULL, NULL, at.mV[0],at.mV[1],at.mV[2], up.mV[0],up.mV[1],up.mV[2]);
+	mSystem->set3DListenerAttributes(0, NULL, NULL, (FMOD_VECTOR*)at.mV, (FMOD_VECTOR*)up.mV);
 }
 
 //-----------------------------------------------------------------------
-void LLListener_FMOD::commitDeferredChanges()
+void LLListener_FMODEX::commitDeferredChanges()
 {
-	FSOUND_Update();
+	mSystem->update();
 }
 
 
-void LLListener_FMOD::setRolloffFactor(F32 factor)
+void LLListener_FMODEX::setRolloffFactor(F32 factor)
 {
+	//An internal FMODEx optimization skips 3D updates if there have not been changes to the 3D sound environment.
+	//Sadly, a change in rolloff is not accounted for, thus we must touch the listener properties as well.
+	//In short: Changing the position ticks a dirtyflag inside fmodex, which makes it not skip 3D processing next update call.
+	if(mRolloffFactor != factor)
+	{
+		LLVector3 pos = mVelocity - LLVector3(0.f,0.f,.1f);
+		mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)pos.mV, NULL, NULL, NULL);
+		mSystem->set3DListenerAttributes(0, (FMOD_VECTOR*)mVelocity.mV, NULL, NULL, NULL);
+	}
 	mRolloffFactor = factor;
-	FSOUND_3D_SetRolloffFactor(factor);
+	mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
 }
 
 
-F32 LLListener_FMOD::getRolloffFactor()
+F32 LLListener_FMODEX::getRolloffFactor()
 {
 	return mRolloffFactor;
 }
 
 
-void LLListener_FMOD::setDopplerFactor(F32 factor)
+void LLListener_FMODEX::setDopplerFactor(F32 factor)
 {
 	mDopplerFactor = factor;
-	FSOUND_3D_SetDopplerFactor(factor);
+	mSystem->set3DSettings(mDopplerFactor, 1.f, mRolloffFactor);
 }
 
 
-F32 LLListener_FMOD::getDopplerFactor()
+F32 LLListener_FMODEX::getDopplerFactor()
 {
 	return mDopplerFactor;
 }
diff --git a/indra/llaudio/lllistener_fmod.h b/indra/llaudio/lllistener_fmodex.h
similarity index 84%
rename from indra/llaudio/lllistener_fmod.h
rename to indra/llaudio/lllistener_fmodex.h
index 818da05d51678041cf92c514bf7f885fb0ffe442..073b65d53adc5c68f5f486f3e2d3bc68cbdea5b0 100644
--- a/indra/llaudio/lllistener_fmod.h
+++ b/indra/llaudio/lllistener_fmodex.h
@@ -1,5 +1,5 @@
 /** 
- * @file listener_fmod.h
+ * @file listener_fmodex.h
  * @brief Description of LISTENER class abstracting the audio support
  * as an FMOD 3D implementation (windows and Linux)
  *
@@ -25,16 +25,23 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LISTENER_FMOD_H
-#define LL_LISTENER_FMOD_H
+#ifndef LL_LISTENER_FMODEX_H
+#define LL_LISTENER_FMODEX_H
 
 #include "lllistener.h"
 
-class LLListener_FMOD : public LLListener
+//Stubs
+namespace FMOD
+{
+	class System;
+}
+
+//Interfaces
+class LLListener_FMODEX : public LLListener
 {
  public:  
-	LLListener_FMOD();
-	virtual ~LLListener_FMOD();
+	LLListener_FMODEX(FMOD::System *system);
+	virtual ~LLListener_FMODEX();
 	virtual void init();  
 
 	virtual void translate(LLVector3 offset);
@@ -47,8 +54,8 @@ class LLListener_FMOD : public LLListener
 	virtual F32 getDopplerFactor();
 	virtual void setRolloffFactor(F32 factor);
 	virtual F32 getRolloffFactor();
-
  protected:
+	 FMOD::System *mSystem;
 	 F32 mDopplerFactor;
 	 F32 mRolloffFactor;
 };
diff --git a/indra/llaudio/lllistener_openal.cpp b/indra/llaudio/lllistener_openal.cpp
old mode 100644
new mode 100755
diff --git a/indra/llaudio/lllistener_openal.h b/indra/llaudio/lllistener_openal.h
old mode 100644
new mode 100755
diff --git a/indra/llaudio/llstreamingaudio.h b/indra/llaudio/llstreamingaudio.h
old mode 100644
new mode 100755
index 20104af744ad58bcafaa37b461102ae2100bfb6a..93479f9d598e2c6e7576e0ffbff3b3873095bd96
--- a/indra/llaudio/llstreamingaudio.h
+++ b/indra/llaudio/llstreamingaudio.h
@@ -45,6 +45,8 @@ class LLStreamingAudioInterface
 	virtual void setGain(F32 vol) = 0;
 	virtual F32 getGain() = 0;
 	virtual std::string getURL() = 0;
+	virtual bool supportsAdjustableBufferSizes(){return false;}
+	virtual void setBufferSizes(U32 streambuffertime, U32 decodebuffertime){};
 };
 
 #endif // LL_STREAMINGAUDIO_H
diff --git a/indra/llaudio/llstreamingaudio_fmod.cpp b/indra/llaudio/llstreamingaudio_fmod.cpp
deleted file mode 100644
index bcdea771a76e58213798992ca255cadac726065b..0000000000000000000000000000000000000000
--- a/indra/llaudio/llstreamingaudio_fmod.cpp
+++ /dev/null
@@ -1,356 +0,0 @@
-/** 
- * @file streamingaudio_fmod.cpp
- * @brief LLStreamingAudio_FMOD implementation
- *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser 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
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include "llmath.h"
-
-#include "fmod.h"
-#include "fmod_errors.h"
-
-#include "llstreamingaudio_fmod.h"
-
-
-class LLAudioStreamManagerFMOD
-{
-public:
-	LLAudioStreamManagerFMOD(const std::string& url);
-	int	startStream();
-	bool stopStream(); // Returns true if the stream was successfully stopped.
-	bool ready();
-
-	const std::string& getURL() 	{ return mInternetStreamURL; }
-
-	int getOpenState();
-protected:
-	FSOUND_STREAM* mInternetStream;
-	bool mReady;
-
-	std::string mInternetStreamURL;
-};
-
-
-
-//---------------------------------------------------------------------------
-// Internet Streaming
-//---------------------------------------------------------------------------
-LLStreamingAudio_FMOD::LLStreamingAudio_FMOD() :
-	mCurrentInternetStreamp(NULL),
-	mFMODInternetStreamChannel(-1),
-	mGain(1.0f)
-{
-	// Number of milliseconds of audio to buffer for the audio card.
-	// Must be larger than the usual Second Life frame stutter time.
-	FSOUND_Stream_SetBufferSize(200);
-
-	// Here's where we set the size of the network buffer and some buffering 
-	// parameters.  In this case we want a network buffer of 16k, we want it 
-	// to prebuffer 40% of that when we first connect, and we want it 
-	// to rebuffer 80% of that whenever we encounter a buffer underrun.
-
-	// Leave the net buffer properties at the default.
-	//FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80);
-}
-
-
-LLStreamingAudio_FMOD::~LLStreamingAudio_FMOD()
-{
-	// nothing interesting/safe to do.
-}
-
-
-void LLStreamingAudio_FMOD::start(const std::string& url)
-{
-	//if (!mInited)
-	//{
-	//	llwarns << "startInternetStream before audio initialized" << llendl;
-	//	return;
-	//}
-
-	// "stop" stream but don't clear url, etc. in case url == mInternetStreamURL
-	stop();
-
-	if (!url.empty())
-	{
-		llinfos << "Starting internet stream: " << url << llendl;
-		mCurrentInternetStreamp = new LLAudioStreamManagerFMOD(url);
-		mURL = url;
-	}
-	else
-	{
-		llinfos << "Set internet stream to null" << llendl;
-		mURL.clear();
-	}
-}
-
-
-void LLStreamingAudio_FMOD::update()
-{
-	// Kill dead internet streams, if possible
-	std::list<LLAudioStreamManagerFMOD *>::iterator iter;
-	for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
-	{
-		LLAudioStreamManagerFMOD *streamp = *iter;
-		if (streamp->stopStream())
-		{
-			llinfos << "Closed dead stream" << llendl;
-			delete streamp;
-			mDeadStreams.erase(iter++);
-		}
-		else
-		{
-			iter++;
-		}
-	}
-
-	// Don't do anything if there are no streams playing
-	if (!mCurrentInternetStreamp)
-	{
-		return;
-	}
-
-	int open_state = mCurrentInternetStreamp->getOpenState();
-
-	if (!open_state)
-	{
-		// Stream is live
-
-		// start the stream if it's ready
-		if (mFMODInternetStreamChannel < 0)
-		{
-			mFMODInternetStreamChannel = mCurrentInternetStreamp->startStream();
-
-			if (mFMODInternetStreamChannel != -1)
-			{
-				// Reset volume to previously set volume
-				setGain(getGain());
-				FSOUND_SetPaused(mFMODInternetStreamChannel, false);
-			}
-		}
-	}
-		
-	switch(open_state)
-	{
-	default:
-	case 0:
-		// success
-		break;
-	case -1:
-		// stream handle is invalid
-		llwarns << "InternetStream - invalid handle" << llendl;
-		stop();
-		return;
-	case -2:
-		// opening
-		break;
-	case -3:
-		// failed to open, file not found, perhaps
-		llwarns << "InternetStream - failed to open" << llendl;
-		stop();
-		return;
-	case -4:
-		// connecting
-		break;
-	case -5:
-		// buffering
-		break;
-	}
-
-}
-
-void LLStreamingAudio_FMOD::stop()
-{
-	if (mFMODInternetStreamChannel != -1)
-	{
-		FSOUND_SetPaused(mFMODInternetStreamChannel, true);
-		FSOUND_SetPriority(mFMODInternetStreamChannel, 0);
-		mFMODInternetStreamChannel = -1;
-	}
-
-	if (mCurrentInternetStreamp)
-	{
-		llinfos << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << llendl;
-		if (mCurrentInternetStreamp->stopStream())
-		{
-			delete mCurrentInternetStreamp;
-		}
-		else
-		{
-			llwarns << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << llendl;
-			mDeadStreams.push_back(mCurrentInternetStreamp);
-		}
-		mCurrentInternetStreamp = NULL;
-		//mURL.clear();
-	}
-}
-
-void LLStreamingAudio_FMOD::pause(int pauseopt)
-{
-	if (pauseopt < 0)
-	{
-		pauseopt = mCurrentInternetStreamp ? 1 : 0;
-	}
-
-	if (pauseopt)
-	{
-		if (mCurrentInternetStreamp)
-		{
-			stop();
-		}
-	}
-	else
-	{
-		start(getURL());
-	}
-}
-
-
-// A stream is "playing" if it has been requested to start.  That
-// doesn't necessarily mean audio is coming out of the speakers.
-int LLStreamingAudio_FMOD::isPlaying()
-{
-	if (mCurrentInternetStreamp)
-	{
-		return 1; // Active and playing
-	}
-	else if (!mURL.empty())
-	{
-		return 2; // "Paused"
-	}
-	else
-	{
-		return 0;
-	}
-}
-
-
-F32 LLStreamingAudio_FMOD::getGain()
-{
-	return mGain;
-}
-
-
-std::string LLStreamingAudio_FMOD::getURL()
-{
-	return mURL;
-}
-
-
-void LLStreamingAudio_FMOD::setGain(F32 vol)
-{
-	mGain = vol;
-
-	if (mFMODInternetStreamChannel != -1)
-	{
-		vol = llclamp(vol * vol, 0.f, 1.f);
-		int vol_int = llround(vol * 255.f);
-		FSOUND_SetVolumeAbsolute(mFMODInternetStreamChannel, vol_int);
-	}
-}
-
-
-///////////////////////////////////////////////////////
-// manager of possibly-multiple internet audio streams
-
-LLAudioStreamManagerFMOD::LLAudioStreamManagerFMOD(const std::string& url) :
-	mInternetStream(NULL),
-	mReady(false)
-{
-	mInternetStreamURL = url;
-	mInternetStream = FSOUND_Stream_Open(url.c_str(), FSOUND_NORMAL | FSOUND_NONBLOCKING, 0, 0);
-	if (!mInternetStream)
-	{
-		llwarns << "Couldn't open fmod stream, error "
-			<< FMOD_ErrorString(FSOUND_GetError())
-			<< llendl;
-		mReady = false;
-		return;
-	}
-
-	mReady = true;
-}
-
-int LLAudioStreamManagerFMOD::startStream()
-{
-	// We need a live and opened stream before we try and play it.
-	if (!mInternetStream || getOpenState())
-	{
-		llwarns << "No internet stream to start playing!" << llendl;
-		return -1;
-	}
-
-	// Make sure the stream is set to 2D mode.
-	FSOUND_Stream_SetMode(mInternetStream, FSOUND_2D);
-
-	return FSOUND_Stream_PlayEx(FSOUND_FREE, mInternetStream, NULL, true);
-}
-
-bool LLAudioStreamManagerFMOD::stopStream()
-{
-	if (mInternetStream)
-	{
-		int read_percent = 0;
-		int status = 0;
-		int bitrate = 0;
-		unsigned int flags = 0x0;
-		FSOUND_Stream_Net_GetStatus(mInternetStream, &status, &read_percent, &bitrate, &flags);
-
-		bool close = true;
-		switch (status)
-		{
-		case FSOUND_STREAM_NET_CONNECTING:
-			close = false;
-			break;
-		case FSOUND_STREAM_NET_NOTCONNECTED:
-		case FSOUND_STREAM_NET_BUFFERING:
-		case FSOUND_STREAM_NET_READY:
-		case FSOUND_STREAM_NET_ERROR:
-		default:
-			close = true;
-		}
-
-		if (close)
-		{
-			FSOUND_Stream_Close(mInternetStream);
-			mInternetStream = NULL;
-			return true;
-		}
-		else
-		{
-			return false;
-		}
-	}
-	else
-	{
-		return true;
-	}
-}
-
-int LLAudioStreamManagerFMOD::getOpenState()
-{
-	int open_state = FSOUND_Stream_GetOpenState(mInternetStream);
-	return open_state;
-}
diff --git a/indra/llaudio/llstreamingaudio_fmodex.cpp b/indra/llaudio/llstreamingaudio_fmodex.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..42f30aa1c44ef487795efbad38b58f03254fbd5e
--- /dev/null
+++ b/indra/llaudio/llstreamingaudio_fmodex.cpp
@@ -0,0 +1,392 @@
+/** 
+ * @file streamingaudio_fmodex.cpp
+ * @brief LLStreamingAudio_FMODEX implementation
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llmath.h"
+
+#include "fmod.hpp"
+#include "fmod_errors.h"
+
+#include "llstreamingaudio_fmodex.h"
+
+
+class LLAudioStreamManagerFMODEX
+{
+public:
+	LLAudioStreamManagerFMODEX(FMOD::System *system, const std::string& url);
+	FMOD::Channel* startStream();
+	bool stopStream(); // Returns true if the stream was successfully stopped.
+	bool ready();
+
+	const std::string& getURL() 	{ return mInternetStreamURL; }
+
+	FMOD_OPENSTATE getOpenState(unsigned int* percentbuffered=NULL, bool* starving=NULL, bool* diskbusy=NULL);
+protected:
+	FMOD::System* mSystem;
+	FMOD::Channel* mStreamChannel;
+	FMOD::Sound* mInternetStream;
+	bool mReady;
+
+	std::string mInternetStreamURL;
+};
+
+
+
+//---------------------------------------------------------------------------
+// Internet Streaming
+//---------------------------------------------------------------------------
+LLStreamingAudio_FMODEX::LLStreamingAudio_FMODEX(FMOD::System *system) :
+	mSystem(system),
+	mCurrentInternetStreamp(NULL),
+	mFMODInternetStreamChannelp(NULL),
+	mGain(1.0f)
+{
+	// Number of milliseconds of audio to buffer for the audio card.
+	// Must be larger than the usual Second Life frame stutter time.
+	const U32 buffer_seconds = 10;		//sec
+	const U32 estimated_bitrate = 128;	//kbit/sec
+	mSystem->setStreamBufferSize(estimated_bitrate * buffer_seconds * 128/*bytes/kbit*/, FMOD_TIMEUNIT_RAWBYTES);
+
+	// Here's where we set the size of the network buffer and some buffering 
+	// parameters.  In this case we want a network buffer of 16k, we want it 
+	// to prebuffer 40% of that when we first connect, and we want it 
+	// to rebuffer 80% of that whenever we encounter a buffer underrun.
+
+	// Leave the net buffer properties at the default.
+	//FSOUND_Stream_Net_SetBufferProperties(20000, 40, 80);
+}
+
+
+LLStreamingAudio_FMODEX::~LLStreamingAudio_FMODEX()
+{
+	// nothing interesting/safe to do.
+}
+
+
+void LLStreamingAudio_FMODEX::start(const std::string& url)
+{
+	//if (!mInited)
+	//{
+	//	llwarns << "startInternetStream before audio initialized" << llendl;
+	//	return;
+	//}
+
+	// "stop" stream but don't clear url, etc. in case url == mInternetStreamURL
+	stop();
+
+	if (!url.empty())
+	{
+		llinfos << "Starting internet stream: " << url << llendl;
+		mCurrentInternetStreamp = new LLAudioStreamManagerFMODEX(mSystem,url);
+		mURL = url;
+	}
+	else
+	{
+		llinfos << "Set internet stream to null" << llendl;
+		mURL.clear();
+	}
+}
+
+
+void LLStreamingAudio_FMODEX::update()
+{
+	// Kill dead internet streams, if possible
+	std::list<LLAudioStreamManagerFMODEX *>::iterator iter;
+	for (iter = mDeadStreams.begin(); iter != mDeadStreams.end();)
+	{
+		LLAudioStreamManagerFMODEX *streamp = *iter;
+		if (streamp->stopStream())
+		{
+			llinfos << "Closed dead stream" << llendl;
+			delete streamp;
+			mDeadStreams.erase(iter++);
+		}
+		else
+		{
+			iter++;
+		}
+	}
+
+	// Don't do anything if there are no streams playing
+	if (!mCurrentInternetStreamp)
+	{
+		return;
+	}
+
+	unsigned int progress;
+	bool starving;
+	bool diskbusy;
+	FMOD_OPENSTATE open_state = mCurrentInternetStreamp->getOpenState(&progress, &starving, &diskbusy);
+
+	if (open_state == FMOD_OPENSTATE_READY)
+	{
+		// Stream is live
+
+		// start the stream if it's ready
+		if (!mFMODInternetStreamChannelp &&
+			(mFMODInternetStreamChannelp = mCurrentInternetStreamp->startStream()))
+		{
+			// Reset volume to previously set volume
+			setGain(getGain());
+			mFMODInternetStreamChannelp->setPaused(false);
+		}
+	}
+	else if(open_state == FMOD_OPENSTATE_ERROR)
+	{
+		stop();
+		return;
+	}
+
+	if(mFMODInternetStreamChannelp)
+	{
+		FMOD::Sound *sound = NULL;
+
+		if(mFMODInternetStreamChannelp->getCurrentSound(&sound) == FMOD_OK && sound)
+		{
+			FMOD_TAG tag;
+			S32 tagcount, dirtytagcount;
+
+			if(sound->getNumTags(&tagcount, &dirtytagcount) == FMOD_OK && dirtytagcount)
+			{
+				for(S32 i = 0; i < tagcount; ++i)
+				{
+					if(sound->getTag(NULL, i, &tag)!=FMOD_OK)
+						continue;
+
+					if (tag.type == FMOD_TAGTYPE_FMOD)
+					{
+						if (!strcmp(tag.name, "Sample Rate Change"))
+						{
+							llinfos << "Stream forced changing sample rate to " << *((float *)tag.data) << llendl;
+							mFMODInternetStreamChannelp->setFrequency(*((float *)tag.data));
+						}
+						continue;
+					}
+				}
+			}
+
+			if(starving)
+			{
+				bool paused = false;
+				mFMODInternetStreamChannelp->getPaused(&paused);
+				if(!paused)
+				{
+					llinfos << "Stream starvation detected! Pausing stream until buffer nearly full." << llendl;
+					llinfos << "  (diskbusy="<<diskbusy<<")" << llendl;
+					llinfos << "  (progress="<<progress<<")" << llendl;
+					mFMODInternetStreamChannelp->setPaused(true);
+				}
+			}
+			else if(progress > 80)
+			{
+				mFMODInternetStreamChannelp->setPaused(false);
+			}
+		}
+	}
+}
+
+void LLStreamingAudio_FMODEX::stop()
+{
+	if (mFMODInternetStreamChannelp)
+	{
+		mFMODInternetStreamChannelp->setPaused(true);
+		mFMODInternetStreamChannelp->setPriority(0);
+		mFMODInternetStreamChannelp = NULL;
+	}
+
+	if (mCurrentInternetStreamp)
+	{
+		llinfos << "Stopping internet stream: " << mCurrentInternetStreamp->getURL() << llendl;
+		if (mCurrentInternetStreamp->stopStream())
+		{
+			delete mCurrentInternetStreamp;
+		}
+		else
+		{
+			llwarns << "Pushing stream to dead list: " << mCurrentInternetStreamp->getURL() << llendl;
+			mDeadStreams.push_back(mCurrentInternetStreamp);
+		}
+		mCurrentInternetStreamp = NULL;
+		//mURL.clear();
+	}
+}
+
+void LLStreamingAudio_FMODEX::pause(int pauseopt)
+{
+	if (pauseopt < 0)
+	{
+		pauseopt = mCurrentInternetStreamp ? 1 : 0;
+	}
+
+	if (pauseopt)
+	{
+		if (mCurrentInternetStreamp)
+		{
+			stop();
+		}
+	}
+	else
+	{
+		start(getURL());
+	}
+}
+
+
+// A stream is "playing" if it has been requested to start.  That
+// doesn't necessarily mean audio is coming out of the speakers.
+int LLStreamingAudio_FMODEX::isPlaying()
+{
+	if (mCurrentInternetStreamp)
+	{
+		return 1; // Active and playing
+	}
+	else if (!mURL.empty())
+	{
+		return 2; // "Paused"
+	}
+	else
+	{
+		return 0;
+	}
+}
+
+
+F32 LLStreamingAudio_FMODEX::getGain()
+{
+	return mGain;
+}
+
+
+std::string LLStreamingAudio_FMODEX::getURL()
+{
+	return mURL;
+}
+
+
+void LLStreamingAudio_FMODEX::setGain(F32 vol)
+{
+	mGain = vol;
+
+	if (mFMODInternetStreamChannelp)
+	{
+		vol = llclamp(vol * vol, 0.f, 1.f);	//should vol be squared here?
+
+		mFMODInternetStreamChannelp->setVolume(vol);
+	}
+}
+
+///////////////////////////////////////////////////////
+// manager of possibly-multiple internet audio streams
+
+LLAudioStreamManagerFMODEX::LLAudioStreamManagerFMODEX(FMOD::System *system, const std::string& url) :
+	mSystem(system),
+	mStreamChannel(NULL),
+	mInternetStream(NULL),
+	mReady(false)
+{
+	mInternetStreamURL = url;
+
+	FMOD_RESULT result = mSystem->createStream(url.c_str(), FMOD_2D | FMOD_NONBLOCKING | FMOD_IGNORETAGS, 0, &mInternetStream);
+
+	if (result!= FMOD_OK)
+	{
+		llwarns << "Couldn't open fmod stream, error "
+			<< FMOD_ErrorString(result)
+			<< llendl;
+		mReady = false;
+		return;
+	}
+
+	mReady = true;
+}
+
+FMOD::Channel *LLAudioStreamManagerFMODEX::startStream()
+{
+	// We need a live and opened stream before we try and play it.
+	if (!mInternetStream || getOpenState() != FMOD_OPENSTATE_READY)
+	{
+		llwarns << "No internet stream to start playing!" << llendl;
+		return NULL;
+	}
+
+	if(mStreamChannel)
+		return mStreamChannel;	//Already have a channel for this stream.
+
+	mSystem->playSound(FMOD_CHANNEL_FREE, mInternetStream, true, &mStreamChannel);
+	return mStreamChannel;
+}
+
+bool LLAudioStreamManagerFMODEX::stopStream()
+{
+	if (mInternetStream)
+	{
+
+
+		bool close = true;
+		switch (getOpenState())
+		{
+		case FMOD_OPENSTATE_CONNECTING:
+			close = false;
+			break;
+		default:
+			close = true;
+		}
+
+		if (close)
+		{
+			mInternetStream->release();
+			mStreamChannel = NULL;
+			mInternetStream = NULL;
+			return true;
+		}
+		else
+		{
+			return false;
+		}
+	}
+	else
+	{
+		return true;
+	}
+}
+
+FMOD_OPENSTATE LLAudioStreamManagerFMODEX::getOpenState(unsigned int* percentbuffered, bool* starving, bool* diskbusy)
+{
+	FMOD_OPENSTATE state;
+	mInternetStream->getOpenState(&state, percentbuffered, starving, diskbusy);
+	return state;
+}
+
+void LLStreamingAudio_FMODEX::setBufferSizes(U32 streambuffertime, U32 decodebuffertime)
+{
+	mSystem->setStreamBufferSize(streambuffertime/1000*128*128, FMOD_TIMEUNIT_RAWBYTES);
+	FMOD_ADVANCEDSETTINGS settings;
+	memset(&settings,0,sizeof(settings));
+	settings.cbsize=sizeof(settings);
+	settings.defaultDecodeBufferSize = decodebuffertime;//ms
+	mSystem->setAdvancedSettings(&settings);
+}
diff --git a/indra/llaudio/llstreamingaudio_fmod.h b/indra/llaudio/llstreamingaudio_fmodex.h
similarity index 60%
rename from indra/llaudio/llstreamingaudio_fmod.h
rename to indra/llaudio/llstreamingaudio_fmodex.h
index 9970f0d03bc39af1ac4976ee60915f97cf687c5c..1dee18ae7dab520cea4295bdd254dc14a4da21d2 100644
--- a/indra/llaudio/llstreamingaudio_fmod.h
+++ b/indra/llaudio/llstreamingaudio_fmodex.h
@@ -1,9 +1,8 @@
 /** 
- * @file streamingaudio_fmod.h
- * @author Tofu Linden
- * @brief Definition of LLStreamingAudio_FMOD implementation
+ * @file streamingaudio_fmodex.h
+ * @brief Definition of LLStreamingAudio_FMODEX implementation
  *
- * $LicenseInfo:firstyear=2009&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
  * Second Life Viewer Source Code
  * Copyright (C) 2010, Linden Research, Inc.
  * 
@@ -25,20 +24,28 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_STREAMINGAUDIO_FMOD_H
-#define LL_STREAMINGAUDIO_FMOD_H
+#ifndef LL_STREAMINGAUDIO_FMODEX_H
+#define LL_STREAMINGAUDIO_FMODEX_H
 
 #include "stdtypes.h" // from llcommon
 
 #include "llstreamingaudio.h"
+#include "lltimer.h"
 
-class LLAudioStreamManagerFMOD;
+//Stubs
+class LLAudioStreamManagerFMODEX;
+namespace FMOD
+{
+	class System;
+	class Channel;
+}
 
-class LLStreamingAudio_FMOD : public LLStreamingAudioInterface
+//Interfaces
+class LLStreamingAudio_FMODEX : public LLStreamingAudioInterface
 {
  public:
-	LLStreamingAudio_FMOD();
-	/*virtual*/ ~LLStreamingAudio_FMOD();
+	LLStreamingAudio_FMODEX(FMOD::System *system);
+	/*virtual*/ ~LLStreamingAudio_FMODEX();
 
 	/*virtual*/ void start(const std::string& url);
 	/*virtual*/ void stop();
@@ -49,14 +56,18 @@ class LLStreamingAudio_FMOD : public LLStreamingAudioInterface
 	/*virtual*/ F32 getGain();
 	/*virtual*/ std::string getURL();
 
+	/*virtual*/ bool supportsAdjustableBufferSizes(){return true;}
+	/*virtual*/ void setBufferSizes(U32 streambuffertime, U32 decodebuffertime);
 private:
-	LLAudioStreamManagerFMOD *mCurrentInternetStreamp;
-	int mFMODInternetStreamChannel;
-	std::list<LLAudioStreamManagerFMOD *> mDeadStreams;
+	FMOD::System *mSystem;
+
+	LLAudioStreamManagerFMODEX *mCurrentInternetStreamp;
+	FMOD::Channel *mFMODInternetStreamChannelp;
+	std::list<LLAudioStreamManagerFMODEX *> mDeadStreams;
 
 	std::string mURL;
 	F32 mGain;
 };
 
 
-#endif // LL_STREAMINGAUDIO_FMOD_H
+#endif // LL_STREAMINGAUDIO_FMODEX_H
diff --git a/indra/llaudio/llvorbisencode.cpp b/indra/llaudio/llvorbisencode.cpp
old mode 100644
new mode 100755
index 0e0c80a45675b6aad361fb49fd563645cf3409d8..dfd5da12b3fa4f700c8f1acd4c95e1d8f2b673a2
--- a/indra/llaudio/llvorbisencode.cpp
+++ b/indra/llaudio/llvorbisencode.cpp
@@ -35,7 +35,7 @@
 #include "llapr.h"
 
 //#if LL_DARWIN
-// MBW -- XXX -- Getting rid of SecondLifeVorbis for now -- no fmod means no name collisions.
+// MBW -- XXX -- Getting rid of SecondLifeVorbis for now
 #if 0
 #include "VorbisFramework.h"
 
diff --git a/indra/llaudio/llvorbisencode.h b/indra/llaudio/llvorbisencode.h
old mode 100644
new mode 100755
diff --git a/indra/llaudio/llwindgen.h b/indra/llaudio/llwindgen.h
old mode 100644
new mode 100755
index b9cecb60a1edc1835feae36a5092c0dd191339e3..ec58f76f5fd34c48d824e3cbabac3e794fceb33d
--- a/indra/llaudio/llwindgen.h
+++ b/indra/llaudio/llwindgen.h
@@ -27,6 +27,7 @@
 #define WINDGEN_H
 
 #include "llcommon.h"
+#include "llrand.h"
 
 template <class MIXBUFFERFORMAT_T>
 class LLWindGen
@@ -54,6 +55,8 @@ class LLWindGen
 	}
 
 	const U32 getInputSamplingRate() { return mInputSamplingRate; }
+	const F32 getNextSample();
+	const F32 getClampedSample(bool clamp, F32 sample);
 	
 	// newbuffer = the buffer passed from the previous DSP unit.
 	// numsamples = length in samples-per-channel at this mix time.
@@ -89,7 +92,7 @@ class LLWindGen
 			
 			// Start with white noise
 			// This expression is fragile, rearrange it and it will break!
-			next_sample = (F32)rand() * (1.0f / (F32)(RAND_MAX / (U16_MAX / 8))) + (F32)(S16_MIN / 8);
+			next_sample = getNextSample();
 			
 			// Apply a pinking filter
 			// Magic numbers taken from PKE method at http://www.firstpr.com.au/dsp/pink-noise/
@@ -126,25 +129,15 @@ class LLWindGen
 			for (U8 i=mSubSamples; i && numsamples; --i, --numsamples) 
 			{
 				mLastSample = mLastSample + delta;
-				S32	sample_right = (S32)(mLastSample * mCurrentPanGainR);
-				S32	sample_left = (S32)mLastSample - sample_right;
+				MIXBUFFERFORMAT_T	sample_right = (MIXBUFFERFORMAT_T)getClampedSample(clip, mLastSample * mCurrentPanGainR);
+				MIXBUFFERFORMAT_T	sample_left = (MIXBUFFERFORMAT_T)getClampedSample(clip, mLastSample - (F32)sample_right);
 				
-				if (!clip)
-				{
-					*cursamplep = (MIXBUFFERFORMAT_T)sample_left;
+				*cursamplep = sample_left;
 					++cursamplep;
-					*cursamplep = (MIXBUFFERFORMAT_T)sample_right;
-					++cursamplep;
-				}
-				else
-				{
-					*cursamplep = (MIXBUFFERFORMAT_T)llclamp(sample_left, (S32)S16_MIN, (S32)S16_MAX);
-					++cursamplep;
-					*cursamplep = (MIXBUFFERFORMAT_T)llclamp(sample_right, (S32)S16_MIN, (S32)S16_MAX);
+				*cursamplep = sample_right;
 					++cursamplep;
 				}
 			}
-		}
 		
 		return newbuffer;
 	}
@@ -173,4 +166,9 @@ class LLWindGen
 	F32 mLastSample;
 };
 
+template<class T> inline const F32 LLWindGen<T>::getNextSample() { return (F32)rand() * (1.0f / (F32)(RAND_MAX / (U16_MAX / 8))) + (F32)(S16_MIN / 8); }
+template<> inline const F32 LLWindGen<F32>::getNextSample() { return ll_frand()-.5f; }
+template<class T> inline const F32 LLWindGen<T>::getClampedSample(bool clamp, F32 sample) { return clamp ? (F32)llclamp((S32)sample,(S32)S16_MIN,(S32)S16_MAX) : sample; }
+template<> inline const F32 LLWindGen<F32>::getClampedSample(bool clamp, F32 sample) { return sample; }
+
 #endif
diff --git a/indra/llcharacter/CMakeLists.txt b/indra/llcharacter/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llanimationstates.cpp b/indra/llcharacter/llanimationstates.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llanimationstates.h b/indra/llcharacter/llanimationstates.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llbvhconsts.h b/indra/llcharacter/llbvhconsts.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llbvhloader.cpp b/indra/llcharacter/llbvhloader.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llbvhloader.h b/indra/llcharacter/llbvhloader.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llcharacter.cpp b/indra/llcharacter/llcharacter.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llcharacter.h b/indra/llcharacter/llcharacter.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lleditingmotion.cpp b/indra/llcharacter/lleditingmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lleditingmotion.h b/indra/llcharacter/lleditingmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llgesture.cpp b/indra/llcharacter/llgesture.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llgesture.h b/indra/llcharacter/llgesture.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llhandmotion.cpp b/indra/llcharacter/llhandmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llhandmotion.h b/indra/llcharacter/llhandmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llheadrotmotion.cpp b/indra/llcharacter/llheadrotmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llheadrotmotion.h b/indra/llcharacter/llheadrotmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lljoint.cpp b/indra/llcharacter/lljoint.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lljoint.h b/indra/llcharacter/lljoint.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lljointsolverrp3.cpp b/indra/llcharacter/lljointsolverrp3.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lljointsolverrp3.h b/indra/llcharacter/lljointsolverrp3.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lljointstate.h b/indra/llcharacter/lljointstate.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframefallmotion.cpp b/indra/llcharacter/llkeyframefallmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframefallmotion.h b/indra/llcharacter/llkeyframefallmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframemotion.cpp b/indra/llcharacter/llkeyframemotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframemotion.h b/indra/llcharacter/llkeyframemotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframemotionparam.cpp b/indra/llcharacter/llkeyframemotionparam.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframemotionparam.h b/indra/llcharacter/llkeyframemotionparam.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframestandmotion.cpp b/indra/llcharacter/llkeyframestandmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframestandmotion.h b/indra/llcharacter/llkeyframestandmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframewalkmotion.cpp b/indra/llcharacter/llkeyframewalkmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llkeyframewalkmotion.h b/indra/llcharacter/llkeyframewalkmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llmotion.cpp b/indra/llcharacter/llmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llmotion.h b/indra/llcharacter/llmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llmotioncontroller.cpp b/indra/llcharacter/llmotioncontroller.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llmotioncontroller.h b/indra/llcharacter/llmotioncontroller.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llmultigesture.cpp b/indra/llcharacter/llmultigesture.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llmultigesture.h b/indra/llcharacter/llmultigesture.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llpose.cpp b/indra/llcharacter/llpose.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llpose.h b/indra/llcharacter/llpose.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llstatemachine.cpp b/indra/llcharacter/llstatemachine.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llstatemachine.h b/indra/llcharacter/llstatemachine.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lltargetingmotion.cpp b/indra/llcharacter/lltargetingmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/lltargetingmotion.h b/indra/llcharacter/lltargetingmotion.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llvisualparam.cpp b/indra/llcharacter/llvisualparam.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/llvisualparam.h b/indra/llcharacter/llvisualparam.h
old mode 100644
new mode 100755
diff --git a/indra/llcharacter/tests/lljoint_test.cpp b/indra/llcharacter/tests/lljoint_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/CMakeLists.txt b/indra/llcommon/CMakeLists.txt
old mode 100644
new mode 100755
index 5cce8ff2c46fd238dc64c7e852901ea5efacb434..3a4a8facc217ef7b041d83a614618009bd0901bb
--- a/indra/llcommon/CMakeLists.txt
+++ b/indra/llcommon/CMakeLists.txt
@@ -17,6 +17,7 @@ include_directories(
     ${EXPAT_INCLUDE_DIRS}
     ${LLCOMMON_INCLUDE_DIRS}
     ${ZLIB_INCLUDE_DIRS}
+    ${BREAKPAD_INCLUDE_DIRECTORIES}
     )
 
 # add_executable(lltreeiterators lltreeiterators.cpp)
@@ -246,7 +247,6 @@ set(llcommon_HEADER_FILES
     lluuid.h
     lluuidhashmap.h
     llversionserver.h
-    llversionviewer.h
     llworkerthread.h
     ll_template_cast.h
     metaclass.h
@@ -337,6 +337,7 @@ if (LL_TESTS)
   LL_ADD_INTEGRATION_TEST(reflection "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(stringize "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(lleventdispatcher "" "${test_libs}")
+  LL_ADD_INTEGRATION_TEST(lleventcoro "" "${test_libs};${BOOST_CONTEXT_LIBRARY}")
   LL_ADD_INTEGRATION_TEST(llprocess "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llleap "" "${test_libs}")
   LL_ADD_INTEGRATION_TEST(llstreamqueue "" "${test_libs}")
diff --git a/indra/llcommon/bitpack.cpp b/indra/llcommon/bitpack.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/bitpack.h b/indra/llcommon/bitpack.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/ctype_workaround.h b/indra/llcommon/ctype_workaround.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/doublelinkedlist.h b/indra/llcommon/doublelinkedlist.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/fix_macros.h b/indra/llcommon/fix_macros.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/imageids.cpp b/indra/llcommon/imageids.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/imageids.h b/indra/llcommon/imageids.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/indra_constants.cpp b/indra/llcommon/indra_constants.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/indra_constants.h b/indra/llcommon/indra_constants.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/is_approx_equal_fraction.h b/indra/llcommon/is_approx_equal_fraction.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/linden_common.h b/indra/llcommon/linden_common.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/linked_lists.h b/indra/llcommon/linked_lists.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/ll_template_cast.h b/indra/llcommon/ll_template_cast.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llaccountingcost.h b/indra/llcommon/llaccountingcost.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llagentconstants.h b/indra/llcommon/llagentconstants.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llallocator.cpp b/indra/llcommon/llallocator.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llallocator.h b/indra/llcommon/llallocator.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llallocator_heap_profile.cpp b/indra/llcommon/llallocator_heap_profile.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llallocator_heap_profile.h b/indra/llcommon/llallocator_heap_profile.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llapp.cpp b/indra/llcommon/llapp.cpp
old mode 100644
new mode 100755
index ca258900c7f5d462f34d8b3b8ec4bed49dfa8b02..67a98d5fb89d9c85b979be3cf863c9f7e601712d
--- a/indra/llcommon/llapp.cpp
+++ b/indra/llcommon/llapp.cpp
@@ -69,10 +69,16 @@ bool windows_post_minidump_callback(const wchar_t* dump_path,
 void setup_signals();
 void default_unix_signal_handler(int signum, siginfo_t *info, void *);
 
+#if LL_LINUX
+#include "google_breakpad/minidump_descriptor.h"
+bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_desc, void* context, bool succeeded);
+#else
 // Called by breakpad exception handler after the minidump has been generated.
 bool unix_post_minidump_callback(const char *dump_dir,
 					  const char *minidump_id,
 					  void *context, bool succeeded);
+#endif
+
 # if LL_DARWIN
 /* OSX doesn't support SIGRT* */
 S32 LL_SMACKDOWN_SIGNAL = SIGUSR1;
@@ -313,7 +319,7 @@ void LLApp::setupErrorHandling()
 	
 	// Add google breakpad exception handler configured for Darwin/Linux.
 	bool installHandler = true;
-#ifdef LL_DARWIN
+#if LL_DARWIN
 	// For the special case of Darwin, we do not want to install the handler if
 	// the process is being debugged as the app will exit with value ABRT (6) if
 	// we do.  Unfortunately, the code below which performs that test relies on
@@ -346,14 +352,21 @@ void LLApp::setupErrorHandling()
 		installHandler = true;
 	}
 	#endif
-#endif
+
 	if(installHandler && (mExceptionHandler == 0))
 	{
 		std::string dumpPath = "/tmp/";
-		mExceptionHandler = new google_breakpad::ExceptionHandler(dumpPath, 0, &unix_post_minidump_callback, 0, true);
+		mExceptionHandler = new google_breakpad::ExceptionHandler(dumpPath, 0, &unix_post_minidump_callback, 0, true, 0);
+	}
+#elif LL_LINUX
+	if(installHandler && (mExceptionHandler == 0))
+	{
+		google_breakpad::MinidumpDescriptor desc("/tmp");
+	        new google_breakpad::ExceptionHandler(desc, 0, &unix_minidump_callback, 0, true, 0);
 	}
 #endif
 
+#endif
 	startErrorThread();
 }
 
@@ -410,6 +423,9 @@ void LLApp::setMiniDumpDir(const std::string &path)
 	wchar_t buffer[MAX_MINDUMP_PATH_LENGTH];
 	mbstowcs(buffer, path.c_str(), MAX_MINDUMP_PATH_LENGTH);
 	mExceptionHandler->set_dump_path(std::wstring(buffer));
+#elif LL_LINUX
+        google_breakpad::MinidumpDescriptor desc(path);
+	mExceptionHandler->set_minidump_descriptor(desc);
 #else
 	mExceptionHandler->set_dump_path(path);
 #endif
@@ -857,6 +873,43 @@ void default_unix_signal_handler(int signum, siginfo_t *info, void *)
 	}
 }
 
+#if LL_LINUX
+bool unix_minidump_callback(const google_breakpad::MinidumpDescriptor& minidump_desc, void* context, bool succeeded)
+{
+	// Copy minidump file path into fixed buffer in the app instance to avoid
+	// heap allocations in a crash handler.
+	
+	// path format: <dump_dir>/<minidump_id>.dmp
+	int dirPathLength = strlen(minidump_desc.path());
+	
+	// The path must not be truncated.
+	llassert((dirPathLength + 5) <= LLApp::MAX_MINDUMP_PATH_LENGTH);
+	
+	char * path = LLApp::instance()->getMiniDumpFilename();
+	S32 remaining = LLApp::MAX_MINDUMP_PATH_LENGTH;
+	strncpy(path, minidump_desc.path(), remaining);
+	remaining -= dirPathLength;
+	path += dirPathLength;
+	if (remaining > 0 && dirPathLength > 0 && path[-1] != '/')
+	{
+		*path++ = '/';
+		--remaining;
+	}
+	
+	llinfos << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << llendl;
+	LLApp::runErrorHandler();
+	
+#ifndef LL_RELEASE_FOR_DOWNLOAD
+	clear_signals();
+	return false;
+#else
+	return true;
+#endif
+
+}
+#endif
+
+
 bool unix_post_minidump_callback(const char *dump_dir,
 					  const char *minidump_id,
 					  void *context, bool succeeded)
@@ -933,9 +986,9 @@ bool windows_post_minidump_callback(const wchar_t* dump_path,
 	}
 
 	llinfos << "generated minidump: " << LLApp::instance()->getMiniDumpFilename() << llendl;
-    // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
+   // *NOTE:Mani - this code is stolen from LLApp, where its never actually used.
 	//OSMessageBox("Attach Debugger Now", "Error", OSMB_OK);
-    // *TODO: Translate the signals/exceptions into cross-platform stuff
+   // *TODO: Translate the signals/exceptions into cross-platform stuff
 	// Windows implementation
 	llinfos << "Entering Windows Exception Handler..." << llendl;
 
diff --git a/indra/llcommon/llapp.h b/indra/llcommon/llapp.h
old mode 100644
new mode 100755
index a536a06ea5ef1fc50b44e82d30634972be18dc8c..afa06df23e1e680b394d7b83b84c94cf52ddea8b
--- a/indra/llcommon/llapp.h
+++ b/indra/llcommon/llapp.h
@@ -38,7 +38,7 @@ typedef LLAtomic32<U32> LLAtomicU32;
 class LLErrorThread;
 class LLLiveFile;
 #if LL_LINUX
-typedef struct siginfo siginfo_t;
+#include <signal.h>
 #endif
 
 typedef void (*LLAppErrorHandler)();
diff --git a/indra/llcommon/llapr.cpp b/indra/llcommon/llapr.cpp
old mode 100644
new mode 100755
index d1c44c94032851a19a4ab42f20006ce04a1eb1f4..a0802c6adfe997952e56a84a5477d5f47d1c0143
--- a/indra/llcommon/llapr.cpp
+++ b/indra/llcommon/llapr.cpp
@@ -226,9 +226,7 @@ void LLVolatileAPRPool::clearVolatileAPRPool()
 		llassert_always(mNumActiveRef > 0) ;
 	}
 
-	//paranoia check if the pool is jammed.
-	//will remove the check before going to release.
-	llassert_always(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;
+	llassert(mNumTotalRef < (FULL_VOLATILE_APR_POOL << 2)) ;
 }
 
 BOOL LLVolatileAPRPool::isFull()
diff --git a/indra/llcommon/llapr.h b/indra/llcommon/llapr.h
old mode 100644
new mode 100755
index 034546c3f39f669e10566b80231cbb83a5596f68..752574c65ddd9d677214429b876cd9cf6cb56088
--- a/indra/llcommon/llapr.h
+++ b/indra/llcommon/llapr.h
@@ -182,8 +182,10 @@ typedef LLAtomic32<S32> LLAtomicS32;
 // abbreviated flags
 #define LL_APR_R (APR_READ) // "r"
 #define LL_APR_W (APR_CREATE|APR_TRUNCATE|APR_WRITE) // "w"
+#define LL_APR_A (APR_CREATE|APR_WRITE|APR_APPEND) // "w"
 #define LL_APR_RB (APR_READ|APR_BINARY) // "rb"
 #define LL_APR_WB (APR_CREATE|APR_TRUNCATE|APR_WRITE|APR_BINARY) // "wb"
+#define LL_APR_AB (APR_CREATE|APR_WRITE|APR_BINARY|APR_APPEND)
 #define LL_APR_RPB (APR_READ|APR_WRITE|APR_BINARY) // "r+b"
 #define LL_APR_WPB (APR_CREATE|APR_TRUNCATE|APR_READ|APR_WRITE|APR_BINARY) // "w+b"
 
diff --git a/indra/llcommon/llassettype.cpp b/indra/llcommon/llassettype.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llassettype.h b/indra/llcommon/llassettype.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llassoclist.h b/indra/llcommon/llassoclist.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llavatarconstants.h b/indra/llcommon/llavatarconstants.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llavatarname.cpp b/indra/llcommon/llavatarname.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llavatarname.h b/indra/llcommon/llavatarname.h
old mode 100644
new mode 100755
index 7542a8dece0918da062061d0b10d1441a3198a1d..5d2fccc5bab0ede19a47b9eb10c1bb6c57764930
--- a/indra/llcommon/llavatarname.h
+++ b/indra/llcommon/llavatarname.h
@@ -63,7 +63,7 @@ class LL_COMMON_API LLAvatarName
 	// For normal names, returns "James Linden (james.linden)"
 	// When display names are disabled returns just "James Linden"
 	std::string getCompleteName() const;
-
+	
 	// Returns "James Linden" or "bobsmith123 Resident" for backwards
 	// compatibility with systems like voice and muting
 	// *TODO: Eliminate this in favor of username only
diff --git a/indra/llcommon/llbase32.cpp b/indra/llcommon/llbase32.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llbase32.h b/indra/llcommon/llbase32.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llbase64.cpp b/indra/llcommon/llbase64.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llbase64.h b/indra/llcommon/llbase64.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llboost.h b/indra/llcommon/llboost.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llchat.h b/indra/llcommon/llchat.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llclickaction.h b/indra/llcommon/llclickaction.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcommon.cpp b/indra/llcommon/llcommon.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcommon.h b/indra/llcommon/llcommon.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcommonutils.cpp b/indra/llcommon/llcommonutils.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcommonutils.h b/indra/llcommon/llcommonutils.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcoros.cpp b/indra/llcommon/llcoros.cpp
old mode 100644
new mode 100755
index 0b5829eb7ee00821b55b02fbdb6c32f9e48406d9..baaddcaed1ea64d1cbc425336b84000b55227cd6
--- a/indra/llcommon/llcoros.cpp
+++ b/indra/llcommon/llcoros.cpp
@@ -39,7 +39,12 @@
 #include "llerror.h"
 #include "stringize.h"
 
-LLCoros::LLCoros()
+LLCoros::LLCoros():
+    // MAINT-2724: default coroutine stack size too small on Windows.
+    // Previously we used
+    // boost::context::guarded_stack_allocator::default_stacksize();
+    // empirically this is 64KB on Windows and Linux. Try quadrupling.
+    mStackSize(256*1024)
 {
     // Register our cleanup() method for "mainloop" ticks
     LLEventPumps::instance().obtain("mainloop").listen(
@@ -55,7 +60,7 @@ bool LLCoros::cleanup(const LLSD&)
         // since last tick?
         if (mi->second->exited())
         {
-            LL_INFOS("LLCoros") << "LLCoros: cleaning up coroutine " << mi->first << LL_ENDL;
+			   LL_INFOS("LLCoros") << "LLCoros: cleaning up coroutine " << mi->first << LL_ENDL;
             // The erase() call will invalidate its passed iterator value --
             // so increment mi FIRST -- but pass its original value to
             // erase(). This is what postincrement is all about.
@@ -89,7 +94,7 @@ std::string LLCoros::generateDistinctName(const std::string& prefix) const
     {
         if (mCoros.find(name) == mCoros.end())
         {
-            LL_INFOS("LLCoros") << "LLCoros: launching coroutine " << name << LL_ENDL;
+			   LL_INFOS("LLCoros") << "LLCoros: launching coroutine " << name << LL_ENDL;
             return name;
         }
     }
@@ -115,7 +120,7 @@ std::string LLCoros::getNameByID(const void* self_id) const
     // passed to us comes.
     for (CoroMap::const_iterator mi(mCoros.begin()), mend(mCoros.end()); mi != mend; ++mi)
     {
-        namespace coro_private = boost::coroutines::detail;
+        namespace coro_private = boost::dcoroutines::detail;
         if (static_cast<void*>(coro_private::coroutine_accessor::get_impl(const_cast<coro&>(*mi->second)).get())
             == self_id)
         {
@@ -125,6 +130,12 @@ std::string LLCoros::getNameByID(const void* self_id) const
     return "";
 }
 
+void LLCoros::setStackSize(S32 stacksize)
+{
+    LL_INFOS("LLCoros") << "Setting coroutine stack size to " << stacksize << LL_ENDL;
+    mStackSize = stacksize;
+}
+
 /*****************************************************************************
 *   MUST BE LAST
 *****************************************************************************/
diff --git a/indra/llcommon/llcoros.h b/indra/llcommon/llcoros.h
old mode 100644
new mode 100755
index d75f28ec1a5de4eaf43a5058386369d536b3bb4d..01ee11da1ac180419c87b7b6d26d9e0667e0399c
--- a/indra/llcommon/llcoros.h
+++ b/indra/llcommon/llcoros.h
@@ -29,7 +29,7 @@
 #if ! defined(LL_LLCOROS_H)
 #define LL_LLCOROS_H
 
-#include <boost/coroutine/coroutine.hpp>
+#include <boost/dcoroutine/coroutine.hpp>
 #include "llsingleton.h"
 #include <boost/ptr_container/ptr_map.hpp>
 #include <string>
@@ -78,8 +78,8 @@
 class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
 {
 public:
-    /// Canonical boost::coroutines::coroutine signature we use
-    typedef boost::coroutines::coroutine<void()> coro;
+    /// Canonical boost::dcoroutines::coroutine signature we use
+    typedef boost::dcoroutines::coroutine<void()> coro;
     /// Canonical 'self' type
     typedef coro::self self;
 
@@ -125,7 +125,7 @@ class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
     template <typename CALLABLE>
     std::string launch(const std::string& prefix, const CALLABLE& callable)
     {
-        return launchImpl(prefix, new coro(callable));
+        return launchImpl(prefix, new coro(callable, mStackSize));
     }
 
     /**
@@ -152,6 +152,9 @@ class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
     /// getName() by self.get_id()
     std::string getNameByID(const void* self_id) const;
 
+    /// for delayed initialization
+    void setStackSize(S32 stacksize);
+
 private:
     friend class LLSingleton<LLCoros>;
     LLCoros();
@@ -159,6 +162,7 @@ class LL_COMMON_API LLCoros: public LLSingleton<LLCoros>
     std::string generateDistinctName(const std::string& prefix) const;
     bool cleanup(const LLSD&);
 
+    S32 mStackSize;
     typedef boost::ptr_map<std::string, coro> CoroMap;
     CoroMap mCoros;
 };
diff --git a/indra/llcommon/llcrc.cpp b/indra/llcommon/llcrc.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcrc.h b/indra/llcommon/llcrc.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcriticaldamp.cpp b/indra/llcommon/llcriticaldamp.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcriticaldamp.h b/indra/llcommon/llcriticaldamp.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcursortypes.cpp b/indra/llcommon/llcursortypes.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llcursortypes.h b/indra/llcommon/llcursortypes.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldarray.h b/indra/llcommon/lldarray.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldarrayptr.h b/indra/llcommon/lldarrayptr.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldate.cpp b/indra/llcommon/lldate.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldate.h b/indra/llcommon/lldate.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldefs.h b/indra/llcommon/lldefs.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldeleteutils.h b/indra/llcommon/lldeleteutils.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldependencies.cpp b/indra/llcommon/lldependencies.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldependencies.h b/indra/llcommon/lldependencies.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldepthstack.h b/indra/llcommon/lldepthstack.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldictionary.cpp b/indra/llcommon/lldictionary.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldictionary.h b/indra/llcommon/lldictionary.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldlinked.h b/indra/llcommon/lldlinked.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldoubledispatch.h b/indra/llcommon/lldoubledispatch.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lldqueueptr.h b/indra/llcommon/lldqueueptr.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llendianswizzle.h b/indra/llcommon/llendianswizzle.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llenum.h b/indra/llcommon/llenum.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llerror.cpp b/indra/llcommon/llerror.cpp
old mode 100644
new mode 100755
index 9b0141eb76717dc363d90010f46577db8146766b..d2af004cde71a209ae084c0eecd5478f5ab11839
--- a/indra/llcommon/llerror.cpp
+++ b/indra/llcommon/llerror.cpp
@@ -201,10 +201,7 @@ namespace {
 		virtual void recordMessage(LLError::ELevel level,
 								   const std::string& message)
 		{
-			llutf16string utf16str =
-				wstring_to_utf16str(utf8str_to_wstring(message));
-			utf16str += '\n';
-			OutputDebugString(utf16str.c_str());
+			LL_WINDOWS_OUTPUT_DEBUG(message);
 		}
 	};
 #endif
@@ -1401,5 +1398,27 @@ namespace LLError
    {
        sIndex = 0 ;
    }
+
+#if LL_WINDOWS
+	void LLOutputDebugUTF8(const std::string& s)
+	{
+		// Be careful when calling OutputDebugString as it throws DBG_PRINTEXCEPTION_C 
+		// which works just fine under the windows debugger, but can cause users who
+		// have enabled SEHOP exception chain validation to crash due to interactions
+		// between the Win 32-bit exception handling and boost coroutine fiber stacks. BUG-2707
+		//
+		if (IsDebuggerPresent())
+		{
+			// Need UTF16 for Unicode OutputDebugString
+			//
+			if (s.size())
+			{
+				OutputDebugString(utf8str_to_utf16str(s).c_str());
+				OutputDebugString(TEXT("\n"));
+			}
+		}
+	}
+#endif
+
 }
 
diff --git a/indra/llcommon/llerror.h b/indra/llcommon/llerror.h
old mode 100644
new mode 100755
index b65b4101531fb6d42be69dfe6ec4315f0f48acc9..0b723aeb5d00df1565a0852b7ca05e6ea81d40ab
--- a/indra/llcommon/llerror.h
+++ b/indra/llcommon/llerror.h
@@ -34,7 +34,6 @@
 #include "llerrorlegacy.h"
 #include "stdtypes.h"
 
-
 /** Error Logging Facility
 
 	Information for most users:
@@ -199,8 +198,20 @@ namespace LLError
        static void clear() ;
 	   static void end(std::ostringstream* _out) ;
    }; 
+
+#if LL_WINDOWS
+	void LLOutputDebugUTF8(const std::string& s);
+#endif
+
 }
 
+#if LL_WINDOWS
+	// Macro accepting a std::string for display in windows debugging console
+	#define LL_WINDOWS_OUTPUT_DEBUG(a) LLError::LLOutputDebugUTF8(a)
+#else
+	#define LL_WINDOWS_OUTPUT_DEBUG(a)
+#endif
+
 //this is cheaper than llcallstacks if no need to output other variables to call stacks. 
 #define llpushcallstacks LLError::LLCallStacks::push(__FUNCTION__, __LINE__)
 #define llcallstacks \
diff --git a/indra/llcommon/llerrorcontrol.h b/indra/llcommon/llerrorcontrol.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llerrorlegacy.h b/indra/llcommon/llerrorlegacy.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llerrorthread.cpp b/indra/llcommon/llerrorthread.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llerrorthread.h b/indra/llcommon/llerrorthread.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llevent.cpp b/indra/llcommon/llevent.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llevent.h b/indra/llcommon/llevent.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventapi.cpp b/indra/llcommon/lleventapi.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventapi.h b/indra/llcommon/lleventapi.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventcoro.cpp b/indra/llcommon/lleventcoro.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventcoro.h b/indra/llcommon/lleventcoro.h
old mode 100644
new mode 100755
index 88a5e6ec74c639310b69ca86cdb3ba211c8519c6..a42af63b650fdb6b697ea53a1ac93e28ec5184aa
--- a/indra/llcommon/lleventcoro.h
+++ b/indra/llcommon/lleventcoro.h
@@ -29,8 +29,8 @@
 #if ! defined(LL_LLEVENTCORO_H)
 #define LL_LLEVENTCORO_H
 
-#include <boost/coroutine/coroutine.hpp>
-#include <boost/coroutine/future.hpp>
+#include <boost/dcoroutine/coroutine.hpp>
+#include <boost/dcoroutine/future.hpp>
 #include <boost/optional.hpp>
 #include <string>
 #include <stdexcept>
@@ -206,13 +206,13 @@ LLSD postAndWait(SELF& self, const LLSD& event, const LLEventPumpOrPumpName& req
                  const LLEventPumpOrPumpName& replyPump, const LLSD& replyPumpNamePath=LLSD())
 {
     // declare the future
-    boost::coroutines::future<LLSD> future(self);
+    boost::dcoroutines::future<LLSD> future(self);
     // make a callback that will assign a value to the future, and listen on
     // the specified LLEventPump with that callback
     std::string listenerName(LLEventDetail::listenerNameForCoro(self));
     LLTempBoundListener connection(
         replyPump.getPump().listen(listenerName,
-                                   voidlistener(boost::coroutines::make_callback(future))));
+                                   voidlistener(boost::dcoroutines::make_callback(future))));
     // skip the "post" part if requestPump is default-constructed
     if (requestPump)
     {
@@ -257,7 +257,7 @@ namespace LLEventDetail
      * This helper is specifically for the two-pump version of waitForEventOn().
      * We use a single future object, but we want to listen on two pumps with it.
      * Since we must still adapt from (the callable constructed by)
-     * boost::coroutines::make_callback() (void return) to provide an event
+     * boost::dcoroutines::make_callback() (void return) to provide an event
      * listener (bool return), we've adapted LLVoidListener for the purpose. The
      * basic idea is that we construct a distinct instance of WaitForEventOnHelper
      * -- binding different instance data -- for each of the pumps. Then, when a
@@ -331,16 +331,16 @@ LLEventWithID postAndWait2(SELF& self, const LLSD& event,
                            const LLSD& replyPump1NamePath=LLSD())
 {
     // declare the future
-    boost::coroutines::future<LLEventWithID> future(self);
+    boost::dcoroutines::future<LLEventWithID> future(self);
     // either callback will assign a value to this future; listen on
     // each specified LLEventPump with a callback
     std::string name(LLEventDetail::listenerNameForCoro(self));
     LLTempBoundListener connection0(
         replyPump0.getPump().listen(name + "a",
-                               LLEventDetail::wfeoh(boost::coroutines::make_callback(future), 0)));
+                               LLEventDetail::wfeoh(boost::dcoroutines::make_callback(future), 0)));
     LLTempBoundListener connection1(
         replyPump1.getPump().listen(name + "b",
-                               LLEventDetail::wfeoh(boost::coroutines::make_callback(future), 1)));
+                               LLEventDetail::wfeoh(boost::dcoroutines::make_callback(future), 1)));
     // skip the "post" part if requestPump is default-constructed
     if (requestPump)
     {
diff --git a/indra/llcommon/lleventdispatcher.cpp b/indra/llcommon/lleventdispatcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventdispatcher.h b/indra/llcommon/lleventdispatcher.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventemitter.h b/indra/llcommon/lleventemitter.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventfilter.cpp b/indra/llcommon/lleventfilter.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventfilter.h b/indra/llcommon/lleventfilter.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llevents.cpp b/indra/llcommon/llevents.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llevents.h b/indra/llcommon/llevents.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventtimer.cpp b/indra/llcommon/lleventtimer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lleventtimer.h b/indra/llcommon/lleventtimer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llextendedstatus.h b/indra/llcommon/llextendedstatus.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llfasttimer.cpp b/indra/llcommon/llfasttimer.cpp
old mode 100644
new mode 100755
index 9b15804e97b65998f8457a2e0f9625ae3b8edbe4..024fdd1b4d76ee50d73331ae15ecc94130d069d3
--- a/indra/llcommon/llfasttimer.cpp
+++ b/indra/llcommon/llfasttimer.cpp
@@ -561,7 +561,7 @@ std::vector<LLFastTimer::NamedTimer*>& LLFastTimer::NamedTimer::getChildren()
 	return mChildren;
 }
 
-// static
+//static
 LLFastTimer::NamedTimer& LLFastTimer::NamedTimer::getRootNamedTimer()
 {
         return *NamedTimerFactory::instance().getRootTimer();
diff --git a/indra/llcommon/llfasttimer.h b/indra/llcommon/llfasttimer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llfile.cpp b/indra/llcommon/llfile.cpp
old mode 100644
new mode 100755
index 864b6e6975632d099f217ececae9a54841e6d116..c3a0f0bfe0492d9a8e931f3dd5097bd47bf58fcc
--- a/indra/llcommon/llfile.cpp
+++ b/indra/llcommon/llfile.cpp
@@ -438,7 +438,7 @@ llstdio_filebuf::int_type llstdio_filebuf::overflow(llstdio_filebuf::int_type __
 				_M_set_buffer(0);
 				__ret = traits_type::not_eof(__c);
 			}
-		}
+	}
 		else if (_M_buf_size > 1)
 		{
 			// Overflow in 'uncommitted' mode: set _M_writing, set
@@ -496,11 +496,11 @@ bool llstdio_filebuf::_convert_to_external(char_type* __ibuf,
 		if (__r == codecvt_base::ok || __r == codecvt_base::partial)
 			__blen = __bend - __buf;
 		else if (__r == codecvt_base::noconv)
-		{
+	{
 			// Same as the always_noconv case above.
 			__buf = reinterpret_cast<char*>(__ibuf);
 			__blen = __ilen;
-		}
+	}
 		else
 			__throw_ios_failure(__N("llstdio_filebuf::_convert_to_external "
 									"conversion error"));
@@ -643,9 +643,9 @@ llstdio_filebuf::int_type llstdio_filebuf::underflow()
 							_M_ext_end, _M_ext_next,
 							this->eback(),
 							this->eback() + __buflen, __iend);
-				}
+}
 				if (__r == codecvt_base::noconv)
-				{
+{
 					size_t __avail = _M_ext_end - _M_ext_buf;
 					__ilen = std::min(__avail, __buflen);
 					traits_type::copy(this->eback(),
@@ -806,15 +806,15 @@ std::streamsize llstdio_filebuf::xsputn(char_type* __s, std::streamsize __n)
 				__ret = fwrite(__buf, 1, __buffill, _M_file.file());
 			}
 			if (__ret == __buffill)
-			{
+	{
 				__ret += fwrite(reinterpret_cast<const char*>(__s), 1,
 								__n, _M_file.file());
-			}
+	}
 			if (__ret == __buffill + __n)
 			{
 				_M_set_buffer(0);
 				_M_writing = true;
-			}
+}
 			if (__ret > __buffill)
 				__ret -= __buffill;
 			else
@@ -848,7 +848,7 @@ llifstream::llifstream() : _M_filebuf(),
 #endif
 
 // explicit
-llifstream::llifstream(const std::string& _Filename, 
+llifstream::llifstream(const std::string& _Filename,
 		ios_base::openmode _Mode) : _M_filebuf(),
 #if LL_WINDOWS
 	std::istream(&_M_filebuf)
@@ -877,7 +877,7 @@ llifstream::llifstream(const char* _Filename,
 	if (_M_filebuf.open(wideName.c_str(), _Mode | ios_base::in) == 0)
 	{
 		_Myios::setstate(ios_base::failbit);
-	}
+}
 }
 #else
 	std::istream()
@@ -951,8 +951,8 @@ void llifstream::close()
 #else
 		this->setstate(ios_base::failbit);
 #endif
+		}
 	}
-}
 
 
 /************** output file stream ********************************/
@@ -1042,7 +1042,7 @@ void llofstream::open(const char* _Filename, ios_base::openmode _Mode)
 #if LL_WINDOWS
 	llutf16string wideName = utf8str_to_utf16str( _Filename );
 	if (_M_filebuf.open( wideName.c_str(), _Mode | ios_base::out) == 0)
-	{
+{
 		_Myios::setstate(ios_base::failbit);
 	}
 	else
diff --git a/indra/llcommon/llfile.h b/indra/llcommon/llfile.h
old mode 100644
new mode 100755
index 9d70db96ea83852d4365cf9f0096454bc2e41cec..d59e68367e8cc9429a15397c506455999314fc1a
--- a/indra/llcommon/llfile.h
+++ b/indra/llcommon/llfile.h
@@ -35,7 +35,7 @@
  * Attempts to mostly mirror the POSIX style IO functions.
  */
 
-typedef FILE LLFILE;
+typedef FILE	LLFILE;
 
 #include <fstream>
 #include <sys/stat.h>
@@ -237,7 +237,7 @@ class LL_COMMON_API llifstream	:	public	std::istream
 			ios_base::openmode _Mode = ios_base::in,
 			//size_t _Size = static_cast<size_t>(BUFSIZ));
 			size_t _Size = static_cast<size_t>(1));
-
+	
 	/**
 	 *  @brief  Create a stream using an open file descriptor.
 	 *  @param  fd    An open file descriptor.
diff --git a/indra/llcommon/llfindlocale.cpp b/indra/llcommon/llfindlocale.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llfindlocale.h b/indra/llcommon/llfindlocale.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llfixedbuffer.cpp b/indra/llcommon/llfixedbuffer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llfixedbuffer.h b/indra/llcommon/llfixedbuffer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llfoldertype.cpp b/indra/llcommon/llfoldertype.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llformat.cpp b/indra/llcommon/llformat.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llformat.h b/indra/llcommon/llformat.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llframetimer.cpp b/indra/llcommon/llframetimer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llframetimer.h b/indra/llcommon/llframetimer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llhandle.h b/indra/llcommon/llhandle.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llhash.h b/indra/llcommon/llhash.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llheartbeat.cpp b/indra/llcommon/llheartbeat.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llheartbeat.h b/indra/llcommon/llheartbeat.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llhttpstatuscodes.h b/indra/llcommon/llhttpstatuscodes.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llindexedqueue.h b/indra/llcommon/llindexedqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llinitparam.cpp b/indra/llcommon/llinitparam.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llinitparam.h b/indra/llcommon/llinitparam.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llinstancetracker.cpp b/indra/llcommon/llinstancetracker.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llinstancetracker.h b/indra/llcommon/llinstancetracker.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llkeythrottle.h b/indra/llcommon/llkeythrottle.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llkeyusetracker.h b/indra/llcommon/llkeyusetracker.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllazy.cpp b/indra/llcommon/lllazy.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllazy.h b/indra/llcommon/lllazy.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llleap.cpp b/indra/llcommon/llleap.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llleap.h b/indra/llcommon/llleap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llleaplistener.cpp b/indra/llcommon/llleaplistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llleaplistener.h b/indra/llcommon/llleaplistener.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllinkedqueue.h b/indra/llcommon/lllinkedqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllistenerwrapper.h b/indra/llcommon/lllistenerwrapper.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llliveappconfig.cpp b/indra/llcommon/llliveappconfig.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llliveappconfig.h b/indra/llcommon/llliveappconfig.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllivefile.cpp b/indra/llcommon/lllivefile.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllivefile.h b/indra/llcommon/lllivefile.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllocalidhashmap.h b/indra/llcommon/lllocalidhashmap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllog.cpp b/indra/llcommon/lllog.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllog.h b/indra/llcommon/lllog.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lllslconstants.h b/indra/llcommon/lllslconstants.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmap.h b/indra/llcommon/llmap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmd5.cpp b/indra/llcommon/llmd5.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmd5.h b/indra/llcommon/llmd5.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmemory.cpp b/indra/llcommon/llmemory.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmemory.h b/indra/llcommon/llmemory.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmemorystream.cpp b/indra/llcommon/llmemorystream.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmemorystream.h b/indra/llcommon/llmemorystream.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmetricperformancetester.cpp b/indra/llcommon/llmetricperformancetester.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmetricperformancetester.h b/indra/llcommon/llmetricperformancetester.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmetrics.cpp b/indra/llcommon/llmetrics.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmetrics.h b/indra/llcommon/llmetrics.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmortician.cpp b/indra/llcommon/llmortician.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llmortician.h b/indra/llcommon/llmortician.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llnametable.h b/indra/llcommon/llnametable.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lloptioninterface.cpp b/indra/llcommon/lloptioninterface.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lloptioninterface.h b/indra/llcommon/lloptioninterface.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llpointer.h b/indra/llcommon/llpointer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llpreprocessor.h b/indra/llcommon/llpreprocessor.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llpriqueuemap.h b/indra/llcommon/llpriqueuemap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llprocess.cpp b/indra/llcommon/llprocess.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llprocess.h b/indra/llcommon/llprocess.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llprocessor.cpp b/indra/llcommon/llprocessor.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llprocessor.h b/indra/llcommon/llprocessor.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llptrskiplist.h b/indra/llcommon/llptrskiplist.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llptrskipmap.h b/indra/llcommon/llptrskipmap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llptrto.cpp b/indra/llcommon/llptrto.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llptrto.h b/indra/llcommon/llptrto.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llqueuedthread.cpp b/indra/llcommon/llqueuedthread.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llqueuedthread.h b/indra/llcommon/llqueuedthread.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llrand.cpp b/indra/llcommon/llrand.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llrand.h b/indra/llcommon/llrand.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llrefcount.cpp b/indra/llcommon/llrefcount.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llrefcount.h b/indra/llcommon/llrefcount.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llregistry.h b/indra/llcommon/llregistry.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llrun.cpp b/indra/llcommon/llrun.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llrun.h b/indra/llcommon/llrun.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsafehandle.h b/indra/llcommon/llsafehandle.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsd.cpp b/indra/llcommon/llsd.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsd.h b/indra/llcommon/llsd.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdparam.cpp b/indra/llcommon/llsdparam.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdparam.h b/indra/llcommon/llsdparam.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdserialize.cpp b/indra/llcommon/llsdserialize.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdserialize.h b/indra/llcommon/llsdserialize.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdserialize_xml.cpp b/indra/llcommon/llsdserialize_xml.cpp
old mode 100644
new mode 100755
index cef743a7beab012a31a2b42233da8f33db9588b6..614a2d563656693ec5950a13b5968faa30a80c23
--- a/indra/llcommon/llsdserialize_xml.cpp
+++ b/indra/llcommon/llsdserialize_xml.cpp
@@ -406,7 +406,7 @@ S32 LLSDXMLParser::Impl::parse(std::istream& input, LLSD& data)
 		}
 		if (mEmitErrors)
 		{
-			llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;
+		llinfos << "LLSDXMLParser::Impl::parse: XML_STATUS_ERROR parsing:" << (char*) buffer << llendl;
 		}
 		data = LLSD();
 		return LLSDParser::PARSE_FAILURE;
@@ -487,7 +487,7 @@ S32 LLSDXMLParser::Impl::parseLines(std::istream& input, LLSD& data)
 	{
 		if (mEmitErrors)
 		{
-			llinfos << "LLSDXMLParser::Impl::parseLines: XML_STATUS_ERROR" << llendl;
+		llinfos << "LLSDXMLParser::Impl::parseLines: XML_STATUS_ERROR" << llendl;
 		}
 		return LLSDParser::PARSE_FAILURE;
 	}
diff --git a/indra/llcommon/llsdserialize_xml.h b/indra/llcommon/llsdserialize_xml.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdutil.cpp b/indra/llcommon/llsdutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsdutil.h b/indra/llcommon/llsdutil.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsecondlifeurls.cpp b/indra/llcommon/llsecondlifeurls.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsecondlifeurls.h b/indra/llcommon/llsecondlifeurls.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsimplehash.h b/indra/llcommon/llsimplehash.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsingleton.cpp b/indra/llcommon/llsingleton.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsingleton.h b/indra/llcommon/llsingleton.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llskiplist.h b/indra/llcommon/llskiplist.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llskipmap.h b/indra/llcommon/llskipmap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsmoothstep.h b/indra/llcommon/llsmoothstep.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsortedvector.h b/indra/llcommon/llsortedvector.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstack.h b/indra/llcommon/llstack.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstacktrace.cpp b/indra/llcommon/llstacktrace.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstacktrace.h b/indra/llcommon/llstacktrace.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstat.cpp b/indra/llcommon/llstat.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstat.h b/indra/llcommon/llstat.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstatenums.h b/indra/llcommon/llstatenums.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstl.h b/indra/llcommon/llstl.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstreamqueue.cpp b/indra/llcommon/llstreamqueue.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstreamqueue.h b/indra/llcommon/llstreamqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstreamtools.cpp b/indra/llcommon/llstreamtools.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstreamtools.h b/indra/llcommon/llstreamtools.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstrider.h b/indra/llcommon/llstrider.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstring.cpp b/indra/llcommon/llstring.cpp
old mode 100644
new mode 100755
index 0c326797449792f1d6138abba8e7947c3f4a7e11..22c8681983cb8277d9fa478cad6cccf3396dda8b
--- a/indra/llcommon/llstring.cpp
+++ b/indra/llcommon/llstring.cpp
@@ -52,6 +52,23 @@ std::string ll_safe_string(const char* in, S32 maxlen)
 	return std::string();
 }
 
+bool is_char_hex(char hex)
+{
+	if((hex >= '0') && (hex <= '9'))
+	{
+		return true;
+	}
+	else if((hex >= 'a') && (hex <='f'))
+	{
+		return true;
+	}
+	else if((hex >= 'A') && (hex <='F'))
+	{
+		return true;
+	}
+	return false; // uh - oh, not hex any more...
+}
+
 U8 hex_as_nybble(char hex)
 {
 	if((hex >= '0') && (hex <= '9'))
diff --git a/indra/llcommon/llstring.h b/indra/llcommon/llstring.h
old mode 100644
new mode 100755
index 119efc795755ced045686dd04edab1387ac42260..f9702868c8eabfd54f0f97c949fca6cf559fb34d
--- a/indra/llcommon/llstring.h
+++ b/indra/llcommon/llstring.h
@@ -470,6 +470,7 @@ inline std::string chop_tail_copy(
  * @brief This translates a nybble stored as a hex value from 0-f back
  * to a nybble in the low order bits of the return byte.
  */
+LL_COMMON_API bool is_char_hex(char hex);
 LL_COMMON_API U8 hex_as_nybble(char hex);
 
 /**
diff --git a/indra/llcommon/llstringtable.cpp b/indra/llcommon/llstringtable.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llstringtable.h b/indra/llcommon/llstringtable.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llsys.cpp b/indra/llcommon/llsys.cpp
old mode 100644
new mode 100755
index c96f2191f31558c3a93ca30f8723c414d13c6cde..57a6de9060cd0f612517d8bffe1c8bc88569ff64
--- a/indra/llcommon/llsys.cpp
+++ b/indra/llcommon/llsys.cpp
@@ -80,6 +80,7 @@ using namespace llsd;
 #	include <sys/sysinfo.h>
 #   include <stdexcept>
 const char MEMINFO_FILE[] = "/proc/meminfo";
+#   include <gnu/libc-version.h>
 #elif LL_SOLARIS
 #	include <stdio.h>
 #	include <unistd.h>
@@ -175,8 +176,41 @@ bool get_shell32_dll_version(DWORD& major, DWORD& minor, DWORD& build_number)
 }
 #endif // LL_WINDOWS
 
+// Wrap boost::regex_match() with a function that doesn't throw.
+template <typename S, typename M, typename R>
+static bool regex_match_no_exc(const S& string, M& match, const R& regex)
+{
+    try
+    {
+        return boost::regex_match(string, match, regex);
+    }
+    catch (const std::runtime_error& e)
+    {
+        LL_WARNS("LLMemoryInfo") << "error matching with '" << regex.str() << "': "
+                                 << e.what() << ":\n'" << string << "'" << LL_ENDL;
+        return false;
+    }
+}
+
+// Wrap boost::regex_search() with a function that doesn't throw.
+template <typename S, typename M, typename R>
+static bool regex_search_no_exc(const S& string, M& match, const R& regex)
+{
+    try
+    {
+        return boost::regex_search(string, match, regex);
+    }
+    catch (const std::runtime_error& e)
+    {
+        LL_WARNS("LLMemoryInfo") << "error searching with '" << regex.str() << "': "
+                                 << e.what() << ":\n'" << string << "'" << LL_ENDL;
+        return false;
+    }
+}
+
+
 LLOSInfo::LLOSInfo() :
-	mMajorVer(0), mMinorVer(0), mBuild(0)
+	mMajorVer(0), mMinorVer(0), mBuild(0), mOSVersionString("")	 
 {
 
 #if LL_WINDOWS
@@ -412,6 +446,102 @@ LLOSInfo::LLOSInfo() :
 		mOSString = mOSStringSimple;
 	}
 	
+#elif LL_LINUX
+	
+	struct utsname un;
+	if(uname(&un) != -1)
+	{
+		mOSStringSimple.append(un.sysname);
+		mOSStringSimple.append(" ");
+		mOSStringSimple.append(un.release);
+
+		mOSString = mOSStringSimple;
+		mOSString.append(" ");
+		mOSString.append(un.version);
+		mOSString.append(" ");
+		mOSString.append(un.machine);
+
+		// Simplify 'Simple'
+		std::string ostype = mOSStringSimple.substr(0, mOSStringSimple.find_first_of(" ", 0));
+		if (ostype == "Linux")
+		{
+			// Only care about major and minor Linux versions, truncate at second '.'
+			std::string::size_type idx1 = mOSStringSimple.find_first_of(".", 0);
+			std::string::size_type idx2 = (idx1 != std::string::npos) ? mOSStringSimple.find_first_of(".", idx1+1) : std::string::npos;
+			std::string simple = mOSStringSimple.substr(0, idx2);
+			if (simple.length() > 0)
+				mOSStringSimple = simple;
+		}
+	}
+	else
+	{
+		mOSStringSimple.append("Unable to collect OS info");
+		mOSString = mOSStringSimple;
+	}
+
+	const char OS_VERSION_MATCH_EXPRESSION[] = "([0-9]+)\\.([0-9]+)(\\.([0-9]+))?";
+	boost::regex os_version_parse(OS_VERSION_MATCH_EXPRESSION);
+	boost::smatch matched;
+
+	std::string glibc_version(gnu_get_libc_version());
+	if ( regex_match_no_exc(glibc_version, matched, os_version_parse) )
+	{
+		LL_INFOS("AppInit") << "Using glibc version '" << glibc_version << "' as OS version" << LL_ENDL;
+	
+		std::string version_value;
+
+		if ( matched[1].matched ) // Major version
+		{
+			version_value.assign(matched[1].first, matched[1].second);
+			if (sscanf(version_value.c_str(), "%d", &mMajorVer) != 1)
+			{
+			  LL_WARNS("AppInit") << "failed to parse major version '" << version_value << "' as a number" << LL_ENDL;
+			}
+		}
+		else
+		{
+			LL_ERRS("AppInit")
+				<< "OS version regex '" << OS_VERSION_MATCH_EXPRESSION 
+				<< "' returned true, but major version [1] did not match"
+				<< LL_ENDL;
+		}
+
+		if ( matched[2].matched ) // Minor version
+		{
+			version_value.assign(matched[2].first, matched[2].second);
+			if (sscanf(version_value.c_str(), "%d", &mMinorVer) != 1)
+			{
+			  LL_ERRS("AppInit") << "failed to parse minor version '" << version_value << "' as a number" << LL_ENDL;
+			}
+		}
+		else
+		{
+			LL_ERRS("AppInit")
+				<< "OS version regex '" << OS_VERSION_MATCH_EXPRESSION 
+				<< "' returned true, but minor version [1] did not match"
+				<< LL_ENDL;
+		}
+
+		if ( matched[4].matched ) // Build version (optional) - note that [3] includes the '.'
+		{
+			version_value.assign(matched[4].first, matched[4].second);
+			if (sscanf(version_value.c_str(), "%d", &mBuild) != 1)
+			{
+			  LL_ERRS("AppInit") << "failed to parse build version '" << version_value << "' as a number" << LL_ENDL;
+			}
+		}
+		else
+		{
+			LL_INFOS("AppInit")
+				<< "OS build version not provided; using zero"
+				<< LL_ENDL;
+		}
+	}
+	else
+	{
+		LL_WARNS("AppInit") << "glibc version '" << glibc_version << "' cannot be parsed to three numbers; using all zeros" << LL_ENDL;
+	}
+
 #else
 	
 	struct utsname un;
@@ -444,8 +574,13 @@ LLOSInfo::LLOSInfo() :
 		mOSStringSimple.append("Unable to collect OS info");
 		mOSString = mOSStringSimple;
 	}
+
 #endif
 
+	std::stringstream dotted_version_string;
+	dotted_version_string << mMajorVer << "." << mMinorVer << "." << mBuild;
+	mOSVersionString.append(dotted_version_string.str());
+
 }
 
 #ifndef LL_WINDOWS
@@ -496,6 +631,11 @@ const std::string& LLOSInfo::getOSStringSimple() const
 	return mOSStringSimple;
 }
 
+const std::string& LLOSInfo::getOSVersionString() const
+{
+	return mOSVersionString;
+}
+
 const S32 STATUS_SIZE = 8192;
 
 //static
@@ -687,38 +827,6 @@ class Stats
 	LLSD mStats;
 };
 
-// Wrap boost::regex_match() with a function that doesn't throw.
-template <typename S, typename M, typename R>
-static bool regex_match_no_exc(const S& string, M& match, const R& regex)
-{
-    try
-    {
-        return boost::regex_match(string, match, regex);
-    }
-    catch (const std::runtime_error& e)
-    {
-        LL_WARNS("LLMemoryInfo") << "error matching with '" << regex.str() << "': "
-                                 << e.what() << ":\n'" << string << "'" << LL_ENDL;
-        return false;
-    }
-}
-
-// Wrap boost::regex_search() with a function that doesn't throw.
-template <typename S, typename M, typename R>
-static bool regex_search_no_exc(const S& string, M& match, const R& regex)
-{
-    try
-    {
-        return boost::regex_search(string, match, regex);
-    }
-    catch (const std::runtime_error& e)
-    {
-        LL_WARNS("LLMemoryInfo") << "error searching with '" << regex.str() << "': "
-                                 << e.what() << ":\n'" << string << "'" << LL_ENDL;
-        return false;
-    }
-}
-
 LLMemoryInfo::LLMemoryInfo()
 {
 	refresh();
diff --git a/indra/llcommon/llsys.h b/indra/llcommon/llsys.h
old mode 100644
new mode 100755
index 739e795d3af69bf4b8d691053a7ecf9987d87540..cfed0fff179b04e9522db33950582706bc33ba77
--- a/indra/llcommon/llsys.h
+++ b/indra/llcommon/llsys.h
@@ -49,6 +49,8 @@ class LL_COMMON_API LLOSInfo
 	const std::string& getOSString() const;
 	const std::string& getOSStringSimple() const;
 
+	const std::string& getOSVersionString() const;
+	
 	S32 mMajorVer;
 	S32 mMinorVer;
 	S32 mBuild;
@@ -62,6 +64,7 @@ class LL_COMMON_API LLOSInfo
 private:
 	std::string mOSString;
 	std::string mOSStringSimple;
+	std::string mOSVersionString;
 };
 
 
diff --git a/indra/llcommon/llthread.cpp b/indra/llcommon/llthread.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llthread.h b/indra/llcommon/llthread.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llthreadsafequeue.cpp b/indra/llcommon/llthreadsafequeue.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llthreadsafequeue.h b/indra/llcommon/llthreadsafequeue.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lltimer.cpp b/indra/llcommon/lltimer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lltimer.h b/indra/llcommon/lltimer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lltreeiterators.h b/indra/llcommon/lltreeiterators.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lltypeinfolookup.h b/indra/llcommon/lltypeinfolookup.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lluri.cpp b/indra/llcommon/lluri.cpp
old mode 100644
new mode 100755
index 21456a599b0a4f18130125f66c2fe7b6440990ba..37f5b3d6a38b167430f96e0a8bf85d562ed61cb4
--- a/indra/llcommon/lluri.cpp
+++ b/indra/llcommon/lluri.cpp
@@ -129,11 +129,30 @@ std::string LLURI::unescape(const std::string& str)
 		{
 			++it;
 			if(it == end) break;
-			U8 c = hex_as_nybble(*it++);
-			c = c << 4;
-			if (it == end) break;
-			c |= hex_as_nybble(*it);
-			ostr.put((char)c);
+
+			if(is_char_hex(*it))
+			{
+				U8 c = hex_as_nybble(*it++);
+
+				c = c << 4;
+				if (it == end) break;
+
+				if(is_char_hex(*it))
+				{
+					c |= hex_as_nybble(*it);
+					ostr.put((char)c);
+				}
+				else
+				{
+					ostr.put((char)c);
+					ostr.put(*it);
+				}
+			}
+			else
+			{
+				ostr.put('%');
+				ostr.put(*it);
+			}
 		}
 		else
 		{
diff --git a/indra/llcommon/lluri.h b/indra/llcommon/lluri.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lluuid.cpp b/indra/llcommon/lluuid.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lluuid.h b/indra/llcommon/lluuid.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/lluuidhashmap.h b/indra/llcommon/lluuidhashmap.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llversionserver.h b/indra/llcommon/llversionserver.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llworkerthread.cpp b/indra/llcommon/llworkerthread.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/llworkerthread.h b/indra/llcommon/llworkerthread.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/metaclass.cpp b/indra/llcommon/metaclass.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/metaclass.h b/indra/llcommon/metaclass.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/metaclasst.h b/indra/llcommon/metaclasst.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/metaproperty.cpp b/indra/llcommon/metaproperty.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/metaproperty.h b/indra/llcommon/metaproperty.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/metapropertyt.h b/indra/llcommon/metapropertyt.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/reflective.cpp b/indra/llcommon/reflective.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/reflective.h b/indra/llcommon/reflective.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/reflectivet.h b/indra/llcommon/reflectivet.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/roles_constants.h b/indra/llcommon/roles_constants.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/stdenums.h b/indra/llcommon/stdenums.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/stdtypes.h b/indra/llcommon/stdtypes.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/string_table.h b/indra/llcommon/string_table.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/stringize.h b/indra/llcommon/stringize.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/StringVec.h b/indra/llcommon/tests/StringVec.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/bitpack_test.cpp b/indra/llcommon/tests/bitpack_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/commonmisc_test.cpp b/indra/llcommon/tests/commonmisc_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/listener.h b/indra/llcommon/tests/listener.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llallocator_heap_profile_test.cpp b/indra/llcommon/tests/llallocator_heap_profile_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llallocator_test.cpp b/indra/llcommon/tests/llallocator_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llbase64_test.cpp b/indra/llcommon/tests/llbase64_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lldate_test.cpp b/indra/llcommon/tests/lldate_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lldependencies_test.cpp b/indra/llcommon/tests/lldependencies_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llerror_test.cpp b/indra/llcommon/tests/llerror_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lleventcoro_test.cpp b/indra/llcommon/tests/lleventcoro_test.cpp
old mode 100644
new mode 100755
index 901ba35b2f08421aff9000002f0fd9c19640b00e..5ebde1a31df880b7e3b9de4cc911a982c38cf5d0
--- a/indra/llcommon/tests/lleventcoro_test.cpp
+++ b/indra/llcommon/tests/lleventcoro_test.cpp
@@ -64,10 +64,10 @@
 // Boost.Coroutine #include is the *first* #include of the platform header.
 // That means that client code must generally #include Boost.Coroutine headers
 // before anything else.
-#include <boost/coroutine/coroutine.hpp>
+#include <boost/dcoroutine/coroutine.hpp>
 // Normally, lleventcoro.h obviates future.hpp. We only include this because
 // we implement a "by hand" test of future functionality.
-#include <boost/coroutine/future.hpp>
+#include <boost/dcoroutine/future.hpp>
 #include <boost/bind.hpp>
 #include <boost/range.hpp>
 
@@ -78,6 +78,7 @@
 
 #include "../test/lltut.h"
 #include "llsd.h"
+#include "llsdutil.h"
 #include "llevents.h"
 #include "tests/wrapllerrs.h"
 #include "stringize.h"
@@ -87,7 +88,7 @@
 /*****************************************************************************
 *   from the banana.cpp example program borrowed for test<1>()
 *****************************************************************************/
-namespace coroutines = boost::coroutines;
+namespace coroutines = boost::dcoroutines;
 using coroutines::coroutine;
 
 template<typename Iter>
@@ -108,7 +109,7 @@ match_substring(BidirectionalIterator begin,
 		BidirectionalIterator end, 
 		std::string xmatch,
 		BOOST_DEDUCED_TYPENAME coroutine<BidirectionalIterator(void)>::self& self) { 
-  BidirectionalIterator begin_ = begin;
+//BidirectionalIterator begin_ = begin;
   for(; begin != end; ++begin) 
     if(match(begin, end, xmatch)) {
       self.yield(begin);
@@ -122,7 +123,7 @@ typedef coroutine<std::string::iterator(void)> match_coroutine_type;
 *   Test helpers
 *****************************************************************************/
 // I suspect this will be typical of coroutines used in Linden software
-typedef boost::coroutines::coroutine<void()> coroutine_type;
+typedef boost::dcoroutines::coroutine<void()> coroutine_type;
 
 /// Simulate an event API whose response is immediate: sent on receipt of the
 /// initial request, rather than after some delay. This is the case that
@@ -173,10 +174,10 @@ namespace tut
                 // ... do whatever preliminary stuff must happen ...
 
                 // declare the future
-                boost::coroutines::future<LLSD> future(self);
+                boost::dcoroutines::future<LLSD> future(self);
                 // tell the future what to wait for
                 LLTempBoundListener connection(
-                    LLEventPumps::instance().obtain("source").listen("coro", voidlistener(boost::coroutines::make_callback(future))));
+                    LLEventPumps::instance().obtain("source").listen("coro", voidlistener(boost::dcoroutines::make_callback(future))));
                 ensure("Not yet", ! future);
                 // attempting to dereference ("resolve") the future causes the calling
                 // coroutine to wait for it
@@ -213,7 +214,7 @@ namespace tut
             BEGIN
             {
                 result = postAndWait(self,
-                                     LLSD().insert("value", 17), // request event
+                                     LLSDMap("value", 17),       // request event
                                      immediateAPI.getPump(),     // requestPump
                                      "reply1",                   // replyPump
                                      "reply");                   // request["reply"] = name
@@ -226,7 +227,7 @@ namespace tut
             BEGIN
             {
                 LLEventWithID pair = ::postAndWait2(self,
-                                                    LLSD().insert("value", 18),
+                                                    LLSDMap("value", 18),
                                                     immediateAPI.getPump(),
                                                     "reply2",
                                                     "error2",
@@ -244,7 +245,7 @@ namespace tut
             BEGIN
             {
                 LLEventWithID pair = ::postAndWait2(self,
-                                                    LLSD().insert("value", 18).insert("fail", LLSD()),
+                                                    LLSDMap("value", 18)("fail", LLSD()),
                                                     immediateAPI.getPump(),
                                                     "reply2",
                                                     "error2",
@@ -273,7 +274,7 @@ namespace tut
             BEGIN
             {
                 LLCoroEventPump waiter;
-                result = waiter.postAndWait(self, LLSD().insert("value", 17),
+                result = waiter.postAndWait(self, LLSDMap("value", 17),
                                             immediateAPI.getPump(), "reply");
             }
             END
@@ -365,7 +366,7 @@ namespace tut
             BEGIN
             {
                 LLCoroEventPumps waiter;
-                LLEventWithID pair(waiter.postAndWait(self, LLSD().insert("value", 23),
+                LLEventWithID pair(waiter.postAndWait(self, LLSDMap("value", 23),
                                                       immediateAPI.getPump(), "reply", "error"));
                 result = pair.first;
                 which  = pair.second;
@@ -379,7 +380,7 @@ namespace tut
             {
                 LLCoroEventPumps waiter;
                 LLEventWithID pair(
-                    waiter.postAndWait(self, LLSD().insert("value", 23).insert("fail", LLSD()),
+                    waiter.postAndWait(self, LLSDMap("value", 23)("fail", LLSD()),
                                        immediateAPI.getPump(), "reply", "error"));
                 result = pair.first;
                 which  = pair.second;
@@ -392,7 +393,7 @@ namespace tut
             BEGIN
             {
                 LLCoroEventPumps waiter;
-                result = waiter.postAndWaitWithException(self, LLSD().insert("value", 8),
+                result = waiter.postAndWaitWithException(self, LLSDMap("value", 8),
                                                          immediateAPI.getPump(), "reply", "error");
             }
             END
@@ -406,7 +407,7 @@ namespace tut
                 try
                 {
                     result = waiter.postAndWaitWithException(self,
-                        LLSD().insert("value", 9).insert("fail", LLSD()),
+                        LLSDMap("value", 9)("fail", LLSD()),
                         immediateAPI.getPump(), "reply", "error");
                     debug("no exception");
                 }
@@ -424,7 +425,7 @@ namespace tut
             BEGIN
             {
                 LLCoroEventPumps waiter;
-                result = waiter.postAndWaitWithLog(self, LLSD().insert("value", 30),
+                result = waiter.postAndWaitWithLog(self, LLSDMap("value", 30),
                                                    immediateAPI.getPump(), "reply", "error");
             }
             END
@@ -439,7 +440,7 @@ namespace tut
                 try
                 {
                     result = waiter.postAndWaitWithLog(self,
-                        LLSD().insert("value", 31).insert("fail", LLSD()),
+                        LLSDMap("value", 31)("fail", LLSD()),
                         immediateAPI.getPump(), "reply", "error");
                     debug("no exception");
                 }
@@ -796,4 +797,18 @@ namespace tut
         ensure("no result", result.isUndefined());
         ensure_contains("got error", threw, "32");
     }
+}
+
+/*==========================================================================*|
+#include <boost/context/guarded_stack_allocator.hpp>
+
+namespace tut
+{
+    template<> template<>
+    void object::test<23>()
+    {
+        set_test_name("stacksize");
+        std::cout << "default_stacksize: " << boost::context::guarded_stack_allocator::default_stacksize() << '\n';
+    }
 } // namespace tut
+|*==========================================================================*/
diff --git a/indra/llcommon/tests/lleventdispatcher_test.cpp b/indra/llcommon/tests/lleventdispatcher_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lleventfilter_test.cpp b/indra/llcommon/tests/lleventfilter_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llframetimer_test.cpp b/indra/llcommon/tests/llframetimer_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llinstancetracker_test.cpp b/indra/llcommon/tests/llinstancetracker_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lllazy_test.cpp b/indra/llcommon/tests/lllazy_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llleap_test.cpp b/indra/llcommon/tests/llleap_test.cpp
old mode 100644
new mode 100755
index 9b755e9ca5bd81d920e32bc7965a1402198f57fe..29060d4ef5903c7dcb45be3ae31f9f65ee18f627
--- a/indra/llcommon/tests/llleap_test.cpp
+++ b/indra/llcommon/tests/llleap_test.cpp
@@ -122,13 +122,10 @@ namespace tut
                    // finding indra/lib/python. Use our __FILE__, with
                    // raw-string syntax to deal with Windows pathnames.
                    "mydir = os.path.dirname(r'" << __FILE__ << "')\n"
-                   "try:\n"
-                   "    from llbase import llsd\n"
-                   "except ImportError:\n"
                    // We expect mydir to be .../indra/llcommon/tests.
-                   "    sys.path.insert(0,\n"
-                   "        os.path.join(mydir, os.pardir, os.pardir, 'lib', 'python'))\n"
-                   "    from indra.base import llsd\n"
+                   "sys.path.insert(0,\n"
+                   "    os.path.join(mydir, os.pardir, os.pardir, 'lib', 'python'))\n"
+                   "from indra.base import llsd\n"
                    "\n"
                    "class ProtocolError(Exception):\n"
                    "    def __init__(self, msg, data):\n"
diff --git a/indra/llcommon/tests/llmemtype_test.cpp b/indra/llcommon/tests/llmemtype_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llprocess_test.cpp b/indra/llcommon/tests/llprocess_test.cpp
old mode 100644
new mode 100755
index 99186ed434a95187bc192c9cf599f328221da67e..f188865eb004b7395928773dc715461a31aa862a
--- a/indra/llcommon/tests/llprocess_test.cpp
+++ b/indra/llcommon/tests/llprocess_test.cpp
@@ -608,6 +608,9 @@ namespace tut
     void object::test<5>()
     {
         set_test_name("exit(2)");
+#if LL_WINDOWS
+		skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
         PythonProcessLauncher py(get_test_name(),
                                  "import sys\n"
                                  "sys.exit(2)\n");
@@ -620,6 +623,9 @@ namespace tut
     void object::test<6>()
     {
         set_test_name("syntax_error:");
+#if LL_WINDOWS
+		skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
         PythonProcessLauncher py(get_test_name(),
                                  "syntax_error:\n");
         py.mParams.files.add(LLProcess::FileParam()); // inherit stdin
@@ -641,6 +647,9 @@ namespace tut
     void object::test<7>()
     {
         set_test_name("explicit kill()");
+#if LL_WINDOWS
+		skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
         PythonProcessLauncher py(get_test_name(),
                                  "from __future__ import with_statement\n"
                                  "import sys, time\n"
@@ -685,6 +694,9 @@ namespace tut
     void object::test<8>()
     {
         set_test_name("implicit kill()");
+#if LL_WINDOWS
+		skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
         NamedTempFile out("out", "not started");
         LLProcess::handle phandle(0);
         {
@@ -957,10 +969,7 @@ namespace tut
                       childout.getline(), "ok");
         // important to get the implicit flush from std::endl
         py.mPy->getWritePipe().get_ostream() << "go" << std::endl;
-        for (i = 0; i < timeout && py.mPy->isRunning() && ! childout.contains("\n"); ++i)
-        {
-            yield();
-        }
+        waitfor(*py.mPy);
         ensure("script never replied", childout.contains("\n"));
         ensure_equals("child didn't ack", childout.getline(), "ack");
         ensure_equals("bad child termination", py.mPy->getStatus().mState, LLProcess::EXITED);
diff --git a/indra/llcommon/tests/llprocessor_test.cpp b/indra/llcommon/tests/llprocessor_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llrand_test.cpp b/indra/llcommon/tests/llrand_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llsdserialize_test.cpp b/indra/llcommon/tests/llsdserialize_test.cpp
old mode 100644
new mode 100755
index e625545763a2851a1e3de11f226a205a1cd5f98b..4d436e8897d36dc4e218ec66c0aa36e9022e7c3a
--- a/indra/llcommon/tests/llsdserialize_test.cpp
+++ b/indra/llcommon/tests/llsdserialize_test.cpp
@@ -1523,10 +1523,7 @@ namespace tut
                         "sys.path.insert(0,\n"
                         "    os.path.join(os.path.dirname(r'" __FILE__ "'),\n"
                         "                 os.pardir, os.pardir, 'lib', 'python'))\n"
-                        "try:\n"
-                        "    from llbase import llsd\n"
-                        "except ImportError:\n"
-                        "    from indra.base import llsd\n")
+                        "from indra.base import llsd\n")
         {}
         ~TestPythonCompatible() {}
 
diff --git a/indra/llcommon/tests/llsingleton_test.cpp b/indra/llcommon/tests/llsingleton_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llstreamqueue_test.cpp b/indra/llcommon/tests/llstreamqueue_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/llstring_test.cpp b/indra/llcommon/tests/llstring_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lltreeiterators_test.cpp b/indra/llcommon/tests/lltreeiterators_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/lluri_test.cpp b/indra/llcommon/tests/lluri_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/reflection_test.cpp b/indra/llcommon/tests/reflection_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/stringize_test.cpp b/indra/llcommon/tests/stringize_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/tests/wrapllerrs.h b/indra/llcommon/tests/wrapllerrs.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/timer.h b/indra/llcommon/timer.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/timing.cpp b/indra/llcommon/timing.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/timing.h b/indra/llcommon/timing.h
old mode 100644
new mode 100755
diff --git a/indra/llcommon/u64.cpp b/indra/llcommon/u64.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcommon/u64.h b/indra/llcommon/u64.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/CMakeLists.txt b/indra/llcorehttp/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpinternal.h b/indra/llcorehttp/_httpinternal.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httplibcurl.cpp b/indra/llcorehttp/_httplibcurl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httplibcurl.h b/indra/llcorehttp/_httplibcurl.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpopcancel.cpp b/indra/llcorehttp/_httpopcancel.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpopcancel.h b/indra/llcorehttp/_httpopcancel.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpoperation.cpp b/indra/llcorehttp/_httpoperation.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpoperation.h b/indra/llcorehttp/_httpoperation.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpoprequest.cpp b/indra/llcorehttp/_httpoprequest.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpoprequest.h b/indra/llcorehttp/_httpoprequest.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpopsetget.cpp b/indra/llcorehttp/_httpopsetget.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpopsetget.h b/indra/llcorehttp/_httpopsetget.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpopsetpriority.cpp b/indra/llcorehttp/_httpopsetpriority.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpopsetpriority.h b/indra/llcorehttp/_httpopsetpriority.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httppolicy.cpp b/indra/llcorehttp/_httppolicy.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httppolicy.h b/indra/llcorehttp/_httppolicy.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httppolicyclass.cpp b/indra/llcorehttp/_httppolicyclass.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httppolicyclass.h b/indra/llcorehttp/_httppolicyclass.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httppolicyglobal.cpp b/indra/llcorehttp/_httppolicyglobal.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httppolicyglobal.h b/indra/llcorehttp/_httppolicyglobal.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpreadyqueue.h b/indra/llcorehttp/_httpreadyqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpreplyqueue.cpp b/indra/llcorehttp/_httpreplyqueue.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpreplyqueue.h b/indra/llcorehttp/_httpreplyqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httprequestqueue.cpp b/indra/llcorehttp/_httprequestqueue.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httprequestqueue.h b/indra/llcorehttp/_httprequestqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpretryqueue.h b/indra/llcorehttp/_httpretryqueue.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpservice.cpp b/indra/llcorehttp/_httpservice.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_httpservice.h b/indra/llcorehttp/_httpservice.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_mutex.h b/indra/llcorehttp/_mutex.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_refcounted.cpp b/indra/llcorehttp/_refcounted.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_refcounted.h b/indra/llcorehttp/_refcounted.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/_thread.h b/indra/llcorehttp/_thread.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/bufferarray.cpp b/indra/llcorehttp/bufferarray.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/bufferarray.h b/indra/llcorehttp/bufferarray.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/bufferstream.cpp b/indra/llcorehttp/bufferstream.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/bufferstream.h b/indra/llcorehttp/bufferstream.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/examples/http_texture_load.cpp b/indra/llcorehttp/examples/http_texture_load.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpcommon.cpp b/indra/llcorehttp/httpcommon.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpcommon.h b/indra/llcorehttp/httpcommon.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httphandler.h b/indra/llcorehttp/httphandler.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpheaders.cpp b/indra/llcorehttp/httpheaders.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpheaders.h b/indra/llcorehttp/httpheaders.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpoptions.cpp b/indra/llcorehttp/httpoptions.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpoptions.h b/indra/llcorehttp/httpoptions.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httprequest.cpp b/indra/llcorehttp/httprequest.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httprequest.h b/indra/llcorehttp/httprequest.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpresponse.cpp b/indra/llcorehttp/httpresponse.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/httpresponse.h b/indra/llcorehttp/httpresponse.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/llcorehttp_test.cpp b/indra/llcorehttp/tests/llcorehttp_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/llcorehttp_test.h b/indra/llcorehttp/tests/llcorehttp_test.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_allocator.cpp b/indra/llcorehttp/tests/test_allocator.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_allocator.h b/indra/llcorehttp/tests/test_allocator.h
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_bufferarray.hpp b/indra/llcorehttp/tests/test_bufferarray.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_bufferstream.hpp b/indra/llcorehttp/tests/test_bufferstream.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_httpheaders.hpp b/indra/llcorehttp/tests/test_httpheaders.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_httpoperation.hpp b/indra/llcorehttp/tests/test_httpoperation.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_httprequest.hpp b/indra/llcorehttp/tests/test_httprequest.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_httprequestqueue.hpp b/indra/llcorehttp/tests/test_httprequestqueue.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_httpstatus.hpp b/indra/llcorehttp/tests/test_httpstatus.hpp
old mode 100644
new mode 100755
index f7b542d3b5e110b709e3b4c0dcdfd29a5d3e1838..887315befc3e3543e74a9d48cb14fe66df0149d3
--- a/indra/llcorehttp/tests/test_httpstatus.hpp
+++ b/indra/llcorehttp/tests/test_httpstatus.hpp
@@ -91,6 +91,9 @@ template <> template <>
 void HttpStatusTestObjectType::test<2>()
 {
 	set_test_name("HttpStatus memory structure");
+#if LL_WINDOWS
+	skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
 
 	// Require that an HttpStatus object can be trivially
 	// returned as a function return value in registers.
@@ -104,6 +107,9 @@ template <> template <>
 void HttpStatusTestObjectType::test<3>()
 {
 	set_test_name("HttpStatus valid error string conversion");
+#if LL_WINDOWS
+	skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
 	
 	HttpStatus status;
 	status.mType = HttpStatus::EXT_CURL_EASY;
@@ -136,6 +142,9 @@ template <> template <>
 void HttpStatusTestObjectType::test<4>()
 {
 	set_test_name("HttpStatus invalid error string conversion");
+#if LL_WINDOWS
+	skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
 	
 	HttpStatus status;
 	status.mType = HttpStatus::EXT_CURL_EASY;
@@ -161,6 +170,9 @@ template <> template <>
 void HttpStatusTestObjectType::test<5>()
 {
 	set_test_name("HttpStatus equality/inequality testing");
+#if LL_WINDOWS
+	skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
 
 	// Make certain equality/inequality tests do not pass
 	// through the bool conversion.  Distinct successful
@@ -181,6 +193,9 @@ template <> template <>
 void HttpStatusTestObjectType::test<6>()
 {
 	set_test_name("HttpStatus basic HTTP status encoding");
+#if LL_WINDOWS
+	skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
 	
 	HttpStatus status;
 	status.mType = 200;
@@ -228,6 +243,9 @@ template <> template <>
 void HttpStatusTestObjectType::test<7>()
 {
 	set_test_name("HttpStatus HTTP error text strings");
+#if LL_WINDOWS
+	skip("MAINT-2302: This frequently (though not always) fails on Windows.");
+#endif
 
 	HttpStatus status(100, HE_REPLY_ERROR);
 	std::string msg(status.toString());
diff --git a/indra/llcorehttp/tests/test_llcorehttp_peer.py b/indra/llcorehttp/tests/test_llcorehttp_peer.py
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/test_refcounted.hpp b/indra/llcorehttp/tests/test_refcounted.hpp
old mode 100644
new mode 100755
diff --git a/indra/llcorehttp/tests/testrunner.py b/indra/llcorehttp/tests/testrunner.py
old mode 100644
new mode 100755
diff --git a/indra/llcrashlogger/CMakeLists.txt b/indra/llcrashlogger/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llcrashlogger/llcrashlogger.cpp b/indra/llcrashlogger/llcrashlogger.cpp
old mode 100644
new mode 100755
diff --git a/indra/llcrashlogger/llcrashlogger.h b/indra/llcrashlogger/llcrashlogger.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/CMakeLists.txt b/indra/llimage/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimage.cpp b/indra/llimage/llimage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimage.h b/indra/llimage/llimage.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagebmp.cpp b/indra/llimage/llimagebmp.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagebmp.h b/indra/llimage/llimagebmp.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagedimensionsinfo.cpp b/indra/llimage/llimagedimensionsinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagedimensionsinfo.h b/indra/llimage/llimagedimensionsinfo.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagedxt.cpp b/indra/llimage/llimagedxt.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagedxt.h b/indra/llimage/llimagedxt.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagej2c.cpp b/indra/llimage/llimagej2c.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagej2c.h b/indra/llimage/llimagej2c.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagejpeg.cpp b/indra/llimage/llimagejpeg.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagejpeg.h b/indra/llimage/llimagejpeg.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagepng.cpp b/indra/llimage/llimagepng.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagepng.h b/indra/llimage/llimagepng.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagetga.cpp b/indra/llimage/llimagetga.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimagetga.h b/indra/llimage/llimagetga.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimageworker.cpp b/indra/llimage/llimageworker.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llimageworker.h b/indra/llimage/llimageworker.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llmapimagetype.h b/indra/llimage/llmapimagetype.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/llpngwrapper.cpp b/indra/llimage/llpngwrapper.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimage/llpngwrapper.h b/indra/llimage/llpngwrapper.h
old mode 100644
new mode 100755
diff --git a/indra/llimage/tests/llimageworker_test.cpp b/indra/llimage/tests/llimageworker_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimagej2coj/CMakeLists.txt b/indra/llimagej2coj/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llimagej2coj/llimagej2coj.cpp b/indra/llimagej2coj/llimagej2coj.cpp
old mode 100644
new mode 100755
diff --git a/indra/llimagej2coj/llimagej2coj.h b/indra/llimagej2coj/llimagej2coj.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/CMakeLists.txt b/indra/llinventory/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llcategory.cpp b/indra/llinventory/llcategory.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llcategory.h b/indra/llinventory/llcategory.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lleconomy.cpp b/indra/llinventory/lleconomy.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lleconomy.h b/indra/llinventory/lleconomy.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llinventory.cpp b/indra/llinventory/llinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llinventory.h b/indra/llinventory/llinventory.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llinventorydefines.cpp b/indra/llinventory/llinventorydefines.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llinventorydefines.h b/indra/llinventory/llinventorydefines.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llinventorytype.cpp b/indra/llinventory/llinventorytype.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llinventorytype.h b/indra/llinventory/llinventorytype.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lllandmark.cpp b/indra/llinventory/lllandmark.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lllandmark.h b/indra/llinventory/lllandmark.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llnotecard.cpp b/indra/llinventory/llnotecard.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llnotecard.h b/indra/llinventory/llnotecard.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llparcel.cpp b/indra/llinventory/llparcel.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llparcel.h b/indra/llinventory/llparcel.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llparcelflags.h b/indra/llinventory/llparcelflags.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llpermissions.cpp b/indra/llinventory/llpermissions.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llpermissionsflags.h b/indra/llinventory/llpermissionsflags.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llsaleinfo.cpp b/indra/llinventory/llsaleinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/llsaleinfo.h b/indra/llinventory/llsaleinfo.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lltransactionflags.cpp b/indra/llinventory/lltransactionflags.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lltransactionflags.h b/indra/llinventory/lltransactionflags.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lltransactiontypes.h b/indra/llinventory/lltransactiontypes.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lluserrelations.cpp b/indra/llinventory/lluserrelations.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/lluserrelations.h b/indra/llinventory/lluserrelations.h
old mode 100644
new mode 100755
diff --git a/indra/llinventory/tests/inventorymisc_test.cpp b/indra/llinventory/tests/inventorymisc_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llinventory/tests/llparcel_test.cpp b/indra/llinventory/tests/llparcel_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llkdu/CMakeLists.txt b/indra/llkdu/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llkdu/llimagej2ckdu.cpp b/indra/llkdu/llimagej2ckdu.cpp
old mode 100644
new mode 100755
diff --git a/indra/llkdu/llimagej2ckdu.h b/indra/llkdu/llimagej2ckdu.h
old mode 100644
new mode 100755
diff --git a/indra/llkdu/llkdumem.cpp b/indra/llkdu/llkdumem.cpp
old mode 100644
new mode 100755
diff --git a/indra/llkdu/llkdumem.h b/indra/llkdu/llkdumem.h
old mode 100644
new mode 100755
diff --git a/indra/llkdu/tests/llimagej2ckdu_test.cpp b/indra/llkdu/tests/llimagej2ckdu_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/CMakeLists.txt b/indra/llmath/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llmath/camera.h b/indra/llmath/camera.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/coordframe.h b/indra/llmath/coordframe.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llbbox.cpp b/indra/llmath/llbbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llbbox.h b/indra/llmath/llbbox.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llbboxlocal.cpp b/indra/llmath/llbboxlocal.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llbboxlocal.h b/indra/llmath/llbboxlocal.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcalc.cpp b/indra/llmath/llcalc.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcalc.h b/indra/llmath/llcalc.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcalcparser.cpp b/indra/llmath/llcalcparser.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcalcparser.h b/indra/llmath/llcalcparser.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcamera.cpp b/indra/llmath/llcamera.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcamera.h b/indra/llmath/llcamera.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcoord.h b/indra/llmath/llcoord.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcoordframe.cpp b/indra/llmath/llcoordframe.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llcoordframe.h b/indra/llmath/llcoordframe.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llinterp.h b/indra/llmath/llinterp.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llline.cpp b/indra/llmath/llline.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llline.h b/indra/llmath/llline.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmath.h b/indra/llmath/llmath.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmatrix3a.cpp b/indra/llmath/llmatrix3a.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmatrix3a.h b/indra/llmath/llmatrix3a.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmatrix3a.inl b/indra/llmath/llmatrix3a.inl
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmatrix4a.h b/indra/llmath/llmatrix4a.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmodularmath.cpp b/indra/llmath/llmodularmath.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llmodularmath.h b/indra/llmath/llmodularmath.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/lloctree.h b/indra/llmath/lloctree.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llperlin.cpp b/indra/llmath/llperlin.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llperlin.h b/indra/llmath/llperlin.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llplane.h b/indra/llmath/llplane.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llquantize.h b/indra/llmath/llquantize.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llquaternion.cpp b/indra/llmath/llquaternion.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llquaternion.h b/indra/llmath/llquaternion.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llquaternion2.h b/indra/llmath/llquaternion2.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llquaternion2.inl b/indra/llmath/llquaternion2.inl
old mode 100644
new mode 100755
diff --git a/indra/llmath/llrect.cpp b/indra/llmath/llrect.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llrect.h b/indra/llmath/llrect.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsdutil_math.cpp b/indra/llmath/llsdutil_math.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsdutil_math.h b/indra/llmath/llsdutil_math.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsimdmath.h b/indra/llmath/llsimdmath.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsimdtypes.h b/indra/llmath/llsimdtypes.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsimdtypes.inl b/indra/llmath/llsimdtypes.inl
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsphere.cpp b/indra/llmath/llsphere.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llsphere.h b/indra/llmath/llsphere.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/lltreenode.h b/indra/llmath/lltreenode.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llvector4a.cpp b/indra/llmath/llvector4a.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llvector4a.h b/indra/llmath/llvector4a.h
old mode 100644
new mode 100755
index 0526793d3a6130cd23857815c58ec0435ea629b8..79d0a44551a607f9ca0d8edcfb39dc0054761999
--- a/indra/llmath/llvector4a.h
+++ b/indra/llmath/llvector4a.h
@@ -46,6 +46,7 @@ class LLRotation;
 // of this writing, July 08, 2010) about getting it implemented before you resort to
 // LLVector3/LLVector4. 
 /////////////////////////////////
+class LLVector4a;
 
 LL_ALIGN_PREFIX(16)
 class LLVector4a
@@ -236,6 +237,11 @@ class LLVector4a
 	// Note that this does not consider zero length vectors!
 	inline void normalize3fast();
 
+	// Normalize this vector with respect to the x, y, and z components only. Accurate only to 10-12 bits of precision. W component is destroyed
+	// Same as above except substitutes default vector contents if the vector is non-finite or degenerate due to zero length.
+	//
+	inline void normalize3fast_checked(LLVector4a* d = 0);
+
 	// Return true if this vector is normalized with respect to x,y,z up to tolerance
 	inline LLBool32 isNormalized3( F32 tolerance = 1e-3 ) const;
 
diff --git a/indra/llmath/llvector4a.inl b/indra/llmath/llvector4a.inl
old mode 100644
new mode 100755
diff --git a/indra/llmath/llvector4logical.h b/indra/llmath/llvector4logical.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llvolume.cpp b/indra/llmath/llvolume.cpp
old mode 100644
new mode 100755
index 3f06e6b99ed38d493f05416c2354185a1ebf20c4..14cebfe5aa7d85c7ff10b6edf92cdaeee91f3e69
--- a/indra/llmath/llvolume.cpp
+++ b/indra/llmath/llvolume.cpp
@@ -1392,7 +1392,7 @@ void LLPath::genNGon(const LLPathParams& params, S32 sides, F32 startOff, F32 en
 	pt->mScale.mV[VX] = hole_x * lerp(taper_x_begin, taper_x_end, t);
 	pt->mScale.mV[VY] = hole_y * lerp(taper_y_begin, taper_y_end, t);
 	pt->mTexT  = t;
-	
+
 	// Twist rotates the path along the x,y plane (I think) - DJS 04/05/02
 	twist.setQuat  (lerp(twist_begin,twist_end,t) * 2.f * F_PI - F_PI,0,0,1);
 	// Rotate the point around the circle's center.
@@ -1446,7 +1446,7 @@ void LLPath::genNGon(const LLPathParams& params, S32 sides, F32 startOff, F32 en
 	pt->mScale.mV[VX] = hole_x * lerp(taper_x_begin, taper_x_end, t);
 	pt->mScale.mV[VY] = hole_y * lerp(taper_y_begin, taper_y_end, t);
 	pt->mTexT  = t;
-	
+
 	// Twist rotates the path along the x,y plane (I think) - DJS 04/05/02
 	twist.setQuat  (lerp(twist_begin,twist_end,t) * 2.f * F_PI - F_PI,0,0,1);
 	// Rotate the point around the circle's center.
@@ -1594,7 +1594,7 @@ BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split,
 			S32 sides = (S32)llfloor(llfloor((MIN_DETAIL_FACES * detail + twist_mag * 3.5f * (detail-0.5f))) * params.getRevolutions());
 
 			if (is_sculpted)
-				sides = sculpt_size;
+				sides = llmax(sculpt_size, 1);
 			
 			genNGon(params, sides);
 		}
@@ -1644,6 +1644,7 @@ BOOL LLPath::generate(const LLPathParams& params, F32 detail, S32 split,
 			mPath[i].mScale.mV[0] = lerp(1,params.getScale().mV[0],t);
 			mPath[i].mScale.mV[1] = lerp(1,params.getScale().mV[1],t);
 			mPath[i].mTexT  = t;
+
 			mPath[i].mRot.setQuat(F_PI * params.getTwist() * t,1,0,0);
 		}
 
@@ -2079,9 +2080,9 @@ void LLVolume::regen()
 	createVolumeFaces();
 }
 
-void LLVolume::genBinormals(S32 face)
+void LLVolume::genTangents(S32 face)
 {
-	mVolumeFaces[face].createBinormals();
+	mVolumeFaces[face].createTangents();
 }
 
 LLVolume::~LLVolume()
@@ -2442,6 +2443,7 @@ bool LLVolume::unpackVolumeFaces(std::istream& is, S32 size)
 			LLVector4a pos_range;
 			pos_range.setSub(max_pos, min_pos);
 			LLVector2 tc_range2 = max_tc - min_tc;
+
 			LLVector4a tc_range;
 			tc_range.set(tc_range2[0], tc_range2[1], tc_range2[0], tc_range2[1]);
 			LLVector4a min_tc4(min_tc[0], min_tc[1], min_tc[0], min_tc[1]);
@@ -4392,7 +4394,7 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
 				segments.push_back(vertices.size());
 #if DEBUG_SILHOUETTE_BINORMALS
 				vertices.push_back(face.mVertices[j].getPosition());
-				vertices.push_back(face.mVertices[j].getPosition() + face.mVertices[j].mBinormal*0.1f);
+				vertices.push_back(face.mVertices[j].getPosition() + face.mVertices[j].mTangent*0.1f);
 				normals.push_back(LLVector3(0,0,1));
 				normals.push_back(LLVector3(0,0,1));
 				segments.push_back(vertices.size());
@@ -4508,22 +4510,9 @@ void LLVolume::generateSilhouetteVertices(std::vector<LLVector3> &vertices,
 	}
 }
 
-S32 LLVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
-								   S32 face,
-								   LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
-{
-	LLVector4a starta, enda;
-	starta.load3(start.mV);
-	enda.load3(end.mV);
-
-	return lineSegmentIntersect(starta, enda, face, intersection, tex_coord, normal, bi_normal);
-
-}
-
-
 S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, 
 								   S32 face,
-								   LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+								   LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent_out)
 {
 	S32 hit_face = -1;
 	
@@ -4561,9 +4550,9 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en
 
         if (LLLineSegmentBoxIntersect(start, end, box_center, box_size))
 		{
-			if (bi_normal != NULL) // if the caller wants binormals, we may need to generate them
+			if (tangent_out != NULL) // if the caller wants tangents, we may need to generate them
 			{
-				genBinormals(i);
+				genTangents(i);
 			}
 
 			if (isUnique())
@@ -4597,7 +4586,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en
 								LLVector4a intersect = dir;
 								intersect.mul(closest_t);
 								intersect.add(start);
-								intersection->set(intersect.getF32ptr());
+								*intersection = intersect;
 							}
 
 
@@ -4612,19 +4601,42 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en
 
 							if (normal!= NULL)
 							{
-								LLVector4* norm = (LLVector4*) face.mNormals;
-
-								*normal		= ((1.f - a - b)  * LLVector3(norm[idx0]) + 
-									a              * LLVector3(norm[idx1]) +
-									b              * LLVector3(norm[idx2]));
+								LLVector4a* norm = face.mNormals;
+								
+								LLVector4a n1,n2,n3;
+								n1 = norm[idx0];
+								n1.mul(1.f-a-b);
+								
+								n2 = norm[idx1];
+								n2.mul(a);
+								
+								n3 = norm[idx2];
+								n3.mul(b);
+
+								n1.add(n2);
+								n1.add(n3);
+								
+								*normal		= n1; 
 							}
 
-							if (bi_normal != NULL)
+							if (tangent_out != NULL)
 							{
-								LLVector4* binormal = (LLVector4*) face.mBinormals;
-								*bi_normal = ((1.f - a - b)  * LLVector3(binormal[idx0]) + 
-										a              * LLVector3(binormal[idx1]) +
-										b              * LLVector3(binormal[idx2]));
+								LLVector4a* tangents = face.mTangents;
+								
+								LLVector4a t1,t2,t3;
+								t1 = tangents[idx0];
+								t1.mul(1.f-a-b);
+								
+								t2 = tangents[idx1];
+								t2.mul(a);
+								
+								t3 = tangents[idx2];
+								t3.mul(b);
+
+								t1.add(t2);
+								t1.add(t3);
+								
+								*tangent_out = t1; 
 							}
 						}
 					}
@@ -4637,7 +4649,7 @@ S32 LLVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& en
 					face.createOctree();
 				}
 			
-				LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, bi_normal);
+				LLOctreeTriangleRayIntersect intersect(start, dir, &face, &closest_t, intersection, tex_coord, normal, tangent_out);
 				intersect.traverse(face.mOctree);
 				if (intersect.mHitFace)
 				{
@@ -5183,7 +5195,7 @@ LLVolumeFace::LLVolumeFace() :
 	mNumIndices(0),
 	mPositions(NULL),
 	mNormals(NULL),
-	mBinormals(NULL),
+	mTangents(NULL),
 	mTexCoords(NULL),
 	mIndices(NULL),
 	mWeights(NULL),
@@ -5206,7 +5218,7 @@ LLVolumeFace::LLVolumeFace(const LLVolumeFace& src)
 	mNumIndices(0),
 	mPositions(NULL),
 	mNormals(NULL),
-	mBinormals(NULL),
+	mTangents(NULL),
 	mTexCoords(NULL),
 	mIndices(NULL),
 	mWeights(NULL),
@@ -5264,15 +5276,15 @@ LLVolumeFace& LLVolumeFace::operator=(const LLVolumeFace& src)
 		}
 
 
-		if (src.mBinormals)
+		if (src.mTangents)
 		{
-			allocateBinormals(src.mNumVertices);
-			LLVector4a::memcpyNonAliased16((F32*) mBinormals, (F32*) src.mBinormals, vert_size);
+			allocateTangents(src.mNumVertices);
+			LLVector4a::memcpyNonAliased16((F32*) mTangents, (F32*) src.mTangents, vert_size);
 		}
 		else
 		{
-			ll_aligned_free_16(mBinormals);
-			mBinormals = NULL;
+			ll_aligned_free_16(mTangents);
+			mTangents = NULL;
 		}
 
 		if (src.mWeights)
@@ -5316,8 +5328,8 @@ void LLVolumeFace::freeData()
 	mTexCoords = NULL;
 	ll_aligned_free_16(mIndices);
 	mIndices = NULL;
-	ll_aligned_free_16(mBinormals);
-	mBinormals = NULL;
+	ll_aligned_free_16(mTangents);
+	mTangents = NULL;
 	ll_aligned_free_16(mWeights);
 	mWeights = NULL;
 
@@ -5897,7 +5909,7 @@ void LLVolumeFace::cacheOptimize()
 	}
 
 	LLVector4a* binorm = NULL;
-	if (mBinormals)
+	if (mTangents)
 	{
 		binorm = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts);
 	}
@@ -5922,9 +5934,9 @@ void LLVolumeFace::cacheOptimize()
 			{
 				wght[cur_idx] = mWeights[idx];
 			}
-			if (mBinormals)
+			if (mTangents)
 			{
-				binorm[cur_idx] = mBinormals[idx];
+				binorm[cur_idx] = mTangents[idx];
 			}
 
 			cur_idx++;
@@ -5940,13 +5952,13 @@ void LLVolumeFace::cacheOptimize()
 	ll_aligned_free_16(mNormals);
 	ll_aligned_free_16(mTexCoords);
 	ll_aligned_free_16(mWeights);
-	ll_aligned_free_16(mBinormals);
+	ll_aligned_free_16(mTangents);
 
 	mPositions = pos;
 	mNormals = norm;
 	mTexCoords = tc;
 	mWeights = wght;
-	mBinormals = binorm;
+	mTangents = binorm;
 
 	//std::string result = llformat("ACMR pre/post: %.3f/%.3f  --  %d triangles %d breaks", pre_acmr, post_acmr, mNumIndices/3, breaks);
 	//llinfos << result << llendl;
@@ -6027,7 +6039,7 @@ void LLVolumeFace::swapData(LLVolumeFace& rhs)
 {
 	llswap(rhs.mPositions, mPositions);
 	llswap(rhs.mNormals, mNormals);
-	llswap(rhs.mBinormals, mBinormals);
+	llswap(rhs.mTangents, mTangents);
 	llswap(rhs.mTexCoords, mTexCoords);
 	llswap(rhs.mIndices,mIndices);
 	llswap(rhs.mNumVertices, mNumVertices);
@@ -6116,22 +6128,11 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 			corners[2].mTexCoord=swap;
 		}
 
-		LLVector4a binormal;
-		
-		calc_binormal_from_triangle( binormal,
-			corners[0].getPosition(), corners[0].mTexCoord,
-			corners[1].getPosition(), corners[1].mTexCoord,
-			corners[2].getPosition(), corners[2].mTexCoord);
-		
-		binormal.normalize3fast();
-
 		S32 size = (grid_size+1)*(grid_size+1);
 		resizeVertices(size);
-		allocateBinormals(size);
-
+		
 		LLVector4a* pos = (LLVector4a*) mPositions;
 		LLVector4a* norm = (LLVector4a*) mNormals;
-		LLVector4a* binorm = (LLVector4a*) mBinormals;
 		LLVector2* tc = (LLVector2*) mTexCoords;
 
 		for(int gx = 0;gx<grid_size+1;gx++)
@@ -6150,8 +6151,7 @@ BOOL LLVolumeFace::createUnCutCubeCap(LLVolume* volume, BOOL partial_build)
 				*pos++ = newVert.getPosition();
 				*norm++ = baseVert.getNormal();
 				*tc++ = newVert.mTexCoord;
-				*binorm++ = binormal;
-
+				
 				if (gx == 0 && gy == 0)
 				{
 					min = newVert.getPosition();
@@ -6227,8 +6227,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 	if (!(mTypeMask & HOLLOW_MASK) && !(mTypeMask & OPEN_MASK))
 	{
 		resizeVertices(num_vertices+1);
-		allocateBinormals(num_vertices+1);	
-
+		
 		if (!partial_build)
 		{
 			resizeIndices(num_indices+3);
@@ -6237,8 +6236,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 	else
 	{
 		resizeVertices(num_vertices);
-		allocateBinormals(num_vertices);
-
+		
 		if (!partial_build)
 		{
 			resizeIndices(num_indices);
@@ -6272,8 +6270,7 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 	LLVector2* tc = (LLVector2*) mTexCoords;
 	LLVector4a* pos = (LLVector4a*) mPositions;
 	LLVector4a* norm = (LLVector4a*) mNormals;
-	LLVector4a* binorm = (LLVector4a*) mBinormals;
-
+	
 	// Copy the vertices into the array
 	for (S32 i = 0; i < num_vertices; i++)
 	{
@@ -6309,31 +6306,6 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 
 	cuv = (min_uv + max_uv)*0.5f;
 
-	LLVector4a binormal;
-	calc_binormal_from_triangle(binormal,
-		*mCenter, cuv,
-		pos[0], tc[0],
-		pos[1], tc[1]);
-	binormal.normalize3fast();
-
-	LLVector4a normal;
-	LLVector4a d0, d1;
-	
-
-	d0.setSub(*mCenter, pos[0]);
-	d1.setSub(*mCenter, pos[1]);
-
-	if (mTypeMask & TOP_MASK)
-	{
-		normal.setCross3(d0, d1);
-	}
-	else
-	{
-		normal.setCross3(d1, d0);
-	}
-
-	normal.normalize3fast();
-
 	VertexData vd;
 	vd.setPosition(*mCenter);
 	vd.mTexCoord = cuv;
@@ -6342,15 +6314,10 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 	{
 		pos[num_vertices] = *mCenter;
 		tc[num_vertices] = cuv;
+
 		num_vertices++;
 	}
 		
-	for (S32 i = 0; i < num_vertices; i++)
-	{
-		binorm[i].load4a(binormal.getF32ptr());
-		norm[i].load4a(normal.getF32ptr());
-	}
-
 	if (partial_build)
 	{
 		return TRUE;
@@ -6585,63 +6552,68 @@ BOOL LLVolumeFace::createCap(LLVolume* volume, BOOL partial_build)
 
 
 	}
-		
+
+	LLVector4a d0,d1;
+
+	d0.setSub(mPositions[mIndices[1]], mPositions[mIndices[0]]);
+	d1.setSub(mPositions[mIndices[2]], mPositions[mIndices[0]]);
+
+	LLVector4a normal;
+	normal.setCross3(d0,d1);
+
+	if (normal.dot3(normal).getF32() > F_APPROXIMATELY_ZERO)
+	{
+		normal.normalize3fast();
+	}
+	else
+	{ //degenerate, make up a value
+		normal.set(0,0,1);
+	}
+
+	llassert(llfinite(normal.getF32ptr()[0]));
+	llassert(llfinite(normal.getF32ptr()[1]));
+	llassert(llfinite(normal.getF32ptr()[2]));
+
+	llassert(!llisnan(normal.getF32ptr()[0]));
+	llassert(!llisnan(normal.getF32ptr()[1]));
+	llassert(!llisnan(normal.getF32ptr()[2]));
+	
+	for (S32 i = 0; i < num_vertices; i++)
+	{
+		norm[i].load4a(normal.getF32ptr());
+	}
+
 	return TRUE;
 }
 
-void LLVolumeFace::createBinormals()
+void CalculateTangentArray(U32 vertexCount, const LLVector4a *vertex, const LLVector4a *normal,
+        const LLVector2 *texcoord, U32 triangleCount, const U16* index_array, LLVector4a *tangent);
+
+void LLVolumeFace::createTangents()
 {
-	if (!mBinormals)
+	if (!mTangents)
 	{
-		allocateBinormals(mNumVertices);
+		allocateTangents(mNumVertices);
 
-		//generate binormals
-		LLVector4a* pos = mPositions;
-		LLVector2* tc = (LLVector2*) mTexCoords;
-		LLVector4a* binorm = (LLVector4a*) mBinormals;
+		//generate tangents
+		//LLVector4a* pos = mPositions;
+		//LLVector2* tc = (LLVector2*) mTexCoords;
+		LLVector4a* binorm = (LLVector4a*) mTangents;
 
-		LLVector4a* end = mBinormals+mNumVertices;
+		LLVector4a* end = mTangents+mNumVertices;
 		while (binorm < end)
 		{
 			(*binorm++).clear();
 		}
 
-		binorm = mBinormals;
-
-		for (U32 i = 0; i < mNumIndices/3; i++) 
-		{	//for each triangle
-			const U16& i0 = mIndices[i*3+0];
-			const U16& i1 = mIndices[i*3+1];
-			const U16& i2 = mIndices[i*3+2];
-						
-			//calculate binormal
-			LLVector4a binormal;
-			calc_binormal_from_triangle(binormal,
-										pos[i0], tc[i0],
-										pos[i1], tc[i1],
-										pos[i2], tc[i2]);
-
+		binorm = mTangents;
 
-			//add triangle normal to vertices
-			binorm[i0].add(binormal);
-			binorm[i1].add(binormal);
-			binorm[i2].add(binormal);
+		CalculateTangentArray(mNumVertices, mPositions, mNormals, mTexCoords, mNumIndices/3, mIndices, mTangents);
 
-			//even out quad contributions
-			if (i % 2 == 0) 
-			{
-				binorm[i2].add(binormal);
-			}
-			else 
-			{
-				binorm[i1].add(binormal);
-			}
-		}
-
-		//normalize binormals
+		//normalize tangents
 		for (U32 i = 0; i < mNumVertices; i++) 
 		{
-			binorm[i].normalize3fast();
+			//binorm[i].normalize3fast();
 			//bump map/planar projection code requires normals to be normalized
 			mNormals[i].normalize3fast();
 		}
@@ -6652,10 +6624,10 @@ void LLVolumeFace::resizeVertices(S32 num_verts)
 {
 	ll_aligned_free_16(mPositions);
 	ll_aligned_free_16(mNormals);
-	ll_aligned_free_16(mBinormals);
+	ll_aligned_free_16(mTangents);
 	ll_aligned_free_16(mTexCoords);
 
-	mBinormals = NULL;
+	mTangents = NULL;
 
 	if (num_verts)
 	{
@@ -6705,9 +6677,9 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con
 	ll_assert_aligned(mTexCoords,16);
 	
 
-	//just clear binormals
-	ll_aligned_free_16(mBinormals);
-	mBinormals = NULL;
+	//just clear tangents
+	ll_aligned_free_16(mTangents);
+	mTangents = NULL;
 
 	mPositions[mNumVertices] = pos;
 	mNormals[mNumVertices] = norm;
@@ -6716,10 +6688,10 @@ void LLVolumeFace::pushVertex(const LLVector4a& pos, const LLVector4a& norm, con
 	mNumVertices++;	
 }
 
-void LLVolumeFace::allocateBinormals(S32 num_verts)
+void LLVolumeFace::allocateTangents(S32 num_verts)
 {
-	ll_aligned_free_16(mBinormals);
-	mBinormals = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts);
+	ll_aligned_free_16(mTangents);
+	mTangents = (LLVector4a*) ll_aligned_malloc_16(sizeof(LLVector4a)*num_verts);
 }
 
 void LLVolumeFace::allocateWeights(S32 num_verts)
@@ -6956,7 +6928,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 
 			if ((mTypeMask & INNER_MASK) && (mTypeMask & FLAT_MASK) && mNumS > 2 && s > 0)
 			{
-
 				pos[cur_vertex].load3(mesh[i].mPos.mV);
 				tc[cur_vertex] = LLVector2(ss,tt);
 			
@@ -6987,7 +6958,6 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		}
 	}
 	
-
 	//get bounding box for this side
 	LLVector4a& face_min = mExtents[0];
 	LLVector4a& face_max = mExtents[1];
@@ -7093,6 +7063,14 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 		n[1]->add(c);
 		n[2]->add(c);
 		
+		llassert(llfinite(c.getF32ptr()[0]));
+		llassert(llfinite(c.getF32ptr()[1]));
+		llassert(llfinite(c.getF32ptr()[2]));
+
+		llassert(!llisnan(c.getF32ptr()[0]));
+		llassert(!llisnan(c.getF32ptr()[1]));
+		llassert(!llisnan(c.getF32ptr()[2]));
+
 		//even out quad contributions
 		n[i%2+1]->add(c);
 	}
@@ -7231,53 +7209,101 @@ BOOL LLVolumeFace::createSide(LLVolume* volume, BOOL partial_build)
 	return TRUE;
 }
 
-// Finds binormal based on three vertices with texture coordinates.
-// Fills in dummy values if the triangle has degenerate texture coordinates.
-void calc_binormal_from_triangle(LLVector4a& binormal,
-
-	const LLVector4a& pos0,
-	const LLVector2& tex0,
-	const LLVector4a& pos1,
-	const LLVector2& tex1,
-	const LLVector4a& pos2,
-	const LLVector2& tex2)
-{
-	LLVector4a rx0( pos0[VX], tex0.mV[VX], tex0.mV[VY] );
-	LLVector4a rx1( pos1[VX], tex1.mV[VX], tex1.mV[VY] );
-	LLVector4a rx2( pos2[VX], tex2.mV[VX], tex2.mV[VY] );
-	
-	LLVector4a ry0( pos0[VY], tex0.mV[VX], tex0.mV[VY] );
-	LLVector4a ry1( pos1[VY], tex1.mV[VX], tex1.mV[VY] );
-	LLVector4a ry2( pos2[VY], tex2.mV[VX], tex2.mV[VY] );
-
-	LLVector4a rz0( pos0[VZ], tex0.mV[VX], tex0.mV[VY] );
-	LLVector4a rz1( pos1[VZ], tex1.mV[VX], tex1.mV[VY] );
-	LLVector4a rz2( pos2[VZ], tex2.mV[VX], tex2.mV[VY] );
-	
-	LLVector4a lhs, rhs;
-
-	LLVector4a r0; 
-	lhs.setSub(rx0, rx1); rhs.setSub(rx0, rx2);
-	r0.setCross3(lhs, rhs);
+//adapted from Lengyel, Eric. “Computing Tangent Space Basis Vectors for an Arbitrary Mesh”. Terathon Software 3D Graphics Library, 2001. http://www.terathon.com/code/tangent.html
+void CalculateTangentArray(U32 vertexCount, const LLVector4a *vertex, const LLVector4a *normal,
+        const LLVector2 *texcoord, U32 triangleCount, const U16* index_array, LLVector4a *tangent)
+{
+    //LLVector4a *tan1 = new LLVector4a[vertexCount * 2];
+	LLVector4a* tan1 = (LLVector4a*) ll_aligned_malloc_16(vertexCount*2*sizeof(LLVector4a));
+
+    LLVector4a* tan2 = tan1 + vertexCount;
+
+	memset(tan1, 0, vertexCount*2*sizeof(LLVector4a));
+        
+    for (U32 a = 0; a < triangleCount; a++)
+    {
+        U32 i1 = *index_array++;
+        U32 i2 = *index_array++;
+        U32 i3 = *index_array++;
+        
+        const LLVector4a& v1 = vertex[i1];
+        const LLVector4a& v2 = vertex[i2];
+        const LLVector4a& v3 = vertex[i3];
+        
+        const LLVector2& w1 = texcoord[i1];
+        const LLVector2& w2 = texcoord[i2];
+        const LLVector2& w3 = texcoord[i3];
+        
+		const F32* v1ptr = v1.getF32ptr();
+		const F32* v2ptr = v2.getF32ptr();
+		const F32* v3ptr = v3.getF32ptr();
 		
-	LLVector4a r1;
-	lhs.setSub(ry0, ry1); rhs.setSub(ry0, ry2);
-	r1.setCross3(lhs, rhs);
-
-	LLVector4a r2;
-	lhs.setSub(rz0, rz1); rhs.setSub(rz0, rz2);
-	r2.setCross3(lhs, rhs);
+        float x1 = v2ptr[0] - v1ptr[0];
+        float x2 = v3ptr[0] - v1ptr[0];
+        float y1 = v2ptr[1] - v1ptr[1];
+        float y2 = v3ptr[1] - v1ptr[1];
+        float z1 = v2ptr[2] - v1ptr[2];
+        float z2 = v3ptr[2] - v1ptr[2];
+        
+        float s1 = w2.mV[0] - w1.mV[0];
+        float s2 = w3.mV[0] - w1.mV[0];
+        float t1 = w2.mV[1] - w1.mV[1];
+        float t2 = w3.mV[1] - w1.mV[1];
+        
+		F32 rd = s1*t2-s2*t1;
+
+		float r = ((rd*rd) > FLT_EPSILON) ? 1.0F / rd : 1024.f; //some made up large ratio for division by zero
+
+		llassert(llfinite(r));
+		llassert(!llisnan(r));
+
+		LLVector4a sdir((t2 * x1 - t1 * x2) * r, (t2 * y1 - t1 * y2) * r,
+				(t2 * z1 - t1 * z2) * r);
+		LLVector4a tdir((s1 * x2 - s2 * x1) * r, (s1 * y2 - s2 * y1) * r,
+				(s1 * z2 - s2 * z1) * r);
+        
+		tan1[i1].add(sdir);
+		tan1[i2].add(sdir);
+		tan1[i3].add(sdir);
+        
+		tan2[i1].add(tdir);
+		tan2[i2].add(tdir);
+		tan2[i3].add(tdir);
+    }
+    
+    for (U32 a = 0; a < vertexCount; a++)
+    {
+        LLVector4a n = normal[a];
+
+		const LLVector4a& t = tan1[a];
+
+		LLVector4a ncrosst;
+		ncrosst.setCross3(n,t);
+
+        // Gram-Schmidt orthogonalize
+        n.mul(n.dot3(t).getF32());
+
+		LLVector4a tsubn;
+		tsubn.setSub(t,n);
+
+		if (tsubn.dot3(tsubn).getF32() > F_APPROXIMATELY_ZERO)
+		{
+			tsubn.normalize3fast();
+		
+			// Calculate handedness
+			F32 handedness = ncrosst.dot3(tan2[a]).getF32() < 0.f ? -1.f : 1.f;
+		
+			tsubn.getF32ptr()[3] = handedness;
 
-	if( r0[VX] && r1[VX] && r2[VX] )
-	{
-		binormal.set(
-				-r0[VZ] / r0[VX],
-				-r1[VZ] / r1[VX],
-				-r2[VZ] / r2[VX]);
-		// binormal.normVec();
-	}
-	else
-	{
-		binormal.set( 0, 1 , 0 );
-	}
+			tangent[a] = tsubn;
+		}
+		else
+		{ //degenerate, make up a value
+			tangent[a].set(0,0,1,1);
+		}
+    }
+    
+	ll_aligned_free_16(tan1);
 }
+
+
diff --git a/indra/llmath/llvolume.h b/indra/llmath/llvolume.h
old mode 100644
new mode 100755
index c845556557bf54ce19fba3737271b003190b6e68..164b8d6652591b356dd03f6c1c9bc1656e46b3fd
--- a/indra/llmath/llvolume.h
+++ b/indra/llmath/llvolume.h
@@ -844,12 +844,12 @@ class LLVolumeFace
 public:
 
 	BOOL create(LLVolume* volume, BOOL partial_build = FALSE);
-	void createBinormals();
+	void createTangents();
 	
 	void appendFace(const LLVolumeFace& face, LLMatrix4& transform, LLMatrix4& normal_tranform);
 
 	void resizeVertices(S32 num_verts);
-	void allocateBinormals(S32 num_verts);
+	void allocateTangents(S32 num_verts);
 	void allocateWeights(S32 num_verts);
 	void resizeIndices(S32 num_indices);
 	void fillFromLegacyData(std::vector<LLVolumeFace::VertexData>& v, std::vector<U16>& idx);
@@ -916,7 +916,7 @@ class LLVolumeFace
 
 	LLVector4a* mPositions;
 	LLVector4a* mNormals;
-	LLVector4a* mBinormals;
+	LLVector4a* mTangents;
 	LLVector2*  mTexCoords;
 	U16* mIndices;
 
@@ -980,7 +980,7 @@ class LLVolume : public LLRefCount
 	void setDirty() { mPathp->setDirty(); mProfilep->setDirty(); }
 
 	void regen();
-	void genBinormals(S32 face);
+	void genTangents(S32 face);
 
 	BOOL isConvex() const;
 	BOOL isCap(S32 face);
@@ -1008,21 +1008,14 @@ class LLVolume : public LLRefCount
 	//get the face index of the face that intersects with the given line segment at the point 
 	//closest to start.  Moves end to the point of intersection.  Returns -1 if no intersection.
 	//Line segment must be in volume space.
-	S32 lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+	S32 lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 							 S32 face = -1,                          // which face to check, -1 = ALL_SIDES
-							 LLVector3* intersection = NULL,         // return the intersection point
+							 LLVector4a* intersection = NULL,         // return the intersection point
 							 LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
-							 LLVector3* normal = NULL,               // return the surface normal at the intersection point
-							 LLVector3* bi_normal = NULL             // return the surface bi-normal at the intersection point
+							 LLVector4a* normal = NULL,               // return the surface normal at the intersection point
+							 LLVector4a* tangent = NULL             // return the surface tangent at the intersection point
 		);
 
-	S32 lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, 
-								   S32 face = 1,
-								   LLVector3* intersection = NULL,
-								   LLVector2* tex_coord = NULL,
-								   LLVector3* normal = NULL,
-								   LLVector3* bi_normal = NULL);
-	
 	LLFaceID generateFaceMask();
 
 	BOOL isFaceMaskValid(LLFaceID face_mask);
@@ -1081,21 +1074,12 @@ class LLVolume : public LLRefCount
 
 std::ostream& operator<<(std::ostream &s, const LLVolumeParams &volume_params);
 
-void calc_binormal_from_triangle(
-		LLVector4a& binormal,
-		const LLVector4a& pos0,
-		const LLVector2& tex0,
-		const LLVector4a& pos1,
-		const LLVector2& tex1,
-		const LLVector4a& pos2,
-		const LLVector2& tex2);
-
 BOOL LLLineSegmentBoxIntersect(const F32* start, const F32* end, const F32* center, const F32* size);
 BOOL LLLineSegmentBoxIntersect(const LLVector3& start, const LLVector3& end, const LLVector3& center, const LLVector3& size);
 BOOL LLLineSegmentBoxIntersect(const LLVector4a& start, const LLVector4a& end, const LLVector4a& center, const LLVector4a& size);
 
-BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir,
-							F32& intersection_a, F32& intersection_b, F32& intersection_t, BOOL two_sided);
+//BOOL LLTriangleRayIntersect(const LLVector3& vert0, const LLVector3& vert1, const LLVector3& vert2, const LLVector3& orig, const LLVector3& dir,
+//							F32& intersection_a, F32& intersection_b, F32& intersection_t, BOOL two_sided);
 
 BOOL LLTriangleRayIntersect(const LLVector4a& vert0, const LLVector4a& vert1, const LLVector4a& vert2, const LLVector4a& orig, const LLVector4a& dir,
 							F32& intersection_a, F32& intersection_b, F32& intersection_t);
diff --git a/indra/llmath/llvolumemgr.cpp b/indra/llmath/llvolumemgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/llvolumemgr.h b/indra/llmath/llvolumemgr.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/llvolumeoctree.cpp b/indra/llmath/llvolumeoctree.cpp
old mode 100644
new mode 100755
index cc83cb7235868bc4102f219806583c9b9e5e30a7..0728b49c1fd3c345afac128028ad036e22454962
--- a/indra/llmath/llvolumeoctree.cpp
+++ b/indra/llmath/llvolumeoctree.cpp
@@ -94,14 +94,14 @@ void LLVolumeOctreeListener::handleChildAddition(const LLOctreeNode<LLVolumeTria
 
 LLOctreeTriangleRayIntersect::LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, 
 							   const LLVolumeFace* face, F32* closest_t,
-							   LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+							   LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
    : mFace(face),
      mStart(start),
 	 mDir(dir),
 	 mIntersection(intersection),
 	 mTexCoord(tex_coord),
 	 mNormal(normal),
-	 mBinormal(bi_normal),
+	 mTangent(tangent),
 	 mClosestT(closest_t),
 	 mHitFace(false)
 {
@@ -112,13 +112,7 @@ void LLOctreeTriangleRayIntersect::traverse(const LLOctreeNode<LLVolumeTriangle>
 {
 	LLVolumeOctreeListener* vl = (LLVolumeOctreeListener*) node->getListener(0);
 
-	/*const F32* start = mStart.getF32();
-	const F32* end = mEnd.getF32();
-	const F32* center = vl->mBounds[0].getF32();
-	const F32* size = vl->mBounds[1].getF32();*/
-
-	//if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1]))
-	if (LLLineSegmentBoxIntersect(mStart.getF32ptr(), mEnd.getF32ptr(), vl->mBounds[0].getF32ptr(), vl->mBounds[1].getF32ptr()))
+	if (LLLineSegmentBoxIntersect(mStart, mEnd, vl->mBounds[0], vl->mBounds[1]))
 	{
 		node->accept(this);
 		for (S32 i = 0; i < node->getChildCount(); ++i)
@@ -152,34 +146,60 @@ void LLOctreeTriangleRayIntersect::visit(const LLOctreeNode<LLVolumeTriangle>* n
 					LLVector4a intersect = mDir;
 					intersect.mul(*mClosestT);
 					intersect.add(mStart);
-					mIntersection->set(intersect.getF32ptr());
+					*mIntersection = intersect;
 				}
 
+				U32 idx0 = tri->mIndex[0];
+				U32 idx1 = tri->mIndex[1];
+				U32 idx2 = tri->mIndex[2];
 
 				if (mTexCoord != NULL)
 				{
 					LLVector2* tc = (LLVector2*) mFace->mTexCoords;
-					*mTexCoord = ((1.f - a - b)  * tc[tri->mIndex[0]] +
-						a              * tc[tri->mIndex[1]] +
-						b              * tc[tri->mIndex[2]]);
+					*mTexCoord = ((1.f - a - b)  * tc[idx0] +
+						a              * tc[idx1] +
+						b              * tc[idx2]);
 
 				}
 
 				if (mNormal != NULL)
 				{
-					LLVector4* norm = (LLVector4*) mFace->mNormals;
-
-					*mNormal    = ((1.f - a - b)  * LLVector3(norm[tri->mIndex[0]]) + 
-						a              * LLVector3(norm[tri->mIndex[1]]) +
-						b              * LLVector3(norm[tri->mIndex[2]]));
+					LLVector4a* norm = mFace->mNormals;
+								
+					LLVector4a n1,n2,n3;
+					n1 = norm[idx0];
+					n1.mul(1.f-a-b);
+								
+					n2 = norm[idx1];
+					n2.mul(a);
+								
+					n3 = norm[idx2];
+					n3.mul(b);
+
+					n1.add(n2);
+					n1.add(n3);
+								
+					*mNormal		= n1; 
 				}
 
-				if (mBinormal != NULL)
+				if (mTangent != NULL)
 				{
-					LLVector4* binormal = (LLVector4*) mFace->mBinormals;
-					*mBinormal = ((1.f - a - b)  * LLVector3(binormal[tri->mIndex[0]]) + 
-							a              * LLVector3(binormal[tri->mIndex[1]]) +
-							b              * LLVector3(binormal[tri->mIndex[2]]));
+					LLVector4a* tangents = mFace->mTangents;
+								
+					LLVector4a t1,t2,t3;
+					t1 = tangents[idx0];
+					t1.mul(1.f-a-b);
+								
+					t2 = tangents[idx1];
+					t2.mul(a);
+								
+					t3 = tangents[idx2];
+					t3.mul(b);
+
+					t1.add(t2);
+					t1.add(t3);
+								
+					*mTangent = t1; 
 				}
 			}
 		}
diff --git a/indra/llmath/llvolumeoctree.h b/indra/llmath/llvolumeoctree.h
old mode 100644
new mode 100755
index 9ae34a0c4e65cb551a67c9802233c16cf6af2818..80d6ced36db8333799148a7a9de3ca971a886869
--- a/indra/llmath/llvolumeoctree.h
+++ b/indra/llmath/llvolumeoctree.h
@@ -137,16 +137,16 @@ class LLOctreeTriangleRayIntersect : public LLOctreeTraveler<LLVolumeTriangle>
 	LLVector4a mStart;
 	LLVector4a mDir;
 	LLVector4a mEnd;
-	LLVector3* mIntersection;
+	LLVector4a* mIntersection;
 	LLVector2* mTexCoord;
-	LLVector3* mNormal;
-	LLVector3* mBinormal;
+	LLVector4a* mNormal;
+	LLVector4a* mTangent;
 	F32* mClosestT;
 	bool mHitFace;
 
 	LLOctreeTriangleRayIntersect(const LLVector4a& start, const LLVector4a& dir, 
 								   const LLVolumeFace* face, F32* closest_t,
-								   LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal);
+								   LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent);
 
 	void traverse(const LLOctreeNode<LLVolumeTriangle>* node);
 
diff --git a/indra/llmath/m3math.cpp b/indra/llmath/m3math.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/m3math.h b/indra/llmath/m3math.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/m4math.cpp b/indra/llmath/m4math.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/m4math.h b/indra/llmath/m4math.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/raytrace.cpp b/indra/llmath/raytrace.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/raytrace.h b/indra/llmath/raytrace.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/alignment_test.cpp b/indra/llmath/tests/alignment_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/llbbox_test.cpp b/indra/llmath/tests/llbbox_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/llbboxlocal_test.cpp b/indra/llmath/tests/llbboxlocal_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/llmodularmath_test.cpp b/indra/llmath/tests/llmodularmath_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/llquaternion_test.cpp b/indra/llmath/tests/llquaternion_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/llrect_test.cpp b/indra/llmath/tests/llrect_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/m3math_test.cpp b/indra/llmath/tests/m3math_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/mathmisc_test.cpp b/indra/llmath/tests/mathmisc_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v2math_test.cpp b/indra/llmath/tests/v2math_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v3color_test.cpp b/indra/llmath/tests/v3color_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v3dmath_test.cpp b/indra/llmath/tests/v3dmath_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v3math_test.cpp b/indra/llmath/tests/v3math_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v4color_test.cpp b/indra/llmath/tests/v4color_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v4coloru_test.cpp b/indra/llmath/tests/v4coloru_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/v4math_test.cpp b/indra/llmath/tests/v4math_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/tests/xform_test.cpp b/indra/llmath/tests/xform_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v2math.cpp b/indra/llmath/v2math.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v2math.h b/indra/llmath/v2math.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/v3color.cpp b/indra/llmath/v3color.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v3color.h b/indra/llmath/v3color.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/v3dmath.cpp b/indra/llmath/v3dmath.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v3dmath.h b/indra/llmath/v3dmath.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/v3math.cpp b/indra/llmath/v3math.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v3math.h b/indra/llmath/v3math.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/v4color.cpp b/indra/llmath/v4color.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v4color.h b/indra/llmath/v4color.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/v4coloru.cpp b/indra/llmath/v4coloru.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v4coloru.h b/indra/llmath/v4coloru.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/v4math.cpp b/indra/llmath/v4math.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/v4math.h b/indra/llmath/v4math.h
old mode 100644
new mode 100755
diff --git a/indra/llmath/xform.cpp b/indra/llmath/xform.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmath/xform.h b/indra/llmath/xform.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/CMakeLists.txt b/indra/llmessage/CMakeLists.txt
old mode 100644
new mode 100755
index 1a90c32fe4fd0ee38433164a7e7a0d59ddfb885a..d193e367eb61fe7631d7c5b265eadf623d71e480
--- a/indra/llmessage/CMakeLists.txt
+++ b/indra/llmessage/CMakeLists.txt
@@ -246,7 +246,7 @@ if (LL_TESTS)
     ${LLVFS_LIBRARIES}
     ${LLMATH_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
-    ${GOOGLEMOCK_LIBRARIES}
+      ${GOOGLEMOCK_LIBRARIES}
     )
 
   LL_ADD_INTEGRATION_TEST(
diff --git a/indra/llmessage/llares.cpp b/indra/llmessage/llares.cpp
old mode 100644
new mode 100755
index 5a67035ed15fff56a9d42742c26c74dee8b36f4f..7f74247a137d141450345c2e2da9d70f9e08af51
--- a/indra/llmessage/llares.cpp
+++ b/indra/llmessage/llares.cpp
@@ -99,8 +99,7 @@ void LLAres::QueryResponder::queryError(int code)
 
 LLAres::LLAres() :
     chan_(NULL),
-    mInitSuccess(false),
-    mListener(new LLAresListener(this))
+    mInitSuccess(false)
 {
 	if (ares_library_init( ARES_LIB_INIT_ALL ) != ARES_SUCCESS ||
 		ares_init(&chan_) != ARES_SUCCESS)
@@ -109,6 +108,8 @@ LLAres::LLAres() :
 		return;
 	}
 
+	mListener = boost::shared_ptr< LLAresListener >(new LLAresListener(this));
+
 	mInitSuccess = true;
 }
 
@@ -161,12 +162,26 @@ void LLAres::getSrvRecords(const std::string &name, SrvResponder *resp)
 }
 	
 void LLAres::rewriteURI(const std::string &uri, UriRewriteResponder *resp)
-{
-	llinfos << "Rewriting " << uri << llendl;
+{	
+	if (resp && uri.size())
+	{
+		LLURI* pURI = new LLURI(uri);
+
+		resp->mUri = *pURI;
+
+		delete pURI;
+
+		if (!resp->mUri.scheme().size() || !resp->mUri.hostName().size())
+		{
+			return;
+		}
+
+		//llinfos << "LLAres::rewriteURI (" << uri << ") search: '" << "_" + resp->mUri.scheme() + "._tcp." + resp->mUri.hostName() << "'" << llendl;
 
-	resp->mUri = LLURI(uri);
-	search("_" + resp->mUri.scheme() + "._tcp." + resp->mUri.hostName(),
-		   RES_SRV, resp);
+		search("_" + resp->mUri.scheme() + "._tcp." + resp->mUri.hostName(), RES_SRV, resp);
+
+		
+	}
 }
 
 LLQueryResponder::LLQueryResponder()
diff --git a/indra/llmessage/llares.h b/indra/llmessage/llares.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llareslistener.cpp b/indra/llmessage/llareslistener.cpp
old mode 100644
new mode 100755
index 58b8a05a9e42d059d52611d63118efec2049c4b6..0a4effac19a36920a15872cf49558dead47a1587
--- a/indra/llmessage/llareslistener.cpp
+++ b/indra/llmessage/llareslistener.cpp
@@ -93,5 +93,12 @@ class UriRewriteResponder: public LLAres::UriRewriteResponder
 
 void LLAresListener::rewriteURI(const LLSD& data)
 {
-    mAres->rewriteURI(data["uri"], new UriRewriteResponder(data));
+	if (mAres)
+	{
+		mAres->rewriteURI(data["uri"], new UriRewriteResponder(data));
+	}
+	else
+	{
+		llinfos << "LLAresListener::rewriteURI requested without Ares present. Ignoring: " << data << llendl;
+	}
 }
diff --git a/indra/llmessage/llareslistener.h b/indra/llmessage/llareslistener.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llassetstorage.cpp b/indra/llmessage/llassetstorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llassetstorage.h b/indra/llmessage/llassetstorage.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llavatarnamecache.cpp b/indra/llmessage/llavatarnamecache.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llavatarnamecache.h b/indra/llmessage/llavatarnamecache.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llblowfishcipher.cpp b/indra/llmessage/llblowfishcipher.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llblowfishcipher.h b/indra/llmessage/llblowfishcipher.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llbuffer.cpp b/indra/llmessage/llbuffer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llbuffer.h b/indra/llmessage/llbuffer.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llbufferstream.cpp b/indra/llmessage/llbufferstream.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llbufferstream.h b/indra/llmessage/llbufferstream.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcachename.cpp b/indra/llmessage/llcachename.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcachename.h b/indra/llmessage/llcachename.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llchainio.cpp b/indra/llmessage/llchainio.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llchainio.h b/indra/llmessage/llchainio.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcipher.h b/indra/llmessage/llcipher.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcircuit.cpp b/indra/llmessage/llcircuit.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcircuit.h b/indra/llmessage/llcircuit.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llclassifiedflags.cpp b/indra/llmessage/llclassifiedflags.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llclassifiedflags.h b/indra/llmessage/llclassifiedflags.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcurl.cpp b/indra/llmessage/llcurl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llcurl.h b/indra/llmessage/llcurl.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lldatapacker.cpp b/indra/llmessage/lldatapacker.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lldatapacker.h b/indra/llmessage/lldatapacker.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lldbstrings.h b/indra/llmessage/lldbstrings.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lldispatcher.cpp b/indra/llmessage/lldispatcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lldispatcher.h b/indra/llmessage/lldispatcher.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lleventflags.h b/indra/llmessage/lleventflags.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llfiltersd2xmlrpc.cpp b/indra/llmessage/llfiltersd2xmlrpc.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llfiltersd2xmlrpc.h b/indra/llmessage/llfiltersd2xmlrpc.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llfollowcamparams.h b/indra/llmessage/llfollowcamparams.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhost.cpp b/indra/llmessage/llhost.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhost.h b/indra/llmessage/llhost.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpassetstorage.cpp b/indra/llmessage/llhttpassetstorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpassetstorage.h b/indra/llmessage/llhttpassetstorage.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpclient.cpp b/indra/llmessage/llhttpclient.cpp
index 3561459bb40f28da675fed5bb755aa4d3eb83af9..6110b035dce4d2286f879e63cf0879d565a340a5 100755
--- a/indra/llmessage/llhttpclient.cpp
+++ b/indra/llmessage/llhttpclient.cpp
@@ -224,7 +224,7 @@ static void request(
 	{
 		if (responder)
 		{
-			responder->completed(U32_MAX, "No pump", LLSD());
+		responder->completed(U32_MAX, "No pump", LLSD());
 		}
 		delete body_injector;
 		return;
@@ -238,9 +238,9 @@ static void request(
 		{
 			responder->completed(498, "Internal Error - curl failure", LLSD());
 		}
-		delete req;
+		delete req ;
 		delete body_injector;
-		return;
+		return ;
 	}
 
 	req->setSSLVerifyCallback(LLHTTPClient::getCertVerifyCallback(), (void *)req);
diff --git a/indra/llmessage/llhttpclient.h b/indra/llmessage/llhttpclient.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpclientadapter.cpp b/indra/llmessage/llhttpclientadapter.cpp
old mode 100644
new mode 100755
index 0b59209af1b6d1efea5e01150b4d92fcd29ac6bf..dcd2d79d67ef1646552bca319768ab1ce2ab7d2b
--- a/indra/llmessage/llhttpclientadapter.cpp
+++ b/indra/llmessage/llhttpclientadapter.cpp
@@ -45,8 +45,8 @@ void LLHTTPClientAdapter::get(const std::string& url, LLCurl::ResponderPtr respo
 	LLSD empty_pragma_header = headers;
 	if (!empty_pragma_header.has("Pragma"))
 	{
-		// as above
-		empty_pragma_header["Pragma"] = " ";
+	// as above
+	empty_pragma_header["Pragma"] = " ";
 	}
 	LLHTTPClient::get(url, responder, empty_pragma_header);
 }
diff --git a/indra/llmessage/llhttpclientadapter.h b/indra/llmessage/llhttpclientadapter.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpclientinterface.h b/indra/llmessage/llhttpclientinterface.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpnode.cpp b/indra/llmessage/llhttpnode.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpnode.h b/indra/llmessage/llhttpnode.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpnodeadapter.h b/indra/llmessage/llhttpnodeadapter.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpsender.cpp b/indra/llmessage/llhttpsender.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llhttpsender.h b/indra/llmessage/llhttpsender.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llinstantmessage.cpp b/indra/llmessage/llinstantmessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llinstantmessage.h b/indra/llmessage/llinstantmessage.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llinvite.h b/indra/llmessage/llinvite.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliobuffer.cpp b/indra/llmessage/lliobuffer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliobuffer.h b/indra/llmessage/lliobuffer.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliohttpserver.cpp b/indra/llmessage/lliohttpserver.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliohttpserver.h b/indra/llmessage/lliohttpserver.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliopipe.cpp b/indra/llmessage/lliopipe.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliopipe.h b/indra/llmessage/lliopipe.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliosocket.cpp b/indra/llmessage/lliosocket.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lliosocket.h b/indra/llmessage/lliosocket.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llioutil.cpp b/indra/llmessage/llioutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llioutil.h b/indra/llmessage/llioutil.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llloginflags.h b/indra/llmessage/llloginflags.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmail.cpp b/indra/llmessage/llmail.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmail.h b/indra/llmessage/llmail.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagebuilder.cpp b/indra/llmessage/llmessagebuilder.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagebuilder.h b/indra/llmessage/llmessagebuilder.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessageconfig.cpp b/indra/llmessage/llmessageconfig.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessageconfig.h b/indra/llmessage/llmessageconfig.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagereader.cpp b/indra/llmessage/llmessagereader.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagereader.h b/indra/llmessage/llmessagereader.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagesenderinterface.h b/indra/llmessage/llmessagesenderinterface.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagetemplate.cpp b/indra/llmessage/llmessagetemplate.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagetemplate.h b/indra/llmessage/llmessagetemplate.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagetemplateparser.cpp b/indra/llmessage/llmessagetemplateparser.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagetemplateparser.h b/indra/llmessage/llmessagetemplateparser.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagethrottle.cpp b/indra/llmessage/llmessagethrottle.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmessagethrottle.h b/indra/llmessage/llmessagethrottle.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmime.cpp b/indra/llmessage/llmime.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmime.h b/indra/llmessage/llmime.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llmsgvariabletype.h b/indra/llmessage/llmsgvariabletype.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llnamevalue.cpp b/indra/llmessage/llnamevalue.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llnamevalue.h b/indra/llmessage/llnamevalue.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llnullcipher.cpp b/indra/llmessage/llnullcipher.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llnullcipher.h b/indra/llmessage/llnullcipher.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpacketack.cpp b/indra/llmessage/llpacketack.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpacketack.h b/indra/llmessage/llpacketack.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpacketbuffer.cpp b/indra/llmessage/llpacketbuffer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpacketbuffer.h b/indra/llmessage/llpacketbuffer.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpacketring.cpp b/indra/llmessage/llpacketring.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpacketring.h b/indra/llmessage/llpacketring.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpartdata.cpp b/indra/llmessage/llpartdata.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpartdata.h b/indra/llmessage/llpartdata.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llproxy.cpp b/indra/llmessage/llproxy.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llproxy.h b/indra/llmessage/llproxy.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpumpio.cpp b/indra/llmessage/llpumpio.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llpumpio.h b/indra/llmessage/llpumpio.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llqueryflags.h b/indra/llmessage/llqueryflags.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llregionflags.h b/indra/llmessage/llregionflags.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llregionhandle.h b/indra/llmessage/llregionhandle.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llregionpresenceverifier.cpp b/indra/llmessage/llregionpresenceverifier.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llregionpresenceverifier.h b/indra/llmessage/llregionpresenceverifier.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdappservices.cpp b/indra/llmessage/llsdappservices.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdappservices.h b/indra/llmessage/llsdappservices.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdhttpserver.cpp b/indra/llmessage/llsdhttpserver.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdhttpserver.h b/indra/llmessage/llsdhttpserver.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdmessage.cpp b/indra/llmessage/llsdmessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdmessage.h b/indra/llmessage/llsdmessage.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdmessagebuilder.cpp b/indra/llmessage/llsdmessagebuilder.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdmessagebuilder.h b/indra/llmessage/llsdmessagebuilder.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdmessagereader.cpp b/indra/llmessage/llsdmessagereader.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdmessagereader.h b/indra/llmessage/llsdmessagereader.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdrpcclient.cpp b/indra/llmessage/llsdrpcclient.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdrpcclient.h b/indra/llmessage/llsdrpcclient.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdrpcserver.cpp b/indra/llmessage/llsdrpcserver.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llsdrpcserver.h b/indra/llmessage/llsdrpcserver.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llservice.cpp b/indra/llmessage/llservice.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llservice.h b/indra/llmessage/llservice.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llservicebuilder.cpp b/indra/llmessage/llservicebuilder.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llservicebuilder.h b/indra/llmessage/llservicebuilder.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llstoredmessage.cpp b/indra/llmessage/llstoredmessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llstoredmessage.h b/indra/llmessage/llstoredmessage.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltaskname.h b/indra/llmessage/lltaskname.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llteleportflags.h b/indra/llmessage/llteleportflags.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltemplatemessagebuilder.cpp b/indra/llmessage/lltemplatemessagebuilder.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltemplatemessagebuilder.h b/indra/llmessage/lltemplatemessagebuilder.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltemplatemessagedispatcher.cpp b/indra/llmessage/lltemplatemessagedispatcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltemplatemessagedispatcher.h b/indra/llmessage/lltemplatemessagedispatcher.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltemplatemessagereader.cpp b/indra/llmessage/lltemplatemessagereader.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltemplatemessagereader.h b/indra/llmessage/lltemplatemessagereader.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llthrottle.cpp b/indra/llmessage/llthrottle.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llthrottle.h b/indra/llmessage/llthrottle.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfermanager.cpp b/indra/llmessage/lltransfermanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfermanager.h b/indra/llmessage/lltransfermanager.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfersourceasset.cpp b/indra/llmessage/lltransfersourceasset.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfersourceasset.h b/indra/llmessage/lltransfersourceasset.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfersourcefile.cpp b/indra/llmessage/lltransfersourcefile.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfersourcefile.h b/indra/llmessage/lltransfersourcefile.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfertargetfile.cpp b/indra/llmessage/lltransfertargetfile.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfertargetfile.h b/indra/llmessage/lltransfertargetfile.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfertargetvfile.cpp b/indra/llmessage/lltransfertargetvfile.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltransfertargetvfile.h b/indra/llmessage/lltransfertargetvfile.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltrustedmessageservice.cpp b/indra/llmessage/lltrustedmessageservice.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lltrustedmessageservice.h b/indra/llmessage/lltrustedmessageservice.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llurlrequest.cpp b/indra/llmessage/llurlrequest.cpp
old mode 100644
new mode 100755
index 627d5918392f94b9d307890d6e225d57dbbbab00..de9e2fe29472ee0e8d12d2114fca6e7928e27ca3
--- a/indra/llmessage/llurlrequest.cpp
+++ b/indra/llmessage/llurlrequest.cpp
@@ -314,11 +314,11 @@ LLIOPipe::EStatus LLURLRequest::process_impl(
 		 const F32 TIMEOUT_ADJUSTMENT = 2.0f;
 		 mDetail->mByteAccumulator = 0;
 		 pump->adjustTimeoutSeconds(TIMEOUT_ADJUSTMENT);
-		 lldebugs << "LLURLRequest adjustTimeoutSeconds for request: " << mDetail->mURL << llendl;
-		 if (mState == STATE_INITIALIZED)
-		 {
-			  llinfos << "LLURLRequest adjustTimeoutSeconds called during upload" << llendl;
-		 }
+		lldebugs << "LLURLRequest adjustTimeoutSeconds for request: " << mDetail->mURL << llendl;
+		if (mState == STATE_INITIALIZED)
+		{
+			llinfos << "LLURLRequest adjustTimeoutSeconds called during upload" << llendl;
+		}
 	}
 
 	switch(mState)
diff --git a/indra/llmessage/llurlrequest.h b/indra/llmessage/llurlrequest.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lluseroperation.cpp b/indra/llmessage/lluseroperation.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/lluseroperation.h b/indra/llmessage/lluseroperation.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llvehicleparams.h b/indra/llmessage/llvehicleparams.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer.cpp b/indra/llmessage/llxfer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer.h b/indra/llmessage/llxfer.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer_file.cpp b/indra/llmessage/llxfer_file.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer_file.h b/indra/llmessage/llxfer_file.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer_mem.cpp b/indra/llmessage/llxfer_mem.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer_mem.h b/indra/llmessage/llxfer_mem.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer_vfile.cpp b/indra/llmessage/llxfer_vfile.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfer_vfile.h b/indra/llmessage/llxfer_vfile.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfermanager.cpp b/indra/llmessage/llxfermanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxfermanager.h b/indra/llmessage/llxfermanager.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxorcipher.cpp b/indra/llmessage/llxorcipher.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/llxorcipher.h b/indra/llmessage/llxorcipher.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/machine.cpp b/indra/llmessage/machine.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/machine.h b/indra/llmessage/machine.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/mean_collision_data.h b/indra/llmessage/mean_collision_data.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/message.cpp b/indra/llmessage/message.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/message.h b/indra/llmessage/message.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/message_prehash.cpp b/indra/llmessage/message_prehash.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/message_prehash.h b/indra/llmessage/message_prehash.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/message_string_table.cpp b/indra/llmessage/message_string_table.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/net.cpp b/indra/llmessage/net.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/net.h b/indra/llmessage/net.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/partsyspacket.cpp b/indra/llmessage/partsyspacket.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/partsyspacket.h b/indra/llmessage/partsyspacket.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/patch_code.cpp b/indra/llmessage/patch_code.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/patch_code.h b/indra/llmessage/patch_code.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/patch_dct.cpp b/indra/llmessage/patch_dct.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/patch_dct.h b/indra/llmessage/patch_dct.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/patch_idct.cpp b/indra/llmessage/patch_idct.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/sound_ids.cpp b/indra/llmessage/sound_ids.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/sound_ids.h b/indra/llmessage/sound_ids.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/commtest.h b/indra/llmessage/tests/commtest.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llareslistener_test.cpp b/indra/llmessage/tests/llareslistener_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llavatarnamecache_test.cpp b/indra/llmessage/tests/llavatarnamecache_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llcurl_stub.cpp b/indra/llmessage/tests/llcurl_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llhost_test.cpp b/indra/llmessage/tests/llhost_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llhttpclient_test.cpp b/indra/llmessage/tests/llhttpclient_test.cpp
old mode 100644
new mode 100755
index 87cbafa404c441e83a481e0302fbfe021c7096bf..559001d0797a351ef9bcd9a1b3946ec516ce45f3
--- a/indra/llmessage/tests/llhttpclient_test.cpp
+++ b/indra/llmessage/tests/llhttpclient_test.cpp
@@ -241,7 +241,7 @@ namespace tut
 		ensureStatusOK();
 		ensure_equals("echoed result matches", getResult(), sd);
 	}
-		
+
 	template<> template<>
 		void HTTPClientTestObject::test<4>()
 	{
diff --git a/indra/llmessage/tests/llhttpclientadapter_test.cpp b/indra/llmessage/tests/llhttpclientadapter_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llmime_test.cpp b/indra/llmessage/tests/llmime_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llmockhttpclient.h b/indra/llmessage/tests/llmockhttpclient.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llnamevalue_test.cpp b/indra/llmessage/tests/llnamevalue_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llpartdata_test.cpp b/indra/llmessage/tests/llpartdata_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llregionpresenceverifier_test.cpp b/indra/llmessage/tests/llregionpresenceverifier_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llsdmessage_test.cpp b/indra/llmessage/tests/llsdmessage_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp b/indra/llmessage/tests/lltemplatemessagedispatcher_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/lltesthttpclientadapter.cpp b/indra/llmessage/tests/lltesthttpclientadapter.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/lltesthttpclientadapter.h b/indra/llmessage/tests/lltesthttpclientadapter.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/lltestmessagesender.cpp b/indra/llmessage/tests/lltestmessagesender.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/lltestmessagesender.h b/indra/llmessage/tests/lltestmessagesender.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/lltrustedmessageservice_test.cpp b/indra/llmessage/tests/lltrustedmessageservice_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/llxfer_file_test.cpp b/indra/llmessage/tests/llxfer_file_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/networkio.h b/indra/llmessage/tests/networkio.h
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/test_llsdmessage_peer.py b/indra/llmessage/tests/test_llsdmessage_peer.py
old mode 100644
new mode 100755
diff --git a/indra/llmessage/tests/testrunner.py b/indra/llmessage/tests/testrunner.py
old mode 100644
new mode 100755
diff --git a/indra/llplugin/CMakeLists.txt b/indra/llplugin/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginclassmedia.cpp b/indra/llplugin/llpluginclassmedia.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginclassmedia.h b/indra/llplugin/llpluginclassmedia.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginclassmediaowner.h b/indra/llplugin/llpluginclassmediaowner.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llplugincookiestore.cpp b/indra/llplugin/llplugincookiestore.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llplugincookiestore.h b/indra/llplugin/llplugincookiestore.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llplugininstance.cpp b/indra/llplugin/llplugininstance.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llplugininstance.h b/indra/llplugin/llplugininstance.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginmessage.cpp b/indra/llplugin/llpluginmessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginmessage.h b/indra/llplugin/llpluginmessage.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginmessageclasses.h b/indra/llplugin/llpluginmessageclasses.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginmessagepipe.cpp b/indra/llplugin/llpluginmessagepipe.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginmessagepipe.h b/indra/llplugin/llpluginmessagepipe.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginprocesschild.cpp b/indra/llplugin/llpluginprocesschild.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginprocesschild.h b/indra/llplugin/llpluginprocesschild.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginprocessparent.cpp b/indra/llplugin/llpluginprocessparent.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginprocessparent.h b/indra/llplugin/llpluginprocessparent.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginsharedmemory.cpp b/indra/llplugin/llpluginsharedmemory.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/llpluginsharedmemory.h b/indra/llplugin/llpluginsharedmemory.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/slplugin/CMakeLists.txt b/indra/llplugin/slplugin/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llplugin/slplugin/slplugin-objc.h b/indra/llplugin/slplugin/slplugin-objc.h
old mode 100644
new mode 100755
diff --git a/indra/llplugin/slplugin/slplugin-objc.mm b/indra/llplugin/slplugin/slplugin-objc.mm
old mode 100644
new mode 100755
diff --git a/indra/llplugin/slplugin/slplugin.cpp b/indra/llplugin/slplugin/slplugin.cpp
old mode 100644
new mode 100755
diff --git a/indra/llplugin/slplugin/slplugin_info.plist b/indra/llplugin/slplugin/slplugin_info.plist
old mode 100644
new mode 100755
diff --git a/indra/llplugin/tests/llplugincookiestore_test.cpp b/indra/llplugin/tests/llplugincookiestore_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/CMakeLists.txt b/indra/llprimitive/CMakeLists.txt
old mode 100644
new mode 100755
index 1768a06a279f316eb66ae62ecd0db086fd105ca9..0dd13916bf5e8eb532776597a3e524b82b0e464d
--- a/indra/llprimitive/CMakeLists.txt
+++ b/indra/llprimitive/CMakeLists.txt
@@ -24,6 +24,8 @@ include_directories(SYSTEM
     )
 
 set(llprimitive_SOURCE_FILES
+    llmaterialid.cpp
+    llmaterial.cpp
     llmaterialtable.cpp
     llmediaentry.cpp
     llmodel.cpp
@@ -41,6 +43,8 @@ set(llprimitive_HEADER_FILES
     CMakeLists.txt
 
     legacy_object_types.h
+    llmaterial.h
+    llmaterialid.h
     llmaterialtable.h
     llmediaentry.h
     llmodel.h
diff --git a/indra/llprimitive/legacy_object_types.h b/indra/llprimitive/legacy_object_types.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llmaterial.cpp b/indra/llprimitive/llmaterial.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..cf4c645cfdf509d36951bad4a62e28dc3fd40e61
--- /dev/null
+++ b/indra/llprimitive/llmaterial.cpp
@@ -0,0 +1,227 @@
+/**
+ * @file llmaterial.cpp
+ * @brief Material definition
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "linden_common.h"
+
+#include "llmaterial.h"
+
+/**
+ * Materials cap parameters
+ */
+#define MATERIALS_CAP_NORMAL_MAP_FIELD            "NormMap"
+#define MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD   "NormOffsetX"
+#define MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD   "NormOffsetY"
+#define MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD   "NormRepeatX"
+#define MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD   "NormRepeatY"
+#define MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD   "NormRotation"
+
+#define MATERIALS_CAP_SPECULAR_MAP_FIELD          "SpecMap"
+#define MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD "SpecOffsetX"
+#define MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD "SpecOffsetY"
+#define MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD "SpecRepeatX"
+#define MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD "SpecRepeatY"
+#define MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD "SpecRotation"
+
+#define MATERIALS_CAP_SPECULAR_COLOR_FIELD        "SpecColor"
+#define MATERIALS_CAP_SPECULAR_EXP_FIELD          "SpecExp"
+#define MATERIALS_CAP_ENV_INTENSITY_FIELD         "EnvIntensity"
+#define MATERIALS_CAP_ALPHA_MASK_CUTOFF_FIELD     "AlphaMaskCutoff"
+#define MATERIALS_CAP_DIFFUSE_ALPHA_MODE_FIELD    "DiffuseAlphaMode"
+
+const LLColor4U LLMaterial::DEFAULT_SPECULAR_LIGHT_COLOR(255,255,255,255);
+
+/**
+ * Materials constants
+ */
+
+const F32 MATERIALS_MULTIPLIER                   = 10000.f;
+
+/**
+ * Helper functions
+ */
+
+template<typename T> T getMaterialField(const LLSD& data, const std::string& field, const LLSD::Type field_type)
+{
+	if ( (data.has(field)) && (field_type == data[field].type()) )
+	{
+		return (T)data[field];
+	}
+	llerrs << "Missing or mistyped field '" << field << "' in material definition" << llendl;
+	return (T)LLSD();
+}
+
+// GCC didn't like the generic form above for some reason
+template<> LLUUID getMaterialField(const LLSD& data, const std::string& field, const LLSD::Type field_type)
+{
+	if ( (data.has(field)) && (field_type == data[field].type()) )
+	{
+		return data[field].asUUID();
+	}
+	llerrs << "Missing or mistyped field '" << field << "' in material definition" << llendl;
+	return LLUUID::null;
+}
+
+/**
+ * LLMaterial class
+ */
+
+const LLMaterial LLMaterial::null;
+
+LLMaterial::LLMaterial()
+	: mNormalOffsetX(0.0f)
+	, mNormalOffsetY(0.0f)
+	, mNormalRepeatX(1.0f)
+	, mNormalRepeatY(1.0f)
+	, mNormalRotation(0.0f)
+	, mSpecularOffsetX(0.0f)
+	, mSpecularOffsetY(0.0f)
+	, mSpecularRepeatX(1.0f)
+	, mSpecularRepeatY(1.0f)
+	, mSpecularRotation(0.0f)
+	, mSpecularLightColor(LLMaterial::DEFAULT_SPECULAR_LIGHT_COLOR)
+	, mSpecularLightExponent(LLMaterial::DEFAULT_SPECULAR_LIGHT_EXPONENT)
+	, mEnvironmentIntensity(LLMaterial::DEFAULT_ENV_INTENSITY)
+	, mDiffuseAlphaMode(LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)
+	, mAlphaMaskCutoff(0)
+{
+}
+
+LLMaterial::LLMaterial(const LLSD& material_data)
+{
+	fromLLSD(material_data);
+}
+
+LLSD LLMaterial::asLLSD() const
+{
+	LLSD material_data;
+
+	material_data[MATERIALS_CAP_NORMAL_MAP_FIELD] = mNormalID;
+	material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD] = llround(mNormalOffsetX * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD] = llround(mNormalOffsetY * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD] = llround(mNormalRepeatX * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD] = llround(mNormalRepeatY * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD] = llround(mNormalRotation * MATERIALS_MULTIPLIER);
+
+	material_data[MATERIALS_CAP_SPECULAR_MAP_FIELD] = mSpecularID;
+	material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD] = llround(mSpecularOffsetX * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD] = llround(mSpecularOffsetY * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD] = llround(mSpecularRepeatX * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD] = llround(mSpecularRepeatY * MATERIALS_MULTIPLIER);
+	material_data[MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD] = llround(mSpecularRotation * MATERIALS_MULTIPLIER);
+
+	material_data[MATERIALS_CAP_SPECULAR_COLOR_FIELD]     = mSpecularLightColor.getValue();
+	material_data[MATERIALS_CAP_SPECULAR_EXP_FIELD]       = mSpecularLightExponent;
+	material_data[MATERIALS_CAP_ENV_INTENSITY_FIELD]      = mEnvironmentIntensity;
+	material_data[MATERIALS_CAP_DIFFUSE_ALPHA_MODE_FIELD] = mDiffuseAlphaMode;
+	material_data[MATERIALS_CAP_ALPHA_MASK_CUTOFF_FIELD]  = mAlphaMaskCutoff;
+
+	return material_data;
+}
+
+void LLMaterial::fromLLSD(const LLSD& material_data)
+{
+	mNormalID = getMaterialField<LLSD::UUID>(material_data, MATERIALS_CAP_NORMAL_MAP_FIELD, LLSD::TypeUUID);
+	mNormalOffsetX  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_NORMAL_MAP_OFFSET_X_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mNormalOffsetY  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_NORMAL_MAP_OFFSET_Y_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mNormalRepeatX  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_NORMAL_MAP_REPEAT_X_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mNormalRepeatY  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_NORMAL_MAP_REPEAT_Y_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mNormalRotation = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_NORMAL_MAP_ROTATION_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+
+	mSpecularID = getMaterialField<LLSD::UUID>(material_data, MATERIALS_CAP_SPECULAR_MAP_FIELD, LLSD::TypeUUID);
+	mSpecularOffsetX  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_SPECULAR_MAP_OFFSET_X_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mSpecularOffsetY  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_SPECULAR_MAP_OFFSET_Y_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mSpecularRepeatX  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_SPECULAR_MAP_REPEAT_X_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mSpecularRepeatY  = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_SPECULAR_MAP_REPEAT_Y_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+	mSpecularRotation = (F32)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_SPECULAR_MAP_ROTATION_FIELD, LLSD::TypeInteger) / MATERIALS_MULTIPLIER;
+
+	mSpecularLightColor.setValue(getMaterialField<LLSD>(material_data, MATERIALS_CAP_SPECULAR_COLOR_FIELD, LLSD::TypeArray));
+	mSpecularLightExponent = (U8)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_SPECULAR_EXP_FIELD,       LLSD::TypeInteger);
+	mEnvironmentIntensity  = (U8)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_ENV_INTENSITY_FIELD,      LLSD::TypeInteger);
+	mDiffuseAlphaMode      = (U8)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_DIFFUSE_ALPHA_MODE_FIELD, LLSD::TypeInteger);
+	mAlphaMaskCutoff       = (U8)getMaterialField<LLSD::Integer>(material_data, MATERIALS_CAP_ALPHA_MASK_CUTOFF_FIELD,  LLSD::TypeInteger);
+}
+
+bool LLMaterial::isNull() const
+{
+	return (*this == null);
+}
+
+bool LLMaterial::operator == (const LLMaterial& rhs) const
+{
+	return 
+		(mNormalID == rhs.mNormalID) && (mNormalOffsetX == rhs.mNormalOffsetX) && (mNormalOffsetY == rhs.mNormalOffsetY) &&
+		(mNormalRepeatX == rhs.mNormalRepeatX) && (mNormalRepeatY == rhs.mNormalRepeatY) && (mNormalRotation == rhs.mNormalRotation) &&
+		(mSpecularID == rhs.mSpecularID) && (mSpecularOffsetX == rhs.mSpecularOffsetX) && (mSpecularOffsetY == rhs.mSpecularOffsetY) &&
+		(mSpecularRepeatX == rhs.mSpecularRepeatX) && (mSpecularRepeatY == rhs.mSpecularRepeatY) && (mSpecularRotation == rhs.mSpecularRotation) &&
+		(mSpecularLightColor == rhs.mSpecularLightColor) && (mSpecularLightExponent == rhs.mSpecularLightExponent) &&
+		(mEnvironmentIntensity == rhs.mEnvironmentIntensity) && (mDiffuseAlphaMode == rhs.mDiffuseAlphaMode) && (mAlphaMaskCutoff == rhs.mAlphaMaskCutoff);
+}
+
+bool LLMaterial::operator != (const LLMaterial& rhs) const
+{
+	return !(*this == rhs);
+}
+
+
+U32 LLMaterial::getShaderMask(U32 alpha_mode)
+{ //NEVER incorporate this value into the message system -- this function will vary depending on viewer implementation
+	U32 ret = 0;
+
+	//two least significant bits are "diffuse alpha mode"
+	if (alpha_mode != DIFFUSE_ALPHA_MODE_DEFAULT)
+	{
+		ret = alpha_mode;
+	}
+	else
+	{
+		ret = getDiffuseAlphaMode();
+	}
+
+	llassert(ret < SHADER_COUNT);
+
+	//next bit is whether or not specular map is present
+	const U32 SPEC_BIT = 0x4;
+
+	if (getSpecularID().notNull())
+	{
+		ret |= SPEC_BIT;
+	}
+
+	llassert(ret < SHADER_COUNT);
+	
+	//next bit is whether or not normal map is present
+	const U32 NORM_BIT = 0x8;
+	if (getNormalID().notNull())
+	{
+		ret |= NORM_BIT;
+	}
+
+	llassert(ret < SHADER_COUNT);
+
+	return ret;
+}
+
+
diff --git a/indra/llprimitive/llmaterial.h b/indra/llprimitive/llmaterial.h
new file mode 100644
index 0000000000000000000000000000000000000000..9f52a3f6c1b1c2c32c759a770a2fc2b0ae6b6534
--- /dev/null
+++ b/indra/llprimitive/llmaterial.h
@@ -0,0 +1,155 @@
+/**
+ * @file llmaterial.h
+ * @brief Material definition
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLMATERIAL_H
+#define LL_LLMATERIAL_H
+
+#include <boost/shared_ptr.hpp>
+
+#include "llmaterialid.h"
+#include "llsd.h"
+#include "v4coloru.h"
+#include "llpointer.h"
+#include "llrefcount.h"
+
+class LLMaterial : public LLRefCount
+{
+public:
+
+	typedef enum
+	{
+		DIFFUSE_ALPHA_MODE_NONE = 0,
+		DIFFUSE_ALPHA_MODE_BLEND = 1,
+		DIFFUSE_ALPHA_MODE_MASK = 2,
+		DIFFUSE_ALPHA_MODE_EMISSIVE = 3,
+		DIFFUSE_ALPHA_MODE_DEFAULT = 4,
+	} eDiffuseAlphaMode;
+
+	typedef enum
+	{
+		SHADER_COUNT = 16,
+		ALPHA_SHADER_COUNT = 4
+	} eShaderCount;
+
+	
+	
+	static const U8			DEFAULT_SPECULAR_LIGHT_EXPONENT = ((U8)(0.2f * 255));
+	static const LLColor4U	DEFAULT_SPECULAR_LIGHT_COLOR;
+	static const U8			DEFAULT_ENV_INTENSITY = 0;
+
+	LLMaterial();
+	LLMaterial(const LLSD& material_data);
+
+	LLSD asLLSD() const;
+	void fromLLSD(const LLSD& material_data);
+
+	const LLUUID& getNormalID() const { return mNormalID; }
+	void		setNormalID(const LLUUID& normal_id) { mNormalID = normal_id; }
+	void		getNormalOffset(F32& offset_x, F32& offset_y) const { offset_x = mNormalOffsetX; offset_y = mNormalOffsetY; }
+	F32		getNormalOffsetX() const { return mNormalOffsetX; }
+	F32		getNormalOffsetY() const { return mNormalOffsetY; }
+
+	void		setNormalOffset(F32 offset_x, F32 offset_y) { mNormalOffsetX = offset_x; mNormalOffsetY = offset_y; }
+	void		setNormalOffsetX(F32 offset_x) { mNormalOffsetX = offset_x; }
+	void		setNormalOffsetY(F32 offset_y) { mNormalOffsetY = offset_y; }
+
+	void		getNormalRepeat(F32& repeat_x, F32& repeat_y) const { repeat_x = mNormalRepeatX; repeat_y = mNormalRepeatY; }
+	F32		getNormalRepeatX() const { return mNormalRepeatX; }
+	F32		getNormalRepeatY() const { return mNormalRepeatY; }
+
+	void		setNormalRepeat(F32 repeat_x, F32 repeat_y) { mNormalRepeatX = repeat_x; mNormalRepeatY = repeat_y; }
+	void		setNormalRepeatX(F32 repeat_x) { mNormalRepeatX = repeat_x; }
+	void		setNormalRepeatY(F32 repeat_y) { mNormalRepeatY = repeat_y; }
+
+	F32		getNormalRotation() const { return mNormalRotation; }
+	void		setNormalRotation(F32 rot) { mNormalRotation = rot; }
+
+	const LLUUID& getSpecularID() const { return mSpecularID; }
+	void		setSpecularID(const LLUUID& specular_id)  { mSpecularID = specular_id; }
+	void		getSpecularOffset(F32& offset_x, F32& offset_y) const { offset_x = mSpecularOffsetX; offset_y = mSpecularOffsetY; }
+	F32		getSpecularOffsetX() const { return mSpecularOffsetX; }
+	F32		getSpecularOffsetY() const { return mSpecularOffsetY; }
+
+	void		setSpecularOffset(F32 offset_x, F32 offset_y) { mSpecularOffsetX = offset_x; mSpecularOffsetY = offset_y; }
+	void		setSpecularOffsetX(F32 offset_x) { mSpecularOffsetX = offset_x; }
+	void		setSpecularOffsetY(F32 offset_y) { mSpecularOffsetY = offset_y; }
+
+	void		getSpecularRepeat(F32& repeat_x, F32& repeat_y) const { repeat_x = mSpecularRepeatX; repeat_y = mSpecularRepeatY; }
+	F32		getSpecularRepeatX() const { return mSpecularRepeatX; }
+	F32		getSpecularRepeatY() const { return mSpecularRepeatY; }
+
+	void		setSpecularRepeat(F32 repeat_x, F32 repeat_y) { mSpecularRepeatX = repeat_x; mSpecularRepeatY = repeat_y; }
+	void		setSpecularRepeatX(F32 repeat_x) { mSpecularRepeatX = repeat_x; }
+	void		setSpecularRepeatY(F32 repeat_y) { mSpecularRepeatY = repeat_y; }
+
+	F32		getSpecularRotation() const { return mSpecularRotation; }
+	void		setSpecularRotation(F32 rot) { mSpecularRotation = rot; }
+
+	const LLColor4U getSpecularLightColor() const { return mSpecularLightColor; }
+	void		setSpecularLightColor(const LLColor4U& color) { mSpecularLightColor = color; }
+	U8			getSpecularLightExponent() const { return mSpecularLightExponent; }
+	void		setSpecularLightExponent(U8 exponent) { mSpecularLightExponent = exponent; }
+	U8			getEnvironmentIntensity() const { return mEnvironmentIntensity; }
+	void		setEnvironmentIntensity(U8 intensity) { mEnvironmentIntensity = intensity; }
+	U8			getDiffuseAlphaMode() const { return mDiffuseAlphaMode; }
+	void		setDiffuseAlphaMode(U8 alpha_mode) { mDiffuseAlphaMode = alpha_mode; }
+	U8			getAlphaMaskCutoff() const { return mAlphaMaskCutoff; }
+	void		setAlphaMaskCutoff(U8 cutoff) { mAlphaMaskCutoff = cutoff; }
+
+	bool		isNull() const;
+	static const LLMaterial null;
+
+	bool		operator == (const LLMaterial& rhs) const;
+	bool		operator != (const LLMaterial& rhs) const;
+
+	U32			getShaderMask(U32 alpha_mode = DIFFUSE_ALPHA_MODE_DEFAULT);
+
+protected:
+	LLUUID		mNormalID;
+	F32			mNormalOffsetX;
+	F32			mNormalOffsetY;
+	F32			mNormalRepeatX;
+	F32			mNormalRepeatY;
+	F32			mNormalRotation;
+
+	LLUUID		mSpecularID;
+	F32			mSpecularOffsetX;
+	F32			mSpecularOffsetY;
+	F32			mSpecularRepeatX;
+	F32			mSpecularRepeatY;
+	F32			mSpecularRotation;
+
+	LLColor4U	mSpecularLightColor;
+	U8			mSpecularLightExponent;
+	U8			mEnvironmentIntensity;
+	U8			mDiffuseAlphaMode;
+	U8			mAlphaMaskCutoff;
+};
+
+typedef LLPointer<LLMaterial> LLMaterialPtr;
+
+#endif // LL_LLMATERIAL_H
+
diff --git a/indra/llprimitive/llmaterialid.cpp b/indra/llprimitive/llmaterialid.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..820f62c43ce04941c51f5ab28b208d99f1fcdec0
--- /dev/null
+++ b/indra/llprimitive/llmaterialid.cpp
@@ -0,0 +1,183 @@
+/** 
+* @file llmaterialid.cpp
+* @brief Implementation of llmaterialid
+* @author Stinson@lindenlab.com
+*
+* $LicenseInfo:firstyear=2012&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2012, Linden Research, Inc.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser 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
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+* $/LicenseInfo$
+*/
+
+#include "linden_common.h"
+
+#include "llmaterialid.h"
+
+#include <string>
+
+#include "llformat.h"
+
+const LLMaterialID LLMaterialID::null;
+
+LLMaterialID::LLMaterialID()
+{
+	clear();
+}
+
+LLMaterialID::LLMaterialID(const LLSD& pMaterialID)
+{
+	llassert(pMaterialID.isBinary());
+	parseFromBinary(pMaterialID.asBinary());
+}
+
+LLMaterialID::LLMaterialID(const LLSD::Binary& pMaterialID)
+{
+	parseFromBinary(pMaterialID);
+}
+
+LLMaterialID::LLMaterialID(const void* pMemory)
+{
+	set(pMemory);
+}
+
+LLMaterialID::LLMaterialID(const LLMaterialID& pOtherMaterialID)
+{
+	copyFromOtherMaterialID(pOtherMaterialID);
+}
+
+LLMaterialID::~LLMaterialID()
+{
+}
+
+bool LLMaterialID::operator == (const LLMaterialID& pOtherMaterialID) const
+{
+	return (compareToOtherMaterialID(pOtherMaterialID) == 0);
+}
+
+bool LLMaterialID::operator != (const LLMaterialID& pOtherMaterialID) const
+{
+	return (compareToOtherMaterialID(pOtherMaterialID) != 0);
+}
+
+bool LLMaterialID::operator < (const LLMaterialID& pOtherMaterialID) const
+{
+	return (compareToOtherMaterialID(pOtherMaterialID) < 0);
+}
+
+bool LLMaterialID::operator <= (const LLMaterialID& pOtherMaterialID) const
+{
+	return (compareToOtherMaterialID(pOtherMaterialID) <= 0);
+}
+
+bool LLMaterialID::operator > (const LLMaterialID& pOtherMaterialID) const
+{
+	return (compareToOtherMaterialID(pOtherMaterialID) > 0);
+}
+
+bool LLMaterialID::operator >= (const LLMaterialID& pOtherMaterialID) const
+{
+	return (compareToOtherMaterialID(pOtherMaterialID) >= 0);
+}
+
+LLMaterialID& LLMaterialID::operator = (const LLMaterialID& pOtherMaterialID)
+{
+	copyFromOtherMaterialID(pOtherMaterialID);
+	return (*this);
+}
+
+bool LLMaterialID::isNull() const
+{
+	return (compareToOtherMaterialID(LLMaterialID::null) == 0);
+}
+
+const U8* LLMaterialID::get() const
+{
+	return mID;
+}
+
+void LLMaterialID::set(const void* pMemory)
+{
+	llassert(pMemory != NULL);
+
+	// assumes that the required size of memory is available
+	memcpy(mID, pMemory, MATERIAL_ID_SIZE * sizeof(U8));
+}
+
+void LLMaterialID::clear()
+{
+	memset(mID, 0, MATERIAL_ID_SIZE * sizeof(U8));
+}
+
+LLSD LLMaterialID::asLLSD() const
+{
+	LLSD::Binary materialIDBinary;
+
+	materialIDBinary.resize(MATERIAL_ID_SIZE * sizeof(U8));
+	memcpy(materialIDBinary.data(), mID, MATERIAL_ID_SIZE * sizeof(U8));
+
+	LLSD materialID = materialIDBinary;
+	return materialID;
+}
+
+std::string LLMaterialID::asString() const
+{
+	std::string materialIDString;
+	for (unsigned int i = 0U; i < static_cast<unsigned int>(MATERIAL_ID_SIZE / sizeof(U32)); ++i)
+	{
+		if (i != 0U)
+		{
+			materialIDString += "-";
+		}
+		const U32 *value = reinterpret_cast<const U32*>(&get()[i * sizeof(U32)]);
+		materialIDString += llformat("%08x", *value);
+	}
+	return materialIDString;
+}
+
+std::ostream& operator<<(std::ostream& s, const LLMaterialID &material_id)
+{
+	s << material_id.asString();
+	return s;
+}
+
+
+void LLMaterialID::parseFromBinary (const LLSD::Binary& pMaterialID)
+{
+	llassert(pMaterialID.size() == (MATERIAL_ID_SIZE * sizeof(U8)));
+	memcpy(mID, &pMaterialID[0], MATERIAL_ID_SIZE * sizeof(U8));
+}
+
+void LLMaterialID::copyFromOtherMaterialID(const LLMaterialID& pOtherMaterialID)
+{
+	memcpy(mID, pOtherMaterialID.get(), MATERIAL_ID_SIZE * sizeof(U8));
+}
+
+int LLMaterialID::compareToOtherMaterialID(const LLMaterialID& pOtherMaterialID) const
+{
+	int retVal = 0;
+
+	for (unsigned int i = 0U; (retVal == 0) && (i < static_cast<unsigned int>(MATERIAL_ID_SIZE / sizeof(U32))); ++i)
+	{
+		const U32 *thisValue = reinterpret_cast<const U32*>(&get()[i * sizeof(U32)]);
+		const U32 *otherValue = reinterpret_cast<const U32*>(&pOtherMaterialID.get()[i * sizeof(U32)]);
+		retVal = ((*thisValue < *otherValue) ? -1 : ((*thisValue > *otherValue) ? 1 : 0));
+	}
+
+	return retVal;
+}
diff --git a/indra/llprimitive/llmaterialid.h b/indra/llprimitive/llmaterialid.h
new file mode 100644
index 0000000000000000000000000000000000000000..0a952040859625b2846e846001ea4be699a44093
--- /dev/null
+++ b/indra/llprimitive/llmaterialid.h
@@ -0,0 +1,76 @@
+/** 
+* @file   llmaterialid.h
+* @brief  Header file for llmaterialid
+* @author Stinson@lindenlab.com
+*
+* $LicenseInfo:firstyear=2012&license=viewerlgpl$
+* Second Life Viewer Source Code
+* Copyright (C) 2012, Linden Research, Inc.
+*
+* This library is free software; you can redistribute it and/or
+* modify it under the terms of the GNU Lesser General Public
+* License as published by the Free Software Foundation;
+* version 2.1 of the License only.
+*
+* 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
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser 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
+*
+* Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+* $/LicenseInfo$
+*/
+#ifndef LL_LLMATERIALID_H
+#define LL_LLMATERIALID_H
+
+#define MATERIAL_ID_SIZE 16
+
+#include <string>
+
+class LLMaterialID
+{
+public:
+	LLMaterialID();
+	LLMaterialID(const LLSD& pMaterialID);
+	LLMaterialID(const LLSD::Binary& pMaterialID);
+	LLMaterialID(const void* pMemory);
+	LLMaterialID(const LLMaterialID& pOtherMaterialID);
+	~LLMaterialID();
+
+	bool          operator == (const LLMaterialID& pOtherMaterialID) const;
+	bool          operator != (const LLMaterialID& pOtherMaterialID) const;
+
+	bool          operator < (const LLMaterialID& pOtherMaterialID) const;
+	bool          operator <= (const LLMaterialID& pOtherMaterialID) const;
+	bool          operator > (const LLMaterialID& pOtherMaterialID) const;
+	bool          operator >= (const LLMaterialID& pOtherMaterialID) const;
+
+	LLMaterialID& operator = (const LLMaterialID& pOtherMaterialID);
+
+	bool          isNull() const;
+
+	const U8*     get() const;
+	void          set(const void* pMemory);
+	void          clear();
+
+	LLSD          asLLSD() const;
+	std::string   asString() const;
+
+	friend std::ostream& operator<<(std::ostream& s, const LLMaterialID &material_id);
+
+	static const LLMaterialID null;
+
+private:
+	void parseFromBinary(const LLSD::Binary& pMaterialID);
+	void copyFromOtherMaterialID(const LLMaterialID& pOtherMaterialID);
+	int  compareToOtherMaterialID(const LLMaterialID& pOtherMaterialID) const;
+
+	U8 mID[MATERIAL_ID_SIZE];
+} ;
+
+#endif // LL_LLMATERIALID_H
+
diff --git a/indra/llprimitive/llmaterialtable.cpp b/indra/llprimitive/llmaterialtable.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llmaterialtable.h b/indra/llprimitive/llmaterialtable.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llmediaentry.cpp b/indra/llprimitive/llmediaentry.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llmediaentry.h b/indra/llprimitive/llmediaentry.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llmodel.cpp b/indra/llprimitive/llmodel.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llmodel.h b/indra/llprimitive/llmodel.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llprimitive.cpp b/indra/llprimitive/llprimitive.cpp
old mode 100644
new mode 100755
index c340fc2d353af999925b9768faa888341b83bb03..2fa77177f58e704f4c7e3eece97e42e90a432041
--- a/indra/llprimitive/llprimitive.cpp
+++ b/indra/llprimitive/llprimitive.cpp
@@ -39,6 +39,7 @@
 #include "llsdutil_math.h"
 #include "llprimtexturelist.h"
 #include "imageids.h"
+#include "llmaterialid.h"
 
 /**
  * exported constants
@@ -314,6 +315,15 @@ S32  LLPrimitive::setTERotation(const U8 index, const F32 r)
 	return mTextureList.setRotation(index, r);
 }
 
+S32 LLPrimitive::setTEMaterialID(const U8 index, const LLMaterialID& pMaterialID)
+{
+	return mTextureList.setMaterialID(index, pMaterialID);
+}
+
+S32 LLPrimitive::setTEMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams)
+{
+	return mTextureList.setMaterialParams(index, pMaterialParams);
+}
 
 //===============================================================
 S32  LLPrimitive::setTEBumpShinyFullbright(const U8 index, const U8 bump)
@@ -364,6 +374,23 @@ S32 LLPrimitive::setTEGlow(const U8 index, const F32 glow)
 	return mTextureList.setGlow(index, glow);
 }
 
+void LLPrimitive::setAllTESelected(bool sel)
+{
+	for (int i = 0, cnt = getNumTEs(); i < cnt; i++)
+	{
+		setTESelected(i, sel);
+	}
+}
+	
+void LLPrimitive::setTESelected(const U8 te, bool sel)
+{
+	LLTextureEntry* tep = getTE(te);
+	if ( (tep) && (tep->setSelected(sel)) && (!sel) && (tep->hasPendingMaterialUpdate()) )
+	{
+		LLMaterialID material_id = tep->getMaterialID();
+		setTEMaterialID(te, material_id);
+	}
+}
 
 LLPCode LLPrimitive::legacyToPCode(const U8 legacy)
 {
@@ -1044,7 +1071,7 @@ S32 LLPrimitive::unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 dat
 	
 	while ((cur_ptr < buffer_end) && (*cur_ptr != 0))
 	{
-//		llinfos << "TE exception" << llendl;
+		LL_DEBUGS("TEFieldDecode") << "TE exception" << LL_ENDL;
 		i = 0;
 		while (*cur_ptr & 0x80)
 		{
@@ -1059,14 +1086,16 @@ S32 LLPrimitive::unpackTEField(U8 *cur_ptr, U8 *buffer_end, U8 *data_ptr, U8 dat
 			if (i & 0x01)
 			{
 				htonmemcpy(data_ptr+(j*data_size),cur_ptr,type,data_size);
-//				char foo[64];
-//				sprintf(foo,"%x %x",*(data_ptr+(j*data_size)), *(data_ptr+(j*data_size)+1));
-//				llinfos << "Assigning " << foo << " to face " << j << llendl;			
+				LL_DEBUGS("TEFieldDecode") << "Assigning " ;
+				char foo[64];
+				sprintf(foo,"%x %x",*(data_ptr+(j*data_size)), *(data_ptr+(j*data_size)+1));
+				LL_CONT << foo << " to face " << j << LL_ENDL;
 			}
 			i = i >> 1;
 		}
 		cur_ptr += data_size;		
 	}
+	llassert(cur_ptr <= buffer_end); // buffer underrun
 	return (S32)(cur_ptr - start_loc);
 }
 
@@ -1088,6 +1117,7 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
 	U8	   bump[MAX_TES];
 	U8	   media_flags[MAX_TES];
     U8     glow[MAX_TES];
+	U8     material_data[MAX_TES*16];
 	
 	const U32 MAX_TE_BUFFER = 4096;
 	U8 packed_buffer[MAX_TE_BUFFER];
@@ -1125,6 +1155,9 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
 			bump[face_index] = te->getBumpShinyFullbright();
 			media_flags[face_index] = te->getMediaTexGen();
 			glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
+
+			// Directly sending material_ids is not safe!
+			memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16);	/* Flawfinder: ignore */ 
 		}
 
 		cur_ptr += packTEField(cur_ptr, (U8 *)image_ids, sizeof(LLUUID),last_face_index, MVT_LLUUID);
@@ -1146,6 +1179,8 @@ BOOL LLPrimitive::packTEMessage(LLMessageSystem *mesgsys) const
 		cur_ptr += packTEField(cur_ptr, (U8 *)media_flags, 1 ,last_face_index, MVT_U8);
 		*cur_ptr++ = 0;
 		cur_ptr += packTEField(cur_ptr, (U8 *)glow, 1 ,last_face_index, MVT_U8);
+		*cur_ptr++ = 0;
+		cur_ptr += packTEField(cur_ptr, (U8 *)material_data, 16, last_face_index, MVT_LLUUID);
 	}
    	mesgsys->addBinaryDataFast(_PREHASH_TextureEntry, packed_buffer, (S32)(cur_ptr - packed_buffer));
 
@@ -1167,6 +1202,7 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
 	U8	   bump[MAX_TES];
 	U8	   media_flags[MAX_TES];
     U8     glow[MAX_TES];
+	U8     material_data[MAX_TES*16];
 	
 	const U32 MAX_TE_BUFFER = 4096;
 	U8 packed_buffer[MAX_TE_BUFFER];
@@ -1204,6 +1240,9 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
 			bump[face_index] = te->getBumpShinyFullbright();
 			media_flags[face_index] = te->getMediaTexGen();
             glow[face_index] = (U8) llround((llclamp(te->getGlow(), 0.0f, 1.0f) * (F32)0xFF));
+
+			// Directly sending material_ids is not safe!
+			memcpy(&material_data[face_index*16],getTE(face_index)->getMaterialID().get(),16);	/* Flawfinder: ignore */ 
 		}
 
 		cur_ptr += packTEField(cur_ptr, (U8 *)image_ids, sizeof(LLUUID),last_face_index, MVT_LLUUID);
@@ -1225,6 +1264,8 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
 		cur_ptr += packTEField(cur_ptr, (U8 *)media_flags, 1 ,last_face_index, MVT_U8);
 		*cur_ptr++ = 0;
 		cur_ptr += packTEField(cur_ptr, (U8 *)glow, 1 ,last_face_index, MVT_U8);
+		*cur_ptr++ = 0;
+		cur_ptr += packTEField(cur_ptr, (U8 *)material_data, 16, last_face_index, MVT_LLUUID);
 	}
 
 	dp.packBinaryData(packed_buffer, (S32)(cur_ptr - packed_buffer), "TextureEntry");
@@ -1234,6 +1275,9 @@ BOOL LLPrimitive::packTEMessage(LLDataPacker &dp) const
 S32 LLPrimitive::parseTEMessage(LLMessageSystem* mesgsys, char const* block_name, const S32 block_num, LLTEContents& tec)
 {
 	S32 retval = 0;
+   // temp buffer for material ID processing
+   // data will end up in tec.material_id[]	
+   U8 material_data[LLTEContents::MAX_TES*16];
 
 	if (block_num < 0)
 	{
@@ -1282,14 +1326,29 @@ S32 LLPrimitive::parseTEMessage(LLMessageSystem* mesgsys, char const* block_name
 	cur_ptr++;
 	cur_ptr += unpackTEField(cur_ptr, tec.packed_buffer+tec.size, (U8 *)tec.glow, 1, tec.face_count, MVT_U8);
 
+	if (cur_ptr < tec.packed_buffer + tec.size)
+	{
+		cur_ptr++;
+		cur_ptr += unpackTEField(cur_ptr, tec.packed_buffer+tec.size, (U8 *)material_data, 16, tec.face_count, MVT_LLUUID);
+	}
+	else
+	{
+		memset(material_data, 0, sizeof(material_data));
+	}
+	
+	for (U32 i = 0; i < tec.face_count; i++)
+	{
+		tec.material_ids[i].set(&material_data[i * 16]);
+	}
+	
 	retval = 1;
 	return retval;
-}
-
+	}
+	
 S32 LLPrimitive::applyParsedTEMessage(LLTEContents& tec)
 {
 	S32 retval = 0;
-
+	
 	LLColor4 color;
 	LLColor4U coloru;
 	for (U32 i = 0; i < tec.face_count; i++)
@@ -1302,6 +1361,9 @@ S32 LLPrimitive::applyParsedTEMessage(LLTEContents& tec)
 		retval |= setTEBumpShinyFullbright(i, tec.bump[i]);
 		retval |= setTEMediaTexGen(i, tec.media_flags[i]);
 		retval |= setTEGlow(i, (F32)tec.glow[i] / (F32)0xFF);
+		
+                retval |= setTEMaterialID(i, tec.material_ids[i]);
+		
 		coloru = LLColor4U(tec.colors + 4*i);
 
 		// Note:  This is an optimization to send common colors (1.f, 1.f, 1.f, 1.f)
@@ -1336,6 +1398,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
 
 	// Avoid construction of 32 UUIDs per call
 	static LLUUID image_ids[MAX_TES];
+	static LLMaterialID material_ids[MAX_TES];
 
 	U8     image_data[MAX_TES*16];
 	U8	   colors[MAX_TES*4];
@@ -1347,6 +1410,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
 	U8	   bump[MAX_TES];
 	U8	   media_flags[MAX_TES];
     U8     glow[MAX_TES];
+	U8     material_data[MAX_TES*16];
 
 	const U32 MAX_TE_BUFFER = 4096;
 	U8 packed_buffer[MAX_TE_BUFFER];
@@ -1389,10 +1453,20 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
 	cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)media_flags, 1, face_count, MVT_U8);
 	cur_ptr++;
 	cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)glow, 1, face_count, MVT_U8);
+	if (cur_ptr < packed_buffer + size)
+	{
+		cur_ptr++;
+		cur_ptr += unpackTEField(cur_ptr, packed_buffer+size, (U8 *)material_data, 16, face_count, MVT_LLUUID);
+	}
+	else
+	{
+		memset(material_data, 0, sizeof(material_data));
+	}
 
 	for (i = 0; i < face_count; i++)
 	{
 		memcpy(image_ids[i].mData,&image_data[i*16],16);	/* Flawfinder: ignore */ 	
+		material_ids[i].set(&material_data[i * 16]);
 	}
 	
 	LLColor4 color;
@@ -1406,6 +1480,7 @@ S32 LLPrimitive::unpackTEMessage(LLDataPacker &dp)
 		retval |= setTEBumpShinyFullbright(i, bump[i]);
 		retval |= setTEMediaTexGen(i, media_flags[i]);
 		retval |= setTEGlow(i, (F32)glow[i] / (F32)0xFF);
+		retval |= setTEMaterialID(i, material_ids[i]);
 		coloru = LLColor4U(colors + 4*i);
 
 		// Note:  This is an optimization to send common colors (1.f, 1.f, 1.f, 1.f)
diff --git a/indra/llprimitive/llprimitive.h b/indra/llprimitive/llprimitive.h
old mode 100644
new mode 100755
index 6a8b59c81cce09cd03587168227b60d950f07011..47a21beaaf8fbb0574e86192e84ac7dc8def6599
--- a/indra/llprimitive/llprimitive.h
+++ b/indra/llprimitive/llprimitive.h
@@ -42,6 +42,7 @@ class LLMessageSystem;
 class LLVolumeParams;
 class LLColor4;
 class LLColor3;
+class LLMaterialID;
 class LLTextureEntry;
 class LLDataPacker;
 class LLVolumeMgr;
@@ -309,7 +310,8 @@ struct LLTEContents
 	U8	   bump[MAX_TES];
 	U8	   media_flags[MAX_TES];
     U8     glow[MAX_TES];
-	
+	LLMaterialID material_ids[MAX_TES];
+
 	static const U32 MAX_TE_BUFFER = 4096;
 	U8 packed_buffer[MAX_TE_BUFFER];
 
@@ -359,6 +361,7 @@ class LLPrimitive : public LLXform
 	LLTextureEntry* getTE(const U8 te_num) const;
 
 	virtual void setNumTEs(const U8 num_tes);
+	virtual void setAllTESelected(bool sel);
 	virtual void setAllTETextures(const LLUUID &tex_id);
 	virtual void setTE(const U8 index, const LLTextureEntry& te);
 	virtual S32 setTEColor(const U8 te, const LLColor4 &color);
@@ -381,7 +384,10 @@ class LLPrimitive : public LLXform
 	virtual S32 setTEFullbright(const U8 te, const U8 fullbright);
 	virtual S32 setTEMediaFlags(const U8 te, const U8 flags);
 	virtual S32 setTEGlow(const U8 te, const F32 glow);
+	virtual S32 setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
+	virtual S32 setTEMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams);
 	virtual BOOL setMaterial(const U8 material); // returns TRUE if material changed
+	virtual void setTESelected(const U8 te, bool sel);
 
 	void copyTEs(const LLPrimitive *primitive);
 	S32 packTEField(U8 *cur_ptr, U8 *data_ptr, U8 data_size, U8 last_face_index, EMsgVariableType type) const;
diff --git a/indra/llprimitive/llprimlinkinfo.h b/indra/llprimitive/llprimlinkinfo.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llprimtexturelist.cpp b/indra/llprimitive/llprimtexturelist.cpp
old mode 100644
new mode 100755
index 7ef87ed382059ae529eab2fb220fbe11235a1065..537e7a6695536ed9bf0d1aa4fed2c0580210523a
--- a/indra/llprimitive/llprimtexturelist.cpp
+++ b/indra/llprimitive/llprimtexturelist.cpp
@@ -27,6 +27,7 @@
 #include "linden_common.h"
 
 #include "llprimtexturelist.h"
+#include "llmaterialid.h"
 #include "lltextureentry.h"
 
 // static 
@@ -358,6 +359,24 @@ S32 LLPrimTextureList::setGlow(const U8 index, const F32 glow)
 	return TEM_CHANGE_NONE;
 }
 
+S32 LLPrimTextureList::setMaterialID(const U8 index, const LLMaterialID& pMaterialID)
+{
+	if (index < mEntryList.size())
+	{
+		return mEntryList[index]->setMaterialID(pMaterialID);
+	}
+	return TEM_CHANGE_NONE;
+}
+
+S32 LLPrimTextureList::setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams)
+{
+	if (index < mEntryList.size())
+	{
+		return mEntryList[index]->setMaterialParams(pMaterialParams);
+	}
+	return TEM_CHANGE_NONE;
+}
+
 S32 LLPrimTextureList::size() const
 {
 	return mEntryList.size();
diff --git a/indra/llprimitive/llprimtexturelist.h b/indra/llprimitive/llprimtexturelist.h
old mode 100644
new mode 100755
index 3cfa52f1d5ef16569c28a52d08f6513d2b0f3bd1..d7fabbbb79a9f4fc080af18240f2830bfde35d98
--- a/indra/llprimitive/llprimtexturelist.h
+++ b/indra/llprimitive/llprimtexturelist.h
@@ -31,9 +31,11 @@
 #include "lluuid.h"
 #include "v3color.h"
 #include "v4color.h"
+#include "llmaterial.h"
 
 
 class LLTextureEntry;
+class LLMaterialID;
 
 // this is a list of LLTextureEntry*'s because in practice the list's elements
 // are of some derived class: LLFooTextureEntry
@@ -102,6 +104,8 @@ class LLPrimTextureList
 	S32 setFullbright(const U8 index, const U8 t);
 	S32 setMediaFlags(const U8 index, const U8 media_flags);
 	S32 setGlow(const U8 index, const F32 glow);
+	S32 setMaterialID(const U8 index, const LLMaterialID& pMaterialID);
+	S32 setMaterialParams(const U8 index, const LLMaterialPtr pMaterialParams);
 
 	S32 size() const;
 
diff --git a/indra/llprimitive/lltextureanim.cpp b/indra/llprimitive/lltextureanim.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/lltextureanim.h b/indra/llprimitive/lltextureanim.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/lltextureentry.cpp b/indra/llprimitive/lltextureentry.cpp
old mode 100644
new mode 100755
index 34eff17519e60752304692a9845690ae56a48029..597f0784904f9362dcdb369d1a0e4a4ef5148299
--- a/indra/llprimitive/lltextureentry.cpp
+++ b/indra/llprimitive/lltextureentry.cpp
@@ -29,6 +29,7 @@
 #include "lluuid.h"
 #include "llmediaentry.h"
 #include "lltextureentry.h"
+#include "llmaterialid.h"
 #include "llsdutil_math.h"
 #include "v4color.h"
 
@@ -60,18 +61,24 @@ LLTextureEntry* LLTextureEntry::newTextureEntry()
 //===============================================================
 LLTextureEntry::LLTextureEntry()
   : mMediaEntry(NULL)
+  , mSelected(false)
+  , mMaterialUpdatePending(false)
 {
 	init(LLUUID::null,1.f,1.f,0.f,0.f,0.f,DEFAULT_BUMP_CODE);
 }
 
 LLTextureEntry::LLTextureEntry(const LLUUID& tex_id)
   : mMediaEntry(NULL)
+  , mSelected(false)
+  , mMaterialUpdatePending(false)
 {
 	init(tex_id,1.f,1.f,0.f,0.f,0.f,DEFAULT_BUMP_CODE);
 }
 
 LLTextureEntry::LLTextureEntry(const LLTextureEntry &rhs)
   : mMediaEntry(NULL)
+  , mSelected(false)
+  , mMaterialUpdatePending(false)
 {
 	mID = rhs.mID;
 	mScaleS = rhs.mScaleS;
@@ -83,6 +90,8 @@ LLTextureEntry::LLTextureEntry(const LLTextureEntry &rhs)
 	mBump = rhs.mBump;
 	mMediaFlags = rhs.mMediaFlags;
 	mGlow = rhs.mGlow;
+	mMaterialID = rhs.mMaterialID;
+	mMaterial = rhs.mMaterial;
 	if (rhs.mMediaEntry != NULL) {
 		// Make a copy
 		mMediaEntry = new LLMediaEntry(*rhs.mMediaEntry);
@@ -103,6 +112,8 @@ LLTextureEntry &LLTextureEntry::operator=(const LLTextureEntry &rhs)
 		mBump = rhs.mBump;
 		mMediaFlags = rhs.mMediaFlags;
 		mGlow = rhs.mGlow;
+		mMaterialID = rhs.mMaterialID;
+		mMaterial = rhs.mMaterial;
 		if (mMediaEntry != NULL) {
 			delete mMediaEntry;
 		}
@@ -130,6 +141,7 @@ void LLTextureEntry::init(const LLUUID& tex_id, F32 scale_s, F32 scale_t, F32 of
 	mBump = bump;
 	mMediaFlags = 0x0;
     mGlow = 0;
+	mMaterialID.clear();
 	
 	setColor(LLColor4(1.f, 1.f, 1.f, 1.f));
 	if (mMediaEntry != NULL) {
@@ -159,6 +171,7 @@ bool LLTextureEntry::operator!=(const LLTextureEntry &rhs) const
 	if (mBump != rhs.mBump) return (true);
 	if (mMediaFlags != rhs.mMediaFlags) return (true);
 	if (mGlow != rhs.mGlow) return (true);
+	if (mMaterialID != rhs.mMaterialID) return (true);
 	return(false);
 }
 
@@ -174,6 +187,7 @@ bool LLTextureEntry::operator==(const LLTextureEntry &rhs) const
 	if (mBump != rhs.mBump) return (false);
 	if (mMediaFlags != rhs.mMediaFlags) return false;
 	if (mGlow != rhs.mGlow) return false;
+	if (mMaterialID != rhs.mMaterialID) return (false);
 	return(true);
 }
 
@@ -523,6 +537,34 @@ S32 LLTextureEntry::setGlow(F32 glow)
 	return TEM_CHANGE_NONE;
 }
 
+S32 LLTextureEntry::setMaterialID(const LLMaterialID& pMaterialID)
+{
+	if ( (mMaterialID != pMaterialID) || (mMaterialUpdatePending && !mSelected) )
+	{
+		if (mSelected)
+		{
+			mMaterialUpdatePending = true;
+			mMaterialID = pMaterialID;
+			return TEM_CHANGE_NONE;
+		}
+
+		mMaterialUpdatePending = false;
+		mMaterialID = pMaterialID;
+		return TEM_CHANGE_TEXTURE;
+	}
+	return TEM_CHANGE_NONE;
+}
+
+S32 LLTextureEntry::setMaterialParams(const LLMaterialPtr pMaterialParams)
+{
+	if (mSelected)
+	{
+		mMaterialUpdatePending = true;
+	}
+	mMaterial = pMaterialParams;
+	return TEM_CHANGE_TEXTURE;
+}
+
 void LLTextureEntry::setMediaData(const LLMediaEntry &media_entry)
 {
     mMediaFlags |= MF_HAS_MEDIA;
diff --git a/indra/llprimitive/lltextureentry.h b/indra/llprimitive/lltextureentry.h
old mode 100644
new mode 100755
index 437b85e03ff02abc34b37ac31e955165a43c83c4..19edcaa27d079d9eca8ae30b0c57f9746ef67fa0
--- a/indra/llprimitive/lltextureentry.h
+++ b/indra/llprimitive/lltextureentry.h
@@ -30,6 +30,8 @@
 #include "lluuid.h"
 #include "v4color.h"
 #include "llsd.h"
+#include "llmaterialid.h"
+#include "llmaterial.h"
 
 // These bits are used while unpacking TEM messages to tell which aspects of
 // the texture entry changed.
@@ -98,6 +100,10 @@ class LLTextureEntry
 
 	void init(const LLUUID& tex_id, F32 scale_s, F32 scale_t, F32 offset_s, F32 offset_t, F32 rotation, U8 bump);
 
+	bool hasPendingMaterialUpdate() const { return mMaterialUpdatePending; }
+	bool isSelected() const { return mSelected; }
+	bool setSelected(bool sel) { bool prev_sel = mSelected; mSelected = sel; return prev_sel; }
+
 	// These return a TEM_ flag from above to indicate if something changed.
 	S32  setID (const LLUUID &tex_id);
 	S32  setColor(const LLColor4 &color);
@@ -121,11 +127,19 @@ class LLTextureEntry
 	S32	 setTexGen(U8 texGen);
 	S32  setMediaTexGen(U8 media);
     S32  setGlow(F32 glow);
+	S32  setMaterialID(const LLMaterialID& pMaterialID);
+	S32  setMaterialParams(const LLMaterialPtr pMaterialParams);
 	
 	virtual const LLUUID &getID() const { return mID; }
 	const LLColor4 &getColor() const { return mColor; }
 	void getScale(F32 *s, F32 *t) const { *s = mScaleS; *t = mScaleT; }
+	F32  getScaleS() const { return mScaleS; }
+	F32  getScaleT() const { return mScaleT; }
+
 	void getOffset(F32 *s, F32 *t) const { *s = mOffsetS; *t = mOffsetT; }
+	F32  getOffsetS() const { return mOffsetS; }
+	F32  getOffsetT() const { return mOffsetT; }
+
 	F32  getRotation() const { return mRotation; }
 	void getRotation(F32 *theta) const { *theta = mRotation; }
 
@@ -136,9 +150,11 @@ class LLTextureEntry
  	U8	 getBumpShinyFullbright() const { return mBump; }
 
 	U8	 getMediaFlags() const { return mMediaFlags & TEM_MEDIA_MASK; }
-	U8	 getTexGen() const	{ return mMediaFlags & TEM_TEX_GEN_MASK; }
+	LLTextureEntry::e_texgen	 getTexGen() const	{ return LLTextureEntry::e_texgen(mMediaFlags & TEM_TEX_GEN_MASK); }
 	U8	 getMediaTexGen() const { return mMediaFlags; }
     F32  getGlow() const { return mGlow; }
+	const LLMaterialID& getMaterialID() const { return mMaterialID; };
+	const LLMaterialPtr getMaterialParams() const { return mMaterial; };
 
     // *NOTE: it is possible for hasMedia() to return true, but getMediaData() to return NULL.
     // CONVERSELY, it is also possible for hasMedia() to return false, but getMediaData()
@@ -188,11 +204,15 @@ class LLTextureEntry
 	static const char* TEXTURE_MEDIA_DATA_KEY;
 
 protected:
+	bool                mSelected;
 	LLUUID				mID;					// Texture GUID
 	LLColor4			mColor;
 	U8					mBump;					// Bump map, shiny, and fullbright
 	U8					mMediaFlags;			// replace with web page, movie, etc.
 	F32                 mGlow;
+	bool                mMaterialUpdatePending;
+	LLMaterialID        mMaterialID;
+	LLMaterialPtr		mMaterial;
 
 	// Note the media data is not sent via the same message structure as the rest of the TE
 	LLMediaEntry*		mMediaEntry;			// The media data for the face
diff --git a/indra/llprimitive/lltree_common.h b/indra/llprimitive/lltree_common.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/lltreeparams.cpp b/indra/llprimitive/lltreeparams.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/lltreeparams.h b/indra/llprimitive/lltreeparams.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llvolumemessage.cpp b/indra/llprimitive/llvolumemessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llvolumemessage.h b/indra/llprimitive/llvolumemessage.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llvolumexml.cpp b/indra/llprimitive/llvolumexml.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/llvolumexml.h b/indra/llprimitive/llvolumexml.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/material_codes.cpp b/indra/llprimitive/material_codes.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/material_codes.h b/indra/llprimitive/material_codes.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/object_flags.h b/indra/llprimitive/object_flags.h
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/tests/llmediaentry_test.cpp b/indra/llprimitive/tests/llmediaentry_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/tests/llmessagesystem_stub.cpp b/indra/llprimitive/tests/llmessagesystem_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/llprimitive/tests/llprimitive_test.cpp b/indra/llprimitive/tests/llprimitive_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/CMakeLists.txt b/indra/llrender/CMakeLists.txt
old mode 100644
new mode 100755
index 669b70aa433a25bc131b9d78f1d2573aed4cd6ee..dba12d048e5b6a663051f8b0f12dfdd0c54acbfd
--- a/indra/llrender/CMakeLists.txt
+++ b/indra/llrender/CMakeLists.txt
@@ -92,7 +92,7 @@ if (BUILD_HEADLESS)
 
   set_property(TARGET llrenderheadless
     PROPERTY COMPILE_DEFINITIONS LL_MESA=1 LL_MESA_HEADLESS=1
-    )
+      )
 
   target_link_libraries(llrenderheadless
     ${LLCOMMON_LIBRARIES}
diff --git a/indra/llrender/llcubemap.cpp b/indra/llrender/llcubemap.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llcubemap.h b/indra/llrender/llcubemap.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontbitmapcache.cpp b/indra/llrender/llfontbitmapcache.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontbitmapcache.h b/indra/llrender/llfontbitmapcache.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontfreetype.cpp b/indra/llrender/llfontfreetype.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontfreetype.h b/indra/llrender/llfontfreetype.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontgl.cpp b/indra/llrender/llfontgl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontgl.h b/indra/llrender/llfontgl.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontregistry.cpp b/indra/llrender/llfontregistry.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llfontregistry.h b/indra/llrender/llfontregistry.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llgl.cpp b/indra/llrender/llgl.cpp
old mode 100644
new mode 100755
index c8a8e9fcf7c052ffd854ee5dbe7e5df132370731..088ba95b7502a282261c6320c1f64296135cbff0
--- a/indra/llrender/llgl.cpp
+++ b/indra/llrender/llgl.cpp
@@ -216,6 +216,11 @@ PFNGLGETQUERYIVARBPROC glGetQueryivARB = NULL;
 PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB = NULL;
 PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB = NULL;
 
+// GL_ARB_timer_query
+PFNGLQUERYCOUNTERPROC glQueryCounter = NULL;
+PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v = NULL;
+PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v = NULL;
+
 // GL_ARB_point_parameters
 PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB = NULL;
 PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB = NULL;
@@ -421,6 +426,7 @@ LLGLManager::LLGLManager() :
 	mHasFragmentShader(FALSE),
 	mNumTextureImageUnits(0),
 	mHasOcclusionQuery(FALSE),
+	mHasTimerQuery(FALSE),
 	mHasOcclusionQuery2(FALSE),
 	mHasPointParameters(FALSE),
 	mHasDrawBuffers(FALSE),
@@ -445,7 +451,9 @@ LLGLManager::LLGLManager() :
 	mIsGFFX(FALSE),
 	mATIOffsetVerticalLines(FALSE),
 	mATIOldDriver(FALSE),
-
+#if LL_DARWIN
+	mIsMobileGF(FALSE),
+#endif
 	mHasRequirements(TRUE),
 
 	mHasSeparateSpecularColor(FALSE),
@@ -637,6 +645,13 @@ bool LLGLManager::initGL()
 		{
 			mIsGF3 = TRUE;
 		}
+#if LL_DARWIN
+		else if ((mGLRenderer.find("9400M") != std::string::npos)
+			  || (mGLRenderer.find("9600M") != std::string::npos))
+		{
+			mIsMobileGF = TRUE;
+		}
+#endif
 
 	}
 	else if (mGLVendor.find("INTEL") != std::string::npos
@@ -745,12 +760,13 @@ bool LLGLManager::initGL()
 	{ //using multisample textures on ATI results in black screen for some reason
 		mHasTextureMultisample = FALSE;
 	}
-#endif
+
 
 	if (mIsIntel && mGLVersion <= 3.f)
 	{ //never try to use framebuffer objects on older intel drivers (crashy)
 		mHasFramebufferObject = FALSE;
 	}
+#endif
 
 	if (mHasFramebufferObject)
 	{
@@ -947,13 +963,15 @@ void LLGLManager::initExtensions()
 	mHasARBEnvCombine = ExtensionExists("GL_ARB_texture_env_combine", gGLHExts.mSysExts);
 	mHasCompressedTextures = glh_init_extensions("GL_ARB_texture_compression");
 	mHasOcclusionQuery = ExtensionExists("GL_ARB_occlusion_query", gGLHExts.mSysExts);
+	mHasTimerQuery = ExtensionExists("GL_ARB_timer_query", gGLHExts.mSysExts);
 	mHasOcclusionQuery2 = ExtensionExists("GL_ARB_occlusion_query2", gGLHExts.mSysExts);
 	mHasVertexBufferObject = ExtensionExists("GL_ARB_vertex_buffer_object", gGLHExts.mSysExts);
 	mHasVertexArrayObject = ExtensionExists("GL_ARB_vertex_array_object", gGLHExts.mSysExts);
 	mHasSync = ExtensionExists("GL_ARB_sync", gGLHExts.mSysExts);
 	mHasMapBufferRange = ExtensionExists("GL_ARB_map_buffer_range", gGLHExts.mSysExts);
 	mHasFlushBufferRange = ExtensionExists("GL_APPLE_flush_buffer_range", gGLHExts.mSysExts);
-	mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts);
+	//mHasDepthClamp = ExtensionExists("GL_ARB_depth_clamp", gGLHExts.mSysExts) || ExtensionExists("GL_NV_depth_clamp", gGLHExts.mSysExts);
+	mHasDepthClamp = FALSE;
 	// mask out FBO support when packed_depth_stencil isn't there 'cause we need it for LLRenderTarget -Brad
 #ifdef GL_ARB_framebuffer_object
 	mHasFramebufferObject = ExtensionExists("GL_ARB_framebuffer_object", gGLHExts.mSysExts);
@@ -963,6 +981,15 @@ void LLGLManager::initExtensions()
 							ExtensionExists("GL_EXT_framebuffer_multisample", gGLHExts.mSysExts) &&
 							ExtensionExists("GL_EXT_packed_depth_stencil", gGLHExts.mSysExts);
 #endif
+#ifdef GL_EXT_texture_sRGB
+	mHassRGBTexture = ExtensionExists("GL_EXT_texture_sRGB", gGLHExts.mSysExts);
+#endif
+	
+#ifdef GL_ARB_framebuffer_sRGB
+	mHassRGBFramebuffer = ExtensionExists("GL_ARB_framebuffer_sRGB", gGLHExts.mSysExts);
+#else
+	mHassRGBFramebuffer = ExtensionExists("GL_EXT_framebuffer_sRGB", gGLHExts.mSysExts);
+#endif
 	
 	mHasMipMapGeneration = mHasFramebufferObject || mGLVersion >= 1.4f;
 
@@ -1253,6 +1280,13 @@ void LLGLManager::initExtensions()
 		glGetQueryObjectivARB = (PFNGLGETQUERYOBJECTIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetQueryObjectivARB");
 		glGetQueryObjectuivARB = (PFNGLGETQUERYOBJECTUIVARBPROC)GLH_EXT_GET_PROC_ADDRESS("glGetQueryObjectuivARB");
 	}
+	if (mHasTimerQuery)
+	{
+		llinfos << "initExtensions() TimerQuery-related procs..." << llendl;
+		glQueryCounter = (PFNGLQUERYCOUNTERPROC) GLH_EXT_GET_PROC_ADDRESS("glQueryCounter");
+		glGetQueryObjecti64v = (PFNGLGETQUERYOBJECTI64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetQueryObjecti64v");
+		glGetQueryObjectui64v = (PFNGLGETQUERYOBJECTUI64VPROC) GLH_EXT_GET_PROC_ADDRESS("glGetQueryObjectui64v");
+	}
 	if (mHasPointParameters)
 	{
 		llinfos << "initExtensions() PointParameters-related procs..." << llendl;
diff --git a/indra/llrender/llgl.h b/indra/llrender/llgl.h
old mode 100644
new mode 100755
index d70e764769a12e7854939dc36bf3d1071a5b34c4..60597fd090943c42d6a8eeaaf38a216eb55aac5a
--- a/indra/llrender/llgl.h
+++ b/indra/llrender/llgl.h
@@ -98,6 +98,7 @@ class LLGLManager
 	BOOL mHasFragmentShader;
 	S32  mNumTextureImageUnits;
 	BOOL mHasOcclusionQuery;
+	BOOL mHasTimerQuery;
 	BOOL mHasOcclusionQuery2;
 	BOOL mHasPointParameters;
 	BOOL mHasDrawBuffers;
@@ -115,6 +116,8 @@ class LLGLManager
 	BOOL mHasARBEnvCombine;
 	BOOL mHasCubeMap;
 	BOOL mHasDebugOutput;
+	BOOL mHassRGBTexture;
+	BOOL mHassRGBFramebuffer;
 
 	// Vendor-specific extensions
 	BOOL mIsATI;
@@ -126,6 +129,11 @@ class LLGLManager
 	BOOL mATIOffsetVerticalLines;
 	BOOL mATIOldDriver;
 
+#if LL_DARWIN
+	// Needed to distinguish problem cards on older Macs that break with Materials
+	BOOL mIsMobileGF;
+#endif
+	
 	// Whether this version of GL is good enough for SL to use
 	BOOL mHasRequirements;
 
diff --git a/indra/llrender/llgldbg.cpp b/indra/llrender/llgldbg.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llgldbg.h b/indra/llrender/llgldbg.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llglheaders.h b/indra/llrender/llglheaders.h
old mode 100644
new mode 100755
index 509de51f4dfc4261ab7c22cf47cb817288dbd189..dace57295350d382d548ca6d50f605ff084ca259
--- a/indra/llrender/llglheaders.h
+++ b/indra/llrender/llglheaders.h
@@ -116,6 +116,11 @@ extern PFNGLGETQUERYIVARBPROC glGetQueryivARB;
 extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB;
 extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB;
 
+// GL_ARB_timer_query
+extern PFNGLQUERYCOUNTERPROC glQueryCounter;
+extern PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
+extern PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
+
 // GL_ARB_point_parameters
 extern PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB;
 extern PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB;
@@ -378,6 +383,11 @@ extern PFNGLGETQUERYIVARBPROC glGetQueryivARB;
 extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB;
 extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB;
 
+// GL_ARB_timer_query
+extern PFNGLQUERYCOUNTERPROC glQueryCounter;
+extern PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
+extern PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
+
 // GL_ARB_point_parameters
 extern PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB;
 extern PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB;
@@ -619,6 +629,12 @@ extern PFNGLGETQUERYIVARBPROC glGetQueryivARB;
 extern PFNGLGETQUERYOBJECTIVARBPROC glGetQueryObjectivARB;
 extern PFNGLGETQUERYOBJECTUIVARBPROC glGetQueryObjectuivARB;
 
+// GL_ARB_timer_query
+extern PFNGLQUERYCOUNTERPROC glQueryCounter;
+extern PFNGLGETQUERYOBJECTI64VPROC glGetQueryObjecti64v;
+extern PFNGLGETQUERYOBJECTUI64VPROC glGetQueryObjectui64v;
+
+
 // GL_ARB_point_parameters
 extern PFNGLPOINTPARAMETERFARBPROC glPointParameterfARB;
 extern PFNGLPOINTPARAMETERFVARBPROC glPointParameterfvARB;
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
old mode 100644
new mode 100755
index 7cbf39096ec8fbbf9993e4fcd99e556037ee74ca..ac16e30796a96d4e27190151a7344f2a92a0afc7
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -53,6 +53,12 @@ GLhandleARB LLGLSLShader::sCurBoundShader = 0;
 LLGLSLShader* LLGLSLShader::sCurBoundShaderPtr = NULL;
 S32 LLGLSLShader::sIndexedTextureChannels = 0;
 bool LLGLSLShader::sNoFixedFunction = false;
+bool LLGLSLShader::sProfileEnabled = false;
+std::set<LLGLSLShader*> LLGLSLShader::sInstances;
+U64 LLGLSLShader::sTotalTimeElapsed = 0;
+U32 LLGLSLShader::sTotalTrianglesDrawn = 0;
+U64 LLGLSLShader::sTotalSamplesDrawn = 0;
+U32 LLGLSLShader::sTotalDrawCalls = 0;
 
 //UI shader -- declared here so llui_libtest will link properly
 LLGLSLShader	gUIProgram;
@@ -87,19 +93,240 @@ LLShaderFeatures::LLShaderFeatures()
 //===============================
 // LLGLSL Shader implementation
 //===============================
+
+//static
+void LLGLSLShader::initProfile()
+{
+	sProfileEnabled = true;
+	sTotalTimeElapsed = 0;
+	sTotalTrianglesDrawn = 0;
+	sTotalSamplesDrawn = 0;
+	sTotalDrawCalls = 0;
+
+	for (std::set<LLGLSLShader*>::iterator iter = sInstances.begin(); iter != sInstances.end(); ++iter)
+	{
+		(*iter)->clearStats();
+	}
+}
+
+
+struct LLGLSLShaderCompareTimeElapsed
+{
+		bool operator()(const LLGLSLShader* const& lhs, const LLGLSLShader* const& rhs)
+		{
+			return lhs->mTimeElapsed < rhs->mTimeElapsed;
+		}
+};
+
+//static
+void LLGLSLShader::finishProfile()
+{
+	sProfileEnabled = false;
+
+	std::vector<LLGLSLShader*> sorted;
+
+	for (std::set<LLGLSLShader*>::iterator iter = sInstances.begin(); iter != sInstances.end(); ++iter)
+	{
+		sorted.push_back(*iter);
+	}
+
+	std::sort(sorted.begin(), sorted.end(), LLGLSLShaderCompareTimeElapsed());
+
+	for (std::vector<LLGLSLShader*>::iterator iter = sorted.begin(); iter != sorted.end(); ++iter)
+	{
+		(*iter)->dumpStats();
+	}
+
+	llinfos << "-----------------------------------" << llendl;
+	llinfos << "Total rendering time: " << llformat("%.4f ms", sTotalTimeElapsed/1000000.f) << llendl;
+	llinfos << "Total samples drawn: " << llformat("%.4f million", sTotalSamplesDrawn/1000000.f) << llendl;
+	llinfos << "Total triangles drawn: " << llformat("%.3f million", sTotalTrianglesDrawn/1000000.f) << llendl;
+}
+
+void LLGLSLShader::clearStats()
+{
+	mTrianglesDrawn = 0;
+	mTimeElapsed = 0;
+	mSamplesDrawn = 0;
+	mDrawCalls = 0;
+	mTextureStateFetched = false;
+	mTextureMagFilter.clear();
+	mTextureMinFilter.clear();
+}
+
+void LLGLSLShader::dumpStats()
+{
+	if (mDrawCalls > 0)
+	{
+		llinfos << "=============================================" << llendl;
+		llinfos << mName << llendl;
+		for (U32 i = 0; i < mShaderFiles.size(); ++i)
+		{
+			llinfos << mShaderFiles[i].first << llendl;
+		}
+		for (U32 i = 0; i < mTexture.size(); ++i)
+		{
+			GLint idx = mTexture[i];
+			
+			if (idx >= 0)
+			{
+				GLint uniform_idx = getUniformLocation(i);
+				llinfos << mUniformNameMap[uniform_idx] << " - " << std::hex << mTextureMagFilter[i] << "/" << mTextureMinFilter[i] << std::dec << llendl;
+			}
+		}
+		llinfos << "=============================================" << llendl;
+
+		F32 ms = mTimeElapsed/1000000.f;
+		F32 seconds = ms/1000.f;
+
+		F32 pct_tris = (F32) mTrianglesDrawn/(F32)sTotalTrianglesDrawn*100.f;
+		F32 tris_sec = (F32) (mTrianglesDrawn/1000000.0);
+		tris_sec /= seconds;
+
+		F32 pct_samples = (F32) ((F64)mSamplesDrawn/(F64)sTotalSamplesDrawn)*100.f;
+		F32 samples_sec = (F32) mSamplesDrawn/1000000000.0;
+		samples_sec /= seconds;
+
+		F32 pct_calls = (F32) mDrawCalls/(F32)sTotalDrawCalls*100.f;
+		U32 avg_batch = mTrianglesDrawn/mDrawCalls;
+
+		llinfos << "Triangles Drawn: " << mTrianglesDrawn <<  " " << llformat("(%.2f pct of total, %.3f million/sec)", pct_tris, tris_sec ) << llendl;
+		llinfos << "Draw Calls: " << mDrawCalls << " " << llformat("(%.2f pct of total, avg %d tris/call)", pct_calls, avg_batch) << llendl;
+		llinfos << "SamplesDrawn: " << mSamplesDrawn << " " << llformat("(%.2f pct of total, %.3f billion/sec)", pct_samples, samples_sec) << llendl;
+		llinfos << "Time Elapsed: " << mTimeElapsed << " " << llformat("(%.2f pct of total, %.5f ms)\n", (F32) ((F64)mTimeElapsed/(F64)sTotalTimeElapsed)*100.f, ms) << llendl;
+	}
+}
+
+//static
+void LLGLSLShader::startProfile()
+{
+	if (sProfileEnabled && sCurBoundShaderPtr)
+	{
+		sCurBoundShaderPtr->placeProfileQuery();
+	}
+
+}
+
+//static
+void LLGLSLShader::stopProfile(U32 count, U32 mode)
+{
+	if (sProfileEnabled)
+	{
+		sCurBoundShaderPtr->readProfileQuery(count, mode);
+	}
+}
+
+void LLGLSLShader::placeProfileQuery()
+{
+#if !LL_DARWIN
+	if (mTimerQuery == 0)
+	{
+		glGenQueriesARB(1, &mTimerQuery);
+	}
+
+	if (!mTextureStateFetched)
+	{
+		mTextureStateFetched = true;
+		mTextureMagFilter.resize(mTexture.size());
+		mTextureMinFilter.resize(mTexture.size());
+
+		U32 cur_active = gGL.getCurrentTexUnitIndex();
+
+		for (U32 i = 0; i < mTexture.size(); ++i)
+		{
+			GLint idx = mTexture[i];
+
+			if (idx >= 0)
+			{
+				gGL.getTexUnit(idx)->activate();
+
+				U32 mag = 0xFFFFFFFF;
+				U32 min = 0xFFFFFFFF;
+
+				U32 type = LLTexUnit::getInternalType(gGL.getTexUnit(idx)->getCurrType());
+
+				glGetTexParameteriv(type, GL_TEXTURE_MAG_FILTER, (GLint*) &mag);
+				glGetTexParameteriv(type, GL_TEXTURE_MIN_FILTER, (GLint*) &min);
+
+				mTextureMagFilter[i] = mag;
+				mTextureMinFilter[i] = min;
+			}
+		}
+
+		gGL.getTexUnit(cur_active)->activate();
+	}
+
+
+	glBeginQueryARB(GL_SAMPLES_PASSED, 1);
+	glBeginQueryARB(GL_TIME_ELAPSED, mTimerQuery);
+#endif
+}
+
+void LLGLSLShader::readProfileQuery(U32 count, U32 mode)
+{
+#if !LL_DARWIN
+	glEndQueryARB(GL_TIME_ELAPSED);
+	glEndQueryARB(GL_SAMPLES_PASSED);
+	
+	U64 time_elapsed = 0;
+	glGetQueryObjectui64v(mTimerQuery, GL_QUERY_RESULT, &time_elapsed);
+
+	U64 samples_passed = 0;
+	glGetQueryObjectui64v(1, GL_QUERY_RESULT, &samples_passed);
+
+	sTotalTimeElapsed += time_elapsed;
+	mTimeElapsed += time_elapsed;
+
+	sTotalSamplesDrawn += samples_passed;
+	mSamplesDrawn += samples_passed;
+
+	U32 tri_count = 0;
+	switch (mode)
+	{
+		case LLRender::TRIANGLES: tri_count = count/3; break;
+		case LLRender::TRIANGLE_FAN: tri_count = count-2; break;
+		case LLRender::TRIANGLE_STRIP: tri_count = count-2; break;
+		default: tri_count = count; break; //points lines etc just use primitive count
+	}
+
+	mTrianglesDrawn += tri_count;
+	sTotalTrianglesDrawn += tri_count;
+
+	sTotalDrawCalls++;
+	mDrawCalls++;
+#endif
+}
+
+
+
 LLGLSLShader::LLGLSLShader()
-	: mProgramObject(0), mActiveTextureChannels(0), mShaderLevel(0), mShaderGroup(SG_DEFAULT), mUniformsDirty(FALSE)
+	: mProgramObject(0), 
+	  mAttributeMask(0),
+	  mTotalUniformSize(0),
+	  mActiveTextureChannels(0), 
+	  mShaderLevel(0), 
+	  mShaderGroup(SG_DEFAULT), 
+	  mUniformsDirty(FALSE),
+	  mTimerQuery(0)
 {
+	
+}
 
+LLGLSLShader::~LLGLSLShader()
+{
+	
 }
 
 void LLGLSLShader::unload()
 {
+	sInstances.erase(this);
+
 	stop_glerror();
 	mAttribute.clear();
 	mTexture.clear();
 	mUniform.clear();
 	mShaderFiles.clear();
+	mDefines.clear();
 
 	if (mProgramObject)
 	{
@@ -133,6 +360,8 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
 								U32 varying_count,
 								const char** varyings)
 {
+	sInstances.insert(this);
+
 	//reloading, reset matrix hash values
 	for (U32 i = 0; i < LLRender::NUM_MATRIX_MODES; ++i)
 	{
@@ -150,7 +379,7 @@ BOOL LLGLSLShader::createShader(vector<string> * attributes,
 	vector< pair<string,GLenum> >::iterator fileIter = mShaderFiles.begin();
 	for ( ; fileIter != mShaderFiles.end(); fileIter++ )
 	{
-		GLhandleARB shaderhandle = LLShaderMgr::instance()->loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second, mFeatures.mIndexedTextureChannels);
+		GLhandleARB shaderhandle = LLShaderMgr::instance()->loadShaderFile((*fileIter).first, mShaderLevel, (*fileIter).second, &mDefines, mFeatures.mIndexedTextureChannels);
 		LL_DEBUGS("ShaderLoading") << "SHADER FILE: " << (*fileIter).first << " mShaderLevel=" << mShaderLevel << LL_ENDL;
 		if (shaderhandle > 0)
 		{
@@ -285,6 +514,8 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)
 	if (res)
 	{ //read back channel locations
 
+		mAttributeMask = 0;
+
 		//read back reserved channels first
 		for (U32 i = 0; i < LLShaderMgr::instance()->mReservedAttribs.size(); i++)
 		{
@@ -293,6 +524,7 @@ BOOL LLGLSLShader::mapAttributes(const vector<string> * attributes)
 			if (index != -1)
 			{
 				mAttribute[i] = index;
+				mAttributeMask |= 1 << i;
 				LL_DEBUGS("ShaderLoading") << "Attribute " << name << " assigned to channel " << index << LL_ENDL;
 			}
 		}
@@ -325,11 +557,56 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)
 
 	GLenum type;
 	GLsizei length;
-	GLint size;
+	GLint size = -1;
 	char name[1024];		/* Flawfinder: ignore */
 	name[0] = 0;
 
+
 	glGetActiveUniformARB(mProgramObject, index, 1024, &length, &size, &type, (GLcharARB *)name);
+#if !LL_DARWIN
+	if (size > 0)
+	{
+		switch(type)
+		{
+			case GL_FLOAT_VEC2: size *= 2; break;
+			case GL_FLOAT_VEC3: size *= 3; break;
+			case GL_FLOAT_VEC4: size *= 4; break;
+			case GL_DOUBLE: size *= 2; break;
+			case GL_DOUBLE_VEC2: size *= 2; break;
+			case GL_DOUBLE_VEC3: size *= 6; break;
+			case GL_DOUBLE_VEC4: size *= 8; break;
+			case GL_INT_VEC2: size *= 2; break;
+			case GL_INT_VEC3: size *= 3; break;
+			case GL_INT_VEC4: size *= 4; break;
+			case GL_UNSIGNED_INT_VEC2: size *= 2; break;
+			case GL_UNSIGNED_INT_VEC3: size *= 3; break;
+			case GL_UNSIGNED_INT_VEC4: size *= 4; break;
+			case GL_BOOL_VEC2: size *= 2; break;
+			case GL_BOOL_VEC3: size *= 3; break;
+			case GL_BOOL_VEC4: size *= 4; break;
+			case GL_FLOAT_MAT2: size *= 4; break;
+			case GL_FLOAT_MAT3: size *= 9; break;
+			case GL_FLOAT_MAT4: size *= 16; break;
+			case GL_FLOAT_MAT2x3: size *= 6; break;
+			case GL_FLOAT_MAT2x4: size *= 8; break;
+			case GL_FLOAT_MAT3x2: size *= 6; break;
+			case GL_FLOAT_MAT3x4: size *= 12; break;
+			case GL_FLOAT_MAT4x2: size *= 8; break;
+			case GL_FLOAT_MAT4x3: size *= 12; break;
+			case GL_DOUBLE_MAT2: size *= 8; break;
+			case GL_DOUBLE_MAT3: size *= 18; break;
+			case GL_DOUBLE_MAT4: size *= 32; break;
+			case GL_DOUBLE_MAT2x3: size *= 12; break;
+			case GL_DOUBLE_MAT2x4: size *= 16; break;
+			case GL_DOUBLE_MAT3x2: size *= 12; break;
+			case GL_DOUBLE_MAT3x4: size *= 24; break;
+			case GL_DOUBLE_MAT4x2: size *= 16; break;
+			case GL_DOUBLE_MAT4x3: size *= 24; break;
+		}
+		mTotalUniformSize += size;
+	}
+#endif
+
 	S32 location = glGetUniformLocationARB(mProgramObject, name);
 	if (location != -1)
 	{
@@ -342,6 +619,7 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)
 		}
 
 		mUniformMap[name] = location;
+		mUniformNameMap[location] = name;
 		LL_DEBUGS("ShaderLoading") << "Uniform " << name << " is at location " << location << LL_ENDL;
 	
 		//find the index of this uniform
@@ -372,11 +650,21 @@ void LLGLSLShader::mapUniform(GLint index, const vector<string> * uniforms)
 			}
 		}
 	}
- }
+}
+
+void LLGLSLShader::addPermutation(std::string name, std::string value)
+{
+	mDefines[name] = value;
+}
+
+void LLGLSLShader::removePermutation(std::string name)
+{
+	mDefines[name].erase();
+}
 
 GLint LLGLSLShader::mapUniformTextureChannel(GLint location, GLenum type)
 {
-	if (type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB ||
+	if ((type >= GL_SAMPLER_1D_ARB && type <= GL_SAMPLER_2D_RECT_SHADOW_ARB) ||
 		type == GL_SAMPLER_2D_MULTISAMPLE)
 	{	//this here is a texture
 		glUniform1iARB(location, mActiveTextureChannels);
@@ -390,9 +678,11 @@ BOOL LLGLSLShader::mapUniforms(const vector<string> * uniforms)
 {
 	BOOL res = TRUE;
 	
+	mTotalUniformSize = 0;
 	mActiveTextureChannels = 0;
 	mUniform.clear();
 	mUniformMap.clear();
+	mUniformNameMap.clear();
 	mTexture.clear();
 	mValue.clear();
 	//initialize arrays
@@ -413,6 +703,7 @@ BOOL LLGLSLShader::mapUniforms(const vector<string> * uniforms)
 
 	unbind();
 
+	LL_DEBUGS("ShaderLoading") << "Total Uniform Size: " << mTotalUniformSize << llendl;
 	return res;
 }
 
@@ -471,6 +762,58 @@ void LLGLSLShader::bindNoShader(void)
 	}
 }
 
+S32 LLGLSLShader::bindTexture(const std::string &uniform, LLTexture *texture, LLTexUnit::eTextureType mode)
+{
+	S32 channel = 0;
+	channel = getUniformLocation(uniform);
+	
+	return bindTexture(channel, texture, mode);
+}
+
+S32 LLGLSLShader::bindTexture(S32 uniform, LLTexture *texture, LLTexUnit::eTextureType mode)
+{
+	if (uniform < 0 || uniform >= (S32)mTexture.size())
+	{
+		UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL;
+		return -1;
+	}
+	
+	uniform = mTexture[uniform];
+	
+	if (uniform > -1)
+	{
+		gGL.getTexUnit(uniform)->bind(texture, mode);
+	}
+	
+	return uniform;
+}
+
+S32 LLGLSLShader::unbindTexture(const std::string &uniform, LLTexUnit::eTextureType mode)
+{
+	S32 channel = 0;
+	channel = getUniformLocation(uniform);
+	
+	return unbindTexture(channel);
+}
+
+S32 LLGLSLShader::unbindTexture(S32 uniform, LLTexUnit::eTextureType mode)
+{
+	if (uniform < 0 || uniform >= (S32)mTexture.size())
+	{
+		UNIFORM_ERRS << "Uniform out of range: " << uniform << LL_ENDL;
+		return -1;
+	}
+	
+	uniform = mTexture[uniform];
+	
+	if (uniform > -1)
+	{
+		gGL.getTexUnit(uniform)->unbind(mode);
+	}
+	
+	return uniform;
+}
+
 S32 LLGLSLShader::enableTexture(S32 uniform, LLTexUnit::eTextureType mode)
 {
 	if (uniform < 0 || uniform >= (S32)mTexture.size())
@@ -857,6 +1200,23 @@ void LLGLSLShader::uniform1i(const string& uniform, GLint v)
 	}
 }
 
+void LLGLSLShader::uniform2i(const string& uniform, GLint i, GLint j)
+{
+	GLint location = getUniformLocation(uniform);
+				
+	if (location >= 0)
+	{
+		std::map<GLint, LLVector4>::iterator iter = mValue.find(location);
+		LLVector4 vec(i,j,0.f,0.f);
+		if (iter == mValue.end() || shouldChange(iter->second,vec))
+		{
+			glUniform2iARB(location, i, j);
+			mValue[location] = vec;
+		}
+	}
+}
+
+
 void LLGLSLShader::uniform1f(const string& uniform, GLfloat v)
 {
 	GLint location = getUniformLocation(uniform);
diff --git a/indra/llrender/llglslshader.h b/indra/llrender/llglslshader.h
old mode 100644
new mode 100755
index cf21101e35a2b064d9d121e826589b7f2a4435c9..eabdb9fc927c8a24680303b55a5b0704566480b1
--- a/indra/llrender/llglslshader.h
+++ b/indra/llrender/llglslshader.h
@@ -67,14 +67,29 @@ class LLGLSLShader
 		SG_WATER
 	};
 	
+	static std::set<LLGLSLShader*> sInstances;
+	static bool sProfileEnabled;
+
 	LLGLSLShader();
+	~LLGLSLShader();
 
 	static GLhandleARB sCurBoundShader;
 	static LLGLSLShader* sCurBoundShaderPtr;
 	static S32 sIndexedTextureChannels;
 	static bool sNoFixedFunction;
 
+	static void initProfile();
+	static void finishProfile();
+
+	static void startProfile();
+	static void stopProfile(U32 count, U32 mode);
+
 	void unload();
+	void clearStats();
+	void dumpStats();
+	void placeProfileQuery();
+	void readProfileQuery(U32 count, U32 mode);
+
 	BOOL createShader(std::vector<std::string> * attributes,
 						std::vector<std::string> * uniforms,
 						U32 varying_count = 0,
@@ -96,6 +111,7 @@ class LLGLSLShader
 	void uniform3fv(U32 index, U32 count, const GLfloat* v);
 	void uniform4fv(U32 index, U32 count, const GLfloat* v);
 	void uniform1i(const std::string& uniform, GLint i);
+	void uniform2i(const std::string& uniform, GLint i, GLint j);
 	void uniform1f(const std::string& uniform, GLfloat v);
 	void uniform2f(const std::string& uniform, GLfloat x, GLfloat y);
 	void uniform3f(const std::string& uniform, GLfloat x, GLfloat y, GLfloat z);
@@ -123,12 +139,22 @@ class LLGLSLShader
 	GLint getAttribLocation(U32 attrib);
 	GLint mapUniformTextureChannel(GLint location, GLenum type);
 	
+	void addPermutation(std::string name, std::string value);
+	void removePermutation(std::string name);
+	
 	//enable/disable texture channel for specified uniform
 	//if given texture uniform is active in the shader, 
 	//the corresponding channel will be active upon return
 	//returns channel texture is enabled in from [0-MAX)
 	S32 enableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
-	S32 disableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE); 
+	S32 disableTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
+	
+	// bindTexture returns the texture unit we've bound the texture to.
+	// You can reuse the return value to unbind a texture when required.
+	S32 bindTexture(const std::string& uniform, LLTexture *texture, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
+	S32 bindTexture(S32 uniform, LLTexture *texture, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
+	S32 unbindTexture(const std::string& uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
+	S32 unbindTexture(S32 uniform, LLTexUnit::eTextureType mode = LLTexUnit::TT_TEXTURE);
 	
     BOOL link(BOOL suppress_errors = FALSE);
 	void bind();
@@ -142,10 +168,13 @@ class LLGLSLShader
 
 	GLhandleARB mProgramObject;
 	std::vector<GLint> mAttribute; //lookup table of attribute enum to attribute channel
+	U32 mAttributeMask;  //mask of which reserved attributes are set (lines up with LLVertexBuffer::getTypeMask())
 	std::vector<GLint> mUniform;   //lookup table of uniform enum to uniform location
 	std::map<std::string, GLint> mUniformMap;  //lookup map of uniform name to uniform location
+	std::map<GLint, std::string> mUniformNameMap; //lookup map of uniform location to uniform name
 	std::map<GLint, LLVector4> mValue; //lookup map of uniform location to last known value
 	std::vector<GLint> mTexture;
+	S32 mTotalUniformSize;
 	S32 mActiveTextureChannels;
 	S32 mShaderLevel;
 	S32 mShaderGroup;
@@ -153,6 +182,23 @@ class LLGLSLShader
 	LLShaderFeatures mFeatures;
 	std::vector< std::pair< std::string, GLenum > > mShaderFiles;
 	std::string mName;
+	boost::unordered_map<std::string, std::string> mDefines;
+
+	//statistcis for profiling shader performance
+	U32 mTimerQuery;
+	U64 mTimeElapsed;
+	static U64 sTotalTimeElapsed;
+	U32 mTrianglesDrawn;
+	static U32 sTotalTrianglesDrawn;
+	U64 mSamplesDrawn;
+	static U64 sTotalSamplesDrawn;
+	U32 mDrawCalls;
+	static U32 sTotalDrawCalls;
+
+	bool mTextureStateFetched;
+	std::vector<U32> mTextureMagFilter;
+	std::vector<U32> mTextureMinFilter;
+	
 };
 
 //UI shader (declared here so llui_libtest will link properly)
diff --git a/indra/llrender/llglstates.h b/indra/llrender/llglstates.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llgltypes.h b/indra/llrender/llgltypes.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llimagegl.cpp b/indra/llrender/llimagegl.cpp
index 249b8da880e2b79e9ccc078de7f89a81c61cc986..38764eba239e6b04ec8f304bba6ee05980a407e5 100644
--- a/indra/llrender/llimagegl.cpp
+++ b/indra/llrender/llimagegl.cpp
@@ -732,6 +732,12 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 						glPixelStorei(GL_UNPACK_SWAP_BYTES, 0);
 						stop_glerror();
 					}
+
+					if (LLRender::sGLCoreProfile)
+					{
+						glGenerateMipmap(mTarget);
+					}	
+					stop_glerror();
 				}
 			}
 			else
@@ -742,12 +748,16 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 				S32 height = getHeight(mCurrentDiscardLevel);
 				S32 nummips = mMaxDiscardLevel - mCurrentDiscardLevel + 1;
 				S32 w = width, h = height;
+
+
+				const U8* new_data = 0;
+				(void)new_data;
+
 				const U8* prev_mip_data = 0;
 				const U8* cur_mip_data = 0;
 #ifdef SHOW_ASSERT
 				S32 cur_mip_size = 0;
 #endif
-				
 				mMipLevels = nummips;
 
 				for (int m=0; m<nummips; m++)
@@ -767,14 +777,22 @@ void LLImageGL::setImage(const U8* data_in, BOOL data_hasmips)
 						llassert(cur_mip_size == bytes*4);
 #endif
 						U8* new_data = new U8[bytes];
+
+#ifdef SHOW_ASSERT
+						llassert(prev_mip_data);
+						llassert(cur_mip_size == bytes*4);
 						llassert_always(new_data);
+#endif
+
 						LLImageBase::generateMip(prev_mip_data, new_data, w, h, mComponents);
 						cur_mip_data = new_data;
 #ifdef SHOW_ASSERT
 						cur_mip_size = bytes; 
 #endif
+
 					}
 					llassert(w > 0 && h > 0 && cur_mip_data);
+					(void)cur_mip_data;
 					{
 // 						LLFastTimer t1(FTM_TEMP4);
 						if(mFormatSwapBytes)
@@ -1098,7 +1116,21 @@ void LLImageGL::deleteTextures(LLTexUnit::eTextureType type, U32 format, S32 mip
 {
 	if (gGLManager.mInited)
 	{
-		if (format == 0 ||  type == LLTexUnit::TT_CUBE_MAP || mip_levels == -1)
+		switch (format)
+		{
+			case 0:
+
+			// We get ARB errors in debug when attempting to use glTexImage2D with these deprecated pix formats
+			//
+			case GL_LUMINANCE8:
+			case GL_INTENSITY8:
+			case GL_ALPHA8:
+				glDeleteTextures(numTextures, textures);
+			break;
+
+			default:
+			{
+				if (type == LLTexUnit::TT_CUBE_MAP || mip_levels == -1)
 		{ //unknown internal format or unknown number of mip levels, not safe to reuse
 			glDeleteTextures(numTextures, textures);
 		}
@@ -1106,11 +1138,13 @@ void LLImageGL::deleteTextures(LLTexUnit::eTextureType type, U32 format, S32 mip
 		{
 			for (S32 i = 0; i < numTextures; ++i)
 			{ //remove texture from VRAM by setting its size to zero
+
 				for (S32 j = 0; j <= mip_levels; j++)
 				{
 					gGL.getTexUnit(0)->bindManual(type, textures[i]);
-
-					glTexImage2D(LLTexUnit::getInternalType(type), j, format, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+							U32 internal_type = LLTexUnit::getInternalType(type);
+							glTexImage2D(internal_type, j, format, 0, 0, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+							stop_glerror();
 				}
 
 				llassert(std::find(sDeadTextureList[type][format].begin(),
@@ -1121,6 +1155,9 @@ void LLImageGL::deleteTextures(LLTexUnit::eTextureType type, U32 format, S32 mip
 			}	
 		}
 	}
+			break;
+		}
+	}
 	
 	/*if (immediate)
 	{
diff --git a/indra/llrender/llimagegl.h b/indra/llrender/llimagegl.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llpostprocess.cpp b/indra/llrender/llpostprocess.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llpostprocess.h b/indra/llrender/llpostprocess.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llrender.cpp b/indra/llrender/llrender.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llrender.h b/indra/llrender/llrender.h
old mode 100644
new mode 100755
index 78a310e525fbe8e8494d0d22f325e347ae367b3f..98222939e75d5dd1b3510b4dd9401af6501208b5
--- a/indra/llrender/llrender.h
+++ b/indra/llrender/llrender.h
@@ -262,6 +262,14 @@ class LLRender
 	friend class LLTexUnit;
 public:
 
+	enum eTexIndex
+	{
+		DIFFUSE_MAP = 0,
+		NORMAL_MAP,
+		SPECULAR_MAP,
+		NUM_TEXTURE_CHANNELS,
+	};
+	
 	typedef enum {
 		TRIANGLES = 0,
 		TRIANGLE_STRIP,
diff --git a/indra/llrender/llrendernavprim.cpp b/indra/llrender/llrendernavprim.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llrendernavprim.h b/indra/llrender/llrendernavprim.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llrendersphere.cpp b/indra/llrender/llrendersphere.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/llrendersphere.h b/indra/llrender/llrendersphere.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llrendertarget.cpp b/indra/llrender/llrendertarget.cpp
old mode 100644
new mode 100755
index 5fb4fc8e520b3b26bf549c62d4e8351c734eb9f4..6e22712b94f8158b3d099c627ba71337156f42b9
--- a/indra/llrender/llrendertarget.cpp
+++ b/indra/llrender/llrendertarget.cpp
@@ -53,11 +53,19 @@ void check_framebuffer_status()
 bool LLRenderTarget::sUseFBO = false;
 U32 LLRenderTarget::sCurFBO = 0;
 
+
+extern S32 gGLViewport[4];
+
+U32 LLRenderTarget::sCurResX = 0;
+U32 LLRenderTarget::sCurResY = 0;
+
 LLRenderTarget::LLRenderTarget() :
 	mResX(0),
 	mResY(0),
 	mFBO(0),
 	mPreviousFBO(0),
+	mPreviousResX(0),
+	mPreviousResY(0),
 	mDepth(0),
 	mStencil(0),
 	mUseDepth(false),
@@ -390,13 +398,12 @@ void LLRenderTarget::bindTarget()
 {
 	if (mFBO)
 	{
-		mPreviousFBO = sCurFBO;
-
 		stop_glerror();
 		
+		mPreviousFBO = sCurFBO;
 		glBindFramebuffer(GL_FRAMEBUFFER, mFBO);
 		sCurFBO = mFBO;
-
+		
 		stop_glerror();
 		if (gGLManager.mHasDrawBuffers)
 		{ //setup multiple render targets
@@ -418,7 +425,12 @@ void LLRenderTarget::bindTarget()
 		stop_glerror();
 	}
 
+	mPreviousResX = sCurResX;
+	mPreviousResY = sCurResY;
 	glViewport(0, 0, mResX, mResY);
+	sCurResX = mResX;
+	sCurResY = mResY;
+
 	sBoundTarget = this;
 }
 
@@ -489,6 +501,20 @@ void LLRenderTarget::flush(bool fetch_depth)
 		stop_glerror();
 		glBindFramebuffer(GL_FRAMEBUFFER, mPreviousFBO);
 		sCurFBO = mPreviousFBO;
+
+		if (mPreviousFBO)
+		{
+			glViewport(0, 0, mPreviousResX, mPreviousResY);
+			sCurResX = mPreviousResX;
+			sCurResY = mPreviousResY;
+		}
+		else
+		{
+			glViewport(gGLViewport[0],gGLViewport[1],gGLViewport[2],gGLViewport[3]);
+			sCurResX = gGLViewport[2];
+			sCurResY = gGLViewport[3];
+		}
+						
 		stop_glerror();
 	}
 }
diff --git a/indra/llrender/llrendertarget.h b/indra/llrender/llrendertarget.h
old mode 100644
new mode 100755
index 765a727b5b9ea358403491e9ac6bebec8e185fc3..66a9874a6b20ddd5ba41964b07e436a8c8e3f3ca
--- a/indra/llrender/llrendertarget.h
+++ b/indra/llrender/llrendertarget.h
@@ -63,6 +63,9 @@ class LLRenderTarget
 	static bool sUseFBO; 
 	static U32 sBytesAllocated;
 	static U32 sCurFBO;
+	static U32 sCurResX;
+	static U32 sCurResY;
+
 
 	LLRenderTarget();
 	~LLRenderTarget();
@@ -146,6 +149,9 @@ class LLRenderTarget
 	std::vector<U32> mInternalFormat;
 	U32 mFBO;
 	U32 mPreviousFBO;
+	U32 mPreviousResX;
+	U32 mPreviousResY;
+
 	U32 mDepth;
 	bool mStencil;
 	bool mUseDepth;
diff --git a/indra/llrender/llshadermgr.cpp b/indra/llrender/llshadermgr.cpp
old mode 100644
new mode 100755
index b6a9a6b653a28c37b69929713fe65046913815c5..fea4ee28198faa0ce693ca842fd3b66507daaac0
--- a/indra/llrender/llshadermgr.cpp
+++ b/indra/llrender/llshadermgr.cpp
@@ -521,7 +521,7 @@ void LLShaderMgr::dumpObjectLog(GLhandleARB ret, BOOL warns)
 	}
  }
 
-GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels)
+GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, boost::unordered_map<std::string, std::string>* defines, S32 texture_index_channels)
 {
 	GLenum error = GL_NO_ERROR;
 	if (gDebugGL)
@@ -650,13 +650,15 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
 			text[count++] = strdup("#define shadow2DRect(a,b) vec2(texture(a,b))\n");
 		}
 	}
-
-	//copy preprocessor definitions into buffer
-	for (std::map<std::string,std::string>::iterator iter = mDefinitions.begin(); iter != mDefinitions.end(); ++iter)
+	
+	if (defines)
+	{
+		for (boost::unordered_map<std::string,std::string>::iterator iter = defines->begin(); iter != defines->end(); ++iter)
 	{
 		std::string define = "#define " + iter->first + " " + iter->second + "\n";
 		text[count++] = (GLcharARB *) strdup(define.c_str());
 	}
+	}
 
 	if (texture_index_channels > 0 && type == GL_FRAGMENT_SHADER_ARB)
 	{
@@ -693,6 +695,8 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
 		}
 		*/
 
+		text[count++] = strdup("#define HAS_DIFFUSE_LOOKUP 1\n");
+
 		//uniform declartion
 		for (S32 i = 0; i < texture_index_channels; ++i)
 		{
@@ -750,6 +754,10 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
 			llerrs << "Indexed texture rendering requires GLSL 1.30 or later." << llendl;
 		}
 	}
+	else
+	{
+		text[count++] = strdup("#define HAS_DIFFUSE_LOOKUP 0\n");
+	}
 
 	//copy file into memory
 	while( fgets((char *)buff, 1024, file) != NULL && count < LL_ARRAY_SIZE(text) ) 
@@ -806,7 +814,6 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
 				//an error occured, print log
 				LL_WARNS("ShaderLoading") << "GLSL Compilation Error: (" << error << ") in " << filename << LL_ENDL;
 				dumpObjectLog(ret);
-
 #if LL_WINDOWS
 				std::stringstream ostr;
 				//dump shader source for debugging
@@ -824,8 +831,20 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
 				}
 
 				LL_WARNS("ShaderLoading") << "\n" << ostr.str() << llendl;
-#endif // LL_WINDOWS
-
+#else
+				std::string str;
+				
+				for (GLuint i = 0; i < count; i++) {
+					str.append(text[i]);
+					
+					if (i % 128 == 0)
+					{
+						LL_WARNS("ShaderLoading") << str << llendl;
+						str = "";
+					}
+				}
+#endif
+				
 				ret = 0;
 			}
 		}
@@ -854,7 +873,7 @@ GLhandleARB LLShaderMgr::loadShaderFile(const std::string& filename, S32 & shade
 		if (shader_level > 1)
 		{
 			shader_level--;
-			return loadShaderFile(filename,shader_level,type,texture_index_channels);
+			return loadShaderFile(filename,shader_level,type, defines, texture_index_channels);
 		}
 		LL_WARNS("ShaderLoading") << "Failed to load " << filename << LL_ENDL;	
 	}
@@ -958,7 +977,7 @@ void LLShaderMgr::initAttribsAndUniforms()
 	mReservedAttribs.push_back("texcoord3");
 	mReservedAttribs.push_back("diffuse_color");
 	mReservedAttribs.push_back("emissive");
-	mReservedAttribs.push_back("binormal");
+	mReservedAttribs.push_back("tangent");
 	mReservedAttribs.push_back("weight");
 	mReservedAttribs.push_back("weight4");
 	mReservedAttribs.push_back("clothing");
@@ -1055,6 +1074,7 @@ void LLShaderMgr::initAttribsAndUniforms()
 
 
 	mReservedUniforms.push_back("minimum_alpha");
+	mReservedUniforms.push_back("emissive_brightness");
 
 	mReservedUniforms.push_back("shadow_matrix");
 	mReservedUniforms.push_back("env_mat");
@@ -1115,6 +1135,12 @@ void LLShaderMgr::initAttribsAndUniforms()
 	mReservedUniforms.push_back("lightMap");
 	mReservedUniforms.push_back("bloomMap");
 	mReservedUniforms.push_back("projectionMap");
+	
+	mReservedUniforms.push_back("global_gamma");
+	mReservedUniforms.push_back("texture_gamma");
+	
+	mReservedUniforms.push_back("specular_color");
+	mReservedUniforms.push_back("env_intensity");
 
 	llassert(mReservedUniforms.size() == END_RESERVED_UNIFORMS);
 
diff --git a/indra/llrender/llshadermgr.h b/indra/llrender/llshadermgr.h
old mode 100644
new mode 100755
index 7a16b7c20fd6585b042476ce5d29173af3ab3567..c049e935b83e8a50f813cf201c44639aeaa82a1a
--- a/indra/llrender/llshadermgr.h
+++ b/indra/llrender/llshadermgr.h
@@ -109,6 +109,7 @@ class LLShaderMgr
 		GLOW_DELTA,
 
 		MINIMUM_ALPHA,
+		EMISSIVE_BRIGHTNESS,
 
 		DEFERRED_SHADOW_MATRIX,
 		DEFERRED_ENV_MAT,
@@ -164,6 +165,13 @@ class LLShaderMgr
 		DEFERRED_LIGHT,
 		DEFERRED_BLOOM,
 		DEFERRED_PROJECTION,
+		
+		GLOBAL_GAMMA,
+		TEXTURE_GAMMA,
+		
+		SPECULAR_COLOR,
+		ENVIRONMENT_INTENSITY,
+		
 		END_RESERVED_UNIFORMS
 	} eGLSLReservedUniforms;
 
@@ -176,7 +184,7 @@ class LLShaderMgr
 	void dumpObjectLog(GLhandleARB ret, BOOL warns = TRUE);
 	BOOL	linkProgramObject(GLhandleARB obj, BOOL suppress_errors = FALSE);
 	BOOL	validateProgramObject(GLhandleARB obj);
-	GLhandleARB loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, S32 texture_index_channels = -1);
+	GLhandleARB loadShaderFile(const std::string& filename, S32 & shader_level, GLenum type, boost::unordered_map<std::string, std::string>* defines = NULL, S32 texture_index_channels = -1);
 
 	// Implemented in the application to actually point to the shader directory.
 	virtual std::string getShaderDirPrefix(void) = 0; // Pure Virtual
diff --git a/indra/llrender/lltexture.cpp b/indra/llrender/lltexture.cpp
old mode 100644
new mode 100755
diff --git a/indra/llrender/lltexture.h b/indra/llrender/lltexture.h
old mode 100644
new mode 100755
diff --git a/indra/llrender/llvertexbuffer.cpp b/indra/llrender/llvertexbuffer.cpp
old mode 100644
new mode 100755
index 4909b43e8aa126be2975054d6eec33fc08c8d4f0..01541026b100d7967d8f332cce47054d0cff7753
--- a/indra/llrender/llvertexbuffer.cpp
+++ b/indra/llrender/llvertexbuffer.cpp
@@ -342,13 +342,32 @@ S32 LLVertexBuffer::sTypeSize[LLVertexBuffer::TYPE_MAX] =
 	sizeof(LLVector2), // TYPE_TEXCOORD3,
 	sizeof(LLColor4U), // TYPE_COLOR,
 	sizeof(LLColor4U), // TYPE_EMISSIVE, only alpha is used currently
-	sizeof(LLVector4), // TYPE_BINORMAL,
+	sizeof(LLVector4), // TYPE_TANGENT,
 	sizeof(F32),	   // TYPE_WEIGHT,
 	sizeof(LLVector4), // TYPE_WEIGHT4,
 	sizeof(LLVector4), // TYPE_CLOTHWEIGHT,
 	sizeof(LLVector4), // TYPE_TEXTURE_INDEX (actually exists as position.w), no extra data, but stride is 16 bytes
 };
 
+static std::string vb_type_name[] =
+{
+	"TYPE_VERTEX",
+	"TYPE_NORMAL",
+	"TYPE_TEXCOORD0",
+	"TYPE_TEXCOORD1",
+	"TYPE_TEXCOORD2",
+	"TYPE_TEXCOORD3",
+	"TYPE_COLOR",
+	"TYPE_EMISSIVE",
+	"TYPE_TANGENT",
+	"TYPE_WEIGHT",
+	"TYPE_WEIGHT4",
+	"TYPE_CLOTHWEIGHT",
+	"TYPE_TEXTURE_INDEX",
+	"TYPE_MAX",
+	"TYPE_INDEX",	
+};
+
 U32 LLVertexBuffer::sGLMode[LLRender::NUM_MODES] = 
 {
 	GL_TRIANGLES,
@@ -523,16 +542,16 @@ void LLVertexBuffer::setupClientArrays(U32 data_mask)
 				}
 			}
 
-			if (sLastMask & MAP_BINORMAL)
+			if (sLastMask & MAP_TANGENT)
 			{
-				if (!(data_mask & MAP_BINORMAL))
+				if (!(data_mask & MAP_TANGENT))
 				{
 					glClientActiveTextureARB(GL_TEXTURE2_ARB);
 					glDisableClientState(GL_TEXTURE_COORD_ARRAY);
 					glClientActiveTextureARB(GL_TEXTURE0_ARB);
 				}
 			}
-			else if (data_mask & MAP_BINORMAL)
+			else if (data_mask & MAP_TANGENT)
 			{
 				glClientActiveTextureARB(GL_TEXTURE2_ARB);
 				glEnableClientState(GL_TEXTURE_COORD_ARRAY);
@@ -593,8 +612,9 @@ void LLVertexBuffer::drawArrays(U32 mode, const std::vector<LLVector3>& pos, con
 		glVertexPointer(3, GL_FLOAT, 0, pos[0].mV);
 		glNormalPointer(GL_FLOAT, 0, norm[0].mV);
 	}
-
+	LLGLSLShader::startProfile();
 	glDrawArrays(sGLMode[mode], 0, count);
+	LLGLSLShader::stopProfile(count, mode);
 }
 
 //static
@@ -631,7 +651,9 @@ void LLVertexBuffer::drawElements(U32 mode, const LLVector4a* pos, const LLVecto
 		glVertexPointer(3, GL_FLOAT, 16, pos);
 	}
 
+	LLGLSLShader::startProfile();
 	glDrawElements(sGLMode[mode], num_indices, GL_UNSIGNED_SHORT, indicesp);
+	LLGLSLShader::stopProfile(num_indices, mode);
 }
 
 void LLVertexBuffer::validateRange(U32 start, U32 end, U32 count, U32 indices_offset) const
@@ -731,9 +753,14 @@ void LLVertexBuffer::drawRange(U32 mode, U32 start, U32 end, U32 count, U32 indi
 	U16* idx = ((U16*) getIndicesPointer())+indices_offset;
 
 	stop_glerror();
+	LLGLSLShader::startProfile();
 	glDrawRangeElements(sGLMode[mode], start, end, count, GL_UNSIGNED_SHORT, 
 		idx);
+	LLGLSLShader::stopProfile(count, mode);
 	stop_glerror();
+
+	
+
 	placeFence();
 }
 
@@ -777,8 +804,10 @@ void LLVertexBuffer::draw(U32 mode, U32 count, U32 indices_offset) const
 	}
 
 	stop_glerror();
+	LLGLSLShader::startProfile();
 	glDrawElements(sGLMode[mode], count, GL_UNSIGNED_SHORT,
 		((U16*) getIndicesPointer()) + indices_offset);
+	LLGLSLShader::stopProfile(count, mode);
 	stop_glerror();
 	placeFence();
 }
@@ -820,9 +849,12 @@ void LLVertexBuffer::drawArrays(U32 mode, U32 first, U32 count) const
 
 	{
 		LLFastTimer t2(FTM_GL_DRAW_ARRAYS);
-		stop_glerror();
-		glDrawArrays(sGLMode[mode], first, count);
-	}
+	stop_glerror();
+	LLGLSLShader::startProfile();
+	glDrawArrays(sGLMode[mode], first, count);
+	LLGLSLShader::stopProfile(count, mode);
+        }
+
 	stop_glerror();
 	placeFence();
 }
@@ -1322,7 +1354,7 @@ void LLVertexBuffer::setupVertexArray()
 		2, //TYPE_TEXCOORD3,
 		4, //TYPE_COLOR,
 		4, //TYPE_EMISSIVE,
-		3, //TYPE_BINORMAL,
+		4, //TYPE_TANGENT,
 		1, //TYPE_WEIGHT,
 		4, //TYPE_WEIGHT4,
 		4, //TYPE_CLOTHWEIGHT,
@@ -1339,7 +1371,7 @@ void LLVertexBuffer::setupVertexArray()
 		GL_FLOAT, //TYPE_TEXCOORD3,
 		GL_UNSIGNED_BYTE, //TYPE_COLOR,
 		GL_UNSIGNED_BYTE, //TYPE_EMISSIVE,
-		GL_FLOAT,   //TYPE_BINORMAL,
+		GL_FLOAT,   //TYPE_TANGENT,
 		GL_FLOAT, //TYPE_WEIGHT,
 		GL_FLOAT, //TYPE_WEIGHT4,
 		GL_FLOAT, //TYPE_CLOTHWEIGHT,
@@ -1356,7 +1388,7 @@ void LLVertexBuffer::setupVertexArray()
 		false, //TYPE_TEXCOORD3,
 		false, //TYPE_COLOR,
 		false, //TYPE_EMISSIVE,
-		false, //TYPE_BINORMAL,
+		false, //TYPE_TANGENT,
 		false, //TYPE_WEIGHT,
 		false, //TYPE_WEIGHT4,
 		false, //TYPE_CLOTHWEIGHT,
@@ -1373,7 +1405,7 @@ void LLVertexBuffer::setupVertexArray()
 		GL_FALSE, //TYPE_TEXCOORD3,
 		GL_TRUE, //TYPE_COLOR,
 		GL_TRUE, //TYPE_EMISSIVE,
-		GL_FALSE,   //TYPE_BINORMAL,
+		GL_FALSE,   //TYPE_TANGENT,
 		GL_FALSE, //TYPE_WEIGHT,
 		GL_FALSE, //TYPE_WEIGHT4,
 		GL_FALSE, //TYPE_CLOTHWEIGHT,
@@ -2038,14 +2070,21 @@ bool LLVertexBuffer::getTexCoord1Strider(LLStrider<LLVector2>& strider, S32 inde
 {
 	return VertexBufferStrider<LLVector2,TYPE_TEXCOORD1>::get(*this, strider, index, count, map_range);
 }
-
+bool LLVertexBuffer::getTexCoord2Strider(LLStrider<LLVector2>& strider, S32 index, S32 count, bool map_range)
+{
+	return VertexBufferStrider<LLVector2,TYPE_TEXCOORD2>::get(*this, strider, index, count, map_range);
+}
 bool LLVertexBuffer::getNormalStrider(LLStrider<LLVector3>& strider, S32 index, S32 count, bool map_range)
 {
 	return VertexBufferStrider<LLVector3,TYPE_NORMAL>::get(*this, strider, index, count, map_range);
 }
-bool LLVertexBuffer::getBinormalStrider(LLStrider<LLVector3>& strider, S32 index, S32 count, bool map_range)
+bool LLVertexBuffer::getTangentStrider(LLStrider<LLVector3>& strider, S32 index, S32 count, bool map_range)
 {
-	return VertexBufferStrider<LLVector3,TYPE_BINORMAL>::get(*this, strider, index, count, map_range);
+	return VertexBufferStrider<LLVector3,TYPE_TANGENT>::get(*this, strider, index, count, map_range);
+}
+bool LLVertexBuffer::getTangentStrider(LLStrider<LLVector4a>& strider, S32 index, S32 count, bool map_range)
+{
+	return VertexBufferStrider<LLVector4a,TYPE_TANGENT>::get(*this, strider, index, count, map_range);
 }
 bool LLVertexBuffer::getColorStrider(LLStrider<LLColor4U>& strider, S32 index, S32 count, bool map_range)
 {
@@ -2200,7 +2239,7 @@ void LLVertexBuffer::setBuffer(U32 data_mask)
 
 			if ((data_mask & required_mask) != required_mask)
 			{
-				llerrs << "Shader consumption mismatches data provision." << llendl;
+				llwarns << "Shader consumption mismatches data provision." << llendl;
 			}
 		}
 	}
@@ -2318,6 +2357,14 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask)
 
 	if (gDebugGL && ((data_mask & mTypeMask) != data_mask))
 	{
+		for (U32 i = 0; i < LLVertexBuffer::TYPE_MAX; ++i)
+		{
+			U32 mask = 1 << i;
+			if (mask & data_mask && !(mask & mTypeMask))
+			{ //bit set in data_mask, but not set in mTypeMask
+				llwarns << "Missing required component " << vb_type_name[i] << llendl;
+			}
+		}
 		llerrs << "LLVertexBuffer::setupVertexBuffer missing required components for supplied data mask." << llendl;
 	}
 
@@ -2347,11 +2394,11 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask)
 			void* ptr = (void*)(base + mOffsets[TYPE_TEXCOORD1]);
 			glVertexAttribPointerARB(loc,2,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], ptr);
 		}
-		if (data_mask & MAP_BINORMAL)
+		if (data_mask & MAP_TANGENT)
 		{
-			S32 loc = TYPE_BINORMAL;
-			void* ptr = (void*)(base + mOffsets[TYPE_BINORMAL]);
-			glVertexAttribPointerARB(loc, 3,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], ptr);
+			S32 loc = TYPE_TANGENT;
+			void* ptr = (void*)(base + mOffsets[TYPE_TANGENT]);
+			glVertexAttribPointerARB(loc, 4,GL_FLOAT, GL_FALSE, LLVertexBuffer::sTypeSize[TYPE_TANGENT], ptr);
 		}
 		if (data_mask & MAP_TEXCOORD0)
 		{
@@ -2429,10 +2476,10 @@ void LLVertexBuffer::setupVertexBuffer(U32 data_mask)
 			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1]));
 			glClientActiveTextureARB(GL_TEXTURE0_ARB);
 		}
-		if (data_mask & MAP_BINORMAL)
+		if (data_mask & MAP_TANGENT)
 		{
 			glClientActiveTextureARB(GL_TEXTURE2_ARB);
-			glTexCoordPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL]));
+			glTexCoordPointer(4,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TANGENT], (void*)(base + mOffsets[TYPE_TANGENT]));
 			glClientActiveTextureARB(GL_TEXTURE0_ARB);
 		}
 		if (data_mask & MAP_TEXCOORD0)
diff --git a/indra/llrender/llvertexbuffer.h b/indra/llrender/llvertexbuffer.h
old mode 100644
new mode 100755
index 11fa4ab6a0da3b7862298801072572cf9dd0b3dd..04806c1d8c20eff04aaa6c241507ff6ec27ef26d
--- a/indra/llrender/llvertexbuffer.h
+++ b/indra/llrender/llvertexbuffer.h
@@ -174,7 +174,7 @@ class LLVertexBuffer : public LLRefCount
 		TYPE_TEXCOORD3,
 		TYPE_COLOR,
 		TYPE_EMISSIVE,
-		TYPE_BINORMAL,
+		TYPE_TANGENT,
 		TYPE_WEIGHT,
 		TYPE_WEIGHT4,
 		TYPE_CLOTHWEIGHT,
@@ -192,7 +192,7 @@ class LLVertexBuffer : public LLRefCount
 		MAP_COLOR = (1<<TYPE_COLOR),
 		MAP_EMISSIVE = (1<<TYPE_EMISSIVE),
 		// These use VertexAttribPointer and should possibly be made generic
-		MAP_BINORMAL = (1<<TYPE_BINORMAL),
+		MAP_TANGENT = (1<<TYPE_TANGENT),
 		MAP_WEIGHT = (1<<TYPE_WEIGHT),
 		MAP_WEIGHT4 = (1<<TYPE_WEIGHT4),
 		MAP_CLOTHWEIGHT = (1<<TYPE_CLOTHWEIGHT),
@@ -250,8 +250,10 @@ class LLVertexBuffer : public LLRefCount
 	bool getIndexStrider(LLStrider<U16>& strider, S32 index=0, S32 count = -1, bool map_range = false);
 	bool getTexCoord0Strider(LLStrider<LLVector2>& strider, S32 index=0, S32 count = -1, bool map_range = false);
 	bool getTexCoord1Strider(LLStrider<LLVector2>& strider, S32 index=0, S32 count = -1, bool map_range = false);
+	bool getTexCoord2Strider(LLStrider<LLVector2>& strider, S32 index=0, S32 count = -1, bool map_range = false);
 	bool getNormalStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false);
-	bool getBinormalStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false);
+	bool getTangentStrider(LLStrider<LLVector3>& strider, S32 index=0, S32 count = -1, bool map_range = false);
+	bool getTangentStrider(LLStrider<LLVector4a>& strider, S32 index=0, S32 count = -1, bool map_range = false);
 	bool getColorStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false);
 	bool getTextureIndexStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false);
 	bool getEmissiveStrider(LLStrider<LLColor4U>& strider, S32 index=0, S32 count = -1, bool map_range = false);
diff --git a/indra/llui/CMakeLists.txt b/indra/llui/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llui/llaccordionctrl.cpp b/indra/llui/llaccordionctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llaccordionctrl.h b/indra/llui/llaccordionctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llaccordionctrltab.cpp b/indra/llui/llaccordionctrltab.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llaccordionctrltab.h b/indra/llui/llaccordionctrltab.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llbadge.cpp b/indra/llui/llbadge.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llbadge.h b/indra/llui/llbadge.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llbadgeholder.cpp b/indra/llui/llbadgeholder.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llbadgeholder.h b/indra/llui/llbadgeholder.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llbadgeowner.cpp b/indra/llui/llbadgeowner.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llbadgeowner.h b/indra/llui/llbadgeowner.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llbutton.cpp b/indra/llui/llbutton.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llbutton.h b/indra/llui/llbutton.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llcallbackmap.h b/indra/llui/llcallbackmap.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llchatentry.cpp b/indra/llui/llchatentry.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llchatentry.h b/indra/llui/llchatentry.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llcheckboxctrl.cpp b/indra/llui/llcheckboxctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llcheckboxctrl.h b/indra/llui/llcheckboxctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llclipboard.cpp b/indra/llui/llclipboard.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llclipboard.h b/indra/llui/llclipboard.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llcombobox.cpp b/indra/llui/llcombobox.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llcombobox.h b/indra/llui/llcombobox.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llcommandmanager.cpp b/indra/llui/llcommandmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llcommandmanager.h b/indra/llui/llcommandmanager.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llconsole.cpp b/indra/llui/llconsole.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llconsole.h b/indra/llui/llconsole.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llcontainerview.cpp b/indra/llui/llcontainerview.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llcontainerview.h b/indra/llui/llcontainerview.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llctrlselectioninterface.cpp b/indra/llui/llctrlselectioninterface.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llctrlselectioninterface.h b/indra/llui/llctrlselectioninterface.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lldockablefloater.cpp b/indra/llui/lldockablefloater.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lldockablefloater.h b/indra/llui/lldockablefloater.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lldockcontrol.cpp b/indra/llui/lldockcontrol.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lldockcontrol.h b/indra/llui/lldockcontrol.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lldraghandle.cpp b/indra/llui/lldraghandle.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lldraghandle.h b/indra/llui/lldraghandle.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lleditmenuhandler.cpp b/indra/llui/lleditmenuhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lleditmenuhandler.h b/indra/llui/lleditmenuhandler.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llf32uictrl.cpp b/indra/llui/llf32uictrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llf32uictrl.h b/indra/llui/llf32uictrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfiltereditor.cpp b/indra/llui/llfiltereditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfiltereditor.h b/indra/llui/llfiltereditor.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llflashtimer.cpp b/indra/llui/llflashtimer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llflashtimer.h b/indra/llui/llflashtimer.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llflatlistview.cpp b/indra/llui/llflatlistview.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llflatlistview.h b/indra/llui/llflatlistview.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfloater.cpp b/indra/llui/llfloater.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfloater.h b/indra/llui/llfloater.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfloaterreg.cpp b/indra/llui/llfloaterreg.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfloaterreg.h b/indra/llui/llfloaterreg.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfloaterreglistener.cpp b/indra/llui/llfloaterreglistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfloaterreglistener.h b/indra/llui/llfloaterreglistener.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llflyoutbutton.cpp b/indra/llui/llflyoutbutton.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llflyoutbutton.h b/indra/llui/llflyoutbutton.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfocusmgr.cpp b/indra/llui/llfocusmgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfocusmgr.h b/indra/llui/llfocusmgr.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfolderview.cpp b/indra/llui/llfolderview.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfolderview.h b/indra/llui/llfolderview.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfolderviewmodel.cpp b/indra/llui/llfolderviewmodel.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfolderviewmodel.h b/indra/llui/llfolderviewmodel.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llfunctorregistry.cpp b/indra/llui/llfunctorregistry.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llfunctorregistry.h b/indra/llui/llfunctorregistry.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llhelp.h b/indra/llui/llhelp.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lliconctrl.cpp b/indra/llui/lliconctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lliconctrl.h b/indra/llui/lliconctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llkeywords.cpp b/indra/llui/llkeywords.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llkeywords.h b/indra/llui/llkeywords.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lllayoutstack.cpp b/indra/llui/lllayoutstack.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lllayoutstack.h b/indra/llui/lllayoutstack.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lllazyvalue.h b/indra/llui/lllazyvalue.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lllineeditor.cpp b/indra/llui/lllineeditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lllineeditor.h b/indra/llui/lllineeditor.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llloadingindicator.cpp b/indra/llui/llloadingindicator.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llloadingindicator.h b/indra/llui/llloadingindicator.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lllocalcliprect.cpp b/indra/llui/lllocalcliprect.cpp
old mode 100644
new mode 100755
index 0620e0f52d972af82466c07e3fea403801a930ab..f3a526faeb33ca0aee3f64bdb2ae7a656795d640
--- a/indra/llui/lllocalcliprect.cpp
+++ b/indra/llui/lllocalcliprect.cpp
@@ -33,7 +33,7 @@
 
 
 LLScreenClipRect::LLScreenClipRect(const LLRect& rect, BOOL enabled)
-	:	mScissorState(GL_SCISSOR_TEST),
+:	mScissorState(GL_SCISSOR_TEST),
 	mEnabled(enabled)
 {
 	if (mEnabled)
@@ -100,10 +100,10 @@ void LLScreenClipRect::updateScissorRegion()
 // LLLocalClipRect
 //---------------------------------------------------------------------------
 LLLocalClipRect::LLLocalClipRect(const LLRect& rect, BOOL enabled /* = TRUE */)
-	:	LLScreenClipRect(LLRect(rect.mLeft + LLFontGL::sCurOrigin.mX, 
-	rect.mTop + LLFontGL::sCurOrigin.mY, 
-	rect.mRight + LLFontGL::sCurOrigin.mX, 
-	rect.mBottom + LLFontGL::sCurOrigin.mY), enabled)
+:	LLScreenClipRect(LLRect(rect.mLeft + LLFontGL::sCurOrigin.mX, 
+					rect.mTop + LLFontGL::sCurOrigin.mY, 
+					rect.mRight + LLFontGL::sCurOrigin.mX, 
+					rect.mBottom + LLFontGL::sCurOrigin.mY), enabled)
 {}
 
 LLLocalClipRect::~LLLocalClipRect()
diff --git a/indra/llui/lllocalcliprect.h b/indra/llui/lllocalcliprect.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llmenubutton.cpp b/indra/llui/llmenubutton.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llmenubutton.h b/indra/llui/llmenubutton.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llmenugl.cpp b/indra/llui/llmenugl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llmenugl.h b/indra/llui/llmenugl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llmodaldialog.cpp b/indra/llui/llmodaldialog.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llmodaldialog.h b/indra/llui/llmodaldialog.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llmultifloater.cpp b/indra/llui/llmultifloater.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llmultifloater.h b/indra/llui/llmultifloater.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llmultislider.cpp b/indra/llui/llmultislider.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llmultislider.h b/indra/llui/llmultislider.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llmultisliderctrl.cpp b/indra/llui/llmultisliderctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llmultisliderctrl.h b/indra/llui/llmultisliderctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotificationptr.h b/indra/llui/llnotificationptr.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotifications.cpp b/indra/llui/llnotifications.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotifications.h b/indra/llui/llnotifications.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotificationsutil.cpp b/indra/llui/llnotificationsutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotificationsutil.h b/indra/llui/llnotificationsutil.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotificationtemplate.h b/indra/llui/llnotificationtemplate.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llnotificationvisibilityrule.h b/indra/llui/llnotificationvisibilityrule.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llpanel.cpp b/indra/llui/llpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llpanel.h b/indra/llui/llpanel.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llprogressbar.cpp b/indra/llui/llprogressbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llprogressbar.h b/indra/llui/llprogressbar.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llradiogroup.cpp b/indra/llui/llradiogroup.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llradiogroup.h b/indra/llui/llradiogroup.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llresizebar.cpp b/indra/llui/llresizebar.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llresizebar.h b/indra/llui/llresizebar.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llresizehandle.cpp b/indra/llui/llresizehandle.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llresizehandle.h b/indra/llui/llresizehandle.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llresmgr.cpp b/indra/llui/llresmgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llresmgr.h b/indra/llui/llresmgr.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llrngwriter.cpp b/indra/llui/llrngwriter.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llrngwriter.h b/indra/llui/llrngwriter.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrollbar.cpp b/indra/llui/llscrollbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrollbar.h b/indra/llui/llscrollbar.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrollcontainer.cpp b/indra/llui/llscrollcontainer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrollcontainer.h b/indra/llui/llscrollcontainer.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrollingpanellist.cpp b/indra/llui/llscrollingpanellist.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrollingpanellist.h b/indra/llui/llscrollingpanellist.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistcell.cpp b/indra/llui/llscrolllistcell.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistcell.h b/indra/llui/llscrolllistcell.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistcolumn.cpp b/indra/llui/llscrolllistcolumn.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistcolumn.h b/indra/llui/llscrolllistcolumn.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistctrl.cpp b/indra/llui/llscrolllistctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistctrl.h b/indra/llui/llscrolllistctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistitem.cpp b/indra/llui/llscrolllistitem.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llscrolllistitem.h b/indra/llui/llscrolllistitem.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llsearcheditor.cpp b/indra/llui/llsearcheditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llsearcheditor.h b/indra/llui/llsearcheditor.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llslider.cpp b/indra/llui/llslider.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llslider.h b/indra/llui/llslider.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llsliderctrl.cpp b/indra/llui/llsliderctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llsliderctrl.h b/indra/llui/llsliderctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llspellcheck.cpp b/indra/llui/llspellcheck.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llspellcheck.h b/indra/llui/llspellcheck.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llspellcheckmenuhandler.h b/indra/llui/llspellcheckmenuhandler.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llspinctrl.cpp b/indra/llui/llspinctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llspinctrl.h b/indra/llui/llspinctrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llstatbar.cpp b/indra/llui/llstatbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llstatbar.h b/indra/llui/llstatbar.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llstatgraph.cpp b/indra/llui/llstatgraph.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llstatgraph.h b/indra/llui/llstatgraph.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llstatview.cpp b/indra/llui/llstatview.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llstatview.h b/indra/llui/llstatview.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llstyle.cpp b/indra/llui/llstyle.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llstyle.h b/indra/llui/llstyle.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltabcontainer.cpp b/indra/llui/lltabcontainer.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltabcontainer.h b/indra/llui/lltabcontainer.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextbase.cpp b/indra/llui/lltextbase.cpp
old mode 100644
new mode 100755
index e70992129a6fd9a754422365ec9e846e51f8a128..a45c4ced2eec2c1338c3f46a4df82488470c8579
--- a/indra/llui/lltextbase.cpp
+++ b/indra/llui/lltextbase.cpp
@@ -3206,14 +3206,14 @@ S32	LLNormalTextSegment::getNumChars(S32 num_pixels, S32 segment_offset, S32 lin
 	LLWString offsetString(text.c_str() + segment_offset + mStart);
 
 	if(getLength() < segment_offset + mStart)
-	{
-		llerrs << "getLength() < segment_offset + mStart\t getLength()\t" << getLength() << "\tsegment_offset:\t" 
+	{ 
+		llinfos << "getLength() < segment_offset + mStart\t getLength()\t" << getLength() << "\tsegment_offset:\t" 
 						<< segment_offset << "\tmStart:\t" << mStart << "\tsegments\t" << mEditor.mSegments.size() << "\tmax_chars\t" << max_chars << llendl;
 	}
 
 	if(offsetString.length() + 1 < max_chars)
 	{
-		llerrs << "offsetString.length() + 1 < max_chars\t max_chars:\t" << max_chars << "\toffsetString.length():\t" << offsetString.length()
+		llinfos << "offsetString.length() + 1 < max_chars\t max_chars:\t" << max_chars << "\toffsetString.length():\t" << offsetString.length() << " getLength() : "
 			<< getLength() << "\tsegment_offset:\t" << segment_offset << "\tmStart:\t" << mStart << "\tsegments\t" << mEditor.mSegments.size() << llendl;
 	}
 	
diff --git a/indra/llui/lltextbase.h b/indra/llui/lltextbase.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextbox.cpp b/indra/llui/lltextbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextbox.h b/indra/llui/lltextbox.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltexteditor.cpp b/indra/llui/lltexteditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltexteditor.h b/indra/llui/lltexteditor.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextparser.cpp b/indra/llui/lltextparser.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextparser.h b/indra/llui/lltextparser.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextutil.cpp b/indra/llui/lltextutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextutil.h b/indra/llui/lltextutil.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextvalidate.cpp b/indra/llui/lltextvalidate.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltextvalidate.h b/indra/llui/lltextvalidate.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltimectrl.cpp b/indra/llui/lltimectrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltimectrl.h b/indra/llui/lltimectrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltoggleablemenu.cpp b/indra/llui/lltoggleablemenu.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltoggleablemenu.h b/indra/llui/lltoggleablemenu.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltoolbar.cpp b/indra/llui/lltoolbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltoolbar.h b/indra/llui/lltoolbar.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltooltip.cpp b/indra/llui/lltooltip.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltooltip.h b/indra/llui/lltooltip.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltrans.cpp b/indra/llui/lltrans.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltrans.h b/indra/llui/lltrans.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lltransutil.cpp b/indra/llui/lltransutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lltransutil.h b/indra/llui/lltransutil.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llui.cpp b/indra/llui/llui.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llui.h b/indra/llui/llui.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluicolor.cpp b/indra/llui/lluicolor.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lluicolor.h b/indra/llui/lluicolor.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluicolortable.cpp b/indra/llui/lluicolortable.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lluicolortable.h b/indra/llui/lluicolortable.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluiconstants.h b/indra/llui/lluiconstants.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluictrl.cpp b/indra/llui/lluictrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lluictrl.h b/indra/llui/lluictrl.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluictrlfactory.cpp b/indra/llui/lluictrlfactory.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lluictrlfactory.h b/indra/llui/lluictrlfactory.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluifwd.h b/indra/llui/lluifwd.h
old mode 100644
new mode 100755
diff --git a/indra/llui/lluistring.cpp b/indra/llui/lluistring.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/lluistring.h b/indra/llui/lluistring.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llundo.cpp b/indra/llui/llundo.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llundo.h b/indra/llui/llundo.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlaction.cpp b/indra/llui/llurlaction.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlaction.h b/indra/llui/llurlaction.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlentry.cpp b/indra/llui/llurlentry.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlentry.h b/indra/llui/llurlentry.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlmatch.cpp b/indra/llui/llurlmatch.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlmatch.h b/indra/llui/llurlmatch.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlregistry.cpp b/indra/llui/llurlregistry.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llurlregistry.h b/indra/llui/llurlregistry.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llview.cpp b/indra/llui/llview.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llview.h b/indra/llui/llview.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewborder.cpp b/indra/llui/llviewborder.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewborder.h b/indra/llui/llviewborder.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewinject.cpp b/indra/llui/llviewinject.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewinject.h b/indra/llui/llviewinject.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewmodel.cpp b/indra/llui/llviewmodel.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewmodel.h b/indra/llui/llviewmodel.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewquery.cpp b/indra/llui/llviewquery.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llviewquery.h b/indra/llui/llviewquery.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llwindowshade.cpp b/indra/llui/llwindowshade.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/llwindowshade.h b/indra/llui/llwindowshade.h
old mode 100644
new mode 100755
diff --git a/indra/llui/llxuiparser.cpp b/indra/llui/llxuiparser.cpp
old mode 100644
new mode 100755
index 3ad5ad7d425dfeda1f2ecb9d2bc9c00dfbddb0ab..6322da91235d90a3084371f61d8d03503828b2cd
--- a/indra/llui/llxuiparser.cpp
+++ b/indra/llui/llxuiparser.cpp
@@ -1309,10 +1309,8 @@ bool LLXUIParser::writeSDValue(Parser& parser, const void* val_ptr, name_stack_t
 void LLXUIParser::parserWarning(const std::string& message)
 {
 #ifdef LL_WINDOWS
-	// use Visual Studo friendly formatting of output message for easy access to originating xml
-	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()).c_str());
-	utf16str += '\n';
-	OutputDebugString(utf16str.c_str());
+	// use Visual Studio friendly formatting of output message for easy access to originating xml
+	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()));
 #else
 	Parser::parserWarning(message);
 #endif
@@ -1321,9 +1319,8 @@ void LLXUIParser::parserWarning(const std::string& message)
 void LLXUIParser::parserError(const std::string& message)
 {
 #ifdef LL_WINDOWS
-	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()).c_str());
-	utf16str += '\n';
-	OutputDebugString(utf16str.c_str());
+        // use Visual Studio friendly formatting of output message for easy access to originating xml
+	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), mCurReadNode->getLineNumber(), message.c_str()));
 #else
 	Parser::parserError(message);
 #endif
@@ -1640,10 +1637,8 @@ bool LLSimpleXUIParser::processText()
 void LLSimpleXUIParser::parserWarning(const std::string& message)
 {
 #ifdef LL_WINDOWS
-	// use Visual Studo friendly formatting of output message for easy access to originating xml
-	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
-	utf16str += '\n';
-	OutputDebugString(utf16str.c_str());
+	// use Visual Studio friendly formatting of output message for easy access to originating xml
+	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()));
 #else
 	Parser::parserWarning(message);
 #endif
@@ -1652,9 +1647,8 @@ void LLSimpleXUIParser::parserWarning(const std::string& message)
 void LLSimpleXUIParser::parserError(const std::string& message)
 {
 #ifdef LL_WINDOWS
-	llutf16string utf16str = utf8str_to_utf16str(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()).c_str());
-	utf16str += '\n';
-	OutputDebugString(utf16str.c_str());
+        // use Visual Studio friendly formatting of output message for easy access to originating xml
+	LL_WINDOWS_OUTPUT_DEBUG(llformat("%s(%d):\t%s", mCurFileName.c_str(), LINE_NUMBER_HERE, message.c_str()));
 #else
 	Parser::parserError(message);
 #endif
diff --git a/indra/llui/llxuiparser.h b/indra/llui/llxuiparser.h
old mode 100644
new mode 100755
diff --git a/indra/llui/tests/llurlentry_stub.cpp b/indra/llui/tests/llurlentry_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/tests/llurlentry_test.cpp b/indra/llui/tests/llurlentry_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llui/tests/llurlmatch_test.cpp b/indra/llui/tests/llurlmatch_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/CMakeLists.txt b/indra/llvfs/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir.cpp b/indra/llvfs/lldir.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir.h b/indra/llvfs/lldir.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_linux.cpp b/indra/llvfs/lldir_linux.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_linux.h b/indra/llvfs/lldir_linux.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_mac.cpp b/indra/llvfs/lldir_mac.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_mac.h b/indra/llvfs/lldir_mac.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_solaris.cpp b/indra/llvfs/lldir_solaris.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_solaris.h b/indra/llvfs/lldir_solaris.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldir_win32.cpp b/indra/llvfs/lldir_win32.cpp
old mode 100644
new mode 100755
index 462d1cce0662555a7057dc54ba8c862ae3089498..618409595767c965fc6c02052a521767197bf7e5
--- a/indra/llvfs/lldir_win32.cpp
+++ b/indra/llvfs/lldir_win32.cpp
@@ -131,7 +131,7 @@ LLDir_Win32::LLDir_Win32()
 		mAppRODataDir = mExecutableDir;
 	}
 
-	llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
+//	llinfos << "mAppRODataDir = " << mAppRODataDir << llendl;
 
 	mSkinBaseDir = mAppRODataDir + mDirDelimiter + "skins";
 
diff --git a/indra/llvfs/lldir_win32.h b/indra/llvfs/lldir_win32.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldirguard.h b/indra/llvfs/lldirguard.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldiriterator.cpp b/indra/llvfs/lldiriterator.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lldiriterator.h b/indra/llvfs/lldiriterator.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lllfsthread.cpp b/indra/llvfs/lllfsthread.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/lllfsthread.h b/indra/llvfs/lllfsthread.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llpidlock.cpp b/indra/llvfs/llpidlock.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llpidlock.h b/indra/llvfs/llpidlock.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfile.cpp b/indra/llvfs/llvfile.cpp
old mode 100644
new mode 100755
index 03d2cc25e335bcd9eb75ce6c15aaf1a8a663d45f..306d7d8ec706dadbe0533abd5207c118e1261916
--- a/indra/llvfs/llvfile.cpp
+++ b/indra/llvfs/llvfile.cpp
@@ -135,7 +135,7 @@ U8* LLVFile::readFile(LLVFS *vfs, const LLUUID &uuid, LLAssetType::EType type, S
 		data = NULL;
 	}
 	else
-	{		
+	{
 		data = (U8*) ll_aligned_malloc_16(file_size);
 		file.read(data, file_size);	/* Flawfinder: ignore */ 
 		
diff --git a/indra/llvfs/llvfile.h b/indra/llvfs/llvfile.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfs.cpp b/indra/llvfs/llvfs.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfs.h b/indra/llvfs/llvfs.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfs_objc.h b/indra/llvfs/llvfs_objc.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfs_objc.mm b/indra/llvfs/llvfs_objc.mm
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfsthread.cpp b/indra/llvfs/llvfsthread.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/llvfsthread.h b/indra/llvfs/llvfsthread.h
old mode 100644
new mode 100755
diff --git a/indra/llvfs/tests/lldir_test.cpp b/indra/llvfs/tests/lldir_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llvfs/tests/lldiriterator_test.cpp b/indra/llvfs/tests/lldiriterator_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/CMakeLists.txt b/indra/llwindow/CMakeLists.txt
old mode 100644
new mode 100755
index ad010164eb15977f259dc2b8436f3fb1d901ba45..4c6e7061192005be34154266197d50787472d234
--- a/indra/llwindow/CMakeLists.txt
+++ b/indra/llwindow/CMakeLists.txt
@@ -165,7 +165,7 @@ if (BUILD_HEADLESS)
   set(llwindowheadless_HEADER_FILES
        llwindowmesaheadless.h
        llmousehandler.h
-       )
+    )
   add_library (llwindowheadless
     ${llwindow_SOURCE_FILES}
     ${llwindowheadless_SOURCE_FILES}
@@ -180,12 +180,12 @@ if (llwindow_HEADER_FILES)
   list(APPEND llwindow_SOURCE_FILES ${llwindow_HEADER_FILES})
 endif (llwindow_HEADER_FILES)
 
-list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
+  list(APPEND viewer_SOURCE_FILES ${viewer_HEADER_FILES})
 
-add_library (llwindow
-  ${llwindow_SOURCE_FILES}
-  ${viewer_SOURCE_FILES}
-  )
+  add_library (llwindow
+    ${llwindow_SOURCE_FILES}
+    ${viewer_SOURCE_FILES}
+    )
 
 if (SDL_FOUND)
   set_property(TARGET llwindow
@@ -193,5 +193,5 @@ if (SDL_FOUND)
     )
 endif (SDL_FOUND)
 
-target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})
+  target_link_libraries (llwindow ${llwindow_LINK_LIBRARIES})
 
diff --git a/indra/llwindow/GL/glh_extensions.h b/indra/llwindow/GL/glh_extensions.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/GL/glh_genext.h b/indra/llwindow/GL/glh_genext.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/lldragdropwin32.cpp b/indra/llwindow/lldragdropwin32.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/lldragdropwin32.h b/indra/llwindow/lldragdropwin32.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/lldxhardware.cpp b/indra/llwindow/lldxhardware.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/lldxhardware.h b/indra/llwindow/lldxhardware.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboard.cpp b/indra/llwindow/llkeyboard.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboard.h b/indra/llwindow/llkeyboard.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardheadless.cpp b/indra/llwindow/llkeyboardheadless.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardheadless.h b/indra/llwindow/llkeyboardheadless.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardmacosx.cpp b/indra/llwindow/llkeyboardmacosx.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardmacosx.h b/indra/llwindow/llkeyboardmacosx.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardsdl.cpp b/indra/llwindow/llkeyboardsdl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardsdl.h b/indra/llwindow/llkeyboardsdl.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardwin32.cpp b/indra/llwindow/llkeyboardwin32.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llkeyboardwin32.h b/indra/llwindow/llkeyboardwin32.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llmousehandler.cpp b/indra/llwindow/llmousehandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llmousehandler.h b/indra/llwindow/llmousehandler.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llpreeditor.h b/indra/llwindow/llpreeditor.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindow.cpp b/indra/llwindow/llwindow.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindow.h b/indra/llwindow/llwindow.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowheadless.cpp b/indra/llwindow/llwindowheadless.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowheadless.h b/indra/llwindow/llwindowheadless.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowmacosx-objc.mm b/indra/llwindow/llwindowmacosx-objc.mm
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowmacosx.h b/indra/llwindow/llwindowmacosx.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowmesaheadless.cpp b/indra/llwindow/llwindowmesaheadless.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowmesaheadless.h b/indra/llwindow/llwindowmesaheadless.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowsdl.cpp b/indra/llwindow/llwindowsdl.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowsdl.h b/indra/llwindow/llwindowsdl.h
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowwin32.cpp b/indra/llwindow/llwindowwin32.cpp
old mode 100644
new mode 100755
diff --git a/indra/llwindow/llwindowwin32.h b/indra/llwindow/llwindowwin32.h
old mode 100644
new mode 100755
diff --git a/indra/llxml/CMakeLists.txt b/indra/llxml/CMakeLists.txt
old mode 100644
new mode 100755
index cf96f26a77a2c17e7b464f5591f15e46ad796770..17400a203e8485bb46b62f4011c60e1fe93fad36
--- a/indra/llxml/CMakeLists.txt
+++ b/indra/llxml/CMakeLists.txt
@@ -42,7 +42,7 @@ list(APPEND llxml_SOURCE_FILES ${llxml_HEADER_FILES})
 add_library (llxml ${llxml_SOURCE_FILES})
 # Libraries on which this library depends, needed for Linux builds
 # Sort by high-level to low-level
-target_link_libraries(llxml
+target_link_libraries( llxml
     ${LLVFS_LIBRARIES}
     ${LLMATH_LIBRARIES}
     ${LLCOMMON_LIBRARIES}
diff --git a/indra/llxml/llcontrol.cpp b/indra/llxml/llcontrol.cpp
old mode 100644
new mode 100755
diff --git a/indra/llxml/llcontrol.h b/indra/llxml/llcontrol.h
old mode 100644
new mode 100755
diff --git a/indra/llxml/llcontrolgroupreader.h b/indra/llxml/llcontrolgroupreader.h
old mode 100644
new mode 100755
diff --git a/indra/llxml/llxmlnode.cpp b/indra/llxml/llxmlnode.cpp
old mode 100644
new mode 100755
diff --git a/indra/llxml/llxmlnode.h b/indra/llxml/llxmlnode.h
old mode 100644
new mode 100755
diff --git a/indra/llxml/llxmlparser.cpp b/indra/llxml/llxmlparser.cpp
old mode 100644
new mode 100755
diff --git a/indra/llxml/llxmlparser.h b/indra/llxml/llxmlparser.h
old mode 100644
new mode 100755
diff --git a/indra/llxml/llxmltree.cpp b/indra/llxml/llxmltree.cpp
old mode 100644
new mode 100755
diff --git a/indra/llxml/llxmltree.h b/indra/llxml/llxmltree.h
old mode 100644
new mode 100755
diff --git a/indra/llxml/tests/llcontrol_test.cpp b/indra/llxml/tests/llcontrol_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/CMakeLists.txt b/indra/lscript/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/lscript/llscriptresource.h b/indra/lscript/llscriptresource.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/llscriptresourceconsumer.h b/indra/lscript/llscriptresourceconsumer.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/llscriptresourcepool.h b/indra/lscript/llscriptresourcepool.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_alloc.h b/indra/lscript/lscript_alloc.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_byteconvert.h b/indra/lscript/lscript_byteconvert.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_byteformat.h b/indra/lscript/lscript_byteformat.h
old mode 100644
new mode 100755
index a294def73418f26165796f8480a36f07ae2f0f86..54031aaf05160b47505c6a09a1b8c2801321c91b
--- a/indra/lscript/lscript_byteformat.h
+++ b/indra/lscript/lscript_byteformat.h
@@ -530,6 +530,10 @@ typedef enum e_lscript_runtime_permissions
 	SCRIPT_PERMISSION_TRACK_CAMERA,
 	SCRIPT_PERMISSION_CONTROL_CAMERA,
 	SCRIPT_PERMISSION_TELEPORT,
+	SCRIPT_PERMISSION_EXPERIENCE,
+	SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT,
+	SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS,
+	SCRIPT_PERMISSION_RETURN_OBJECTS,
 	SCRIPT_PERMISSION_EOF
 } LSCRIPTRunTimePermissions;
 
@@ -547,6 +551,10 @@ const U32 LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_EOF] =
 	(0x1 << 10),//	SCRIPT_PERMISSION_TRACK_CAMERA
 	(0x1 << 11),//	SCRIPT_PERMISSION_CONTROL_CAMERA
 	(0x1 << 12),//	SCRIPT_PERMISSION_TELEPORT
+	(0x1 << 13),//	SCRIPT_PERMISSION_EXPERIENCE,
+	(0x1 << 14),//	SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT,
+	(0x1 << 15),//	SCRIPT_PERMISSION_OVERRIDE_ANIMATIONS,
+	(0x1 << 16),//	SCRIPT_PERMISSION_RETURN_OBJECTS,
 };
 
 // http_request string constants
diff --git a/indra/lscript/lscript_compile/CMakeLists.txt b/indra/lscript/lscript_compile/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/indra.l b/indra/lscript/lscript_compile/indra.l
old mode 100644
new mode 100755
index b2c49083cb267398b1c32ce636317b40504b84a8..1bb38bbf655f5c3313db95b81055e6cb52b2a2eb
--- a/indra/lscript/lscript_compile/indra.l
+++ b/indra/lscript/lscript_compile/indra.l
@@ -79,11 +79,9 @@ void parse_string();
 #define yyfree indra_free
 
 
-#if defined(__cplusplus)
-extern "C" { int yylex( void ); }
-extern "C" { int yyparse( void ); }
-extern "C" { int yyerror(const char *fmt, ...); }
-#endif
+int yylex( void );
+int yyparse( void );
+int yyerror(const char *fmt, ...);
 
 %}
 
diff --git a/indra/lscript/lscript_compile/indra.y b/indra/lscript/lscript_compile/indra.y
old mode 100644
new mode 100755
index e4b10ffdd9da7d96dd1a75217a65de0964056a72..a0a034d21c2251a9035825f72e2781c80ced719c
--- a/indra/lscript/lscript_compile/indra.y
+++ b/indra/lscript/lscript_compile/indra.y
@@ -2,10 +2,6 @@
 	#include "linden_common.h"
 	#include "lscript_tree.h"
 
-    #ifdef __cplusplus
-    extern "C" {
-    #endif
-
 	int yylex(void);
 	int yyparse( void );
 	int yyerror(const char *fmt, ...);
@@ -20,9 +16,6 @@
 	#pragma warning( disable : 4065 )	// warning: switch statement contains 'default' but no 'case' labels
 	#endif
 
-    #ifdef __cplusplus
-    }
-    #endif
 %}
 
 %union
diff --git a/indra/lscript/lscript_compile/lscript_alloc.cpp b/indra/lscript/lscript_compile/lscript_alloc.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_bytecode.cpp b/indra/lscript/lscript_compile/lscript_bytecode.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_bytecode.h b/indra/lscript/lscript_compile/lscript_bytecode.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_error.cpp b/indra/lscript/lscript_compile/lscript_error.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_error.h b/indra/lscript/lscript_compile/lscript_error.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_heap.cpp b/indra/lscript/lscript_compile/lscript_heap.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_heap.h b/indra/lscript/lscript_compile/lscript_heap.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_resource.cpp b/indra/lscript/lscript_compile/lscript_resource.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_resource.h b/indra/lscript/lscript_compile/lscript_resource.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_scope.cpp b/indra/lscript/lscript_compile/lscript_scope.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_scope.h b/indra/lscript/lscript_compile/lscript_scope.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_tree.cpp b/indra/lscript/lscript_compile/lscript_tree.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_tree.h b/indra/lscript/lscript_compile/lscript_tree.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_typecheck.cpp b/indra/lscript/lscript_compile/lscript_typecheck.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/lscript_typecheck.h b/indra/lscript/lscript_compile/lscript_typecheck.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_compile/windows/unistd.h b/indra/lscript/lscript_compile/windows/unistd.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute.h b/indra/lscript/lscript_execute.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/CMakeLists.txt b/indra/lscript/lscript_execute/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/llscriptresource.cpp b/indra/lscript/lscript_execute/llscriptresource.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp b/indra/lscript/lscript_execute/llscriptresourceconsumer.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/llscriptresourcepool.cpp b/indra/lscript/lscript_execute/llscriptresourcepool.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/lscript_execute.cpp b/indra/lscript/lscript_execute/lscript_execute.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/lscript_heapruntime.cpp b/indra/lscript/lscript_execute/lscript_heapruntime.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/lscript_heapruntime.h b/indra/lscript/lscript_execute/lscript_heapruntime.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/lscript_readlso.cpp b/indra/lscript/lscript_execute/lscript_readlso.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_execute/lscript_readlso.h b/indra/lscript/lscript_execute/lscript_readlso.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_export.h b/indra/lscript/lscript_export.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_http.h b/indra/lscript/lscript_http.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_library.h b/indra/lscript/lscript_library.h
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_library/CMakeLists.txt b/indra/lscript/lscript_library/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_library/lscript_alloc.cpp b/indra/lscript/lscript_library/lscript_alloc.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_library/lscript_export.cpp b/indra/lscript/lscript_library/lscript_export.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_library/lscript_library.cpp b/indra/lscript/lscript_library/lscript_library.cpp
old mode 100644
new mode 100755
diff --git a/indra/lscript/lscript_rt_interface.h b/indra/lscript/lscript_rt_interface.h
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/CMakeLists.txt b/indra/mac_crash_logger/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/CrashReporter.nib b/indra/mac_crash_logger/CrashReporter.nib
old mode 100644
new mode 100755
index a30d8d205cf76f486649b9f9eee9e8f4928a4b97..e9d9e059855078b54b9d1d3c382f7f241cab9e27
Binary files a/indra/mac_crash_logger/CrashReporter.nib and b/indra/mac_crash_logger/CrashReporter.nib differ
diff --git a/indra/mac_crash_logger/CrashReporter.xib b/indra/mac_crash_logger/CrashReporter.xib
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/Info.plist b/indra/mac_crash_logger/Info.plist
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/llcrashloggermac.cpp b/indra/mac_crash_logger/llcrashloggermac.cpp
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/llcrashloggermac.h b/indra/mac_crash_logger/llcrashloggermac.h
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/llcrashloggermacdelegate.h b/indra/mac_crash_logger/llcrashloggermacdelegate.h
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/llcrashloggermacdelegate.mm b/indra/mac_crash_logger/llcrashloggermacdelegate.mm
old mode 100644
new mode 100755
diff --git a/indra/mac_crash_logger/mac_crash_logger.cpp b/indra/mac_crash_logger/mac_crash_logger.cpp
old mode 100644
new mode 100755
diff --git a/indra/mac_updater/AutoUpdater.nib/classes.nib b/indra/mac_updater/AutoUpdater.nib/classes.nib
deleted file mode 100644
index ea58db1189aa4aa4b8112941abcc5b3013db1001..0000000000000000000000000000000000000000
Binary files a/indra/mac_updater/AutoUpdater.nib/classes.nib and /dev/null differ
diff --git a/indra/mac_updater/AutoUpdater.nib/info.nib b/indra/mac_updater/AutoUpdater.nib/info.nib
deleted file mode 100644
index a49a92385bb55b21f4c5b736ecaadc09127d04ae..0000000000000000000000000000000000000000
Binary files a/indra/mac_updater/AutoUpdater.nib/info.nib and /dev/null differ
diff --git a/indra/mac_updater/AutoUpdater.nib/objects.xib b/indra/mac_updater/AutoUpdater.nib/objects.xib
deleted file mode 100644
index 310411b7113c96e28f07f317d9e22b0fcf531ef0..0000000000000000000000000000000000000000
--- a/indra/mac_updater/AutoUpdater.nib/objects.xib
+++ /dev/null
@@ -1,56 +0,0 @@
-<?xml version="1.0" standalone="yes"?>
-<object class="NSIBObjectData">
-  <string name="targetFramework">IBCarbonFramework</string>
-  <object name="rootObject" class="NSCustomObject" id="1">
-    <string name="customClass">NSApplication</string>
-  </object>
-  <array count="5" name="allObjects">
-    <object class="IBCarbonWindow" id="166">
-      <string name="windowRect">405 222 533 663 </string>
-      <string name="title">Second Life Updater</string>
-      <object name="rootControl" class="IBCarbonRootControl" id="167">
-        <string name="bounds">0 0 128 441 </string>
-        <array count="3" name="subviews">
-          <object class="IBCarbonStaticText" id="181">
-            <string name="bounds">20 20 44 421 </string>
-            <ostype name="controlSignature">what</ostype>
-            <string name="title">Initializing…</string>
-          </object>
-          <object class="IBCarbonButton" id="183">
-            <string name="bounds">88 351 108 421 </string>
-            <string name="title">Cancel</string>
-            <ostype name="command">not!</ostype>
-            <int name="buttonType">2</int>
-          </object>
-          <object class="IBCarbonProgressBar" id="193">
-            <string name="bounds">51 19 70 422 </string>
-            <ostype name="controlSignature">prog</ostype>
-            <int name="initialValue">50</int>
-          </object>
-        </array>
-      </object>
-      <boolean name="isResizable">FALSE</boolean>
-      <int name="carbonWindowClass">2</int>
-      <int name="themeBrush">3</int>
-      <int name="windowPosition">7</int>
-    </object>
-    <reference idRef="167"/>
-    <reference idRef="181"/>
-    <reference idRef="183"/>
-    <reference idRef="193"/>
-  </array>
-  <array count="5" name="allParents">
-    <reference idRef="1"/>
-    <reference idRef="166"/>
-    <reference idRef="167"/>
-    <reference idRef="167"/>
-    <reference idRef="167"/>
-  </array>
-  <dictionary count="2" name="nameTable">
-    <string>File&apos;s Owner</string>
-    <reference idRef="1"/>
-    <string>Updater</string>
-    <reference idRef="166"/>
-  </dictionary>
-  <unsigned_int name="nextObjectID">194</unsigned_int>
-</object>
diff --git a/indra/mac_updater/CMakeLists.txt b/indra/mac_updater/CMakeLists.txt
deleted file mode 100644
index a644984e58f2618755a362f15170ada1a9584b37..0000000000000000000000000000000000000000
--- a/indra/mac_updater/CMakeLists.txt
+++ /dev/null
@@ -1,75 +0,0 @@
-# -*- cmake -*-
-
-project(mac_updater)
-
-include(00-Common)
-include(OpenSSL)
-include(CURL)
-include(CARes)
-include(LLCommon)
-include(LLMessage)
-include(LLVFS)
-include(Linking)
-
-include_directories(
-    ${LLCOMMON_INCLUDE_DIRS}
-    ${LLVFS_INCLUDE_DIRS}
-    ${CURL_INCLUDE_DIRS}
-    ${CARES_INCLUDE_DIRS}
-    )
-
-set(mac_updater_SOURCE_FILES
-    mac_updater.cpp
-    )
-
-set(mac_updater_HEADER_FILES
-    CMakeLists.txt
-    )
-
-set_source_files_properties(${mac_updater_HEADER_FILES}
-                            PROPERTIES HEADER_FILE_ONLY TRUE)
-
-list(APPEND mac_updater_SOURCE_FILES ${mac_updater_HEADER_FILES})
-
-
-set(mac_updater_RESOURCE_FILES
-  AutoUpdater.nib/
-  )
-set_source_files_properties(
-  ${mac_updater_RESOURCE_FILES}
-  PROPERTIES
-  HEADER_FILE_ONLY TRUE
-  )
-SOURCE_GROUP("Resources" FILES ${mac_updater_RESOURCE_FILES})
-list(APPEND mac_updater_SOURCE_FILES ${mac_updater_RESOURCE_FILES})
-
-add_executable(mac-updater
-  MACOSX_BUNDLE
-  ${mac_updater_SOURCE_FILES})
-
-set_target_properties(mac-updater
-  PROPERTIES
-  MACOSX_BUNDLE_INFO_PLIST ${CMAKE_CURRENT_SOURCE_DIR}/Info.plist
-  )
-
-target_link_libraries(mac-updater
-    ${LLMESSAGE_LIBRARIES}
-    ${LLVFS_LIBRARIES}
-    ${OPENSSL_LIBRARIES}
-    ${CRYPTO_LIBRARIES}
-    ${CURL_LIBRARIES}
-    ${CARES_LIBRARIES}
-    ${LLCOMMON_LIBRARIES}
-    )
-
-add_custom_command(
-  TARGET mac-updater POST_BUILD
-  COMMAND ${CMAKE_COMMAND}
-  ARGS
-    -E
-    copy_directory
-    ${CMAKE_CURRENT_SOURCE_DIR}/AutoUpdater.nib
-    ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/mac-updater.app/Contents/Resources/AutoUpdater.nib
-  )
-
-ll_deploy_sharedlibs_command(mac-updater) 
diff --git a/indra/mac_updater/Info.plist b/indra/mac_updater/Info.plist
deleted file mode 100644
index bb27fddb03bc8002d3253b548c27382663de7826..0000000000000000000000000000000000000000
--- a/indra/mac_updater/Info.plist
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
-<plist version="1.0">
-<dict>
-	<key>CFBundleDevelopmentRegion</key>
-	<string>English</string>
-	<key>CFBundleExecutable</key>
-	<string>mac-updater</string>
-	<key>CFBundleGetInfoString</key>
-	<string></string>
-	<key>CFBundleIconFile</key>
-	<string></string>
-	<key>CFBundleIdentifier</key>
-	<string>com.secondlife.indra.autoupdater</string>
-	<key>CFBundleInfoDictionaryVersion</key>
-	<string>6.0</string>
-	<key>CFBundlePackageType</key>
-	<string>APPL</string>
-	<key>CFBundleShortVersionString</key>
-	<string></string>
-	<key>CFBundleSignature</key>
-	<string>????</string>
-	<key>CFBundleVersion</key>
-	<string>1.0.0</string>
-</dict>
-</plist>
diff --git a/indra/mac_updater/mac_updater.cpp b/indra/mac_updater/mac_updater.cpp
deleted file mode 100644
index aa45c5d23f25e685ba6f2a352e53cfa13aec0836..0000000000000000000000000000000000000000
--- a/indra/mac_updater/mac_updater.cpp
+++ /dev/null
@@ -1,1257 +0,0 @@
-/** 
- * @file mac_updater.cpp
- * @brief 
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser 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
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include "linden_common.h"
-
-#include <boost/format.hpp>
-
-#include <libgen.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <curl/curl.h>
-#include <pthread.h>
-
-#include "llerror.h"
-#include "lltimer.h"
-#include "lldir.h"
-#include "llfile.h"
-
-#include "llstring.h"
-
-#include <Carbon/Carbon.h>
-
-#include "llerrorcontrol.h"
-
-enum
-{
-	kEventClassCustom = 'Cust',
-	kEventCustomProgress = 'Prog',
-	kEventParamCustomCurValue = 'Cur ',
-	kEventParamCustomMaxValue = 'Max ',
-	kEventParamCustomText = 'Text',
-	kEventCustomDone = 'Done',
-};
-
-WindowRef gWindow = NULL;
-EventHandlerRef gEventHandler = NULL;
-OSStatus gFailure = noErr;
-Boolean gCancelled = false;
-
-const char *gUpdateURL;
-const char *gProductName;
-const char *gBundleID;
-const char *gDmgFile;
-const char *gMarkerPath;
-
-void *updatethreadproc(void*);
-
-pthread_t updatethread;
-
-OSStatus setProgress(int cur, int max)
-{
-	OSStatus err;
-	ControlRef progressBar = NULL;
-	ControlID id;
-
-	id.signature = 'prog';
-	id.id = 0;
-
-	err = GetControlByID(gWindow, &id, &progressBar);
-	if(err == noErr)
-	{
-		Boolean indeterminate;
-		
-		if(max == 0)
-		{
-			indeterminate = true;
-			err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate);
-		}
-		else
-		{
-			double percentage = (double)cur / (double)max;
-			SetControlMinimum(progressBar, 0);
-			SetControlMaximum(progressBar, 100);
-			SetControlValue(progressBar, (SInt16)(percentage * 100));
-
-			indeterminate = false;
-			err = SetControlData(progressBar, kControlEntireControl, kControlProgressBarIndeterminateTag, sizeof(Boolean), (Ptr)&indeterminate);
-
-			Draw1Control(progressBar);
-		}
-	}
-
-	return(err);
-}
-
-OSStatus setProgressText(CFStringRef text)
-{
-	OSStatus err;
-	ControlRef progressText = NULL;
-	ControlID id;
-
-	id.signature = 'what';
-	id.id = 0;
-
-	err = GetControlByID(gWindow, &id, &progressText);
-	if(err == noErr)
-	{
-		err = SetControlData(progressText, kControlEntireControl, kControlStaticTextCFStringTag, sizeof(CFStringRef), (Ptr)&text);
-		Draw1Control(progressText);
-	}
-
-	return(err);
-}
-
-OSStatus sendProgress(long cur, long max, CFStringRef text = NULL)
-{
-	OSStatus result;
-	EventRef evt;
-	
-	result = CreateEvent( 
-			NULL,
-			kEventClassCustom, 
-			kEventCustomProgress,
-			0, 
-			kEventAttributeNone, 
-			&evt);
-	
-	// This event needs to be targeted at the window so it goes to the window's handler.
-	if(result == noErr)
-	{
-		EventTargetRef target = GetWindowEventTarget(gWindow);
-		result = SetEventParameter (
-			evt,
-			kEventParamPostTarget,
-			typeEventTargetRef,
-			sizeof(target),
-			&target);
-	}
-
-	if(result == noErr)
-	{
-		result = SetEventParameter (
-			evt,
-			kEventParamCustomCurValue,
-			typeLongInteger,
-			sizeof(cur),
-			&cur);
-	}
-
-	if(result == noErr)
-	{
-		result = SetEventParameter (
-			evt,
-			kEventParamCustomMaxValue,
-			typeLongInteger,
-			sizeof(max),
-			&max);
-	}
-	
-	if(result == noErr)
-	{
-		if(text != NULL)
-		{
-			result = SetEventParameter (
-				evt,
-				kEventParamCustomText,
-				typeCFStringRef,
-				sizeof(text),
-				&text);
-		}
-	}
-	
-	if(result == noErr)
-	{
-		// Send the event
-		PostEventToQueue(
-			GetMainEventQueue(),
-			evt,
-			kEventPriorityStandard);
-
-	}
-	
-	return(result);
-}
-
-OSStatus sendDone(void)
-{
-	OSStatus result;
-	EventRef evt;
-	
-	result = CreateEvent( 
-			NULL,
-			kEventClassCustom, 
-			kEventCustomDone,
-			0, 
-			kEventAttributeNone, 
-			&evt);
-	
-	// This event needs to be targeted at the window so it goes to the window's handler.
-	if(result == noErr)
-	{
-		EventTargetRef target = GetWindowEventTarget(gWindow);
-		result = SetEventParameter (
-			evt,
-			kEventParamPostTarget,
-			typeEventTargetRef,
-			sizeof(target),
-			&target);
-	}
-
-	if(result == noErr)
-	{
-		// Send the event
-		PostEventToQueue(
-			GetMainEventQueue(),
-			evt,
-			kEventPriorityStandard);
-
-	}
-	
-	return(result);
-}
-
-OSStatus dialogHandler(EventHandlerCallRef handler, EventRef event, void *userdata)
-{
-	OSStatus result = eventNotHandledErr;
-	OSStatus err;
-	UInt32 evtClass = GetEventClass(event);
-	UInt32 evtKind = GetEventKind(event);
-	
-	if((evtClass == kEventClassCommand) && (evtKind == kEventCommandProcess))
-	{
-		HICommand cmd;
-		err = GetEventParameter(event, kEventParamDirectObject, typeHICommand, NULL, sizeof(cmd), NULL, &cmd);
-		
-		if(err == noErr)
-		{
-			switch(cmd.commandID)
-			{				
-				case kHICommandCancel:
-					gCancelled = true;
-//					QuitAppModalLoopForWindow(gWindow);
-					result = noErr;
-				break;
-			}
-		}
-	}
-	else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomProgress))
-	{
-		// Request to update the progress dialog
-		long cur = 0;
-		long max = 0;
-		CFStringRef text = NULL;
-		(void) GetEventParameter(event, kEventParamCustomCurValue, typeLongInteger, NULL, sizeof(cur), NULL, &cur);
-		(void) GetEventParameter(event, kEventParamCustomMaxValue, typeLongInteger, NULL, sizeof(max), NULL, &max);
-		(void) GetEventParameter(event, kEventParamCustomText, typeCFStringRef, NULL, sizeof(text), NULL, &text);
-		
-		err = setProgress(cur, max);
-		if(err == noErr)
-		{
-			if(text != NULL)
-			{
-				setProgressText(text);
-			}
-		}
-		
-		result = noErr;
-	}
-	else if((evtClass == kEventClassCustom) && (evtKind == kEventCustomDone))
-	{
-		// We're done.  Exit the modal loop.
-		QuitAppModalLoopForWindow(gWindow);
-		result = noErr;
-	}
-	
-	return(result);
-}
-
-#if 0
-size_t curl_download_callback(void *data, size_t size, size_t nmemb,
-										  void *user_data)
-{
-	S32 bytes = size * nmemb;
-	char *cdata = (char *) data;
-	for (int i =0; i < bytes; i += 1)
-	{
-		gServerResponse.append(cdata[i]);
-	}
-	return bytes;
-}
-#endif
-
-int curl_progress_callback_func(void *clientp,
-							  double dltotal,
-							  double dlnow,
-							  double ultotal,
-							  double ulnow)
-{
-	int max = (int)(dltotal / 1024.0);
-	int cur = (int)(dlnow / 1024.0);
-	sendProgress(cur, max);
-	
-	if(gCancelled)
-		return(1);
-
-	return(0);
-}
-
-int parse_args(int argc, char **argv)
-{
-	int j;
-
-	for (j = 1; j < argc; j++) 
-	{
-		if ((!strcmp(argv[j], "-url")) && (++j < argc)) 
-		{
-			gUpdateURL = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-name")) && (++j < argc)) 
-		{
-			gProductName = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-bundleid")) && (++j < argc)) 
-		{
-			gBundleID = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-dmg")) && (++j < argc)) 
-		{
-			gDmgFile = argv[j];
-		}
-		else if ((!strcmp(argv[j], "-marker")) && (++j < argc)) 
-		{
-			gMarkerPath = argv[j];;
-		}
-	}
-
-	return 0;
-}
-
-int main(int argc, char **argv)
-{
-	// We assume that all the logs we're looking for reside on the current drive
-	gDirUtilp->initAppDirs("SecondLife");
-
-	LLError::initForApplication( gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, ""));
-
-	// Rename current log file to ".old"
-	std::string old_log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log.old");
-	std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, "updater.log");
-	LLFile::rename(log_file.c_str(), old_log_file.c_str());
-
-	// Set the log file to updater.log
-	LLError::logToFile(log_file);
-
-	/////////////////////////////////////////
-	//
-	// Process command line arguments
-	//
-	gUpdateURL  = NULL;
-	gProductName = NULL;
-	gBundleID = NULL;
-	gDmgFile = NULL;
-	gMarkerPath = NULL;
-	parse_args(argc, argv);
-	if ((gUpdateURL == NULL) && (gDmgFile == NULL))
-	{
-		llinfos << "Usage: mac_updater -url <url> | -dmg <dmg file> [-name <product_name>] [-program <program_name>]" << llendl;
-		exit(1);
-	}
-	else
-	{
-		llinfos << "Update url is: " << gUpdateURL << llendl;
-		if (gProductName)
-		{
-			llinfos << "Product name is: " << gProductName << llendl;
-		}
-		else
-		{
-			gProductName = "Second Life";
-		}
-		if (gBundleID)
-		{
-			llinfos << "Bundle ID is: " << gBundleID << llendl;
-		}
-		else
-		{
-			gBundleID = "com.secondlife.indra.viewer";
-		}
-	}
-	
-	llinfos << "Starting " << gProductName << " Updater" << llendl;
-
-	// Real UI...
-	OSStatus err;
-	IBNibRef nib = NULL;
-	
-	err = CreateNibReference(CFSTR("AutoUpdater"), &nib);
-
-	char windowTitle[MAX_PATH];		/* Flawfinder: ignore */
-	snprintf(windowTitle, sizeof(windowTitle), "%s Updater", gProductName);		
-	CFStringRef windowTitleRef = NULL;
-	windowTitleRef = CFStringCreateWithCString(NULL, windowTitle, kCFStringEncodingUTF8);
-	
-	if(err == noErr)
-	{
-		err = CreateWindowFromNib(nib, CFSTR("Updater"), &gWindow);
-	}
-
-	if (err == noErr)
-	{
-		err = SetWindowTitleWithCFString(gWindow, windowTitleRef);	
-	}
-	CFRelease(windowTitleRef);
-
-	if(err == noErr)
-	{
-		// Set up an event handler for the window.
-		EventTypeSpec handlerEvents[] = 
-		{
-			{ kEventClassCommand, kEventCommandProcess },
-			{ kEventClassCustom, kEventCustomProgress },
-			{ kEventClassCustom, kEventCustomDone }
-		};
-		InstallStandardEventHandler(GetWindowEventTarget(gWindow));
-		InstallWindowEventHandler(
-				gWindow, 
-				NewEventHandlerUPP(dialogHandler), 
-				GetEventTypeCount (handlerEvents), 
-				handlerEvents, 
-				0, 
-				&gEventHandler);
-	}
-	
-	if(err == noErr)
-	{
-		ShowWindow(gWindow);
-		SelectWindow(gWindow);
-	}
-		
-	if(err == noErr)
-	{
-		pthread_create(&updatethread, 
-                         NULL,
-                         &updatethreadproc, 
-                         NULL);
-						 
-	}
-	
-	if(err == noErr)
-	{
-		RunAppModalLoopForWindow(gWindow);
-	}
-
-	void *threadresult;
-
-	pthread_join(updatethread, &threadresult);
-
-	if(!gCancelled && (gFailure != noErr))
-	{
-		// Something went wrong.  Since we always just tell the user to download a new version, we don't really care what.
-		AlertStdCFStringAlertParamRec params;
-		SInt16 retval_mac = 1;
-		DialogRef alert = NULL;
-		OSStatus err;
-
-		params.version = kStdCFStringAlertVersionOne;
-		params.movable = false;
-		params.helpButton = false;
-		params.defaultText = (CFStringRef)kAlertDefaultOKText;
-		params.cancelText = 0;
-		params.otherText = 0;
-		params.defaultButton = 1;
-		params.cancelButton = 0;
-		params.position = kWindowDefaultPosition;
-		params.flags = 0;
-
-		err = CreateStandardAlert(
-				kAlertStopAlert,
-				CFSTR("Error"),
-				CFSTR("An error occurred while updating Second Life.  Please download the latest version from www.secondlife.com."),
-				&params,
-				&alert);
-		
-		if(err == noErr)
-		{
-			err = RunStandardAlert(
-					alert,
-					NULL,
-					&retval_mac);
-		}
-		
-		if(gMarkerPath != 0)
-		{
-			// Create a install fail marker that can be used by the viewer to
-			// detect install problems.
-			std::ofstream stream(gMarkerPath);
-			if(stream) stream << -1;
-		}
-		exit(-1);
-	} else {
-		exit(0);
-	}
-
-	if(gWindow != NULL)
-	{
-		DisposeWindow(gWindow);
-	}
-	
-	if(nib != NULL)
-	{
-		DisposeNibReference(nib);
-	}
-	
-	return 0;
-}
-
-bool isDirWritable(FSRef &dir)
-{
-	bool result = false;
-	
-	// Test for a writable directory by creating a directory, then deleting it again.
-	// This is kinda lame, but will pretty much always give the right answer.
-	
-	OSStatus err = noErr;
-	char temp[PATH_MAX] = "";		/* Flawfinder: ignore */
-
-	err = FSRefMakePath(&dir, (UInt8*)temp, sizeof(temp));
-
-	if(err == noErr)
-	{
-		strncat(temp, "/.test_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
-		
-		if(mkdtemp(temp) != NULL)
-		{
-			// We were able to make the directory.  This means the directory is writable.
-			result = true;
-			
-			// Clean up.
-			rmdir(temp);
-		}
-	}
-
-#if 0
-	// This seemed like a good idea, but won't tell us if we're on a volume mounted read-only.
-	UInt8 perm;
-	err = FSGetUserPrivilegesPermissions(&targetParentRef, &perm, NULL);
-	if(err == noErr)
-	{
-		if(perm & kioACUserNoMakeChangesMask)
-		{
-			// Parent directory isn't writable.
-			llinfos << "Target parent directory not writable." << llendl;
-			err = -1;
-			replacingTarget = false;
-		}
-	}
-#endif
-
-	return result;
-}
-
-static std::string HFSUniStr255_to_utf8str(const HFSUniStr255* src)
-{
-	llutf16string string16((U16*)&(src->unicode), src->length);
-	std::string result = utf16str_to_utf8str(string16);
-	return result;
-}
-
-int restoreObject(const char* aside, const char* target, const char* path, const char* object)
-{
-	char source[PATH_MAX] = "";		/* Flawfinder: ignore */
-	char dest[PATH_MAX] = "";		/* Flawfinder: ignore */
-	snprintf(source, sizeof(source), "%s/%s/%s", aside, path, object);		
-	snprintf(dest, sizeof(dest), "%s/%s", target, path);		
-	FSRef sourceRef;
-	FSRef destRef;
-	OSStatus err;
-	err = FSPathMakeRef((UInt8 *)source, &sourceRef, NULL);
-	if(err != noErr) return false;
-	err = FSPathMakeRef((UInt8 *)dest, &destRef, NULL);
-	if(err != noErr) return false;
-
-	llinfos << "Copying " << source << " to " << dest << llendl;
-
-	err = FSCopyObjectSync(
-			&sourceRef,
-			&destRef,
-			NULL,
-			NULL,
-			kFSFileOperationOverwrite);
-
-	if(err != noErr) return false;
-	return true;
-}
-
-// Replace any mention of "Second Life" with the product name.
-void filterFile(const char* filename)
-{
-	char temp[PATH_MAX] = "";		/* Flawfinder: ignore */
-	// First copy the target's version, so we can run it through sed.
-	snprintf(temp, sizeof(temp), "cp '%s' '%s.tmp'", filename, filename);		
-	system(temp);		/* Flawfinder: ignore */
-
-	// Now run it through sed.
-	snprintf(temp, sizeof(temp), 		
-			"sed 's/Second Life/%s/g' '%s.tmp' > '%s'", gProductName, filename, filename);
-	system(temp);		/* Flawfinder: ignore */
-}
-
-static bool isFSRefViewerBundle(FSRef *targetRef)
-{
-	bool result = false;
-	CFURLRef targetURL = NULL;
-	CFBundleRef targetBundle = NULL;
-	CFStringRef targetBundleID = NULL;
-	CFStringRef sourceBundleID = NULL;
-
-	targetURL = CFURLCreateFromFSRef(NULL, targetRef);
-
-	if(targetURL == NULL)
-	{
-		llinfos << "Error creating target URL." << llendl;
-	}
-	else
-	{
-		targetBundle = CFBundleCreate(NULL, targetURL);
-	}
-	
-	if(targetBundle == NULL)
-	{
-		llinfos << "Failed to create target bundle." << llendl;
-	}
-	else
-	{
-		targetBundleID = CFBundleGetIdentifier(targetBundle);
-	}
-	
-	if(targetBundleID == NULL)
-	{
-		llinfos << "Couldn't retrieve target bundle ID." << llendl;
-	}
-	else
-	{
-		sourceBundleID = CFStringCreateWithCString(NULL, gBundleID, kCFStringEncodingUTF8);
-		if(CFStringCompare(sourceBundleID, targetBundleID, 0) == kCFCompareEqualTo)
-		{
-			// This is the bundle we're looking for.
-			result = true;
-		}
-		else
-		{
-			llinfos << "Target bundle ID mismatch." << llendl;
-		}
-	}
-	
-	// Don't release targetBundleID -- since we don't retain it, it's released when targetBundle is released.
-	if(targetURL != NULL)
-		CFRelease(targetURL);
-	if(targetBundle != NULL)
-		CFRelease(targetBundle);
-	
-	return result;
-}
-
-// Search through the directory specified by 'parent' for an item that appears to be a Second Life viewer.
-static OSErr findAppBundleOnDiskImage(FSRef *parent, FSRef *app)
-{
-	FSIterator		iterator;
-	bool			found = false;
-
-	OSErr err = FSOpenIterator( parent, kFSIterateFlat, &iterator );
-	if(!err)
-	{
-		do
-		{
-			ItemCount actualObjects = 0;
-			Boolean containerChanged = false;
-			FSCatalogInfo info;
-			FSRef ref;
-			HFSUniStr255 unicodeName;
-			err = FSGetCatalogInfoBulk( 
-					iterator, 
-					1, 
-					&actualObjects, 
-					&containerChanged,
-					kFSCatInfoNodeFlags, 
-					&info, 
-					&ref,
-					NULL, 
-					&unicodeName );
-			
-			if(actualObjects == 0)
-				break;
-				
-			if(!err)
-			{
-				// Call succeeded and not done with the iteration.
-				std::string name = HFSUniStr255_to_utf8str(&unicodeName);
-
-				llinfos << "Considering \"" << name << "\"" << llendl;
-
-				if(info.nodeFlags & kFSNodeIsDirectoryMask)
-				{
-					// This is a directory.  See if it's a .app
-					if(name.find(".app") != std::string::npos)
-					{
-						// Looks promising.  Check to see if it has the right bundle identifier.
-						if(isFSRefViewerBundle(&ref))
-						{
-							llinfos << name << " is the one" << llendl;
-							// This is the one.  Return it.
-							*app = ref;
-							found = true;
-							break;
-						} else {
-							llinfos << name << " is not the bundle we are looking for; move along" << llendl;
-						}
-
-					}
-				}
-			}
-		}
-		while(!err);
-		
-		llinfos << "closing the iterator" << llendl;
-		
-		FSCloseIterator(iterator);
-		
-		llinfos << "closed" << llendl;
-	}
-	
-	if(!err && !found)
-		err = fnfErr;
-		
-	return err;
-}
-
-void *updatethreadproc(void*)
-{
-	char tempDir[PATH_MAX] = "";		/* Flawfinder: ignore */
-	FSRef tempDirRef;
-	char temp[PATH_MAX] = "";	/* Flawfinder: ignore */
-	// *NOTE: This buffer length is used in a scanf() below.
-	char deviceNode[1024] = "";	/* Flawfinder: ignore */
-	LLFILE *downloadFile = NULL;
-	OSStatus err;
-	ProcessSerialNumber psn;
-	char target[PATH_MAX] = "";		/* Flawfinder: ignore */
-	FSRef targetRef;
-	FSRef targetParentRef;
-	FSVolumeRefNum targetVol;
-	FSRef trashFolderRef;
-	Boolean replacingTarget = false;
-
-	memset(&tempDirRef, 0, sizeof(tempDirRef));
-	memset(&targetRef, 0, sizeof(targetRef));
-	memset(&targetParentRef, 0, sizeof(targetParentRef));
-	
-	try
-	{
-		// Attempt to get a reference to the Second Life application bundle containing this updater.
-		// Any failures during this process will cause us to default to updating /Applications/Second Life.app
-		{
-			FSRef myBundle;
-
-			err = GetCurrentProcess(&psn);
-			if(err == noErr)
-			{
-				err = GetProcessBundleLocation(&psn, &myBundle);
-			}
-
-			if(err == noErr)
-			{
-				// Sanity check:  Make sure the name of the item referenced by targetRef is "Second Life.app".
-				FSRefMakePath(&myBundle, (UInt8*)target, sizeof(target));
-				
-				llinfos << "Updater bundle location: " << target << llendl;
-			}
-			
-			// Our bundle should be in Second Life.app/Contents/Resources/AutoUpdater.app
-			// so we need to go up 3 levels to get the path to the main application bundle.
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&myBundle, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
-			}
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
-			}
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetRef);
-			}
-			
-			// And once more to get the parent of the target
-			if(err == noErr)
-			{
-				err = FSGetCatalogInfo(&targetRef, kFSCatInfoNone, NULL, NULL, NULL, &targetParentRef);
-			}
-			
-			if(err == noErr)
-			{
-				FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
-				llinfos << "Path to target: " << target << llendl;
-			}
-			
-			// Sanity check: make sure the target is a bundle with the right identifier
-			if(err == noErr)
-			{
-				// Assume the worst...
-				err = -1;
-
-				if(isFSRefViewerBundle(&targetRef))
-				{
-					// This is the bundle we're looking for.
-					err = noErr;
-					replacingTarget = true;
-				}
-			}
-			
-			// Make sure the target's parent directory is writable.
-			if(err == noErr)
-			{
-				if(!isDirWritable(targetParentRef))
-				{
-					// Parent directory isn't writable.
-					llinfos << "Target parent directory not writable." << llendl;
-					err = -1;
-					replacingTarget = false;
-				}
-			}
-
-			if(err != noErr)
-			{
-				Boolean isDirectory;
-				llinfos << "Target search failed, defaulting to /Applications/" << gProductName << ".app." << llendl;
-				
-				// Set up the parent directory
-				err = FSPathMakeRef((UInt8*)"/Applications", &targetParentRef, &isDirectory);
-				if((err != noErr) || (!isDirectory))
-				{
-					// We're so hosed.
-					llinfos << "Applications directory not found, giving up." << llendl;
-					throw 0;
-				}
-				
-				snprintf(target, sizeof(target), "/Applications/%s.app", gProductName);		
-
-				memset(&targetRef, 0, sizeof(targetRef));
-				err = FSPathMakeRef((UInt8*)target, &targetRef, NULL);
-				if(err == fnfErr)
-				{
-					// This is fine, just means we're not replacing anything.
-					err = noErr;
-					replacingTarget = false;
-				}
-				else
-				{
-					replacingTarget = true;
-				}
-
-				// Make sure the target's parent directory is writable.
-				if(err == noErr)
-				{
-					if(!isDirWritable(targetParentRef))
-					{
-						// Parent directory isn't writable.
-						llinfos << "Target parent directory not writable." << llendl;
-						err = -1;
-						replacingTarget = false;
-					}
-				}
-
-			}
-			
-			// If we haven't fixed all problems by this point, just bail.
-			if(err != noErr)
-			{
-				llinfos << "Unable to pick a target, giving up." << llendl;
-				throw 0;
-			}
-		}
-		
-		// Find the volID of the volume the target resides on
-		{
-			FSCatalogInfo info;
-			err = FSGetCatalogInfo(
-				&targetParentRef,
-				kFSCatInfoVolume,
-				&info,
-				NULL, 
-				NULL,  
-				NULL);
-				
-			if(err != noErr)
-				throw 0;
-			
-			targetVol = info.volume;
-		}
-
-		// Find the temporary items and trash folders on that volume.
-		err = FSFindFolder(
-			targetVol,
-			kTrashFolderType,
-			true,
-			&trashFolderRef);
-
-		if(err != noErr)
-			throw 0;
-
-#if 0 // *HACK for DEV-11935 see below for details.
-
-		FSRef tempFolderRef;
-
-		err = FSFindFolder(
-			targetVol,
-			kTemporaryFolderType,
-			true,
-			&tempFolderRef);
-		
-		if(err != noErr)
-			throw 0;
-		
-		err = FSRefMakePath(&tempFolderRef, (UInt8*)temp, sizeof(temp));
-
-		if(err != noErr)
-			throw 0;
-
-#else		
-
-		// *HACK for DEV-11935  the above kTemporaryFolderType query was giving
-		// back results with path names that seem to be too long to be used as
-		// mount points.  I suspect this incompatibility was introduced in the
-		// Leopard 10.5.2 update, but I have not verified this. 
-		char const HARDCODED_TMP[] = "/tmp";
-		strncpy(temp, HARDCODED_TMP, sizeof(HARDCODED_TMP));
-
-#endif // 0 *HACK for DEV-11935
-		
-		// Skip downloading the file if the dmg was passed on the command line.
-		std::string dmgName;
-		if(gDmgFile != NULL) {
-			dmgName = basename((char *)gDmgFile);
-			char * dmgDir = dirname((char *)gDmgFile);
-			strncpy(tempDir, dmgDir, sizeof(tempDir));
-			err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
-			if(err != noErr) throw 0;
-			chdir(tempDir);
-			goto begin_install;
-		} else {
-			// Continue on to download file.
-			dmgName = "SecondLife.dmg";
-		}
-
-		
-		strncat(temp, "/SecondLifeUpdate_XXXXXX", (sizeof(temp) - strlen(temp)) - 1);
-		if(mkdtemp(temp) == NULL)
-		{
-			throw 0;
-		}
-		
-		strncpy(tempDir, temp, sizeof(tempDir));
-		temp[sizeof(tempDir) - 1] = '\0';
-		
-		llinfos << "tempDir is " << tempDir << llendl;
-
-		err = FSPathMakeRef((UInt8*)tempDir, &tempDirRef, NULL);
-
-		if(err != noErr)
-			throw 0;
-				
-		chdir(tempDir);
-		
-		snprintf(temp, sizeof(temp), "SecondLife.dmg");		
-		
-		downloadFile = LLFile::fopen(temp, "wb");		/* Flawfinder: ignore */
-		if(downloadFile == NULL)
-		{
-			throw 0;
-		}
-
-		{
-			CURL *curl = curl_easy_init();
-
-			curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1);
-	//		curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &curl_download_callback);
-			curl_easy_setopt(curl, CURLOPT_FILE, downloadFile);
-			curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0);
-			curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, &curl_progress_callback_func);
-			curl_easy_setopt(curl, CURLOPT_URL,	gUpdateURL);
-			curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
-			
-			sendProgress(0, 1, CFSTR("Downloading..."));
-			
-			CURLcode result = curl_easy_perform(curl);
-			
-			curl_easy_cleanup(curl);
-			
-			if(gCancelled)
-			{
-				llinfos << "User cancel, bailing out."<< llendl;
-				throw 0;
-			}
-			
-			if(result != CURLE_OK)
-			{
-				llinfos << "Error " << result << " while downloading disk image."<< llendl;
-				throw 0;
-			}
-			
-			fclose(downloadFile);
-			downloadFile = NULL;
-		}
-
-	begin_install:
-		sendProgress(0, 0, CFSTR("Mounting image..."));
-		LLFile::mkdir("mnt", 0700);
-		
-		// NOTE: we could add -private at the end of this command line to keep the image from showing up in the Finder,
-		//		but if our cleanup fails, this makes it much harder for the user to unmount the image.
-		std::string mountOutput;
-		boost::format cmdFormat("hdiutil attach %s -mountpoint mnt");
-		cmdFormat % dmgName;
-		FILE* mounter = popen(cmdFormat.str().c_str(), "r");		/* Flawfinder: ignore */
-		
-		if(mounter == NULL)
-		{
-			llinfos << "Failed to mount disk image, exiting."<< llendl;
-			throw 0;
-		}
-		
-		// We need to scan the output from hdiutil to find the device node it uses to attach the disk image.
-		// If we don't have this information, we can't detach it later.
-		while(mounter != NULL)
-		{
-			size_t len = fread(temp, 1, sizeof(temp)-1, mounter);
-			temp[len] = 0;
-			mountOutput.append(temp);
-			if(len < sizeof(temp)-1)
-			{
-				// End of file or error.
-				int result = pclose(mounter);
-				if(result != 0)
-				{
-					// NOTE: We used to abort here, but pclose() started returning 
-					// -1, possibly when the size of the DMG passed a certain point 
-					llinfos << "Unexpected result closing pipe: " << result << llendl; 
-				}
-				mounter = NULL;
-			}
-		}
-		
-		if(!mountOutput.empty())
-		{
-			const char *s = mountOutput.c_str();
-			const char *prefix = "/dev/";
-			char *sub = strstr(s, prefix);
-			
-			if(sub != NULL)
-			{
-				sub += strlen(prefix);	/* Flawfinder: ignore */
-				sscanf(sub, "%1023s", deviceNode);	/* Flawfinder: ignore */
-			}
-		}
-		
-		if(deviceNode[0] != 0)
-		{
-			llinfos << "Disk image attached on /dev/" << deviceNode << llendl;
-		}
-		else
-		{
-			llinfos << "Disk image device node not found!" << llendl;
-			throw 0; 
-		}
-		
-		// Get an FSRef to the new application on the disk image
-		FSRef sourceRef;
-		FSRef mountRef;
-		snprintf(temp, sizeof(temp), "%s/mnt", tempDir);		
-
-		llinfos << "Disk image mount point is: " << temp << llendl;
-
-		err = FSPathMakeRef((UInt8 *)temp, &mountRef, NULL);
-		if(err != noErr)
-		{
-			llinfos << "Couldn't make FSRef to disk image mount point." << llendl;
-			throw 0;
-		}
-
-		sendProgress(0, 0, CFSTR("Searching for the app bundle..."));
-		err = findAppBundleOnDiskImage(&mountRef, &sourceRef);
-		if(err != noErr)
-		{
-			llinfos << "Couldn't find application bundle on mounted disk image." << llendl;
-			throw 0;
-		}
-		else
-		{
-			llinfos << "found the bundle." << llendl;
-		}
-
-		sendProgress(0, 0, CFSTR("Preparing to copy files..."));
-		
-		FSRef asideRef;
-		char aside[MAX_PATH];		/* Flawfinder: ignore */
-		
-		// this will hold the name of the destination target
-		CFStringRef appNameRef;
-
-		if(replacingTarget)
-		{
-			// Get the name of the target we're replacing
-			HFSUniStr255 appNameUniStr;
-			err = FSGetCatalogInfo(&targetRef, 0, NULL, &appNameUniStr, NULL, NULL);
-			if(err != noErr)
-				throw 0;
-			appNameRef = FSCreateStringFromHFSUniStr(NULL, &appNameUniStr);
-			
-			// Move aside old version (into work directory)
-			err = FSMoveObject(&targetRef, &tempDirRef, &asideRef);
-			if(err != noErr)
-			{
-				llwarns << "failed to move aside old version (error code " << 
-					err << ")" << llendl;
-				throw 0;
-			}
-
-			// Grab the path for later use.
-			err = FSRefMakePath(&asideRef, (UInt8*)aside, sizeof(aside));
-		}
-		else
-		{
-			// Construct the name of the target based on the product name
-			char appName[MAX_PATH];		/* Flawfinder: ignore */
-			snprintf(appName, sizeof(appName), "%s.app", gProductName);		
-			appNameRef = CFStringCreateWithCString(NULL, appName, kCFStringEncodingUTF8);
-		}
-		
-		sendProgress(0, 0, CFSTR("Copying files..."));
-		
-		llinfos << "Starting copy..." << llendl;
-
-		// Copy the new version from the disk image to the target location.
-		err = FSCopyObjectSync(
-				&sourceRef,
-				&targetParentRef,
-				appNameRef,
-				&targetRef,
-				kFSFileOperationDefaultOptions);
-		
-		// Grab the path for later use.
-		err = FSRefMakePath(&targetRef, (UInt8*)target, sizeof(target));
-		if(err != noErr)
-			throw 0;
-
-		llinfos << "Copy complete. Target = " << target << llendl;
-
-		if(err != noErr)
-		{
-			// Something went wrong during the copy.  Attempt to put the old version back and bail.
-			(void)FSDeleteObject(&targetRef);
-			if(replacingTarget)
-			{
-				(void)FSMoveObject(&asideRef, &targetParentRef, NULL);
-			}
-			throw 0;
-		}
-		else
-		{
-			// The update has succeeded.  Clear the cache directory.
-
-			sendProgress(0, 0, CFSTR("Clearing cache..."));
-	
-			llinfos << "Clearing cache..." << llendl;
-			
-			gDirUtilp->deleteFilesInDir(gDirUtilp->getExpandedFilename(LL_PATH_CACHE,""), "*.*");
-			
-			llinfos << "Clear complete." << llendl;
-
-		}
-	}
-	catch(...)
-	{
-		if(!gCancelled)
-			if(gFailure == noErr)
-				gFailure = -1;
-	}
-
-	// Failures from here on out are all non-fatal and not reported.
-	sendProgress(0, 3, CFSTR("Cleaning up..."));
-
-	// Close disk image file if necessary
-	if(downloadFile != NULL)
-	{
-		llinfos << "Closing download file." << llendl;
-
-		fclose(downloadFile);
-		downloadFile = NULL;
-	}
-
-	sendProgress(1, 3);
-	// Unmount image
-	if(deviceNode[0] != 0)
-	{
-		llinfos << "Detaching disk image." << llendl;
-
-		snprintf(temp, sizeof(temp), "hdiutil detach '%s'", deviceNode);		
-		system(temp);		/* Flawfinder: ignore */
-	}
-
-	sendProgress(2, 3);
-
-	// Move work directory to the trash
-	if(tempDir[0] != 0)
-	{
-		llinfos << "Moving work directory to the trash." << llendl;
-
-		FSRef trashRef;
-		OSStatus err = FSMoveObjectToTrashSync(&tempDirRef, &trashRef, 0); 
-		if(err != noErr) {
-			llwarns << "failed to move files to trash, (error code " <<
-				err << ")" << llendl;
-		}
-	}
-	
-	if(!gCancelled  && !gFailure && (target[0] != 0))
-	{
-		llinfos << "Touching application bundle." << llendl;
-
-		snprintf(temp, sizeof(temp), "touch '%s'", target);		
-		system(temp);		/* Flawfinder: ignore */
-
-		llinfos << "Launching updated application." << llendl;
-
-		snprintf(temp, sizeof(temp), "open '%s'", target);		
-		system(temp);		/* Flawfinder: ignore */
-	}
-
-	sendDone();
-	
-	return(NULL);
-}
diff --git a/indra/mac_updater/mac_updater.h b/indra/mac_updater/mac_updater.h
deleted file mode 100644
index f65b481cb68b44e6de08f5b58617ce5460203a28..0000000000000000000000000000000000000000
--- a/indra/mac_updater/mac_updater.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/** 
- * @file mac_updater.h
- * @brief 
- *
- * $LicenseInfo:firstyear=2006&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser 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
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#include <iostream>
-#include <pthread.h>
-#include <boost/filesystem.hpp>
-
-#ifndef LL_MAC_UPDATER_H
-#define LL_MAC_UPDATER_H
-extern bool gCancelled;
-extern bool gFailure;
-
-void *updatethreadproc(void*);
-std::string* walkParents( signed int depth, std::string* childpath );
-std::string* getUserTrashFolder();
-
-void setProgress(int cur, int max);
-void setProgressText(const std::string& str);
-void sendProgress(int cur, int max, std::string str);
-void sendDone();
-void sendStopAlert();
-
-bool isFSRefViewerBundle(const std::string& targetURL);
-bool isDirWritable(const std::string& dir_name);
-bool mkTempDir(boost::filesystem::path& temp_dir);
-bool copyDir(const std::string& src_dir, const std::string& dest_dir);
-
-int oldmain();
-
-class LLMacUpdater
-{
-public:
-    LLMacUpdater();
-    void doUpdate();
-    const std::string walkParents( signed int depth, const std::string& childpath );
-    bool isApplication(const std::string& app_str);
-    void filterFile(const char* filename);
-
-    bool findAppBundleOnDiskImage(const boost::filesystem::path& dir_path,
-                                  boost::filesystem::path& path_found);
-
-    bool verifyDirectory(const boost::filesystem::path* directory, bool isParent=false);
-    bool getViewerDir(boost::filesystem::path &app_dir);
-    bool downloadDMG(const std::string& dmgName, boost::filesystem::path* temp_dir);
-    bool doMount(const std::string& dmgName, char* deviceNode, const boost::filesystem::path& temp_dir);
-    bool moveApplication (const boost::filesystem::path& app_dir, 
-                          const boost::filesystem::path& temp_dir, 
-                          boost::filesystem::path& aside_dir);
-    bool doInstall(const boost::filesystem::path& app_dir, 
-                   const boost::filesystem::path& temp_dir,
-                   boost::filesystem::path& mount_dir,
-                   bool replacingTarget);
-    void* updatethreadproc(void*);
-    static void* sUpdatethreadproc(void*);
-
-public:
-    std::string *mUpdateURL;
-    std::string *mProductName;
-    std::string *mBundleID;
-    std::string *mDmgFile;
-    std::string *mMarkerPath;
-    std::string *mApplicationPath;
-    static LLMacUpdater *sInstance;
-
-};
-#endif
-
-
diff --git a/indra/media_plugins/CMakeLists.txt b/indra/media_plugins/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/base/CMakeLists.txt b/indra/media_plugins/base/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/base/media_plugin_base.cpp b/indra/media_plugins/base/media_plugin_base.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/base/media_plugin_base.exp b/indra/media_plugins/base/media_plugin_base.exp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/base/media_plugin_base.h b/indra/media_plugins/base/media_plugin_base.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/example/CMakeLists.txt b/indra/media_plugins/example/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/example/media_plugin_example.cpp b/indra/media_plugins/example/media_plugin_example.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/CMakeLists.txt b/indra/media_plugins/gstreamer010/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_raw.inc
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc b/indra/media_plugins/gstreamer010/llmediaimplgstreamer_syms_rawv.inc
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamertriviallogging.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h b/indra/media_plugins/gstreamer010/llmediaimplgstreamervidplug.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp b/indra/media_plugins/gstreamer010/media_plugin_gstreamer010.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/quicktime/CMakeLists.txt b/indra/media_plugins/quicktime/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/quicktime/media_plugin_quicktime.cpp b/indra/media_plugins/quicktime/media_plugin_quicktime.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/CMakeLists.txt b/indra/media_plugins/webkit/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/dummy_volume_catcher.cpp b/indra/media_plugins/webkit/dummy_volume_catcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/linux_volume_catcher.cpp b/indra/media_plugins/webkit/linux_volume_catcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_pa_syms.inc
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc b/indra/media_plugins/webkit/linux_volume_catcher_paglib_syms.inc
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/mac_volume_catcher.cpp b/indra/media_plugins/webkit/mac_volume_catcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/media_plugin_webkit.cpp b/indra/media_plugins/webkit/media_plugin_webkit.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/volume_catcher.h b/indra/media_plugins/webkit/volume_catcher.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/webkit/windows_volume_catcher.cpp b/indra/media_plugins/webkit/windows_volume_catcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/winmmshim/CMakeLists.txt b/indra/media_plugins/winmmshim/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/winmmshim/forwarding_api.cpp b/indra/media_plugins/winmmshim/forwarding_api.cpp
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/winmmshim/forwarding_api.h b/indra/media_plugins/winmmshim/forwarding_api.h
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/winmmshim/winmm.def b/indra/media_plugins/winmmshim/winmm.def
old mode 100644
new mode 100755
diff --git a/indra/media_plugins/winmmshim/winmm_shim.cpp b/indra/media_plugins/winmmshim/winmm_shim.cpp
old mode 100644
new mode 100755
index 47a1e5c0187acf98e37cad50e763433170f8c27a..aac349bf57d526e3d6ef979a13d82d36385d3b36
--- a/indra/media_plugins/winmmshim/winmm_shim.cpp
+++ b/indra/media_plugins/winmmshim/winmm_shim.cpp
@@ -56,7 +56,7 @@ void ll_winmm_shim_initialize(){
 		// grab winmm.dll from system path, where it should live
 		wsprintf(dll_path, "%s\\winmm.dll", system_path);
 		HMODULE winmm_handle = ::LoadLibrary(dll_path);
-		
+
 		if (winmm_handle != NULL)
 		{	// we have a dll, let's get out pointers!
 			initialized = true;
diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt
old mode 100644
new mode 100755
index 28d0b6be6273ef0800326256694d35bd055fbea7..89add3e21f776cac6682af572fc9bdb5bfe95a52
--- a/indra/newview/CMakeLists.txt
+++ b/indra/newview/CMakeLists.txt
@@ -10,7 +10,7 @@ include(DirectX)
 include(OpenSSL)
 include(DragDrop)
 include(EXPAT)
-include(FMOD)
+include(FMODEX)
 include(OPENAL)
 include(OpenGL)
 include(Hunspell)
@@ -53,6 +53,10 @@ if (NOT HAVOK_TPV)
    add_subdirectory(${LLPHYSICSEXTENSIONS_SRC_DIR} llphysicsextensions)
 endif (NOT HAVOK_TPV)
 
+if(FMODEX)
+  include_directories(${FMODEX_INCLUDE_DIR})
+endif(FMODEX)
+
 include_directories(
     ${DBUSGLIB_INCLUDE_DIRS}
     ${JSONCPP_INCLUDE_DIR}
@@ -62,7 +66,6 @@ include_directories(
     ${LLCOMMON_INCLUDE_DIRS}
     ${LLCOREHTTP_INCLUDE_DIRS}
     ${LLPHYSICS_INCLUDE_DIRS}
-    ${FMOD_INCLUDE_DIR}
     ${LLIMAGE_INCLUDE_DIRS}
     ${LLKDU_INCLUDE_DIRS}
     ${LLINVENTORY_INCLUDE_DIRS}
@@ -84,6 +87,7 @@ include_directories(
     ${OPENAL_LIB_INCLUDE_DIRS}
     ${LIBS_PREBUILT_DIR}/include/collada/1.4
     ${LLAPPEARANCE_INCLUDE_DIRS}
+    ${CMAKE_CURRENT_SOURCE_DIR}
     )
 
 include_directories(SYSTEM
@@ -170,6 +174,7 @@ set(viewer_SOURCE_FILES
     lldrawpoolavatar.cpp
     lldrawpoolbump.cpp
     lldrawpoolground.cpp
+    lldrawpoolmaterials.cpp
     lldrawpoolsimple.cpp
     lldrawpoolsky.cpp
     lldrawpoolterrain.cpp
@@ -297,6 +302,7 @@ set(viewer_SOURCE_FILES
     llgroupiconctrl.cpp
     llgrouplist.cpp
     llgroupmgr.cpp
+    llhasheduniqueid.cpp
     llhints.cpp
     llhomelocationresponder.cpp
     llhudeffect.cpp
@@ -353,6 +359,7 @@ set(viewer_SOURCE_FILES
     llmaniptranslate.cpp
     llmarketplacefunctions.cpp
     llmarketplacenotifications.cpp
+    llmaterialmgr.cpp
     llmediactrl.cpp
     llmediadataclient.cpp
     llmenuoptionpathfindingrebakenavmesh.cpp
@@ -749,6 +756,7 @@ set(viewer_HEADER_FILES
     lldrawpoolalpha.h
     lldrawpoolavatar.h
     lldrawpoolbump.h
+    lldrawpoolmaterials.h
     lldrawpoolground.h
     lldrawpoolsimple.h
     lldrawpoolsky.h
@@ -876,6 +884,7 @@ set(viewer_HEADER_FILES
     llgroupiconctrl.h
     llgrouplist.h
     llgroupmgr.h
+    llhasheduniqueid.h
     llhints.h
     llhomelocationresponder.h
     llhudeffect.h
@@ -932,6 +941,7 @@ set(viewer_HEADER_FILES
     llmaniptranslate.h
     llmarketplacefunctions.h
     llmarketplacenotifications.h
+    llmaterialmgr.h
     llmediactrl.h
     llmediadataclient.h
     llmenuoptionpathfindingrebakenavmesh.h
@@ -1242,6 +1252,22 @@ set(viewer_HEADER_FILES
 
 source_group("CMake Rules" FILES ViewerInstall.cmake)
 
+# the viewer_version.txt file created here is for passing to viewer_manifest
+# the summary.json file is created for the benefit of the TeamCity builds, where
+#   it is used to provide descriptive information to the build results page
+add_custom_target(generate_viewer_version ALL
+                  COMMAND printf '${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}' > ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
+                  COMMAND printf '{"Type":"viewer","Version":"${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}"}' > ${CMAKE_BINARY_DIR}/summary.json
+                  COMMENT Generating viewer_version.txt for manifest processing
+                  )
+
+set_source_files_properties(
+   llversioninfo.cpp tests/llversioninfo_test.cpp 
+   PROPERTIES
+   DEPENDS generate_viewer_version  # dummy dependency to force recompile every time
+   COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake
+   )
+
 if (DARWIN)
   LIST(APPEND viewer_SOURCE_FILES llappviewermacosx.cpp)
 
@@ -1319,15 +1345,17 @@ if (WINDOWS)
     # Replace the icons with the appropriate ones for the channel
     # ('test' is the default)
     set(ICON_PATH "test")
+    set(VIEWER_MACOSX_PHASE "d")
     string(TOLOWER ${VIEWER_CHANNEL} channel_lower)
     if(channel_lower MATCHES "^second life release")
         set(ICON_PATH "release")
-    elseif(channel_lower MATCHES "^second life beta viewer")
+        set(VIEWER_MACOSX_PHASE "f")
+    elseif(channel_lower MATCHES "^second life beta")
         set(ICON_PATH "beta")
-    elseif(channel_lower MATCHES "^second life development")
-        set(ICON_PATH "development")
-    elseif(channel_lower MATCHES "project")
+        set(VIEWER_MACOSX_PHASE "b")
+    elseif(channel_lower MATCHES "^second life project")
         set(ICON_PATH "project")
+        set(VIEWER_MACOSX_PHASE "a")
     endif()
     message("Copying icons for ${ICON_PATH}")
     execute_process(
@@ -1396,11 +1424,18 @@ if (WINDOWS)
     set_source_files_properties(${viewer_RESOURCE_FILES}
                                 PROPERTIES HEADER_FILE_ONLY TRUE)
 
+    configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/res/viewerRes.rc
+                    ${CMAKE_CURRENT_BINARY_DIR}/viewerRes.rc
+                    )
     set(viewer_RESOURCE_FILES
-        res/viewerRes.rc
+        ${CMAKE_CURRENT_BINARY_DIR}/viewerRes.rc
         ${viewer_RESOURCE_FILES}
         )
 
+    set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/viewerRes.rc
+      PROPERTIES COMPILE_FLAGS "-I${CMAKE_CURRENT_SOURCE_DIR}/res"
+      )
+
     SOURCE_GROUP("Resource Files" FILES ${viewer_RESOURCE_FILES})
 
     if (NOT STANDALONE)
@@ -1535,27 +1570,10 @@ if (OPENAL)
   set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_OPENAL")
 endif (OPENAL)
 
-if (FMOD)
-  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMOD")
-
-  if (DARWIN)
-    set(fmodwrapper_SOURCE_FILES fmodwrapper.cpp)
-    add_library(fmodwrapper SHARED ${fmodwrapper_SOURCE_FILES})
-    set(fmodwrapper_needed_LIBRARIES ${FMOD_LIBRARY} ${CARBON_LIBRARY})
-    set_target_properties(
-      fmodwrapper
-      PROPERTIES
-      BUILD_WITH_INSTALL_RPATH 1
-      INSTALL_NAME_DIR "@executable_path/../Resources"
-      LINK_FLAGS "-unexported_symbols_list ${CMAKE_CURRENT_SOURCE_DIR}/fmod_hidden_symbols.exp"
-      )
-    set(FMODWRAPPER_LIBRARY fmodwrapper)
-    target_link_libraries(fmodwrapper ${fmodwrapper_needed_LIBRARIES})
-  else (DARWIN)
-    # fmodwrapper unnecessary on linux or windows
-    set(FMODWRAPPER_LIBRARY ${FMOD_LIBRARY})
-  endif (DARWIN)
-endif (FMOD)
+if (FMODEX)
+  set(LLSTARTUP_COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS} -DLL_FMODEX")
+  set(FMODWRAPPER_LIBRARY ${FMODEX_LIBRARY})
+endif (FMODEX)
 
 set_source_files_properties(llstartup.cpp PROPERTIES COMPILE_FLAGS "${LLSTARTUP_COMPILE_FLAGS}")
 
@@ -1636,9 +1654,6 @@ if (WINDOWS)
       ${SHARED_LIB_STAGING_DIR}/Release/openjpeg.dll
       ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/openjpeg.dll
       ${SHARED_LIB_STAGING_DIR}/Debug/openjpegd.dll
-      ${SHARED_LIB_STAGING_DIR}/Release/fmod.dll
-      ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmod.dll
-      ${SHARED_LIB_STAGING_DIR}/Debug/fmod.dll
       ${SHARED_LIB_STAGING_DIR}/Release/msvcr100.dll
       ${SHARED_LIB_STAGING_DIR}/Release/msvcp100.dll
       ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/msvcr100.dll
@@ -1704,6 +1719,14 @@ if (WINDOWS)
       windows-updater
       )
 
+    if (FMODEX)
+      list(APPEND COPY_INPUT_DEPENDENCIES
+           ${SHARED_LIB_STAGING_DIR}/Release/fmodex.dll
+           ${SHARED_LIB_STAGING_DIR}/RelWithDebInfo/fmodex.dll
+           ${SHARED_LIB_STAGING_DIR}/Debug/fmodexL.dll
+          )
+    endif (FMODEX)
+    
     add_custom_command(
       OUTPUT  ${CMAKE_CFG_INTDIR}/copy_touched.bat
       COMMAND ${PYTHON_EXECUTABLE}
@@ -1716,10 +1739,13 @@ if (WINDOWS)
         --configuration=${CMAKE_CFG_INTDIR}
         --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
         --grid=${GRID}
+        --channel=${VIEWER_CHANNEL}
+        --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
         --source=${CMAKE_CURRENT_SOURCE_DIR}
         --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/copy_touched.bat
       DEPENDS
         ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+        generate_viewer_version
         stage_third_party_libs
         ${COPY_INPUT_DEPENDENCIES}
       COMMENT "Performing viewer_manifest copy"
@@ -1778,21 +1804,23 @@ if (WINDOWS)
           --build=${CMAKE_CURRENT_BINARY_DIR}
           --buildtype=${CMAKE_BUILD_TYPE}
           --channel=${VIEWER_CHANNEL}
+          --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
           --configuration=${CMAKE_CFG_INTDIR}
           --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}
           --grid=${GRID}
-          --login_channel=${VIEWER_LOGIN_CHANNEL}
           --source=${CMAKE_CURRENT_SOURCE_DIR}
           --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/touched.bat
         DEPENDS
             ${VIEWER_BINARY_NAME}
             ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+            ${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
             ${COPY_INPUT_DEPENDENCIES}
         )
 
       add_custom_target(package ALL DEPENDS
         ${CMAKE_CFG_INTDIR}/touched.bat
         windows-setup-build-all
+        generate_viewer_version
         )
         # temporarily disable packaging of event_host until hg subrepos get
         # sorted out on the parabuild cluster...
@@ -1844,6 +1872,7 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${viewer_LIBRARIES}
     ${BOOST_PROGRAM_OPTIONS_LIBRARY}
     ${BOOST_REGEX_LIBRARY}
+    ${BOOST_CONTEXT_LIBRARY}
     ${DBUSGLIB_LIBRARIES}
     ${OPENGL_LIBRARIES}
     ${FMODWRAPPER_LIBRARY} # must come after LLAudio
@@ -1865,14 +1894,11 @@ target_link_libraries(${VIEWER_BINARY_NAME}
     ${LLAPPEARANCE_LIBRARIES}
     )
 
-build_version(viewer)
-
 set(ARTWORK_DIR ${CMAKE_CURRENT_SOURCE_DIR} CACHE PATH
     "Path to artwork files.")
 
-
 if (LINUX)
-  set(product SecondLife-${ARCH}-${viewer_VERSION})
+  set(product SecondLife-${ARCH}-${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION})
 
   # These are the generated targets that are copied to package/
   set(COPY_INPUT_DEPENDENCIES
@@ -1894,20 +1920,22 @@ if (LINUX)
         --build=${CMAKE_CURRENT_BINARY_DIR}
         --buildtype=${CMAKE_BUILD_TYPE}
         --channel=${VIEWER_CHANNEL}
+        --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
         --configuration=${CMAKE_CFG_INTDIR}
         --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
         --grid=${GRID}
         --installer_name=${product}
-        --login_channel=${VIEWER_LOGIN_CHANNEL}
         --source=${CMAKE_CURRENT_SOURCE_DIR}
         --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
       DEPENDS
         ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+        generate_viewer_version
         ${COPY_INPUT_DEPENDENCIES}
       )
 
   if (PACKAGE)
   endif (PACKAGE)
+
   add_custom_command(
     OUTPUT  ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.copy_touched
     COMMAND ${PYTHON_EXECUTABLE}
@@ -1921,9 +1949,12 @@ if (LINUX)
       --configuration=${CMAKE_CFG_INTDIR}
       --dest=${CMAKE_CURRENT_BINARY_DIR}/packaged
       --grid=${GRID}
+      --channel=${VIEWER_CHANNEL}
+      --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
       --source=${CMAKE_CURRENT_SOURCE_DIR}
     DEPENDS
       ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+      generate_viewer_version
       ${COPY_INPUT_DEPENDENCIES}
     COMMENT "Performing viewer_manifest copy"
     )
@@ -1940,18 +1971,24 @@ endif (LINUX)
 
 if (DARWIN)
   set(product "Second Life")
+
   set_target_properties(
     ${VIEWER_BINARY_NAME}
     PROPERTIES
     OUTPUT_NAME "${product}"
-    MACOSX_BUNDLE_INFO_STRING "info string - localize me"
+    MACOSX_BUNDLE_INFO_STRING "Second Life Viewer"
     MACOSX_BUNDLE_ICON_FILE "secondlife.icns"
-    MACOSX_BUNDLE_GUI_IDENTIFIER "Second Life"
-    MACOSX_BUNDLE_LONG_VERSION_STRING "ververver"
+    MACOSX_BUNDLE_GUI_IDENTIFIER "com.secondlife.indra.viewer"
+    MACOSX_BUNDLE_LONG_VERSION_STRING "${VIEWER_CHANNEL} ${VIEWER_SHORT_VERSION}.${VIEWER_VERSION_REVISION}"
     MACOSX_BUNDLE_BUNDLE_NAME "Second Life"
-    MACOSX_BUNDLE_SHORT_VERSION_STRING "asdf"
-    MACOSX_BUNDLE_BUNDLE_VERSION "asdf"
-    MACOSX_BUNDLE_COPYRIGHT "copyright linden lab 2007 - localize me and run me through a legal wringer"
+    MACOSX_BUNDLE_SHORT_VERSION_STRING "${VIEWER_SHORT_VERSION}"
+    MACOSX_BUNDLE_BUNDLE_VERSION "${VIEWER_SHORT_VERSION}${VIEWER_MACOSX_PHASE}${VIEWER_REVISION}"
+    MACOSX_BUNDLE_COPYRIGHT "Copyright © Linden Research, Inc. 2007"
+    )
+
+  configure_file(
+     "${CMAKE_CURRENT_SOURCE_DIR}/Info-SecondLife.plist"
+     "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app/Contents/Info.plist"
     )
 
   add_custom_command(
@@ -1966,11 +2003,16 @@ if (DARWIN)
       --configuration=${CMAKE_CFG_INTDIR}
       --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
       --grid=${GRID}
+      --channel=${VIEWER_CHANNEL}
+      --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
       --source=${CMAKE_CURRENT_SOURCE_DIR}
-    DEPENDS ${VIEWER_BINARY_NAME} ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+    DEPENDS
+      ${VIEWER_BINARY_NAME}
+      ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+      generate_viewer_version
     )
 
-  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-updater mac-crash-logger)
+  add_dependencies(${VIEWER_BINARY_NAME} SLPlugin media_plugin_quicktime media_plugin_webkit mac-crash-logger)
   
   if (ENABLE_SIGNING)
       set(SIGNING_SETTING "--signature=${SIGNING_IDENTITY}")
@@ -1980,6 +2022,7 @@ if (DARWIN)
 
   if (PACKAGE)
       add_custom_target(package ALL DEPENDS ${VIEWER_BINARY_NAME})
+      add_dependencies(package generate_viewer_version)
 
       add_custom_command(
         TARGET package POST_BUILD
@@ -1993,12 +2036,14 @@ if (DARWIN)
           --configuration=${CMAKE_CFG_INTDIR}
           --dest=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${product}.app
           --grid=${GRID}
-          --login_channel=${VIEWER_LOGIN_CHANNEL}
+          --channel=${VIEWER_CHANNEL}
+          --versionfile=${CMAKE_CURRENT_BINARY_DIR}/viewer_version.txt
           --source=${CMAKE_CURRENT_SOURCE_DIR}
           --touch=${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/.${product}.touched
           ${SIGNING_SETTING}
         DEPENDS
           ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py
+          generate_viewer_version
       )
   endif (PACKAGE)
 endif (DARWIN)
@@ -2023,12 +2068,11 @@ if (PACKAGE)
     # *TODO: Generate these search dirs in the cmake files related to each binary.
     list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/llplugin/slplugin/${CMAKE_CFG_INTDIR}")
     list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_crash_logger/${CMAKE_CFG_INTDIR}")
-    list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/mac_updater/${CMAKE_CFG_INTDIR}")
     list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/gstreamer010/${CMAKE_CFG_INTDIR}")
     list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/quicktime/${CMAKE_CFG_INTDIR}")
     list(APPEND SYMBOL_SEARCH_DIRS "${CMAKE_BINARY_DIR}/media_plugins/webkit/${CMAKE_CFG_INTDIR}")
     set(VIEWER_SYMBOL_FILE "${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR}/secondlife-symbols-darwin.tar.bz2")
-    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-updater mac-crash-logger")
+    set(VIEWER_EXE_GLOBS "'Second Life' SLPlugin mac-crash-logger")
     set(VIEWER_LIB_GLOB "*.dylib")
   endif (DARWIN)
   if (LINUX)
@@ -2098,6 +2142,40 @@ if (LL_TESTS)
     LL_TEST_ADDITIONAL_LIBRARIES "${JSONCPP_LIBRARIES}"
   )
 
+  set_source_files_properties(
+    llviewerhelputil.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
+  )
+
+  set_source_files_properties(
+    llremoteparcelrequest.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
+  )
+
+  set_source_files_properties(
+    llworldmap.cpp
+    llworldmipmap.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_SOURCE_FILES 
+    tests/llviewertexture_stub.cpp
+    #llviewertexturelist.cpp
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
+  )
+
+  set_source_files_properties(
+    llmediadataclient.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_LIBRARIES "${LLPRIMITIVE_LIBRARIES}"
+  )
+
+  set_source_files_properties(
+    llagentaccess.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_SYSTEM_LIBRARY}"
+  )
+
   set_source_files_properties(
     lllogininstance.cpp
     PROPERTIES
diff --git a/indra/newview/English.lproj/InfoPlist.strings b/indra/newview/English.lproj/InfoPlist.strings
old mode 100644
new mode 100755
index 1802e14703520d12ca79c529f217af4eb6a094c8..041b8cea0b0a7a7525c9612fc334f5049f8b6752
--- a/indra/newview/English.lproj/InfoPlist.strings
+++ b/indra/newview/English.lproj/InfoPlist.strings
@@ -2,6 +2,6 @@
 
 CFBundleName = "Second Life";
 
-CFBundleShortVersionString = "Second Life version 3.4.1.264760";
-CFBundleGetInfoString = "Second Life version 3.4.1.264760, Copyright 2004-2009 Linden Research, Inc.";
+CFBundleShortVersionString = "Second Life version %%VERSION%%";
+CFBundleGetInfoString = "Second Life version %%VERSION%%, Copyright 2004 Linden Research, Inc.";
 
diff --git a/indra/newview/English.lproj/language.txt b/indra/newview/English.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/German.lproj/language.txt b/indra/newview/German.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/Info-SecondLife.plist b/indra/newview/Info-SecondLife.plist
old mode 100644
new mode 100755
index 035d6cbe6cd423b0ef9e65cba74ec728dfe313e3..a19844f11ce8ab5bd8247ad7c5e46c8cf7876f76
--- a/indra/newview/Info-SecondLife.plist
+++ b/indra/newview/Info-SecondLife.plist
@@ -60,7 +60,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>3.4.1.264760</string>
+	<string>${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}</string>
 	<key>CSResourcesFileMapped</key>
 	<true/>
 </dict>
diff --git a/indra/newview/Info-SecondLifeVorbis.plist b/indra/newview/Info-SecondLifeVorbis.plist
old mode 100644
new mode 100755
diff --git a/indra/newview/Japanese.lproj/language.txt b/indra/newview/Japanese.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/Korean.lproj/language.txt b/indra/newview/Korean.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/SecondLife.nib/classes.nib b/indra/newview/SecondLife.nib/classes.nib
old mode 100644
new mode 100755
diff --git a/indra/newview/SecondLife.nib/info.nib b/indra/newview/SecondLife.nib/info.nib
old mode 100644
new mode 100755
diff --git a/indra/newview/SecondLife.nib/objects.xib b/indra/newview/SecondLife.nib/objects.xib
old mode 100644
new mode 100755
diff --git a/indra/newview/VIEWER_VERSION.txt b/indra/newview/VIEWER_VERSION.txt
new file mode 100644
index 0000000000000000000000000000000000000000..b72762837ea636398fece3c5651f664c2ee82ffb
--- /dev/null
+++ b/indra/newview/VIEWER_VERSION.txt
@@ -0,0 +1 @@
+3.6.2
diff --git a/indra/newview/VertexCache.h b/indra/newview/VertexCache.h
old mode 100644
new mode 100755
diff --git a/indra/newview/ViewerInstall.cmake b/indra/newview/ViewerInstall.cmake
old mode 100644
new mode 100755
diff --git a/indra/newview/VorbisFramework.h b/indra/newview/VorbisFramework.h
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/CA.pem b/indra/newview/app_settings/CA.pem
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/anim.ini b/indra/newview/app_settings/anim.ini
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/autoreplace.xml b/indra/newview/app_settings/autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/cmd_line.xml b/indra/newview/app_settings/cmd_line.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/commands.xml b/indra/newview/app_settings/commands.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/foldertypes.xml b/indra/newview/app_settings/foldertypes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/grass.xml b/indra/newview/app_settings/grass.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/high_graphics.xml b/indra/newview/app_settings/high_graphics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/ignorable_dialogs.xml b/indra/newview/app_settings/ignorable_dialogs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/keys.xml b/indra/newview/app_settings/keys.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/keywords.ini b/indra/newview/app_settings/keywords.ini
old mode 100644
new mode 100755
index 6120f22ba4400f5a8c75e81c4ef992bced30c35a..f0d8b77afd8ea7748cfa6abb687f25a1d0a72261
--- a/indra/newview/app_settings/keywords.ini
+++ b/indra/newview/app_settings/keywords.ini
@@ -92,6 +92,9 @@ PERMISSION_CHANGE_LINKS			Passed to llRequestPermissions library function to req
 PERMISSION_TRACK_CAMERA			Passed to llRequestPermissions library function to request permission to track agent's camera
 PERMISSION_CONTROL_CAMERA		Passed to llRequestPermissions library function to request permission to change agent's camera
 PERMISSION_TELEPORT				Passed to llRequestPermissions library function to request permission to teleport agent
+SCRIPT_PERMISSION_SILENT_ESTATE_MANAGEMENT	Passed to llRequestPermissions library function to request permission to silently modify estate access lists
+PERMISSION_OVERRIDE_ANIMATIONS	Passed to llRequestPermissions library function to request permission to override animations on agent
+PERMISSION_RETURN_OBJECTS		Passed to llRequestPermissions library function to request permission to return objects
 
 DEBUG_CHANNEL		Chat channel reserved for debug and error messages from scripts
 PUBLIC_CHANNEL		Chat channel that broadcasts to all nearby users
diff --git a/indra/newview/app_settings/lindenlab.pem b/indra/newview/app_settings/lindenlab.pem
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/llsd.xsd b/indra/newview/app_settings/llsd.xsd
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/low_graphics.xml b/indra/newview/app_settings/low_graphics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/mid_graphics.xml b/indra/newview/app_settings/mid_graphics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml
index f66d8fca5b5a67bf9ef9e281b0bd2ae8f00c2b0d..344079b640c7daac52dd476717171f42d6d601de 100755
--- a/indra/newview/app_settings/settings.xml
+++ b/indra/newview/app_settings/settings.xml
@@ -291,6 +291,17 @@
       <key>Value</key>
       <real>1.0</real>
     </map>
+    <key>AudioLevelUnderwaterRolloff</key>
+    <map>
+      <key>Comment</key>
+      <string>Controls the distance-based dropoff of audio volume underwater(fraction or multiple of default audio rolloff)</string>
+      <key>Persist</key>
+      <integer>1</integer>
+      <key>Type</key>
+      <string>F32</string>
+      <key>Value</key>
+      <real>5.0</real>
+    </map>
     <key>AudioLevelSFX</key>
     <map>
       <key>Comment</key>
@@ -1894,6 +1905,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+    <key>CoroutineStackSize</key>
+    <map>
+      <key>Comment</key>
+      <string>Size (in bytes) for each coroutine stack</string>
+      <key>Persist</key>
+      <integer>0</integer>
+      <key>Type</key>
+      <string>S32</string>
+      <key>Value</key>
+      <integer>262144</integer>
+    </map>
     <key>CreateToolCopyCenters</key>
     <map>
       <key>Comment</key>
@@ -2851,6 +2873,17 @@
       <key>Value</key>
       <integer>0</integer>
     </map>
+  <key>DefaultBlankNormalTexture</key>
+  <map>
+    <key>Comment</key>
+    <string>Texture used as 'Blank' in texture picker for normal maps. (UUID texture reference)</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>String</string>
+    <key>Value</key>
+    <string>5b53359e-59dd-d8a2-04c3-9e65134da47a</string>
+  </map>
 	<key>DefaultFemaleAvatar</key>
 	<map>
 	  <key>Comment</key>
@@ -2873,8 +2906,29 @@
 	  <key>Value</key>
 	  <string>Male Shape &amp; Outfit</string>
 	</map>
-
-    <key>DefaultObjectTexture</key>
+  <key>DefaultObjectNormalTexture</key>
+  <map>
+    <key>Comment</key>
+    <string>Texture used as 'Default' in texture picker for normal map. (UUID texture reference)</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>String</string>
+    <key>Value</key>
+    <string>85f28839-7a1c-b4e3-d71d-967792970a7b</string>
+  </map>
+  <key>DefaultObjectSpecularTexture</key>
+  <map>
+    <key>Comment</key>
+    <string>Texture used as 'Default' in texture picker for specular map. (UUID texture reference)</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>String</string>
+    <key>Value</key>
+    <string>87e0e8f7-8729-1ea8-cfc9-8915773009db</string>
+  </map>
+  <key>DefaultObjectTexture</key>
     <map>
       <key>Comment</key>
       <string>Texture used as 'Default' in texture picker. (UUID texture reference)</string>
@@ -3325,17 +3379,6 @@
       <key>Value</key>
       <integer>1</integer>
     </map>
-    <key>EnableTextureAtlas</key>
-    <map>
-      <key>Comment</key>
-      <string>Whether to use texture atlas or not</string>
-      <key>Persist</key>
-      <integer>1</integer>
-      <key>Type</key>
-      <string>Boolean</string>
-      <key>Value</key>
-      <integer>0</integer>
-    </map>
     <key>EnableUIHints</key>
     <map>
       <key>Comment</key>
@@ -7689,7 +7732,7 @@
     <key>Type</key>
     <string>S32</string>
     <key>Value</key>
-    <integer>4</integer>
+    <integer>3</integer>
   </map>
 
   <key>OctreeAlphaDistanceFactor</key>
@@ -8418,7 +8461,7 @@
   <key>RenderSpotLightsInNondeferred</key>
   <map>
     <key>Comment</key>
-    <string>Whether to support projectors as spotlights when Lighting and Shadows is disabled</string>
+    <string>Whether to support projectors as spotlights when Advanced Lighting Model is disabled</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -8461,7 +8504,6 @@
     <key>Value</key>
     <real>1.0</real>
   </map>
-
   <key>RenderDeferredTreeShadowBias</key>
   <map>
     <key>Comment</key>
@@ -8559,7 +8601,7 @@
     <key>Type</key>
     <string>U32</string>
     <key>Value</key>
-    <real>512</real>
+    <real>1024</real>
   </map>
 
   <key>RenderSpecularResY</key>
@@ -8571,7 +8613,7 @@
     <key>Type</key>
     <string>U32</string>
     <key>Value</key>
-    <real>128</real>
+    <real>256</real>
   </map>
 
   <key>RenderSpecularExponent</key>
@@ -8589,7 +8631,7 @@
   <key>RenderDeferred</key>
   <map>
     <key>Comment</key>
-    <string>Use deferred rendering pipeline.</string>
+    <string>Use deferred rendering pipeline (Advanced Lighting Model).</string>
     <key>Persist</key>
     <integer>1</integer>
     <key>Type</key>
@@ -8777,7 +8819,7 @@
     <key>RenderAutoMaskAlphaNonDeferred</key>
     <map>
       <key>Comment</key>
-      <string>Use alpha masks where appropriate, in the non-deferred (non-'Lighting and Shadows') graphics mode</string>
+      <string>Use alpha masks where appropriate when not using the Advanced Lighting Model</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -8788,7 +8830,7 @@
     <key>RenderAutoMaskAlphaDeferred</key>
     <map>
       <key>Comment</key>
-      <string>Use alpha masks where appropriate, in the deferred ('Lighting and Shadows') graphics mode</string>
+      <string>Use alpha masks where appropriate in the Advanced Lighting Model</string>
       <key>Persist</key>
       <integer>1</integer>
       <key>Type</key>
@@ -11183,7 +11225,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <integer>0.0</integer>
+      <real>0.0</real>
     </map>
     <key>TextureFetchUpdateSkipLowPriority</key>
     <map>
@@ -12472,16 +12514,16 @@
       <key>Value</key>
       <string>update</string>
     </map>
-    <key>UpdaterServiceProtocolVersion</key>
+    <key>UpdaterWillingToTest</key>
     <map>
       <key>Comment</key>
-      <string>The update protocol version to use.</string>
+      <string>Whether or not the updater should offer test candidate upgrades.</string>
       <key>Persist</key>
-      <integer>0</integer>
+      <integer>1</integer>
       <key>Type</key>
-      <string>String</string>
+      <string>Boolean</string>
       <key>Value</key>
-      <string>v1.0</string>
+      <string>1</string>
     </map>
     <key>UploadBakedTexOld</key>
     <map>
@@ -13448,7 +13490,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <integer>-1.0</integer>
+      <real>-1.0</real>
     </map>
     <key>ForcePeriodicRenderingTime</key>
     <map>
@@ -13459,7 +13501,7 @@
       <key>Type</key>
       <string>F32</string>
       <key>Value</key>
-      <integer>-1.0</integer>
+      <real>-1.0</real>
     </map>
     <key>ZoomDirect</key>
     <map>
@@ -14446,7 +14488,50 @@
     <key>Value</key>
     <integer>0</integer>
   </map>
-
+  <key>DisablePrecacheDelayAfterTeleporting</key>
+  <map>
+    <key>Comment</key>
+    <string>Disables the artificial delay in the viewer that precaches some incoming assets</string>
+    <key>Persist</key>
+    <integer>0</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+  </map>
+  <key>FMODExProfilerEnable</key>
+  <map>
+    <key>Comment</key>
+    <string>Enable profiler tool if using FMOD Ex</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>Boolean</string>
+    <key>Value</key>
+    <integer>0</integer>
+    </map>
+  <key>FMODExDecodeBufferSize</key>
+  <map>
+    <key>Comment</key>
+    <string>Sets the streaming decode buffer size (in milliseconds)</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>U32</string>
+    <key>Value</key>
+    <integer>1000</integer>
+    </map>
+  <key>FMODExStreamBufferSize</key>
+  <map>
+    <key>Comment</key>
+    <string>Sets the streaming buffer size (in milliseconds)</string>
+    <key>Persist</key>
+    <integer>1</integer>
+    <key>Type</key>
+    <string>U32</string>
+    <key>Value</key>
+    <integer>7000</integer>
+  </map>
   <key>DisablePrecacheDelayAfterTeleporting</key>
   <map>
     <key>Comment</key>
diff --git a/indra/newview/app_settings/settings_crash_behavior.xml b/indra/newview/app_settings/settings_crash_behavior.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/settings_files.xml b/indra/newview/app_settings/settings_files.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/settings_minimal.xml b/indra/newview/app_settings/settings_minimal.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/settings_per_account.xml b/indra/newview/app_settings/settings_per_account.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarSkinV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/avatarV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class1/avatar/eyeballV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl b/indra/newview/app_settings/shaders/class1/avatar/objectSkinV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl b/indra/newview/app_settings/shaders/class1/avatar/pickAvatarV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
old mode 100644
new mode 100755
index dd87ddb330edbfa39b2a079b1b57b603e2c43cbc..0899caa2af6e84884ce371daa0caba5f8f5a0db9
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaF.glsl
@@ -25,17 +25,33 @@
  
 #extension GL_ARB_texture_rectangle : enable
 
+#define INDEXED 1
+#define NON_INDEXED 2
+#define NON_INDEXED_NO_COLOR 3
+
 #ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
 #else
 #define frag_color gl_FragColor
 #endif
 
-uniform sampler2DRect depthMap;
+#if HAS_SHADOW
+uniform sampler2DShadow shadowMap0;
+uniform sampler2DShadow shadowMap1;
+uniform sampler2DShadow shadowMap2;
+uniform sampler2DShadow shadowMap3;
 
-vec4 diffuseLookup(vec2 texcoord);
+uniform vec2 shadow_res;
 
-uniform vec2 screen_res;
+uniform mat4 shadow_matrix[6];
+uniform vec4 shadow_clip;
+uniform float shadow_bias;
+
+#endif
+
+#ifdef USE_DIFFUSE_TEX
+uniform sampler2D diffuseMap;
+#endif
 
 vec3 atmosLighting(vec3 light);
 vec3 scaleSoftClip(vec3 light);
@@ -45,11 +61,80 @@ VARYING vec3 vary_directional;
 VARYING vec3 vary_fragcoord;
 VARYING vec3 vary_position;
 VARYING vec3 vary_pointlight_col;
+VARYING vec2 vary_texcoord0;
+VARYING vec3 vary_norm;
 
+#ifdef USE_VERTEX_COLOR
 VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+#endif
+
+uniform vec4 light_position[8];
+uniform vec3 light_direction[8];
+uniform vec3 light_attenuation[8]; 
+uniform vec3 light_diffuse[8];
+
+uniform vec2 screen_res;
+
+vec3 calcDirectionalLight(vec3 n, vec3 l)
+{
+	float a = max(dot(n,l),0.0);
+	a = pow(a, 1.0/1.3);
+	return vec3(a,a,a);
+}
+
+vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+{
+	//get light vector
+	vec3 lv = lp.xyz-v;
+	
+	//get distance
+	float d = length(lv);
+	
+	float da = 0.0;
+
+	if (d > 0.0 && la > 0.0 && fa > 0.0)
+	{
+		//normalize light vector
+		lv = normalize(lv);
+	
+		//distance attenuation
+		float dist = d/la;
+		da = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
+		da *= da;
+		da *= 1.4;
+	
+
+		// spotlight coefficient.
+		float spot = max(dot(-ln, lv), is_pointlight);
+		da *= spot*spot; // GL_SPOT_EXPONENT=2
+
+		//angular attenuation
+		da *= max(dot(n, lv), 0.0);		
+	}
+
+	return vec3(da,da,da);	
+}
+
+#if HAS_SHADOW
+float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
+{
+	stc.xyz /= stc.w;
+	stc.z += shadow_bias;
+		
+	stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
+	
+	float cs = shadow2D(shadowMap, stc.xyz).x;
+	float shadow = cs;
+	
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
+                       
+    return shadow*0.2;
+}
+#endif
 
-uniform mat4 inv_proj;
 
 void main() 
 {
@@ -58,16 +143,123 @@ void main()
 	
 	vec4 pos = vec4(vary_position, 1.0);
 	
-	vec4 diff= diffuseLookup(vary_texcoord0.xy);
 
-	vec4 col = vec4(vary_ambient + vary_directional.rgb, vertex_color.a);
-	vec4 color = diff * col;
+#if HAS_SHADOW
+	float shadow = 0.0;
+	vec4 spos = pos;
+		
+	if (spos.z > -shadow_clip.w)
+	{	
+		vec4 lpos;
+		
+		vec4 near_split = shadow_clip*-0.75;
+		vec4 far_split = shadow_clip*-1.25;
+		vec4 transition_domain = near_split-far_split;
+		float weight = 0.0;
+
+		if (spos.z < near_split.z)
+		{
+			lpos = shadow_matrix[3]*spos;
+			
+			float w = 1.0;
+			w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+			shadow += pcfShadow(shadowMap3, lpos)*w;
+			weight += w;
+			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
+		}
+
+		if (spos.z < near_split.y && spos.z > far_split.z)
+		{
+			lpos = shadow_matrix[2]*spos;
+			
+			float w = 1.0;
+			w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+			w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+			shadow += pcfShadow(shadowMap2, lpos)*w;
+			weight += w;
+		}
+
+		if (spos.z < near_split.x && spos.z > far_split.y)
+		{
+			lpos = shadow_matrix[1]*spos;
+			
+			float w = 1.0;
+			w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+			w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+			shadow += pcfShadow(shadowMap1, lpos)*w;
+			weight += w;
+		}
+
+		if (spos.z > far_split.x)
+		{
+			lpos = shadow_matrix[0]*spos;
+							
+			float w = 1.0;
+			w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+				
+			shadow += pcfShadow(shadowMap0, lpos)*w;
+			weight += w;
+		}
+		
+
+		shadow /= weight;
+	}
+	else
+	{
+		shadow = 1.0;
+	}
+#endif
+
+#ifdef USE_INDEXED_TEX
+	vec4 diff = diffuseLookup(vary_texcoord0.xy);
+#else
+	vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
+#endif
+	vec4 gamma_diff = diff;
+
+	diff.rgb = pow(diff.rgb, vec3(2.2f, 2.2f, 2.2f));
+
+#ifdef USE_VERTEX_COLOR
+	float vertex_color_alpha = vertex_color.a;	
+#else
+	float vertex_color_alpha = 1.0;
+#endif
+	
+	vec3 normal = vary_norm; 
+	
+	vec3 l = light_position[0].xyz;
+	vec3 dlight = calcDirectionalLight(normal, l);
+	dlight = dlight * vary_directional.rgb * vary_pointlight_col;
+
+#if HAS_SHADOW
+	vec4 col = vec4(vary_ambient + dlight * shadow, vertex_color_alpha);
+#else
+	vec4 col = vec4(vary_ambient + dlight, vertex_color_alpha);
+#endif
+
+	vec4 color = gamma_diff * col;
 	
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
 
-	color.rgb += diff.rgb * vary_pointlight_col.rgb;
+	color.rgb = pow(color.rgb, vec3(2.2));
+	col = vec4(0,0,0,0);
+
+	
+   #define LIGHT_LOOP(i) col.rgb += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, normal, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
+
+	LIGHT_LOOP(1)
+	LIGHT_LOOP(2)
+	LIGHT_LOOP(3)
+	LIGHT_LOOP(4)
+	LIGHT_LOOP(5)
+	LIGHT_LOOP(6)
+	LIGHT_LOOP(7)
+
+	color.rgb += diff.rgb * pow(vary_pointlight_col, vec3(2.2)) * col.rgb;
+
+	color.rgb = pow(color.rgb, vec3(1.0/2.2));
 
 	frag_color = color;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
old mode 100644
new mode 100755
index beb329018727a568f9ff25e6966a2e8cc1b2bb93..2ce44d599f1190064efc18ab75b78c8ae9d780d6
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedF.glsl
@@ -47,9 +47,51 @@ VARYING vec3 vary_position;
 VARYING vec3 vary_pointlight_col;
 VARYING vec2 vary_texcoord0;
 VARYING vec4 vertex_color;
+VARYING vec3 vary_norm;
 
 uniform mat4 inv_proj;
 
+uniform vec4 light_position[8];
+uniform vec3 light_direction[8];
+uniform vec3 light_attenuation[8]; 
+uniform vec3 light_diffuse[8];
+
+vec3 calcDirectionalLight(vec3 n, vec3 l)
+{
+        float a = pow(max(dot(n,l),0.0), 0.7);
+        return vec3(a,a,a);
+}
+
+vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+{
+	//get light vector
+	vec3 lv = lp.xyz-v;
+	
+	//get distance
+	float d = dot(lv,lv);
+	
+	float da = 0.0;
+
+	if (d > 0.0 && la > 0.0 && fa > 0.0)
+	{
+		//normalize light vector
+		lv = normalize(lv);
+	
+		//distance attenuation
+		float dist2 = d/la;
+		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
+
+		// spotlight coefficient.
+		float spot = max(dot(-ln, lv), is_pointlight);
+		da *= spot*spot; // GL_SPOT_EXPONENT=2
+
+		//angular attenuation
+		da *= max(pow(dot(n, lv), 0.7), 0.0);		
+	}
+
+	return vec3(da,da,da);	
+}
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).a;
@@ -72,14 +114,33 @@ void main()
 	
 	vec4 diff= texture2D(diffuseMap,vary_texcoord0.xy);
 
-	vec4 col = vec4(vary_ambient + vary_directional.rgb, vertex_color.a);
+	vec3 n = vary_norm;
+	vec3 l = light_position[0].xyz;
+	vec3 dlight = calcDirectionalLight(n, l);
+	dlight = dlight * vary_directional.rgb * vary_pointlight_col;
+
+	vec4 col = vec4(vary_ambient + dlight, vertex_color.a);
 	vec4 color = diff * col;
 	
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
+	vec3 light_col = vec3(0,0,0);
+
+  #define LIGHT_LOOP(i) \
+	light_col += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, vary_norm, light_position[i], light_direction[i], light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
+
+	LIGHT_LOOP(1)
+	LIGHT_LOOP(2)
+	LIGHT_LOOP(3)
+	LIGHT_LOOP(4)
+	LIGHT_LOOP(5)
+	LIGHT_LOOP(6)
+	LIGHT_LOOP(7)
+
+	color.rgb += diff.rgb * vary_pointlight_col * light_col;
 
-	color.rgb += diff.rgb * vary_pointlight_col.rgb;
+	color.rgb = pow(color.rgb, vec3(1.0/2.2));
 
 	frag_color = color;
 	//frag_color = vec4(1,0,1,1);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaNonIndexedNoColorF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
old mode 100644
new mode 100755
index 5a0e8ff68490f5c6860f5e3df697c4da06829bfe..5f93986f1d240c38904756653e9d04874d243dce
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaSkinnedV.glsl
@@ -46,6 +46,7 @@ VARYING vec3 vary_pointlight_col;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+VARYING vec3 vary_norm;
 
 uniform float near_clip;
 
@@ -104,7 +105,7 @@ void main()
 	
 	norm = position.xyz + normal.xyz;
 	norm = normalize(( trans*vec4(norm, 1.0) ).xyz-pos.xyz);
-	
+	vary_norm = norm;
 	vec4 frag_pos = projection_matrix * pos;
 	gl_Position = frag_pos;
 	
@@ -112,27 +113,18 @@ void main()
 		
 	calcAtmospherics(pos.xyz);
 
+	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
 	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
-
-	// Collect normal lights
-	col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
-	col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
-	col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
-	col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
-	col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
-	col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
-
-	vary_pointlight_col = col.rgb*diffuse_color.rgb;
-
+	vary_pointlight_col = diffuse_color.rgb;
 	col.rgb = vec3(0,0,0);
 
 	// Add windlight lights
 	col.rgb = atmosAmbient(vec3(0.));
 	
 	vary_ambient = col.rgb*diffuse_color.rgb;
-	vary_directional = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a)));
+	vary_directional.rgb = atmosAffectDirectionalLight(1);
 	
-	col.rgb = min(col.rgb*diffuse_color.rgb, 1.0);
+	col.rgb = col.rgb*diffuse_color.rgb;
 	
 	vertex_color = col;
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
old mode 100644
new mode 100755
index cf38a2f4f7908a1afff98b720d5160721ae7240b..9d3ba564cdc4556f18e3ef4a3eed801b48032168
--- a/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/alphaV.glsl
@@ -23,22 +23,41 @@
  * $/LicenseInfo$
  */
 
+#define INDEXED 1
+#define NON_INDEXED 2
+#define NON_INDEXED_NO_COLOR 3
+
 uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
+uniform mat4 projection_matrix;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
 ATTRIBUTE vec3 position;
+
+#ifdef USE_INDEXED_TEX
 void passTextureIndex();
+#endif
+
 ATTRIBUTE vec3 normal;
+
+#ifdef USE_VERTEX_COLOR
 ATTRIBUTE vec4 diffuse_color;
+#endif
+
 ATTRIBUTE vec2 texcoord0;
 
+#ifdef HAS_SKIN
+mat4 getObjectSkinnedTransform();
+#else
+#ifdef IS_AVATAR_SKIN
+mat4 getSkinnedTransform();
+#endif
+#endif
+
 vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
 void calcAtmospherics(vec3 inPositionEye);
 
-float calcDirectionalLight(vec3 n, vec3 l);
-
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
 vec3 scaleDownLight(vec3 light);
@@ -50,26 +69,24 @@ VARYING vec3 vary_fragcoord;
 VARYING vec3 vary_position;
 VARYING vec3 vary_pointlight_col;
 
+#ifdef USE_VERTEX_COLOR
 VARYING vec4 vertex_color;
+#endif
+
 VARYING vec2 vary_texcoord0;
 
+VARYING vec3 vary_norm;
 
 uniform float near_clip;
-uniform float shadow_offset;
-uniform float shadow_bias;
 
 uniform vec4 light_position[8];
 uniform vec3 light_direction[8];
 uniform vec3 light_attenuation[8]; 
 uniform vec3 light_diffuse[8];
 
-float calcDirectionalLight(vec3 n, vec3 l)
-{
-        float a = max(dot(n,l),0.0);
-        return a;
-}
+uniform vec3 sun_dir;
 
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
 {
 	//get light vector
 	vec3 lv = lp.xyz-v;
@@ -96,53 +113,110 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa
 		da *= max(dot(n, lv), 0.0);		
 	}
 
-	return da;	
+	return vec3(da,da,da);	
 }
 
 void main()
 {
+	vec4 pos;
+	vec3 norm;
+	
 	//transform vertex
+#ifdef HAS_SKIN
+	mat4 trans = getObjectSkinnedTransform();
+	trans = modelview_matrix * trans;
+	
+	pos = trans * vec4(position.xyz, 1.0);
+	
+	norm = position.xyz + normal.xyz;
+	norm = normalize((trans * vec4(norm, 1.0)).xyz - pos.xyz);
+	vec4 frag_pos = projection_matrix * pos;
+	gl_Position = frag_pos;
+#else
+
+#ifdef IS_AVATAR_SKIN
+	mat4 trans = getSkinnedTransform();
+	vec4 pos_in = vec4(position.xyz, 1.0);
+	pos.x = dot(trans[0], pos_in);
+	pos.y = dot(trans[1], pos_in);
+	pos.z = dot(trans[2], pos_in);
+	pos.w = 1.0;
+	
+	norm.x = dot(trans[0].xyz, normal);
+	norm.y = dot(trans[1].xyz, normal);
+	norm.z = dot(trans[2].xyz, normal);
+	norm = normalize(norm);
+	
+	vec4 frag_pos = projection_matrix * pos;
+	gl_Position = frag_pos;
+#else
+	norm = normalize(normal_matrix * normal);
 	vec4 vert = vec4(position.xyz, 1.0);
-	passTextureIndex();
-	vec4 pos = (modelview_matrix * vert);
+	pos = (modelview_matrix * vert);
 	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
+#endif
 	
+#endif
+
+#ifdef USE_INDEXED_TEX
+	passTextureIndex();
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
+#else
+	vary_texcoord0 = texcoord0;
+#endif
 	
-	vec3 norm = normalize(normal_matrix * normal);
-	
-	float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
-	vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
-		
+	vary_norm = norm;
+	vary_position = pos.xyz;
+
 	calcAtmospherics(pos.xyz);
 
+#ifndef USE_VERTEX_COLOR
+	vec4 diffuse_color = vec4(1,1,1,1);
+#endif
 	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
 	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
+	
+	vec3 diff = diffuse_color.rgb;
+
+	
+
+	vary_pointlight_col = diff;
 
-	// Collect normal lights
-	col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
-	col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
-	col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
-	col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
-	col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
-	col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
 	
-	vary_pointlight_col = col.rgb*diffuse_color.rgb;
 	col.rgb = vec3(0,0,0);
 
 	// Add windlight lights
-	col.rgb = atmosAmbient(vec3(0.));
+	col.rgb = atmosAmbient(col.rgb);
 	
-	vary_ambient = col.rgb*diffuse_color.rgb;
-	vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a)));
+	float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
+	ambient *= 0.5;
+	ambient *= ambient;
+	ambient = (1.0-ambient);
+
+	col.rgb *= ambient;
+
+	vary_ambient = col.rgb*diff.rgb;
+
+	vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
 	
-	col.rgb = col.rgb*diffuse_color.rgb;
+	col.rgb = col.rgb*diff.rgb;
 	
+#ifdef USE_VERTEX_COLOR
 	vertex_color = col;
-
-	
+#endif
 	
+#ifdef HAS_SKIN
+	vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
+#else
+
+#ifdef IS_AVATAR_SKIN
+	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
+#else
 	pos = modelview_projection_matrix * vert;
 	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
+#endif
 	
+#endif
+
 }
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
old mode 100644
new mode 100755
index 81961d7746053e0ebcb9570583b10b7423df5495..3f90600acefdc2d5915284c7243bee9cd8f13598
--- a/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/attachmentShadowV.glsl
@@ -39,7 +39,12 @@ void main()
 	mat = modelview_matrix * mat;
 	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz;
 	
+
 	vec4 p = projection_matrix * vec4(pos, 1.0);
+#if !DEPTH_CLAMP
 	p.z = max(p.z, -p.w+0.01);
 	gl_Position = p;
+#else
+	gl_Position = p;
+#endif
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl
old mode 100644
new mode 100755
index 5f395801e510fa4d1a1069665518dd5beced0350..c8ddefac266f1679d90ed5c7a4c156b0cad1bc4e
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaNoColorV.glsl
@@ -47,6 +47,7 @@ VARYING vec3 vary_directional;
 VARYING vec3 vary_fragcoord;
 VARYING vec3 vary_pointlight_col;
 VARYING vec2 vary_texcoord0;
+VARYING vec3 vary_norm;
 
 
 uniform float near_clip;
@@ -112,6 +113,7 @@ void main()
 	norm.y = dot(trans[1].xyz, normal);
 	norm.z = dot(trans[2].xyz, normal);
 	norm = normalize(norm);
+	vary_norm = norm;
 		
 	vec4 frag_pos = projection_matrix * pos;
 	gl_Position = frag_pos;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarAlphaV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarEyesV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
old mode 100644
new mode 100755
index bfd9b9b3eb4a143cfd35094d1a93f1a4a9473dca..bcccbf77d2df1e3338af941bc6e38553de6b9af1
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarF.glsl
@@ -34,6 +34,12 @@ uniform sampler2D diffuseMap;
 VARYING vec3 vary_normal;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec4 diff = texture2D(diffuseMap, vary_texcoord0.xy);
@@ -46,6 +52,6 @@ void main()
 	frag_data[0] = vec4(diff.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
old mode 100644
new mode 100755
index 3686f2f647cedf8f932f2bdf4811a3fa4501423b..b809b73973bdf813d0401694bf350674e4074df2
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowF.glsl
@@ -31,12 +31,16 @@ out vec4 frag_color;
 
 uniform sampler2D diffuseMap;
 
+#if !DEPTH_CLAMP
 VARYING vec4 post_pos;
+#endif
 
 void main() 
 {
 	frag_color = vec4(1,1,1,1);
 
+#if !DEPTH_CLAMP
 	gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
+#endif
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
old mode 100644
new mode 100755
index 23feb09d7233b8dea4a042712593574f06ff5b2e..bde1ad4e9f81cf70517257024554dd98fc0d33e9
--- a/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/avatarShadowV.glsl
@@ -31,7 +31,9 @@ ATTRIBUTE vec3 position;
 ATTRIBUTE vec3 normal;
 ATTRIBUTE vec2 texcoord0;
 
+#if !DEPTH_CLAMP
 VARYING vec4 post_pos;
+#endif
 
 void main()
 {
@@ -51,9 +53,13 @@ void main()
 	norm = normalize(norm);
 	
 	pos = projection_matrix * pos;
+#if !DEPTH_CLAMP
 	post_pos = pos;
 
 	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
+#else
+	gl_Position = pos;
+#endif
 }
 
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl b/indra/newview/app_settings/shaders/class1/deferred/avatarV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
old mode 100644
new mode 100755
index f400eb7a5bc9521f9fce2c83529633cdc0b76e87..968a5f6b3df7fa57f19ca85c8f82eaed96bfb71c
--- a/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/blurLightF.glsl
@@ -46,11 +46,6 @@ VARYING vec2 vary_fragcoord;
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
 
-vec3 getKern(int i)
-{
-	return kern[i];
-}
-
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -64,18 +59,53 @@ vec4 getPosition(vec2 pos_screen)
 	return pos;
 }
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 void main() 
 {
     vec2 tc = vary_fragcoord.xy;
 	vec3 norm = texture2DRect(normalMap, tc).xyz;
-	norm = vec3((norm.xy-0.5)*2.0,norm.z); // unpack norm
+	norm = decode_normal(norm.xy); // unpack norm
+
 	vec3 pos = getPosition(tc).xyz;
 	vec4 ccol = texture2DRect(lightMap, tc).rgba;
 	
 	vec2 dlt = kern_scale * delta / (1.0+norm.xy*norm.xy);
 	dlt /= max(-pos.z*dist_factor, 1.0);
 	
-	vec2 defined_weight = getKern(0).xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free'
+	vec2 defined_weight = kern[0].xy; // special case the first (centre) sample's weight in the blur; we have to sample it anyway so we get it for 'free'
 	vec4 col = defined_weight.xyxx * ccol;
 
 	// relax tolerance according to distance to avoid speckling artifacts, as angles and distances are a lot more abrupt within a small screen area at larger distances
@@ -85,28 +115,33 @@ void main()
 	float tc_mod = 0.5*(tc.x + tc.y); // mod(tc.x+tc.y,2)
 	tc_mod -= floor(tc_mod);
 	tc_mod *= 2.0;
-	tc += ( (tc_mod - 0.5) * getKern(1).z * dlt * 0.5 );
+	tc += ( (tc_mod - 0.5) * kern[1].z * dlt * 0.5 );
 
 	for (int i = 1; i < 4; i++)
 	{
-		vec2 samptc = tc + getKern(i).z*dlt;
-	        vec3 samppos = getPosition(samptc).xyz; 
+		vec2 samptc = tc + kern[i].z*dlt;
+	    vec3 samppos = getPosition(samptc).xyz; 
+
 		float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane
+		
 		if (d*d <= pointplanedist_tolerance_pow2)
 		{
-			col += texture2DRect(lightMap, samptc)*getKern(i).xyxx;
-			defined_weight += getKern(i).xy;
+			col += texture2DRect(lightMap, samptc)*kern[i].xyxx;
+			defined_weight += kern[i].xy;
 		}
 	}
+
 	for (int i = 1; i < 4; i++)
 	{
-		vec2 samptc = tc - getKern(i).z*dlt;
-	        vec3 samppos = getPosition(samptc).xyz; 
+		vec2 samptc = tc - kern[i].z*dlt;
+	    vec3 samppos = getPosition(samptc).xyz; 
+
 		float d = dot(norm.xyz, samppos.xyz-pos.xyz);// dist from plane
+		
 		if (d*d <= pointplanedist_tolerance_pow2)
 		{
-			col += texture2DRect(lightMap, samptc)*getKern(i).xyxx;
-			defined_weight += getKern(i).xy;
+			col += texture2DRect(lightMap, samptc)*kern[i].xyxx;
+			defined_weight += kern[i].xy;
 		}
 	}
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/blurLightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
old mode 100644
new mode 100755
index 23c4ea2fffd2de983595a64a35b8de10e99eee2d..595c11fae23c499cab56ae2cf4ee38a5a28c24d3
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpF.glsl
@@ -39,6 +39,12 @@ VARYING vec3 vary_mat2;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec3 col = vertex_color.rgb * texture2D(diffuseMap, vary_texcoord0.xy).rgb;
@@ -52,5 +58,5 @@ void main()
 	frag_data[1] = vertex_color.aaaa; // spec
 	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
 	vec3 nvn = normalize(tnorm);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), vertex_color.a, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
old mode 100644
new mode 100755
index 8ba75010a2cdf2a0c534ab94738e529e61a43e0a..10144f3e1612621f2f56f4d6fc3dab5f7853d501
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpSkinnedV.glsl
@@ -30,7 +30,7 @@ ATTRIBUTE vec3 position;
 ATTRIBUTE vec4 diffuse_color;
 ATTRIBUTE vec3 normal;
 ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec3 binormal;
+ATTRIBUTE vec4 tangent;
 
 VARYING vec3 vary_mat0;
 VARYING vec3 vary_mat1;
@@ -52,8 +52,8 @@ void main()
 	
 	
 	vec3 n = normalize((mat * vec4(normal.xyz+position.xyz, 1.0)).xyz-pos.xyz);
-	vec3 b = normalize((mat * vec4(binormal.xyz+position.xyz, 1.0)).xyz-pos.xyz);
-	vec3 t = cross(b, n);
+	vec3 t = normalize((mat * vec4(tangent.xyz+position.xyz, 1.0)).xyz-pos.xyz);
+	vec3 b = cross(n, t) * tangent.w;
 	
 	vary_mat0 = vec3(t.x, b.x, n.x);
 	vary_mat1 = vec3(t.y, b.y, n.y);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
old mode 100644
new mode 100755
index c8d38bb8f74e72dd4ad681f1fb43b94cec2f6b00..9f9749394e023beaf336ff30a9bcf93b9c2203bb
--- a/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/bumpV.glsl
@@ -31,7 +31,7 @@ ATTRIBUTE vec3 position;
 ATTRIBUTE vec4 diffuse_color;
 ATTRIBUTE vec3 normal;
 ATTRIBUTE vec2 texcoord0;
-ATTRIBUTE vec3 binormal;
+ATTRIBUTE vec4 tangent;
 
 VARYING vec3 vary_mat0;
 VARYING vec3 vary_mat1;
@@ -46,8 +46,8 @@ void main()
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
 	
 	vec3 n = normalize(normal_matrix * normal);
-	vec3 b = normalize(normal_matrix * binormal);
-	vec3 t = cross(b, n);
+	vec3 t = normalize(normal_matrix * tangent.xyz);
+	vec3 b = cross(n, t) * tangent.w;
 	
 	vary_mat0 = vec3(t.x, b.x, n.x);
 	vary_mat1 = vec3(t.y, b.y, n.y);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/cloudsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl b/indra/newview/app_settings/shaders/class1/deferred/cofF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
old mode 100644
new mode 100755
index c1fa9e4aac1b44b4cb9769b5b6ab57b2f679d523..7930b5d18be81a4fe3558324ff4240db66e4f2fd
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskF.glsl
@@ -37,6 +37,12 @@ VARYING vec3 vary_normal;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy) * vertex_color;
@@ -49,6 +55,6 @@ void main()
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0); // spec
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
old mode 100644
new mode 100755
index 4c68123fac1680ec3d9ddfb98c64b7321c4bb7a1..59d109b886a6f8a4d9d3c7019e3f5c9353c8428d
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskIndexedF.glsl
@@ -36,6 +36,12 @@ uniform float minimum_alpha;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec4 col = diffuseLookup(vary_texcoord0.xy) * vertex_color;
@@ -48,5 +54,5 @@ void main()
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
old mode 100644
new mode 100755
index ad65c7d3309c8e4f7629b26d62e383a365c43753..37d70a2412b24761fb64e8e82578452a445ba7db
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseAlphaMaskNoColorF.glsl
@@ -37,6 +37,12 @@ uniform sampler2D diffuseMap;
 VARYING vec3 vary_normal;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
@@ -49,6 +55,6 @@ void main()
 	frag_data[0] = vec4(col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0); // spec
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
old mode 100644
new mode 100755
index 86390bdd839c108bc7b061e9f6402c28bc787212..6befb1bd8b7347e10107ae86257c1b9020ac1dc5
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseF.glsl
@@ -35,6 +35,12 @@ VARYING vec3 vary_normal;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec3 col = vertex_color.rgb * texture2D(diffuseMap, vary_texcoord0.xy).rgb;
@@ -42,6 +48,6 @@ void main()
 	frag_data[1] = vertex_color.aaaa; // spec
 	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), vertex_color.a, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
old mode 100644
new mode 100755
index 788b966af88bf35cb6d06fc2da80ba853a7fd334..adc361d7a2b1409863450df01437c9598ba3652e
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseIndexedF.glsl
@@ -33,13 +33,22 @@ VARYING vec3 vary_normal;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+
 void main() 
 {
 	vec3 col = vertex_color.rgb * diffuseLookup(vary_texcoord0.xy).rgb;
+	
+	vec3 spec;
+	spec.rgb = vec3(vertex_color.a);
 
 	frag_data[0] = vec4(col, 0.0);
-	frag_data[1] = vertex_color.aaaa; // spec
-	//frag_data[1] = vec4(vec3(vertex_color.a), vertex_color.a+(1.0-vertex_color.a)*vertex_color.a); // spec - from former class3 - maybe better, but not so well tested
+	frag_data[1] = vec4(spec, vertex_color.a); // spec
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), vertex_color.a, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseNoColorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseNoColorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseSkinnedV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
old mode 100644
new mode 100755
index 76d29b1df7dce0986ccdbe508f33cd13a42b1fdd..3c026796c8b3a7fdd9e8df4076dfbc3561c12218
--- a/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/diffuseV.glsl
@@ -47,6 +47,6 @@ void main()
 	
 	passTextureIndex();
 	vary_normal = normalize(normal_matrix * normal);
-
+	
 	vertex_color = diffuse_color;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl b/indra/newview/app_settings/shaders/class1/deferred/dofCombineF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl b/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
old mode 100644
new mode 100755
index 6aa4d7b4ed198e29e557a6edec9b3ff5fd17a86a..ed02c4a48189f0318a100c16d13c3dd50af9f135
--- a/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/emissiveF.glsl
@@ -42,7 +42,7 @@ void main()
 	float shadow = 1.0;
 
 	vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color;
-	
+	color.rgb = pow(color.rgb, vec3(2.2));
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/emissiveV.glsl b/indra/newview/app_settings/shaders/class1/deferred/emissiveV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
old mode 100644
new mode 100755
index 36433a5827d7dde0c5ff091167ab11ecd0d8e226..dc1dead656120b9132133828001af2e5601c638e
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightF.glsl
@@ -31,6 +31,10 @@ out vec4 frag_color;
 #define frag_color gl_FragColor
 #endif
 
+#if !HAS_DIFFUSE_LOOKUP
+uniform sampler2D diffuseMap;
+#endif
+
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
@@ -40,14 +44,20 @@ vec3 fullbrightScaleSoftClip(vec3 light);
 
 void main() 
 {
-	float shadow = 1.0;
-
+#if HAS_DIFFUSE_LOOKUP
 	vec4 color = diffuseLookup(vary_texcoord0.xy)*vertex_color;
+#else
+	vec4 color = texture2D(diffuseMap, vary_texcoord0.xy)*vertex_color;
+#endif
+
+	color.rgb = pow(color.rgb,vec3(2.2f,2.2f,2.2f));
 	
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
+	color.rgb = pow(color.rgb, vec3(1.0/2.2));
+
 	frag_color = color;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..b0db9876d30a49f82f792c09ad524d5797117901
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyF.glsl
@@ -0,0 +1,72 @@
+/** 
+ * @file fullbrightShinyF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+ 
+
+
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
+
+#ifndef diffuseLookup
+uniform sampler2D diffuseMap;
+#endif
+
+VARYING vec4 vertex_color;
+VARYING vec2 vary_texcoord0;
+VARYING vec3 vary_texcoord1;
+
+uniform samplerCube environmentMap;
+
+vec3 fullbrightShinyAtmosTransport(vec3 light);
+vec3 fullbrightScaleSoftClip(vec3 light);
+
+void main()
+{
+#if HAS_DIFFUSE_LOOKUP
+	vec4 color = diffuseLookup(vary_texcoord0.xy);
+#else
+	vec4 color = texture2D(diffuseMap, vary_texcoord0.xy);
+#endif
+
+	
+	color.rgb *= vertex_color.rgb;
+	
+	vec3 envColor = textureCube(environmentMap, vary_texcoord1.xyz).rgb;	
+	color.rgb = mix(color.rgb, envColor.rgb, vertex_color.a);
+
+	color.rgb = pow(color.rgb,vec3(2.2f,2.2f,2.2f));
+	
+	color.rgb = fullbrightShinyAtmosTransport(color.rgb);
+	color.rgb = fullbrightScaleSoftClip(color.rgb);
+
+	color.a = 1.0;
+
+	color.rgb = pow(color.rgb, vec3(1.0/2.2));
+
+	frag_color = color;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..34bd8d445a0eb532d77e10ea45897715bc369c65
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightShinyV.glsl
@@ -0,0 +1,67 @@
+/**
+ * @file fullbrightShinyV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+uniform mat3 normal_matrix;
+uniform mat4 texture_matrix0;
+uniform mat4 texture_matrix1;
+uniform mat4 modelview_matrix;
+uniform mat4 modelview_projection_matrix;
+
+
+void calcAtmospherics(vec3 inPositionEye);
+
+uniform vec4 origin;
+
+
+
+ATTRIBUTE vec3 position;
+void passTextureIndex();
+ATTRIBUTE vec3 normal;
+ATTRIBUTE vec4 diffuse_color;
+ATTRIBUTE vec2 texcoord0;
+
+VARYING vec4 vertex_color;
+VARYING vec2 vary_texcoord0;
+VARYING vec3 vary_texcoord1;
+
+
+void main()
+{
+	//transform vertex
+	vec4 vert = vec4(position.xyz,1.0);
+	passTextureIndex();
+	vec4 pos = (modelview_matrix * vert);
+	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
+	
+	vec3 norm = normalize(normal_matrix * normal);
+	vec3 ref = reflect(pos.xyz, -norm);
+
+	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
+	vary_texcoord1 = (texture_matrix1*vec4(ref,1.0)).xyz;
+
+	calcAtmospherics(pos.xyz);
+
+	vertex_color = diffuse_color;
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
old mode 100644
new mode 100755
index 2e6982d101791c337bb96c3775a40cdd0912a821..3f09a153754d8c24333fed5465fb7ca6f17a880d
--- a/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/fullbrightV.glsl
@@ -57,8 +57,6 @@ void main()
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
 	
 	calcAtmospherics(pos.xyz);
-	
-	vertex_color = diffuse_color;
 
-	
+	vertex_color = diffuse_color;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl b/indra/newview/app_settings/shaders/class1/deferred/fxaaF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/giF.glsl b/indra/newview/app_settings/shaders/class1/deferred/giF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl b/indra/newview/app_settings/shaders/class1/deferred/impostorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl b/indra/newview/app_settings/shaders/class1/deferred/luminanceV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..618ea747f58c87d8b724b3da3593decb7222dd96
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialF.glsl
@@ -0,0 +1,696 @@
+/** 
+ * @file materialF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+ 
+#define DIFFUSE_ALPHA_MODE_IGNORE	0
+#define DIFFUSE_ALPHA_MODE_BLEND	1
+#define DIFFUSE_ALPHA_MODE_MASK		2
+#define DIFFUSE_ALPHA_MODE_EMISSIVE 3
+
+uniform float emissive_brightness;
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
+
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
+
+#if HAS_SUN_SHADOW
+
+uniform sampler2DShadow shadowMap0;
+uniform sampler2DShadow shadowMap1;
+uniform sampler2DShadow shadowMap2;
+uniform sampler2DShadow shadowMap3;
+
+uniform mat4 shadow_matrix[6];
+uniform vec4 shadow_clip;
+uniform vec2 shadow_res;
+uniform float shadow_bias;
+
+float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
+{
+	stc.xyz /= stc.w;
+	stc.z += shadow_bias;
+		
+	stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
+	
+	float cs = shadow2D(shadowMap, stc.xyz).x;
+	float shadow = cs;
+	
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
+    shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
+                       
+    return shadow*0.2;
+}
+
+#endif
+
+uniform samplerCube environmentMap;
+uniform sampler2D	  lightFunc;
+
+// Inputs
+uniform vec4 morphFactor;
+uniform vec3 camPosLocal;
+//uniform vec4 camPosWorld;
+uniform vec4 gamma;
+uniform vec4 lightnorm;
+uniform vec4 sunlight_color;
+uniform vec4 ambient;
+uniform vec4 blue_horizon;
+uniform vec4 blue_density;
+uniform float haze_horizon;
+uniform float haze_density;
+uniform float cloud_shadow;
+uniform float density_multiplier;
+uniform float distance_multiplier;
+uniform float max_y;
+uniform vec4 glow;
+uniform float scene_light_strength;
+uniform mat3 env_mat;
+uniform mat3 ssao_effect_mat;
+
+uniform vec3 sun_dir;
+VARYING vec2 vary_fragcoord;
+
+VARYING vec3 vary_position;
+
+vec3 vary_PositionEye;
+
+vec3 vary_SunlitColor;
+vec3 vary_AmblitColor;
+vec3 vary_AdditiveColor;
+vec3 vary_AtmosAttenuation;
+
+uniform mat4 inv_proj;
+uniform vec2 screen_res;
+
+uniform vec4 light_position[8];
+uniform vec3 light_direction[8];
+uniform vec3 light_attenuation[8]; 
+uniform vec3 light_diffuse[8];
+
+vec3 calcDirectionalLight(vec3 n, vec3 l)
+{
+	float a = max(dot(n,l),0.0);
+	return vec3(a,a,a);
+}
+
+
+vec3 calcPointLightOrSpotLight(vec3 light_col, vec3 npos, vec3 diffuse, vec4 spec, vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight, inout float glare)
+{
+	//get light vector
+	vec3 lv = lp.xyz-v;
+	
+	//get distance
+	float d = length(lv);
+	
+	float da = 1.0;
+
+	vec3 col = vec3(0,0,0);
+
+	if (d > 0.0 && la > 0.0 && fa > 0.0)
+	{
+		//normalize light vector
+		lv = normalize(lv);
+	
+		//distance attenuation
+		float dist = d/la;
+		float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
+		dist_atten *= dist_atten;
+		dist_atten *= 1.4;
+
+		// spotlight coefficient.
+		float spot = max(dot(-ln, lv), is_pointlight);
+		da *= spot*spot; // GL_SPOT_EXPONENT=2
+
+		//angular attenuation
+		da *= max(dot(n, lv), 0.0);		
+		
+		float lit = max(da * dist_atten, 0.0);
+
+		col = light_col*lit*diffuse;
+
+		if (spec.a > 0.0)
+		{
+			//vec3 ref = dot(pos+lv, norm);
+			vec3 h = normalize(lv+npos);
+			float nh = dot(n, h);
+			float nv = dot(n, npos);
+			float vh = dot(npos, h);
+			float sa = nh;
+			float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
+
+			float gtdenom = 2 * nh;
+			float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+								
+			if (nh > 0.0)
+			{
+				float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+				vec3 speccol = lit*scol*light_col.rgb*spec.rgb;
+				col += speccol;
+
+				float cur_glare = max(speccol.r, speccol.g);
+				cur_glare = max(cur_glare, speccol.b);
+				glare = max(glare, speccol.r);
+				glare += max(cur_glare, 0.0);
+				//col += spec.rgb;
+			}
+		}
+	}
+
+	return max(col, vec3(0.0,0.0,0.0));	
+
+}
+
+vec4 getPosition_d(vec2 pos_screen, float depth)
+{
+	vec2 sc = pos_screen.xy*2.0;
+	sc /= screen_res;
+	sc -= vec2(1.0,1.0);
+	vec4 ndc = vec4(sc.x, sc.y, 2.0*depth-1.0, 1.0);
+	vec4 pos = inv_proj * ndc;
+	pos /= pos.w;
+	pos.w = 1.0;
+	return pos;
+}
+
+vec3 getPositionEye()
+{
+	return vary_PositionEye;
+}
+vec3 getSunlitColor()
+{
+	return vary_SunlitColor;
+}
+vec3 getAmblitColor()
+{
+	return vary_AmblitColor;
+}
+vec3 getAdditiveColor()
+{
+	return vary_AdditiveColor;
+}
+vec3 getAtmosAttenuation()
+{
+	return vary_AtmosAttenuation;
+}
+
+void setPositionEye(vec3 v)
+{
+	vary_PositionEye = v;
+}
+
+void setSunlitColor(vec3 v)
+{
+	vary_SunlitColor = v;
+}
+
+void setAmblitColor(vec3 v)
+{
+	vary_AmblitColor = v;
+}
+
+void setAdditiveColor(vec3 v)
+{
+	vary_AdditiveColor = v;
+}
+
+void setAtmosAttenuation(vec3 v)
+{
+	vary_AtmosAttenuation = v;
+}
+
+void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
+
+	vec3 P = inPositionEye;
+	setPositionEye(P);
+	
+	vec3 tmpLightnorm = lightnorm.xyz;
+
+	vec3 Pn = normalize(P);
+	float Plen = length(P);
+
+	vec4 temp1 = vec4(0);
+	vec3 temp2 = vec3(0);
+	vec4 blue_weight;
+	vec4 haze_weight;
+	vec4 sunlight = sunlight_color;
+	vec4 light_atten;
+
+	//sunlight attenuation effect (hue and brightness) due to atmosphere
+	//this is used later for sunlight modulation at various altitudes
+	light_atten = (blue_density + vec4(haze_density * 0.25)) * (density_multiplier * max_y);
+		//I had thought blue_density and haze_density should have equal weighting,
+		//but attenuation due to haze_density tends to seem too strong
+
+	temp1 = blue_density + vec4(haze_density);
+	blue_weight = blue_density / temp1;
+	haze_weight = vec4(haze_density) / temp1;
+
+	//(TERRAIN) compute sunlight from lightnorm only (for short rays like terrain)
+	temp2.y = max(0.0, tmpLightnorm.y);
+	temp2.y = 1. / temp2.y;
+	sunlight *= exp( - light_atten * temp2.y);
+
+	// main atmospheric scattering line integral
+	temp2.z = Plen * density_multiplier;
+
+	// Transparency (-> temp1)
+	// ATI Bugfix -- can't store temp1*temp2.z*distance_multiplier in a variable because the ati
+	// compiler gets confused.
+	temp1 = exp(-temp1 * temp2.z * distance_multiplier);
+
+	//final atmosphere attenuation factor
+	setAtmosAttenuation(temp1.rgb);
+	
+	//compute haze glow
+	//(can use temp2.x as temp because we haven't used it yet)
+	temp2.x = dot(Pn, tmpLightnorm.xyz);
+	temp2.x = 1. - temp2.x;
+		//temp2.x is 0 at the sun and increases away from sun
+	temp2.x = max(temp2.x, .03);	//was glow.y
+		//set a minimum "angle" (smaller glow.y allows tighter, brighter hotspot)
+	temp2.x *= glow.x;
+		//higher glow.x gives dimmer glow (because next step is 1 / "angle")
+	temp2.x = pow(temp2.x, glow.z);
+		//glow.z should be negative, so we're doing a sort of (1 / "angle") function
+
+	//add "minimum anti-solar illumination"
+	temp2.x += .25;
+	
+	//increase ambient when there are more clouds
+	vec4 tmpAmbient = ambient + (vec4(1.) - ambient) * cloud_shadow * 0.5;
+	
+	/*  decrease value and saturation (that in HSV, not HSL) for occluded areas
+	 * // for HSV color/geometry used here, see http://gimp-savvy.com/BOOK/index.html?node52.html
+	 * // The following line of code performs the equivalent of:
+	 * float ambAlpha = tmpAmbient.a;
+	 * float ambValue = dot(vec3(tmpAmbient), vec3(0.577)); // projection onto <1/rt(3), 1/rt(3), 1/rt(3)>, the neutral white-black axis
+	 * vec3 ambHueSat = vec3(tmpAmbient) - vec3(ambValue);
+	 * tmpAmbient = vec4(RenderSSAOEffect.valueFactor * vec3(ambValue) + RenderSSAOEffect.saturationFactor *(1.0 - ambFactor) * ambHueSat, ambAlpha);
+	 */
+	tmpAmbient = vec4(mix(ssao_effect_mat * tmpAmbient.rgb, tmpAmbient.rgb, ambFactor), tmpAmbient.a);
+
+	//haze color
+	setAdditiveColor(
+		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient)
+	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x
+		  + tmpAmbient)));
+
+	//brightness of surface both sunlight and ambient
+	setSunlitColor(vec3(sunlight * .5));
+	setAmblitColor(vec3(tmpAmbient * .25));
+	setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
+}
+
+vec3 atmosLighting(vec3 light)
+{
+	light *= getAtmosAttenuation().r;
+	light += getAdditiveColor();
+	return (2.0 * light);
+}
+
+vec3 atmosTransport(vec3 light) {
+	light *= getAtmosAttenuation().r;
+	light += getAdditiveColor() * 2.0;
+	return light;
+}
+vec3 atmosGetDiffuseSunlightColor()
+{
+	return getSunlitColor();
+}
+
+vec3 scaleDownLight(vec3 light)
+{
+	return (light / vec3(scene_light_strength, scene_light_strength, scene_light_strength));
+}
+
+vec3 scaleUpLight(vec3 light)
+{
+	return (light * vec3(scene_light_strength, scene_light_strength, scene_light_strength));
+}
+
+vec3 atmosAmbient(vec3 light)
+{
+	return getAmblitColor() + (light * vec3(0.5f, 0.5f, 0.5f));
+}
+
+vec3 atmosAffectDirectionalLight(float lightIntensity)
+{
+	return getSunlitColor() * vec3(lightIntensity, lightIntensity, lightIntensity);
+}
+
+vec3 scaleSoftClip(vec3 light)
+{
+	//soft clip effect:
+    vec3 zeroes = vec3(0.0f, 0.0f, 0.0f);
+    vec3 ones   = vec3(1.0f, 1.0f, 1.0f);
+
+	light = ones - clamp(light, zeroes, ones);
+	light = ones - pow(light, gamma.xxx);
+
+	return light;
+}
+
+vec3 fullbrightAtmosTransport(vec3 light) {
+	float brightness = dot(light.rgb, vec3(0.33333));
+
+	return mix(atmosTransport(light.rgb), light.rgb + getAdditiveColor().rgb, brightness * brightness);
+}
+
+vec3 fullbrightScaleSoftClip(vec3 light)
+{
+	//soft clip effect:
+	return light;
+}
+
+#else
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_data[3];
+#else
+#define frag_data gl_FragData
+#endif
+#endif
+
+uniform sampler2D diffuseMap;
+
+#if HAS_NORMAL_MAP
+uniform sampler2D bumpMap;
+#endif
+
+#if HAS_SPECULAR_MAP
+uniform sampler2D specularMap;
+
+VARYING vec2 vary_texcoord2;
+#endif
+
+uniform float env_intensity;
+uniform vec4 specular_color;  // specular color RGB and specular exponent (glossiness) in alpha
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_MASK)
+uniform float minimum_alpha;
+#endif
+
+#if HAS_NORMAL_MAP
+VARYING vec3 vary_mat0;
+VARYING vec3 vary_mat1;
+VARYING vec3 vary_mat2;
+VARYING vec2 vary_texcoord1;
+#else
+VARYING vec3 vary_normal;
+#endif
+
+VARYING vec4 vertex_color;
+VARYING vec2 vary_texcoord0;
+
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
+void main() 
+{
+	vec4 diffcol = texture2D(diffuseMap, vary_texcoord0.xy);
+	diffcol.rgb *= vertex_color.rgb;
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_MASK)
+	if (diffcol.a < minimum_alpha)
+	{
+		discard;
+	}
+#endif
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
+	vec3 old_diffcol = diffcol.rgb;
+	diffcol.rgb = pow(diffcol.rgb, vec3(2.2));
+#endif
+
+#if HAS_SPECULAR_MAP
+	vec4 spec = texture2D(specularMap, vary_texcoord2.xy);
+	spec.rgb *= specular_color.rgb;
+#else
+	vec4 spec = vec4(specular_color.rgb, 1.0);
+#endif
+
+#if HAS_NORMAL_MAP
+	vec4 norm = texture2D(bumpMap, vary_texcoord1.xy);
+
+	norm.xyz = norm.xyz * 2 - 1;
+
+	vec3 tnorm = vec3(dot(norm.xyz,vary_mat0),
+			  dot(norm.xyz,vary_mat1),
+			  dot(norm.xyz,vary_mat2));
+#else
+	vec4 norm = vec4(0,0,0,1.0);
+	vec3 tnorm = vary_normal;
+#endif
+
+    norm.xyz = tnorm;
+    norm.xyz = normalize(norm.xyz);
+
+	vec4 final_color = diffcol;
+	
+#if (DIFFUSE_ALPHA_MODE != DIFFUSE_ALPHA_MODE_EMISSIVE)
+	final_color.a = emissive_brightness;
+#else
+	final_color.a = max(final_color.a, emissive_brightness);
+#endif
+
+	vec4 final_specular = spec;
+#if HAS_SPECULAR_MAP
+	vec4 final_normal = vec4(encode_normal(normalize(tnorm)), env_intensity * spec.a, 0.0);
+	final_specular.a = specular_color.a * norm.a;
+#else
+	vec4 final_normal = vec4(encode_normal(normalize(tnorm)), env_intensity, 0.0);
+	final_specular.a = specular_color.a;
+#endif
+	
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
+		//forward rendering, output just lit RGBA
+	vec3 pos = vary_position;
+
+#if HAS_SUN_SHADOW
+	float shadow = 0.0;
+	
+	vec4 spos = vec4(pos,1.0);
+		
+	if (spos.z > -shadow_clip.w)
+	{	
+		vec4 lpos;
+		
+		vec4 near_split = shadow_clip*-0.75;
+		vec4 far_split = shadow_clip*-1.25;
+		vec4 transition_domain = near_split-far_split;
+		float weight = 0.0;
+
+		if (spos.z < near_split.z)
+		{
+			lpos = shadow_matrix[3]*spos;
+			
+			float w = 1.0;
+			w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
+			shadow += pcfShadow(shadowMap3, lpos)*w;
+			weight += w;
+			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
+		}
+
+		if (spos.z < near_split.y && spos.z > far_split.z)
+		{
+			lpos = shadow_matrix[2]*spos;
+			
+			float w = 1.0;
+			w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
+			w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
+			shadow += pcfShadow(shadowMap2, lpos)*w;
+			weight += w;
+		}
+
+		if (spos.z < near_split.x && spos.z > far_split.y)
+		{
+			lpos = shadow_matrix[1]*spos;
+			
+			float w = 1.0;
+			w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
+			w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
+			shadow += pcfShadow(shadowMap1, lpos)*w;
+			weight += w;
+		}
+
+		if (spos.z > far_split.x)
+		{
+			lpos = shadow_matrix[0]*spos;
+							
+			float w = 1.0;
+			w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
+				
+			shadow += pcfShadow(shadowMap0, lpos)*w;
+			weight += w;
+		}
+		
+
+		shadow /= weight;
+	}
+	else
+	{
+		shadow = 1.0;
+	}
+#else
+	float shadow = 1.0;
+#endif
+
+	spec = final_specular;
+	vec4 diffuse = final_color;
+	float envIntensity = final_normal.z;
+
+    vec3 col = vec3(0.0f,0.0f,0.0f);
+
+	float bloom = 0.0;
+	calcAtmospherics(pos.xyz, 1.0);
+	
+	vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+
+	float da =dot(norm.xyz, sun_dir.xyz);
+    float final_da = da;
+          final_da = min(final_da, shadow);
+          final_da = max(final_da, diffuse.a);
+          final_da = max(final_da, 0.0f);
+
+	col.rgb = atmosAmbient(col);
+	
+	float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
+	ambient *= 0.5;
+	ambient *= ambient;
+	ambient = (1.0-ambient);
+
+	col.rgb *= ambient;
+
+	col.rgb = col.rgb + atmosAffectDirectionalLight(pow(final_da, 1.0/1.3));
+	col.rgb *= old_diffcol.rgb;
+	
+
+	float glare = 0.0;
+
+	if (spec.a > 0.0) // specular reflection
+	{
+		// the old infinite-sky shiny reflection
+		//
+				
+		float sa = dot(refnormpersp, sun_dir.xyz);
+		vec3 dumbshiny = vary_SunlitColor*shadow*(texture2D(lightFunc, vec2(sa, spec.a)).r);
+							
+		// add the two types of shiny together
+		vec3 spec_contrib = dumbshiny * spec.rgb;
+		bloom = dot(spec_contrib, spec_contrib) / 6;
+
+		glare = max(spec_contrib.r, spec_contrib.g);
+		glare = max(glare, spec_contrib.b);
+
+		col += spec_contrib;
+	}
+
+	col = mix(col.rgb, old_diffcol.rgb, diffuse.a);
+
+	if (envIntensity > 0.0)
+	{
+		//add environmentmap
+		vec3 env_vec = env_mat * refnormpersp;
+		
+		vec3 refcol = textureCube(environmentMap, env_vec).rgb;
+
+		col = mix(col.rgb, refcol, 
+			envIntensity);  
+
+		float cur_glare = max(refcol.r, refcol.g);
+		cur_glare = max(cur_glare, refcol.b);
+		cur_glare *= envIntensity*4.0;
+		glare += cur_glare;
+	}
+
+	col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
+	col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
+
+	//convert to linear space before adding local lights
+	col = pow(col, vec3(2.2));
+
+			
+	vec3 npos = normalize(-pos.xyz);
+
+ #define LIGHT_LOOP(i) col.rgb = col.rgb + calcPointLightOrSpotLight(light_diffuse[i].rgb, npos, diffuse.rgb, final_specular, pos.xyz, norm.xyz, light_position[i], light_direction[i].xyz, light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z, glare);
+
+		LIGHT_LOOP(1)
+		LIGHT_LOOP(2)
+		LIGHT_LOOP(3)
+		LIGHT_LOOP(4)
+		LIGHT_LOOP(5)
+		LIGHT_LOOP(6)
+		LIGHT_LOOP(7)
+
+
+	//convert to gamma space for display on screen
+	col.rgb = pow(col.rgb, vec3(1.0/2.2));
+
+	frag_color.rgb = col.rgb;
+	glare = min(glare, 1.0);
+	frag_color.a = max(diffcol.a,glare)*vertex_color.a;
+
+#else
+	frag_data[0] = final_color;
+	frag_data[1] = final_specular; // XYZ = Specular color. W = Specular exponent.
+	frag_data[2] = final_normal; // XY = Normal.  Z = Env. intensity.
+#endif
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..b25032866ba5b7d8a63832a18647f1a9502e36cb
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/materialV.glsl
@@ -0,0 +1,144 @@
+/** 
+ * @file bumpV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#define DIFFUSE_ALPHA_MODE_IGNORE 0
+#define DIFFUSE_ALPHA_MODE_BLEND 1
+#define DIFFUSE_ALPHA_MODE_MASK 2
+#define DIFFUSE_ALPHA_MODE_EMISSIVE 3
+
+#if HAS_SKIN
+uniform mat4 modelview_matrix;
+uniform mat4 projection_matrix;
+mat4 getObjectSkinnedTransform();
+#else
+uniform mat3 normal_matrix;
+uniform mat4 modelview_projection_matrix;
+#endif
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
+
+#if !HAS_SKIN
+uniform mat4 modelview_matrix;
+#endif
+
+VARYING vec3 vary_position;
+
+#endif
+
+uniform mat4 texture_matrix0;
+
+ATTRIBUTE vec3 position;
+ATTRIBUTE vec4 diffuse_color;
+ATTRIBUTE vec3 normal;
+ATTRIBUTE vec2 texcoord0;
+
+
+#if HAS_NORMAL_MAP
+ATTRIBUTE vec4 tangent;
+ATTRIBUTE vec2 texcoord1;
+
+VARYING vec3 vary_mat0;
+VARYING vec3 vary_mat1;
+VARYING vec3 vary_mat2;
+
+VARYING vec2 vary_texcoord1;
+#else
+VARYING vec3 vary_normal;
+#endif
+
+#if HAS_SPECULAR_MAP
+ATTRIBUTE vec2 texcoord2;
+VARYING vec2 vary_texcoord2;
+#endif
+ 
+VARYING vec4 vertex_color;
+VARYING vec2 vary_texcoord0;
+
+void main()
+{
+#if HAS_SKIN
+	mat4 mat = getObjectSkinnedTransform();
+
+	mat = modelview_matrix * mat;
+
+	vec3 pos = (mat*vec4(position.xyz,1.0)).xyz;
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
+	vary_position = pos;
+#endif
+
+	gl_Position = projection_matrix*vec4(pos,1.0);
+
+#else
+	//transform vertex
+	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0); 
+
+#endif
+	
+	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
+	
+#if HAS_NORMAL_MAP
+	vary_texcoord1 = (texture_matrix0 * vec4(texcoord1,0,1)).xy;
+#endif
+
+#if HAS_SPECULAR_MAP
+	vary_texcoord2 = (texture_matrix0 * vec4(texcoord2,0,1)).xy;
+#endif
+
+#if HAS_SKIN
+	vec3 n = normalize((mat*vec4(normal.xyz+position.xyz,1.0)).xyz-pos.xyz);
+#if HAS_NORMAL_MAP
+	vec3 t = normalize((mat*vec4(tangent.xyz+position.xyz,1.0)).xyz-pos.xyz);
+	vec3 b = cross(n, t)*tangent.w;
+	
+	vary_mat0 = vec3(t.x, b.x, n.x);
+	vary_mat1 = vec3(t.y, b.y, n.y);
+	vary_mat2 = vec3(t.z, b.z, n.z);
+#else //HAS_NORMAL_MAP
+vary_normal  = n;
+#endif //HAS_NORMAL_MAP
+#else //HAS_SKIN
+	vec3 n = normalize(normal_matrix * normal);
+#if HAS_NORMAL_MAP
+	vec3 t = normalize(normal_matrix * tangent.xyz);
+	vec3 b = cross(n,t)*tangent.w;
+	//vec3 t = cross(b,n) * binormal.w;
+	
+	vary_mat0 = vec3(t.x, b.x, n.x);
+	vary_mat1 = vec3(t.y, b.y, n.y);
+	vary_mat2 = vec3(t.z, b.z, n.z);
+#else //HAS_NORMAL_MAP
+	vary_normal = n;
+#endif //HAS_NORMAL_MAP
+#endif //HAS_SKIN
+	
+	vertex_color = diffuse_color;
+
+#if (DIFFUSE_ALPHA_MODE == DIFFUSE_ALPHA_MODE_BLEND)
+#if !HAS_SKIN
+	vary_position = (modelview_matrix*vec4(position.xyz, 1.0)).xyz;
+#endif
+#endif
+}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
old mode 100644
new mode 100755
index 7e79317543f4f7441049e57037bfbbb126306640..868526d457eb61e9b22106aec75525ed58b115d5
--- a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightF.glsl
@@ -56,6 +56,40 @@ uniform float far_z;
 
 uniform mat4 inv_proj;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -79,7 +113,7 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	norm = decode_normal(norm.xy); // unpack norm
 	norm = normalize(norm);
 	vec4 spec = texture2DRect(specularRect, frag.xy);
 	vec3 diff = texture2DRect(diffuseRect, frag.xy).rgb;
@@ -93,9 +127,9 @@ void main()
 		bool light_contrib = (i < light_count);
 		
 		vec3 lv = light[i].xyz-pos;
-		float dist2 = dot(lv,lv);
-		dist2 /= light[i].w;
-		if (dist2 > 1.0)
+		float dist = length(lv);
+		dist /= light[i].w;
+		if (dist > 1.0)
 		{
 			light_contrib = false;
 		}
@@ -110,27 +144,39 @@ void main()
 		{
 			lv = normalize(lv);
 			da = dot(norm, lv);
-					
+			
 			float fa = light_col[i].a+1.0;
-			float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
+			float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
+			dist_atten *= dist_atten;
+			dist_atten *= 2.0;
+			
 			dist_atten *= noise;
 
 			float lit = da * dist_atten;
-			
+						
 			vec3 col = light_col[i].rgb*lit*diff;
+			
 			//vec3 col = vec3(dist2, light_col[i].a, lit);
 			
 			if (spec.a > 0.0)
 			{
+				lit = min(da*6.0, 1.0) * dist_atten;
 				//vec3 ref = dot(pos+lv, norm);
-				
-				float sa = dot(normalize(lv+npos),norm);
-				
-				if (sa > 0.0)
+				vec3 h = normalize(lv+npos);
+				float nh = dot(norm, h);
+				float nv = dot(norm, npos);
+				float vh = dot(npos, h);
+				float sa = nh;
+				float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
+
+				float gtdenom = 2 * nh;
+				float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+								
+				if (nh > 0.0)
 				{
-					sa = 6 * texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
-					sa *= noise;
-					col += da*sa*light_col[i].rgb*spec.rgb;
+					float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+					col += lit*scol*light_col[i].rgb*spec.rgb;
+					//col += spec.rgb;
 				}
 			}
 			
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiPointLightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
old mode 100644
new mode 100755
index bff87cb6aac7499a1ae030a8b6fac365c9ee19e2..97bf49a605b0e5346cdca1736a275d0d4a3113ec
--- a/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/multiSpotLightF.glsl
@@ -40,6 +40,7 @@ uniform sampler2DRect normalMap;
 uniform samplerCube environmentMap;
 uniform sampler2D noiseMap;
 uniform sampler2D projectionMap;
+uniform sampler2D lightFunc;
 
 uniform mat4 proj_mat; //screen space to light space
 uniform float proj_near; //near clip for projection
@@ -66,9 +67,49 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
+vec4 correctWithGamma(vec4 col)
+{
+	return vec4(pow(col.rgb, vec3(2.2)), col.a);
+}
+
 vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = tc-vec2(0.5);
 	
@@ -84,6 +125,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
 	
@@ -101,6 +143,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = tc-vec2(0.5);
 	
@@ -134,15 +177,17 @@ void main()
 	
 	vec3 pos = getPosition(frag.xy).xyz;
 	vec3 lv = center.xyz-pos.xyz;
-	float dist2 = dot(lv,lv);
-	dist2 /= size;
-	if (dist2 > 1.0)
+	float dist = length(lv);
+	dist /= size;
+	if (dist > 1.0)
 	{
 		discard;
 	}
 		
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = vec3((norm.xy-0.5)*2.0, norm.z);
+	float envIntensity = norm.z;
+
+	norm = decode_normal(norm.xy);
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -156,7 +201,10 @@ void main()
 	proj_tc.xyz /= proj_tc.w;
 	
 	float fa = falloff+1.0;
-	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
+	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
+	dist_atten *= dist_atten;
+	dist_atten *= 2.0;
+
 	if (dist_atten <= 0.0)
 	{
 		discard;
@@ -169,7 +217,8 @@ void main()
 	vec3 col = vec3(0,0,0);
 		
 	vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
-		
+	vec3 dlit = vec3(0, 0, 0);
+	
 	float noise = texture2D(noiseMap, frag.xy/128.0).b;
 	if (proj_tc.z > 0.0 &&
 		proj_tc.x < 1.0 &&
@@ -187,14 +236,13 @@ void main()
 			
 			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod);
 		
-			vec3 lcol = color.rgb * plcol.rgb * plcol.a;
+			dlit = color.rgb * plcol.rgb * plcol.a;
 			
 			lit = da * dist_atten * noise;
 			
-			col = lcol*lit*diff_tex;
+			col = dlit*lit*diff_tex;
 			amb_da += (da*0.5)*proj_ambiance;
 		}
-		
 		//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
 		vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod);
 							
@@ -203,13 +251,38 @@ void main()
 		amb_da *= dist_atten * noise;
 			
 		amb_da = min(amb_da, 1.0-lit);
-			
-		col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
+		col += amb_da*color.rgb*diff_tex*amb_plcol.rgb*amb_plcol.a;
 	}
 	
 	
 	vec4 spec = texture2DRect(specularRect, frag.xy);
+	
 	if (spec.a > 0.0)
+	{
+		dlit *= min(da*6.0, 1.0) * dist_atten;
+
+		vec3 npos = -normalize(pos);
+
+		//vec3 ref = dot(pos+lv, norm);
+		vec3 h = normalize(lv+npos);
+		float nh = dot(norm, h);
+		float nv = dot(norm, npos);
+		float vh = dot(npos, h);
+		float sa = nh;
+		float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
+
+		float gtdenom = 2 * nh;
+		float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+
+		if (nh > 0.0)
+		{
+			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+			col += dlit*scol*spec.rgb;
+			//col += spec.rgb;
+		}
+	}	
+
+	if (envIntensity > 0.0)
 	{
 		vec3 ref = reflect(normalize(pos), norm);
 		
@@ -227,8 +300,9 @@ void main()
 			{
 				stc.xy /= stc.w;
 
-				float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0);
+				float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0);
 				
+				//stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 								
 				if (stc.x < 1.0 &&
@@ -236,8 +310,7 @@ void main()
 					stc.x > 0.0 &&
 					stc.y > 0.0)
 				{
-					vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
-					col += dist_atten*scol.rgb*color.rgb*scol.a*spec.rgb;
+					col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*spec.rgb;										
 				}
 			}
 		}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl b/indra/newview/app_settings/shaders/class1/deferred/normgenF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/normgenV.glsl b/indra/newview/app_settings/shaders/class1/deferred/normgenV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
old mode 100644
new mode 100755
index 75757b26c83f36af3f135b22962948974fde3095..caf20ce707e6b45f5d01f1a1c034e6d3308be014
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightF.glsl
@@ -54,6 +54,40 @@ uniform vec2 screen_res;
 uniform mat4 inv_proj;
 uniform vec4 viewport;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -76,15 +110,15 @@ void main()
 	
 	vec3 pos = getPosition(frag.xy).xyz;
 	vec3 lv = trans_center.xyz-pos;
-	float dist2 = dot(lv,lv);
-	dist2 /= size;
-	if (dist2 > 1.0)
+	float dist = length(lv);
+	dist /= size;
+	if (dist > 1.0)
 	{
 		discard;
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	norm = decode_normal(norm.xy); // unpack norm
 	float da = dot(norm, lv);
 	if (da < 0.0)
 	{
@@ -99,20 +133,33 @@ void main()
 	
 	vec3 col = texture2DRect(diffuseRect, frag.xy).rgb;
 	float fa = falloff+1.0;
-	float dist_atten = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
-	float lit = da * dist_atten * noise;
+	float dist_atten = clamp(1.0-(dist-1.0*(1.0-fa))/fa, 0.0, 1.0);
+	dist_atten *= dist_atten;
+	dist_atten *= 2.0;
 	
+	float lit = da * dist_atten * noise;
+
 	col = color.rgb*lit*col;
 
 	vec4 spec = texture2DRect(specularRect, frag.xy);
 	if (spec.a > 0.0)
 	{
-		float sa = dot(normalize(lv-normalize(pos)),norm);
-		if (sa > 0.0)
+		lit = min(da*6.0, 1.0) * dist_atten;
+
+		vec3 npos = -normalize(pos);
+		vec3 h = normalize(lv+npos);
+		float nh = dot(norm, h);
+		float nv = dot(norm, npos);
+		float vh = dot(npos, h);
+		float sa = nh;
+		float fres = pow(1 - dot(h, npos), 5) * 0.4+0.5;
+		float gtdenom = 2 * nh;
+		float gt = max(0,(min(gtdenom * nv / vh, gtdenom * da / vh)));
+
+		if (nh > 0.0)
 		{
-			sa = 6 * texture2D(lightFunc, vec2(sa, spec.a)).r * min(dist_atten*4.0, 1.0);
-			sa *= noise;
-			col += da*sa*color.rgb*spec.rgb;
+			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+			col += lit*scol*color.rgb*spec.rgb;
 		}
 	}
 	
diff --git a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl
old mode 100644
new mode 100755
index 9491421236d49d0ad05f8220274498c75809a54e..a5625fbc16e1f567a41ff5f806ab187481a039ee
--- a/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/pointLightV.glsl
@@ -37,7 +37,7 @@ VARYING vec3 trans_center;
 void main()
 {
 	//transform vertex
-	vec3 p = position*sqrt(size)+center;
+	vec3 p = position*size+center;
 	vec4 pos = modelview_projection_matrix * vec4(p.xyz, 1.0);
 	vary_fragcoord = pos;
 	trans_center = (modelview_matrix*vec4(center.xyz, 1.0)).xyz;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..6f2cfae6d2381e416712c2564ab96125dbf0edc8
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/deferred/postDeferredGammaCorrect.glsl
@@ -0,0 +1,46 @@
+/** 
+ * @file postDeferredGammaCorrect.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+ 
+#extension GL_ARB_texture_rectangle : enable
+
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
+
+uniform sampler2DRect diffuseRect;
+
+uniform vec2 screen_res;
+VARYING vec2 vary_fragcoord;
+
+uniform float texture_gamma;
+
+void main() 
+{
+	vec4 diff = texture2DRect(diffuseRect, vary_fragcoord);
+	frag_color = pow(diff, vec4(texture_gamma, texture_gamma, texture_gamma, 1.0f));
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoDoFF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredNoTCV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl b/indra/newview/app_settings/shaders/class1/deferred/postDeferredV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl b/indra/newview/app_settings/shaders/class1/deferred/postgiF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
old mode 100644
new mode 100755
index bced4a557774cc6cc9037e43ea7097f0cba3a7a1..91a96977f06c15dd306fdf64d8360b7bae9c4e70
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskF.glsl
@@ -31,8 +31,12 @@ out vec4 frag_color;
 
 uniform sampler2D diffuseMap;
 
+#if !DEPTH_CLAMP
 VARYING float pos_zd2;
+#endif
+
 VARYING float pos_w;
+
 VARYING float target_pos_x;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
@@ -56,5 +60,7 @@ void main()
 
 	frag_color = vec4(1,1,1,1);
 	
+#if !DEPTH_CLAMP
 	gl_FragDepth = max(pos_zd2/pos_w+0.5, 0.0);
+#endif
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
old mode 100644
new mode 100755
index c1f2d90712c42b0ba81a40b23a759b0122672ccb..11411a605c69d04774360a525579aae4d5e449a6
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowAlphaMaskV.glsl
@@ -31,8 +31,12 @@ ATTRIBUTE vec3 position;
 ATTRIBUTE vec4 diffuse_color;
 ATTRIBUTE vec2 texcoord0;
 
+#if !DEPTH_CLAMP
 VARYING float pos_zd2;
+#endif
+
 VARYING float pos_w;
+
 VARYING float target_pos_x;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
@@ -45,10 +49,16 @@ void main()
 	vec4 pre_pos = vec4(position.xyz, 1.0);
 	vec4 pos = modelview_projection_matrix * pre_pos;
 	target_pos_x = 0.5 * (shadow_target_width - 1.0) * pos.x;
+
 	pos_w = pos.w;
+
+#if !DEPTH_CLAMP
 	pos_zd2 = pos.z * 0.5;
 	
 	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
+#else
+	gl_Position = pos;
+#endif
 	
 	passTextureIndex();
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl
old mode 100644
new mode 100755
index 6195e2f1ecb30ff4d115595edae972e96f673184..ef153dfc5be3d3cb92838d8efdd1c72ea1d9ba47
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowCubeV.glsl
@@ -27,7 +27,9 @@ uniform mat4 modelview_projection_matrix;
 
 ATTRIBUTE vec3 position;
 
+#if !DEPTH_CLAMP
 VARYING vec4 post_pos;
+#endif
 
 uniform vec3 box_center;
 uniform vec3 box_size;
@@ -37,8 +39,12 @@ void main()
 	//transform vertex
 	vec3 p = position*box_size+box_center;
 	vec4 pos = modelview_projection_matrix*vec4(p.xyz, 1.0);
-	
+
+#if !DEPTH_CLAMP
 	post_pos = pos;
-	
+
 	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
+#else
+	gl_Position = pos;
+#endif
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
old mode 100644
new mode 100755
index 7e55fdc12a4bf5f943c3b6c930298e3647a4ed17..3d1b1828755a2a5e54723efa9c6f32f078e415d1
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowF.glsl
@@ -29,11 +29,16 @@ out vec4 frag_color;
 #define frag_color gl_FragColor
 #endif
 
+#if !DEPTH_CLAMP
 VARYING vec4 post_pos;
+#endif
 
 void main() 
 {
 	frag_color = vec4(1,1,1,1);
 	
+#if !DEPTH_CLAMP
 	gl_FragDepth = max(post_pos.z/post_pos.w*0.5+0.5, 0.0);
+#endif
+
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
old mode 100644
new mode 100755
index 8b46e81f90c03a12ed5d3b4ade3cf217c920d5db..cc77a4cea059729e64d2c67cefc9cb5032c8cb48
--- a/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/shadowV.glsl
@@ -27,14 +27,20 @@ uniform mat4 modelview_projection_matrix;
 
 ATTRIBUTE vec3 position;
 
+#if !DEPTH_CLAMP
 VARYING vec4 post_pos;
+#endif
 
 void main()
 {
 	//transform vertex
 	vec4 pos = modelview_projection_matrix*vec4(position.xyz, 1.0);
 	
+#if !DEPTH_CLAMP
 	post_pos = pos;
-	
+
 	gl_Position = vec4(pos.x, pos.y, pos.w*0.5, pos.w);
+#else
+	gl_Position = pos;
+#endif
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
old mode 100644
new mode 100755
index faa54a316e8663b2baa59d5ad8185e5a948fa800..22f4729e2e3f8a8e7f9af025e5ce65f72a20d4f9
--- a/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/skyF.glsl
@@ -61,6 +61,6 @@ void main()
 	/// Gamma correct for WL (soft clip effect).
 	frag_data[0] = vec4(scaleSoftClip(color.rgb), 1.0);
 	frag_data[1] = vec4(0.0,0.0,0.0,0.0);
-	frag_data[2] = vec4(0,0,1,0);
+	frag_data[2] = vec4(0.5,0.5,0.0,1.0); //1.0 in norm.w masks off fog
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl b/indra/newview/app_settings/shaders/class1/deferred/skyV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
old mode 100644
new mode 100755
index 89448e2167a2dddf414aa7f6baff508775f5dc80..08583ad0f2f7804c7fbf943288381fb7f925efdb
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightF.glsl
@@ -60,6 +60,7 @@ uniform float density_multiplier;
 uniform float distance_multiplier;
 uniform float max_y;
 uniform vec4 glow;
+uniform float global_gamma;
 uniform float scene_light_strength;
 uniform mat3 env_mat;
 uniform mat3 ssao_effect_mat;
@@ -77,6 +78,34 @@ vec3 vary_AtmosAttenuation;
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition_d(vec2 pos_screen, float depth)
 {
 	vec2 sc = pos_screen.xy*2.0;
@@ -116,7 +145,6 @@ vec3 getAtmosAttenuation()
 	return vary_AtmosAttenuation;
 }
 
-
 void setPositionEye(vec3 v)
 {
 	vary_PositionEye = v;
@@ -237,6 +265,15 @@ vec3 atmosTransport(vec3 light) {
 	light += getAdditiveColor() * 2.0;
 	return light;
 }
+
+vec3 fullbrightAtmosTransport(vec3 light) {
+	float brightness = dot(light.rgb, vec3(0.33333));
+
+	return mix(atmosTransport(light.rgb), light.rgb + getAdditiveColor().rgb, brightness * brightness);
+}
+
+
+
 vec3 atmosGetDiffuseSunlightColor()
 {
 	return getSunlitColor();
@@ -271,57 +308,88 @@ vec3 scaleSoftClip(vec3 light)
 	return light;
 }
 
+
+vec3 fullbrightScaleSoftClip(vec3 light)
+{
+	//soft clip effect:
+	return light;
+}
+
 void main() 
 {
 	vec2 tc = vary_fragcoord.xy;
 	float depth = texture2DRect(depthMap, tc.xy).r;
 	vec3 pos = getPosition_d(tc, depth).xyz;
-	vec3 norm = texture2DRect(normalMap, tc).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	vec4 norm = texture2DRect(normalMap, tc);
+	float envIntensity = norm.z;
+	norm.xyz = decode_normal(norm.xy); // unpack norm
 		
 	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
-	
+	da = pow(da, 1.0/1.3);
+
 	vec4 diffuse = texture2DRect(diffuseRect, tc);
+
+	//convert to gamma space
+	diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
+
 	vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
-	
 	vec3 col;
 	float bloom = 0.0;
-	if (diffuse.a < 0.9)
 	{
 		calcAtmospherics(pos.xyz, 1.0);
 	
 		col = atmosAmbient(vec3(0));
-		col += atmosAffectDirectionalLight(max(min(da, 1.0), diffuse.a));
+		float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
+		ambient *= 0.5;
+		ambient *= ambient;
+		ambient = (1.0-ambient);
+
+		col.rgb *= ambient;
+
+		col += atmosAffectDirectionalLight(max(min(da, 1.0), 0.0));
 	
 		col *= diffuse.rgb;
 	
+		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+
 		if (spec.a > 0.0) // specular reflection
 		{
 			// the old infinite-sky shiny reflection
 			//
-			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+			
 			float sa = dot(refnormpersp, sun_dir.xyz);
-			vec3 dumbshiny = vary_SunlitColor*(6 * texture2D(lightFunc, vec2(sa, spec.a)).r);
+			vec3 dumbshiny = vary_SunlitColor*(texture2D(lightFunc, vec2(sa, spec.a)).r);
 			
 			// add the two types of shiny together
 			vec3 spec_contrib = dumbshiny * spec.rgb;
-			bloom = dot(spec_contrib, spec_contrib) / 4;
+			bloom = dot(spec_contrib, spec_contrib) / 6;
 			col += spec_contrib;
-
-			//add environmentmap
+		}
+		
+		
+		col = mix(col.rgb, diffuse.rgb, diffuse.a);
+				
+		if (envIntensity > 0.0)
+		{ //add environmentmap
 			vec3 env_vec = env_mat * refnormpersp;
-			col = mix(col.rgb, textureCube(environmentMap, env_vec).rgb, 
-				max(spec.a-diffuse.a*2.0, 0.0)); 
+			
+			
+			vec3 refcol = textureCube(environmentMap, env_vec).rgb;
+
+			col = mix(col.rgb, refcol, 
+				envIntensity);  
+		}
+				
+		if (norm.w < 0.5)
+		{
+			col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
+			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
 		}
-	
-		col = atmosLighting(col);
-		col = scaleSoftClip(col);
 
-		col = mix(col.rgb, diffuse.rgb, diffuse.a);
-	}
-	else
-	{
-		col = diffuse.rgb;
+		col = pow(col, vec3(2.2));
+
+		//col = vec3(1,0,1);
+		//col.g = envIntensity;
 	}
 
 	frag_color.rgb = col;
diff --git a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl
old mode 100644
new mode 100755
index c6031fc45a28a184822ff9d1118a2443e8ec76e6..b59fcbe0176e32582efff8bff94401a82b74b98e
--- a/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/softenLightV.glsl
@@ -35,6 +35,6 @@ void main()
 	//transform vertex
 	vec4 pos = modelview_projection_matrix * vec4(position.xyz, 1.0);
 	gl_Position = pos; 
-		
+	
 	vary_fragcoord = (pos.xy*0.5+0.5)*screen_res;
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
old mode 100644
new mode 100755
index cca63872de2142faa13bce99ad2b4e703e1a73bc..1975b18652d29a6c92576b4ceb189e7fc63c33a0
--- a/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/spotLightF.glsl
@@ -22,18 +22,15 @@
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
-
  
+#extension GL_ARB_texture_rectangle : enable
+
 #ifdef DEFINE_GL_FRAGCOLOR
 out vec4 frag_color;
 #else
 #define frag_color gl_FragColor
 #endif
 
-//class 1 -- no shadows
-
-#extension GL_ARB_texture_rectangle : enable
-
 uniform sampler2DRect diffuseRect;
 uniform sampler2DRect specularRect;
 uniform sampler2DRect depthMap;
@@ -41,6 +38,7 @@ uniform sampler2DRect normalMap;
 uniform samplerCube environmentMap;
 uniform sampler2D noiseMap;
 uniform sampler2D projectionMap;
+uniform sampler2D lightFunc;
 
 uniform mat4 proj_mat; //screen space to light space
 uniform float proj_near; //near clip for projection
@@ -57,20 +55,59 @@ uniform float far_clip;
 uniform vec3 proj_origin; //origin of projection to be used for angular attenuation
 uniform float sun_wash;
 
+uniform float size;
 uniform vec3 color;
 uniform float falloff;
-uniform float size;
 
-VARYING vec4 vary_fragcoord;
 VARYING vec3 trans_center;
-
+VARYING vec4 vary_fragcoord;
 uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
+vec4 correctWithGamma(vec4 col)
+{
+	return vec4(pow(col.rgb, vec3(2.2)), col.a);
+}
+
 vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = tc-vec2(0.5);
 	
@@ -86,6 +123,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
 	
@@ -103,6 +141,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = tc-vec2(0.5);
 	
@@ -136,15 +175,17 @@ void main()
 	
 	vec3 pos = getPosition(frag.xy).xyz;
 	vec3 lv = trans_center.xyz-pos.xyz;
-	float dist2 = dot(lv,lv);
-	dist2 /= size;
-	if (dist2 > 1.0)
+	float dist = length(lv);
+	dist /= size;
+	if (dist > 1.0)
 	{
 		discard;
 	}
+	
 		
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = vec3((norm.xy-0.5)*2.0, norm.z);
+	float envIntensity = norm.z;
+	norm = decode_normal(norm.xy);
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -158,7 +199,10 @@ void main()
 	proj_tc.xyz /= proj_tc.w;
 	
 	float fa = falloff+1.0;
-	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
+	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
+	dist_atten *= dist_atten;
+	dist_atten *= 2.0;
+
 	if (dist_atten <= 0.0)
 	{
 		discard;
@@ -172,31 +216,35 @@ void main()
 		
 	vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
 		
+	vec4 spec = texture2DRect(specularRect, frag.xy);
+
+	
+
 	float noise = texture2D(noiseMap, frag.xy/128.0).b;
+	vec3 dlit = vec3(0, 0, 0);
+	
 	if (proj_tc.z > 0.0 &&
 		proj_tc.x < 1.0 &&
 		proj_tc.y < 1.0 &&
 		proj_tc.x > 0.0 &&
 		proj_tc.y > 0.0)
 	{
-		float lit = 0.0;
 		float amb_da = proj_ambiance;
+		float lit = 0.0;
 		
 		if (da > 0.0)
 		{
+			lit = da * dist_atten * noise;
+
 			float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0);
 			float lod = diff * proj_lod;
 			
 			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod);
-		
-			vec3 lcol = color.rgb * plcol.rgb * plcol.a;
+			dlit = color.rgb * plcol.rgb * plcol.a;
 			
-			lit = da * dist_atten * noise;
-			
-			col = lcol*lit*diff_tex;
-			amb_da += (da*0.5)*proj_ambiance;
+			col = dlit*lit*diff_tex;
+			//amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance;
 		}
-		
 		//float diff = clamp((proj_range-proj_focus)/proj_range, 0.0, 1.0);
 		vec4 amb_plcol = texture2DLodAmbient(projectionMap, proj_tc.xy, proj_lod);
 							
@@ -205,13 +253,37 @@ void main()
 		amb_da *= dist_atten * noise;
 			
 		amb_da = min(amb_da, 1.0-lit);
-			
-		col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
+		col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a*diff_tex.rgb;
 	}
 	
-	
-	vec4 spec = texture2DRect(specularRect, frag.xy);
+
 	if (spec.a > 0.0)
+	{
+		dlit *= min(da*6.0, 1.0) * dist_atten;
+		vec3 npos = -normalize(pos);
+
+		//vec3 ref = dot(pos+lv, norm);
+		vec3 h = normalize(lv+npos);
+		float nh = dot(norm, h);
+		float nv = dot(norm, npos);
+		float vh = dot(npos, h);
+		float sa = nh;
+		float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
+
+		float gtdenom = 2 * nh;
+		float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+								
+		if (nh > 0.0)
+		{
+			
+			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+			col += dlit*scol*spec.rgb;
+			//col += spec.rgb;
+		}
+	}	
+
+
+	if (envIntensity > 0.0)
 	{
 		vec3 ref = reflect(normalize(pos), norm);
 		
@@ -229,8 +301,9 @@ void main()
 			{
 				stc.xy /= stc.w;
 
-				float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0);
+				float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0);
 				
+				//stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 								
 				if (stc.x < 1.0 &&
@@ -238,8 +311,7 @@ void main()
 					stc.x > 0.0 &&
 					stc.y > 0.0)
 				{
-					vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
-					col += dist_atten*scol.rgb*color.rgb*scol.a*spec.rgb;
+					col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*spec.rgb;										
 				}
 			}
 		}
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl b/indra/newview/app_settings/shaders/class1/deferred/starsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightNoFragCoordV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightNoFragCoordV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
old mode 100644
new mode 100755
index bac74cbbeff15f0c145434f5343e21908b58588a..6653f57ee17f083f7c56a8a957aa626005c366ea
--- a/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/sunLightSSAOF.glsl
@@ -49,6 +49,40 @@ VARYING vec2 vary_fragcoord;
 uniform mat4 inv_proj;
 uniform vec2 screen_res;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -123,7 +157,7 @@ void main()
 	vec4 pos = getPosition(pos_screen);
 	
 	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	norm = decode_normal(norm.xy);
 		
 	frag_color[0] = 1.0;
 	frag_color[1] = calcAmbientOcclusion(pos, norm);
diff --git a/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class1/deferred/sunLightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
old mode 100644
new mode 100755
index daf1cc7ea202bc89b7338f90e84647c1f2c400b3..52a429465f31ab6cffb837ffa9f0ff23d0de06b3
--- a/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/terrainF.glsl
@@ -39,6 +39,12 @@ VARYING vec3 vary_normal;
 VARYING vec4 vary_texcoord0;
 VARYING vec4 vary_texcoord1;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main()
 {
 	/// Note: This should duplicate the blending functionality currently used for the terrain rendering.
@@ -56,6 +62,6 @@ void main()
 	frag_data[0] = vec4(outColor.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl b/indra/newview/app_settings/shaders/class1/deferred/terrainV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
old mode 100644
new mode 100755
index da253846efc42eaa4f004dae2ea91d1bda188f0f..808750496f96e62263130f173814bf4530c1790b
--- a/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/treeF.glsl
@@ -37,6 +37,12 @@ VARYING vec2 vary_texcoord0;
 
 uniform float minimum_alpha;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec4 col = texture2D(diffuseMap, vary_texcoord0.xy);
@@ -48,5 +54,5 @@ void main()
 	frag_data[0] = vec4(vertex_color.rgb*col.rgb, 0.0);
 	frag_data[1] = vec4(0,0,0,0);
 	vec3 nvn = normalize(vary_normal);
-	frag_data[2] = vec4(nvn.xyz * 0.5 + 0.5, 0.0);
+	frag_data[2] = vec4(encode_normal(nvn.xyz), 0.0, 0.0);
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeShadowF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeShadowV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeShadowV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl b/indra/newview/app_settings/shaders/class1/deferred/treeV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
old mode 100644
new mode 100755
index 3427d6db57926257622b9055e16c61c2086aecff..daa2fb390adb3ae4cd58689a9482ef93912ae2b3
--- a/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterF.glsl
@@ -67,6 +67,12 @@ VARYING vec4 littleWave;
 VARYING vec4 view;
 VARYING vec4 vary_position;
 
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
 void main() 
 {
 	vec4 color;
@@ -151,8 +157,8 @@ void main()
 	//spec *= shadow;
 	//color.rgb += spec * specular;
 	
-	//color.rgb = atmosTransport(color.rgb);
-	//color.rgb = scaleSoftClip(color.rgb);
+	color.rgb = atmosTransport(color.rgb);
+	color.rgb = scaleSoftClip(color.rgb);
 	//color.a = spec * sunAngle2;
 
 	//wavef.z *= 0.1f;
@@ -161,5 +167,5 @@ void main()
 	
 	frag_data[0] = vec4(color.rgb, 0.5); // diffuse
 	frag_data[1] = vec4(0.5,0.5,0.5, 0.95); // speccolor*spec, spec
-	frag_data[2] = vec4(screenspacewavef.xyz*0.5+0.5, screenspacewavef.z*0.5); // normalxyz, displace
+	frag_data[2] = vec4(encode_normal(screenspacewavef), 0.0, 0.0); // normalxyz, displace
 }
diff --git a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
old mode 100644
new mode 100755
index 9734acf005a372378eff057667cb4bfea6033210..ece34dcc4edd96efb98617a203386be6517789d5
--- a/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/deferred/waterV.glsl
@@ -85,7 +85,7 @@ void main()
 	pos.w = 1.0;
 	pos = modelview_matrix*pos;
 	
-	calcAtmospherics(pos.xyz);
+	calcAtmospherics(view.xyz);
 		
 	//pass wave parameters to pixel shader
 	vec2 bigWave =  (v.xy) * vec2(0.04,0.04)  + d1 * time * 0.055;
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowExtractV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowF.glsl b/indra/newview/app_settings/shaders/class1/effects/glowF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/effects/glowV.glsl b/indra/newview/app_settings/shaders/class1/effects/glowV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/terrainWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl b/indra/newview/app_settings/shaders/class1/environment/underWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl b/indra/newview/app_settings/shaders/class1/environment/waterFogF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
old mode 100644
new mode 100755
index f66ba1d2d9403f0a3f102773b17c363e7ed64e4f..352cea7aaabcee7dc2e79aeaae496d99ba53fcf1
--- a/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
+++ b/indra/newview/app_settings/shaders/class1/environment/waterV.glsl
@@ -28,6 +28,7 @@ uniform mat4 modelview_projection_matrix;
 
 ATTRIBUTE vec3 position;
 
+
 void calcAtmospherics(vec3 inPositionEye);
 
 uniform vec2 d1;
@@ -48,35 +49,35 @@ float wave(vec2 v, float t, float f, vec2 d, float s)
 void main()
 {
 	//transform vertex
+	vec4 pos = vec4(position.xyz, 1.0);
 	mat4 modelViewProj = modelview_projection_matrix;
 	
 	vec4 oPosition;
 		    
 	//get view vector
 	vec3 oEyeVec;
-	oEyeVec.xyz = position.xyz-eyeVec;
+	oEyeVec.xyz = pos.xyz-eyeVec;
 		
 	float d = length(oEyeVec.xy);
 	float ld = min(d, 2560.0);
 	
-	vec3 lpos = position;
-	lpos.xy = eyeVec.xy + oEyeVec.xy/d*ld;
+	pos.xy = eyeVec.xy + oEyeVec.xy/d*ld;
 	view.xyz = oEyeVec;
 		
 	d = clamp(ld/1536.0-0.5, 0.0, 1.0);	
 	d *= d;
 		
-	oPosition = vec4(lpos, 1.0);
+	oPosition = vec4(position, 1.0);
 	oPosition.z = mix(oPosition.z, max(eyeVec.z*0.75, 0.0), d);
 	oPosition = modelViewProj * oPosition;
+	
 	refCoord.xyz = oPosition.xyz + vec3(0,0,0.2);
 	
 	//get wave position parameter (create sweeping horizontal waves)
-	vec3 v = lpos;
+	vec3 v = pos.xyz;
 	v.x += (cos(v.x*0.08/*+time*0.01*/)+sin(v.y*0.02))*6.0;
 	    
 	//push position for further horizon effect.
-	vec4 pos;
 	pos.xyz = oEyeVec.xyz*(waterHeight/oEyeVec.z);
 	pos.w = 1.0;
 	pos = modelview_matrix*pos;
diff --git a/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl b/indra/newview/app_settings/shaders/class1/interface/alphamaskF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/alphamaskV.glsl b/indra/newview/app_settings/shaders/class1/interface/alphamaskV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/clipF.glsl b/indra/newview/app_settings/shaders/class1/interface/clipF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/clipV.glsl b/indra/newview/app_settings/shaders/class1/interface/clipV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl b/indra/newview/app_settings/shaders/class1/interface/customalphaV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/debugF.glsl b/indra/newview/app_settings/shaders/class1/interface/debugF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/debugV.glsl b/indra/newview/app_settings/shaders/class1/interface/debugV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..6523a06d22b6259945e24251c7c8b73fecfba192
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthF.glsl
@@ -0,0 +1,67 @@
+/** 
+ * @file debugF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
+
+uniform sampler2D depthMap;
+
+uniform float delta;
+
+VARYING vec2 tc0;
+VARYING vec2 tc1;
+VARYING vec2 tc2;
+VARYING vec2 tc3;
+VARYING vec2 tc4;
+VARYING vec2 tc5;
+VARYING vec2 tc6;
+VARYING vec2 tc7;
+VARYING vec2 tc8;
+
+void main() 
+{
+	vec4 depth1 = 
+		vec4(texture2D(depthMap, tc0).r,
+			texture2D(depthMap, tc1).r,
+			texture2D(depthMap, tc2).r,
+			texture2D(depthMap, tc3).r);
+
+	vec4 depth2 = 
+		vec4(texture2D(depthMap, tc4).r,
+			texture2D(depthMap, tc5).r,
+			texture2D(depthMap, tc6).r,
+			texture2D(depthMap, tc7).r);
+
+	depth1 = min(depth1, depth2);
+	float depth = min(depth1.x, depth1.y);
+	depth = min(depth, depth1.z);
+	depth = min(depth, depth1.w);
+	depth = min(depth, texture2D(depthMap, tc8).r);
+
+	gl_FragDepth = depth;
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..0e5dc0818363afffa65038762f0ca726ce3d7069
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthRectF.glsl
@@ -0,0 +1,69 @@
+/** 
+ * @file debugF.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#extension GL_ARB_texture_rectangle : enable
+
+#ifdef DEFINE_GL_FRAGCOLOR
+out vec4 frag_color;
+#else
+#define frag_color gl_FragColor
+#endif
+
+uniform sampler2DRect depthMap;
+
+uniform float delta;
+
+VARYING vec2 tc0;
+VARYING vec2 tc1;
+VARYING vec2 tc2;
+VARYING vec2 tc3;
+VARYING vec2 tc4;
+VARYING vec2 tc5;
+VARYING vec2 tc6;
+VARYING vec2 tc7;
+VARYING vec2 tc8;
+
+void main() 
+{
+	vec4 depth1 = 
+		vec4(texture2DRect(depthMap, tc0).r,
+			texture2DRect(depthMap, tc1).r,
+			texture2DRect(depthMap, tc2).r,
+			texture2DRect(depthMap, tc3).r);
+
+	vec4 depth2 = 
+		vec4(texture2DRect(depthMap, tc4).r,
+			texture2DRect(depthMap, tc5).r,
+			texture2DRect(depthMap, tc6).r,
+			texture2DRect(depthMap, tc7).r);
+
+	depth1 = min(depth1, depth2);
+	float depth = min(depth1.x, depth1.y);
+	depth = min(depth, depth1.z);
+	depth = min(depth, depth1.w);
+	depth = min(depth, texture2DRect(depthMap, tc8).r);
+
+	gl_FragDepth = depth;
+}
diff --git a/indra/newview/app_settings/shaders/class1/interface/downsampleDepthV.glsl b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthV.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..71d80911d62635c28e5996fd174800fc476a4c8d
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/downsampleDepthV.glsl
@@ -0,0 +1,59 @@
+/** 
+ * @file debugV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2011, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+uniform mat4 modelview_projection_matrix;
+
+ATTRIBUTE vec3 position;
+
+uniform vec2 screen_res;
+
+uniform vec2 delta;
+
+VARYING vec2 tc0;
+VARYING vec2 tc1;
+VARYING vec2 tc2;
+VARYING vec2 tc3;
+VARYING vec2 tc4;
+VARYING vec2 tc5;
+VARYING vec2 tc6;
+VARYING vec2 tc7;
+VARYING vec2 tc8;
+
+void main()
+{
+	gl_Position = vec4(position, 1.0); 
+	
+	vec2 tc = (position.xy*0.5+0.5)*screen_res;
+	tc0 = tc+vec2(-delta.x,-delta.y);
+	tc1 = tc+vec2(0,-delta.y);
+	tc2 = tc+vec2(delta.x,-delta.y);
+	tc3 = tc+vec2(-delta.x,0);
+	tc4 = tc+vec2(0,0);
+	tc5 = tc+vec2(delta.x,0);
+	tc6 = tc+vec2(-delta.x,delta.y);
+	tc7 = tc+vec2(0,delta.y);
+	tc8 = tc+vec2(delta.x,delta.y);
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineFXAAV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl b/indra/newview/app_settings/shaders/class1/interface/glowcombineV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/fmodwrapper.cpp b/indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl
similarity index 63%
rename from indra/newview/fmodwrapper.cpp
rename to indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl
index 16f1d19a7864beb0b5eb807d1bb83383166a2973..947c2b00652b7ba3c602212d1a728f0c036b57e2 100644
--- a/indra/newview/fmodwrapper.cpp
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightNormV.glsl
@@ -1,10 +1,9 @@
 /** 
- * @file fmodwrapper.cpp
- * @brief dummy source file for building a shared library to wrap libfmod.a
+ * @file highlightV.glsl
  *
- * $LicenseInfo:firstyear=2005&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2007, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -24,14 +23,20 @@
  * $/LicenseInfo$
  */
 
-extern "C"
-{
-	void FSOUND_Init(void);
-}
+uniform mat4 texture_matrix0;
+uniform mat4 modelview_projection_matrix;
+
+ATTRIBUTE vec3 position;
+ATTRIBUTE vec2 texcoord0;
+ATTRIBUTE vec2 texcoord1;
+ATTRIBUTE vec2 texcoord2;
 
-void* fmodwrapper(void)
+VARYING vec2 vary_texcoord0;
+
+void main()
 {
-	// When building the fmodwrapper library, the linker doesn't seem to want to bring in libfmod.a unless I explicitly
-	// reference at least one symbol in the library.  This seemed like the simplest way.
-	return (void*)&FSOUND_Init;
+	//transform vertex
+	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
+	vary_texcoord0 = (texture_matrix0 * vec4(texcoord1,0,1)).xy;
 }
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl
new file mode 100644
index 0000000000000000000000000000000000000000..c5d102b7392c65b844382595447d95eb921a3d85
--- /dev/null
+++ b/indra/newview/app_settings/shaders/class1/interface/highlightSpecV.glsl
@@ -0,0 +1,42 @@
+/** 
+ * @file highlightV.glsl
+ *
+ * $LicenseInfo:firstyear=2007&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2007, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+uniform mat4 texture_matrix0;
+uniform mat4 modelview_projection_matrix;
+
+ATTRIBUTE vec3 position;
+ATTRIBUTE vec2 texcoord0;
+ATTRIBUTE vec2 texcoord1;
+ATTRIBUTE vec2 texcoord2;
+
+VARYING vec2 vary_texcoord0;
+
+void main()
+{
+	//transform vertex
+	gl_Position = modelview_projection_matrix * vec4(position.xyz, 1.0);
+	vary_texcoord0 = (texture_matrix0 * vec4(texcoord2,0,1)).xy;
+}
+
diff --git a/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl b/indra/newview/app_settings/shaders/class1/interface/highlightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionCubeV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionCubeV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl b/indra/newview/app_settings/shaders/class1/interface/occlusionV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/onetexturenocolorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/pathfindingF.glsl b/indra/newview/app_settings/shaders/class1/interface/pathfindingF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/pathfindingNoNormalV.glsl b/indra/newview/app_settings/shaders/class1/interface/pathfindingNoNormalV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/pathfindingV.glsl b/indra/newview/app_settings/shaders/class1/interface/pathfindingV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl b/indra/newview/app_settings/shaders/class1/interface/solidcolorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl b/indra/newview/app_settings/shaders/class1/interface/splattexturerectF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/splattexturerectV.glsl b/indra/newview/app_settings/shaders/class1/interface/splattexturerectV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl b/indra/newview/app_settings/shaders/class1/interface/twotextureaddV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiF.glsl b/indra/newview/app_settings/shaders/class1/interface/uiF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/interface/uiV.glsl b/indra/newview/app_settings/shaders/class1/interface/uiV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
old mode 100644
new mode 100755
index cf29939cb2353637e33f43c1548d083bfd6bcf64..eaaa7b208d78773f996106c197687705d936d3fe
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskF.glsl
@@ -39,13 +39,15 @@ VARYING vec2 vary_texcoord0;
 
 void default_lighting() 
 {
-	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color;
+	vec4 color = diffuseLookup(vary_texcoord0.xy);
 	
 	if (color.a < minimum_alpha)
 	{
 		discard;
 	}
 
+	color.rgb *= vertex_color.rgb;
+
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
old mode 100644
new mode 100755
index 4070d41f47860b077e36a96cc56809a64565dd4d..b9ddbc8e1ce1786bcd49e4872d9af71cb35c5d5f
--- a/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightAlphaMaskNonIndexedF.glsl
@@ -41,13 +41,15 @@ VARYING vec2 vary_texcoord0;
 
 void default_lighting() 
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy) * vertex_color;
+	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
 
 	if (color.a < minimum_alpha)
 	{
 		discard;
 	}
 
+	color.rgb *= vertex_color.rgb;
+	
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
old mode 100644
new mode 100755
index 6c34643aab0e577d00242b5942908b32e8efe70d..5740987ab1cdbfcfe95abab93b53e90e4687c6fc
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightAlphaMaskF.glsl
@@ -30,6 +30,7 @@ out vec4 frag_color;
 #endif
 
 uniform float minimum_alpha;
+uniform float texture_gamma;
 
 vec3 fullbrightAtmosTransport(vec3 light);
 vec3 fullbrightScaleSoftClip(vec3 light);
@@ -39,13 +40,16 @@ VARYING vec2 vary_texcoord0;
 
 void fullbright_lighting()
 {
-	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color;
+	vec4 color = diffuseLookup(vary_texcoord0.xy);
 	
 	if (color.a < minimum_alpha)
 	{
 		discard;
 	}
 
+	color.rgb *= vertex_color.rgb;
+
+	color.rgb = pow(color.rgb, vec3(texture_gamma));
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 	
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
old mode 100644
new mode 100755
index 2ff7f795b05e88bcb470a8a2b212813671efeaa2..c8771a3f1eac8e728eb1a4df67de179d1ee889fd
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightF.glsl
@@ -32,6 +32,8 @@ out vec4 frag_color;
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
 
+uniform float texture_gamma;
+
 vec3 fullbrightAtmosTransport(vec3 light);
 vec3 fullbrightScaleSoftClip(vec3 light);
 
@@ -39,10 +41,14 @@ void fullbright_lighting()
 {
 	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color;
 	
+	color.rgb = pow(color.rgb, vec3(texture_gamma));
+
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 	
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
+	color.rgb = pow(color.rgb, vec3(1.0/texture_gamma));
+
 	frag_color = color;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
old mode 100644
new mode 100755
index f4477bd29ac021a89cb544b433047c851269912b..f72f20b03d754dc13c4fff8447e50df1910f333c
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedAlphaMaskF.glsl
@@ -30,6 +30,7 @@ out vec4 frag_color;
 #endif
 
 uniform float minimum_alpha;
+uniform float texture_gamma;
 
 vec3 fullbrightAtmosTransport(vec3 light);
 vec3 fullbrightScaleSoftClip(vec3 light);
@@ -41,17 +42,22 @@ VARYING vec2 vary_texcoord0;
 
 void fullbright_lighting()
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy) * vertex_color;
+	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
 	
 	if (color.a < minimum_alpha)
 	{
 		discard;
 	}
+	
+	color.rgb *= vertex_color.rgb;
 
+	color.rgb = pow(color.rgb, vec3(texture_gamma));
 	color.rgb = fullbrightAtmosTransport(color.rgb);
 	
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
+	color.rgb = pow(color.rgb, vec3(1.0/texture_gamma));
+
 	frag_color = color;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightNonIndexedF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
old mode 100644
new mode 100755
index 777c8b45bb3ffe2653e0a0415949d3c8b579ad52..c8282e9a51eafe3a7859e798ccdca204be3208c7
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyF.glsl
@@ -50,7 +50,7 @@ void fullbright_shiny_lighting()
 
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 
 	frag_color = color;
 }
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl
old mode 100644
new mode 100755
index 4fa3b1d939cda3cdcfc7e32a60504788db1dff85..e7dbd4bbd2d3954c0b5cfd90659cd79b8c4bcb68
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyNonIndexedF.glsl
@@ -51,7 +51,7 @@ void fullbright_shiny_lighting()
 
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
 
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 
 	frag_color = color;
 }
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
old mode 100644
new mode 100755
index 58984a42631e33d3e83795e13b3e66756501a81d..5886fc65bea8ec8adc90857756419a1906893dab
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterF.glsl
@@ -48,7 +48,7 @@ void fullbright_shiny_lighting_water()
 
 	color.rgb = fullbrightShinyAtmosTransport(color.rgb);
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 
 	frag_color = applyWaterFog(color);
 }
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
old mode 100644
new mode 100755
index a39b7205d79b6a3208c4c4a52ef935a0d3a4d62f..cddc7d8df80f05e0b4fe2c507b49f4bcbf3e0331
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightShinyWaterNonIndexedF.glsl
@@ -49,7 +49,7 @@ void fullbright_shiny_lighting_water()
 
 	color.rgb = fullbrightShinyAtmosTransport(color.rgb);
 	color.rgb = fullbrightScaleSoftClip(color.rgb);
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 
 	frag_color = applyWaterFog(color);
 }
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
old mode 100644
new mode 100755
index 9c82056fd7f71dda504eeb247ace58338bc2c7ff..6dd3bb937f175f72748fbe8848881a44e78649cf
--- a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterAlphaMaskF.glsl
@@ -41,7 +41,9 @@ VARYING vec2 vary_texcoord0;
 
 void fullbright_lighting_water()
 {
-	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color;
+	vec4 color = diffuseLookup(vary_texcoord0.xy);
+
+	color.rgb *= vertex_color.rgb;
 
 	if (color.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedAlphaMaskF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFullbrightWaterNonIndexedF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncSpecularV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightFuncV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightNonIndexedF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
old mode 100644
new mode 100755
index 52e3b2ad026f0df5da4465bb55662fe302f751ea..9208c148efa48a76d34ea5781b30917e33a7a4ef
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyF.glsl
@@ -50,7 +50,7 @@ void shiny_lighting()
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 	frag_color = color;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl
old mode 100644
new mode 100755
index 474d5ea4969d4e22f73dec43e343cd009b17cc14..92628faa68a64b8da9b6fed87fafeb109039964c
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyNonIndexedF.glsl
@@ -51,7 +51,7 @@ void shiny_lighting()
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 	frag_color = color;
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
old mode 100644
new mode 100755
index d2a4c47aac526b10d2fbe95a04a66e8b3f7d8f2e..61841674e211ad2718a3f7bd83e894d877838337
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterF.glsl
@@ -47,7 +47,7 @@ void shiny_lighting_water()
 	color.rgb = mix(color.rgb, envColor.rgb, vertex_color.a);
 
 	color.rgb = atmosLighting(color.rgb);
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 	frag_color = applyWaterFog(color);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl
old mode 100644
new mode 100755
index f3bd66236449ad872a38f78ff44201d5deb8e1cd..0b6e835fd06659e66fd35b529e244dda2bb2d6c4
--- a/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightShinyWaterNonIndexedF.glsl
@@ -48,7 +48,7 @@ void shiny_lighting_water()
 	color.rgb = mix(color.rgb, envColor.rgb, vertex_color.a);
 
 	color.rgb = atmosLighting(color.rgb);
-	color.a = max(color.a, vertex_color.a);
+	color.a = 1.0;
 	frag_color = applyWaterFog(color);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightSpecularV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
old mode 100644
new mode 100755
index b68240ba0d6e13ebea4c2fdfeb47f38ba2f39cf2..3426fea52fa2e2023f8465539541c4a29e27730b
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskF.glsl
@@ -39,7 +39,9 @@ VARYING vec2 vary_texcoord0;
 
 void default_lighting_water()
 {
-	vec4 color = diffuseLookup(vary_texcoord0.xy) * vertex_color;
+	vec4 color = diffuseLookup(vary_texcoord0.xy);
+
+	color.rgb *= vertex_color.rgb;
 
 	if (color.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
old mode 100644
new mode 100755
index da3b20012d850323fbaad0e5e3affae5d1936a5c..d9faa9b314273dbda5c177279df800dbc55a5ded
--- a/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class1/lighting/lightWaterAlphaMaskNonIndexedF.glsl
@@ -41,7 +41,9 @@ VARYING vec2 vary_texcoord0;
 
 void default_lighting_water()
 {
-	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy) * vertex_color;
+	vec4 color = texture2D(diffuseMap,vary_texcoord0.xy);
+
+	color.rgb *= vertex_color.rgb;
 
 	if (color.a < minimum_alpha)
 	{
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl b/indra/newview/app_settings/shaders/class1/lighting/lightWaterNonIndexedF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsSpecularV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class1/lighting/sumLightsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl b/indra/newview/app_settings/shaders/class1/objects/bumpV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/emissiveSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/emissiveSkinnedV.glsl
old mode 100644
new mode 100755
index 8494ffba5289f7f3c06d74387d6cff315417b77e..90649041917c1ffdc64a441ae9dc30fb9c2e2197
--- a/indra/newview/app_settings/shaders/class1/objects/emissiveSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class1/objects/emissiveSkinnedV.glsl
@@ -48,11 +48,9 @@ void main()
 	mat = modelview_matrix * mat;
 	vec3 pos = (mat*vec4(position.xyz, 1.0)).xyz;
 	
+	vertex_color = emissive;
+
 	calcAtmospherics(pos.xyz);
 
-	vertex_color = emissive;
-	
 	gl_Position = projection_matrix*vec4(pos, 1.0);
-		
-	
 }
diff --git a/indra/newview/app_settings/shaders/class1/objects/emissiveV.glsl b/indra/newview/app_settings/shaders/class1/objects/emissiveV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightNoColorV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightNoColorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinySkinnedV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightShinyWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightSkinnedV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/fullbrightWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl b/indra/newview/app_settings/shaders/class1/objects/impostorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/indexedTextureF.glsl b/indra/newview/app_settings/shaders/class1/objects/indexedTextureF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl b/indra/newview/app_settings/shaders/class1/objects/indexedTextureV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/nonindexedTextureV.glsl b/indra/newview/app_settings/shaders/class1/objects/nonindexedTextureV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/previewF.glsl b/indra/newview/app_settings/shaders/class1/objects/previewF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/previewV.glsl b/indra/newview/app_settings/shaders/class1/objects/previewV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinySimpleSkinnedV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/shinyWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleNoColorV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleNoColorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleNonIndexedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleNonIndexedV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleSkinnedV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleTexGenV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleTexGenV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl b/indra/newview/app_settings/shaders/class1/objects/simpleWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/objects/treeV.glsl b/indra/newview/app_settings/shaders/class1/objects/treeV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/transform/binormalV.glsl b/indra/newview/app_settings/shaders/class1/transform/binormalV.glsl
old mode 100644
new mode 100755
index 44f1aa34a0313f0451b26df3c6a78afd8dbb2364..449d8d8b4e392dee46508084365e9a1df0c2b9f4
--- a/indra/newview/app_settings/shaders/class1/transform/binormalV.glsl
+++ b/indra/newview/app_settings/shaders/class1/transform/binormalV.glsl
@@ -25,12 +25,12 @@
 
 uniform mat3 normal_matrix;
 
-ATTRIBUTE vec3 binormal;
+ATTRIBUTE vec4 tangent;
 
-VARYING vec4 binormal_out;
+VARYING vec4 tangent_out;
 
 void main()
 {
-	binormal_out = vec4(normal_matrix * binormal, 0.0);
+	tangent_out = vec4(normal_matrix * tangent.xyz), tangent.w);
 }
 
diff --git a/indra/newview/app_settings/shaders/class1/transform/colorV.glsl b/indra/newview/app_settings/shaders/class1/transform/colorV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/transform/normalV.glsl b/indra/newview/app_settings/shaders/class1/transform/normalV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/transform/positionV.glsl b/indra/newview/app_settings/shaders/class1/transform/positionV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/transform/texcoordV.glsl b/indra/newview/app_settings/shaders/class1/transform/texcoordV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsHelpersV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl b/indra/newview/app_settings/shaders/class1/windlight/atmosphericsVarsWaterV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class1/windlight/gammaF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class1/windlight/transportF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl b/indra/newview/app_settings/shaders/class2/avatar/eyeballV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
deleted file mode 100644
index 12706f130bd479e25c9facadf566577a99f5209e..0000000000000000000000000000000000000000
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaF.glsl
+++ /dev/null
@@ -1,164 +0,0 @@
-/** 
- * @file alphaF.glsl
- *
- * $LicenseInfo:firstyear=2007&license=viewerlgpl$
- * Second Life Viewer Source Code
- * Copyright (C) 2007, Linden Research, Inc.
- * 
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation;
- * version 2.1 of the License only.
- * 
- * 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
- * Lesser General Public License for more details.
- * 
- * You should have received a copy of the GNU Lesser 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
- * 
- * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
- * $/LicenseInfo$
- */
-
-#extension GL_ARB_texture_rectangle : enable
-
-#ifdef DEFINE_GL_FRAGCOLOR
-out vec4 frag_color;
-#else
-#define frag_color gl_FragColor
-#endif
-
-VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
-
-uniform sampler2DShadow shadowMap0;
-uniform sampler2DShadow shadowMap1;
-uniform sampler2DShadow shadowMap2;
-uniform sampler2DShadow shadowMap3;
-uniform sampler2DRect depthMap;
-
-uniform mat4 shadow_matrix[6];
-uniform vec4 shadow_clip;
-uniform vec2 screen_res;
-uniform vec2 shadow_res;
-
-vec3 atmosLighting(vec3 light);
-vec3 scaleSoftClip(vec3 light);
-
-VARYING vec3 vary_ambient;
-VARYING vec3 vary_directional;
-VARYING vec3 vary_fragcoord;
-VARYING vec3 vary_position;
-VARYING vec3 vary_pointlight_col;
-
-uniform float shadow_bias;
-
-uniform mat4 inv_proj;
-
-float pcfShadow(sampler2DShadow shadowMap, vec4 stc)
-{
-	stc.xyz /= stc.w;
-	stc.z += shadow_bias;
-		
-	stc.x = floor(stc.x*shadow_res.x + fract(stc.y*shadow_res.y*12345))/shadow_res.x; // add some chaotic jitter to X sample pos according to Y to disguise the snapping going on here
-	
-	float cs = shadow2D(shadowMap, stc.xyz).x;
-	float shadow = cs;
-	
-    shadow += shadow2D(shadowMap, stc.xyz+vec3(2.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
-    shadow += shadow2D(shadowMap, stc.xyz+vec3(1.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
-    shadow += shadow2D(shadowMap, stc.xyz+vec3(-1.0/shadow_res.x, 1.5/shadow_res.y, 0.0)).x;
-    shadow += shadow2D(shadowMap, stc.xyz+vec3(-2.0/shadow_res.x, -1.5/shadow_res.y, 0.0)).x;
-                       
-    return shadow*0.2;
-}
-
-
-void main() 
-{
-	vec2 frag = vary_fragcoord.xy/vary_fragcoord.z*0.5+0.5;
-	frag *= screen_res;
-	
-	float shadow = 0.0;
-	vec4 pos = vec4(vary_position, 1.0);
-	
-	vec4 spos = pos;
-		
-	if (spos.z > -shadow_clip.w)
-	{	
-		vec4 lpos;
-		
-		vec4 near_split = shadow_clip*-0.75;
-		vec4 far_split = shadow_clip*-1.25;
-		vec4 transition_domain = near_split-far_split;
-		float weight = 0.0;
-
-		if (spos.z < near_split.z)
-		{
-			lpos = shadow_matrix[3]*spos;
-			
-			float w = 1.0;
-			w -= max(spos.z-far_split.z, 0.0)/transition_domain.z;
-			shadow += pcfShadow(shadowMap3, lpos)*w;
-			weight += w;
-			shadow += max((pos.z+shadow_clip.z)/(shadow_clip.z-shadow_clip.w)*2.0-1.0, 0.0);
-		}
-
-		if (spos.z < near_split.y && spos.z > far_split.z)
-		{
-			lpos = shadow_matrix[2]*spos;
-			
-			float w = 1.0;
-			w -= max(spos.z-far_split.y, 0.0)/transition_domain.y;
-			w -= max(near_split.z-spos.z, 0.0)/transition_domain.z;
-			shadow += pcfShadow(shadowMap2, lpos)*w;
-			weight += w;
-		}
-
-		if (spos.z < near_split.x && spos.z > far_split.y)
-		{
-			lpos = shadow_matrix[1]*spos;
-			
-			float w = 1.0;
-			w -= max(spos.z-far_split.x, 0.0)/transition_domain.x;
-			w -= max(near_split.y-spos.z, 0.0)/transition_domain.y;
-			shadow += pcfShadow(shadowMap1, lpos)*w;
-			weight += w;
-		}
-
-		if (spos.z > far_split.x)
-		{
-			lpos = shadow_matrix[0]*spos;
-							
-			float w = 1.0;
-			w -= max(near_split.x-spos.z, 0.0)/transition_domain.x;
-				
-			shadow += pcfShadow(shadowMap0, lpos)*w;
-			weight += w;
-		}
-		
-
-		shadow /= weight;
-	}
-	else
-	{
-		shadow = 1.0;
-	}
-	
-	vec4 diff = diffuseLookup(vary_texcoord0.xy);
-
-	vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, vertex_color.a);
-	vec4 color = diff * col;
-	
-	color.rgb = atmosLighting(color.rgb);
-
-	color.rgb = scaleSoftClip(color.rgb);
-
-	color.rgb += diff.rgb * vary_pointlight_col.rgb;
-
-	frag_color = color;
-}
-
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
old mode 100644
new mode 100755
index 228dc104ac05c2b8fa7774328d388b55652d383b..9670d593996286f1cfa749b88943a68663adadb7
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedF.glsl
@@ -52,12 +52,54 @@ VARYING vec3 vary_position;
 VARYING vec3 vary_pointlight_col;
 VARYING vec2 vary_texcoord0;
 VARYING vec4 vertex_color;
+VARYING vec3 vary_norm;
 
 uniform vec2 shadow_res;
 uniform float shadow_bias;
 
 uniform mat4 inv_proj;
 
+uniform vec4 light_position[8];
+uniform vec3 light_direction[8];
+uniform vec3 light_attenuation[8]; 
+uniform vec3 light_diffuse[8];
+
+vec3 calcDirectionalLight(vec3 n, vec3 l)
+{
+        float a = pow(max(dot(n,l),0.0), 0.7);
+        return vec3(a,a,a);
+}
+
+vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+{
+	//get light vector
+	vec3 lv = lp.xyz-v;
+	
+	//get distance
+	float d = dot(lv,lv);
+	
+	float da = 0.0;
+
+	if (d > 0.0 && la > 0.0 && fa > 0.0)
+	{
+		//normalize light vector
+		lv = normalize(lv);
+	
+		//distance attenuation
+		float dist2 = d/la;
+		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
+
+		// spotlight coefficient.
+		float spot = max(dot(-ln, lv), is_pointlight);
+		da *= spot*spot; // GL_SPOT_EXPONENT=2
+
+		//angular attenuation
+		da *= max(pow(dot(n, lv), 0.7), 0.0);		
+	}
+
+	return vec3(da,da,da);	
+}
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).a;
@@ -161,17 +203,32 @@ void main()
 	{
 		shadow = 1.0;
 	}
-
+	vec3 n = vary_norm;
+	vec3 l = light_position[0].xyz;
+	vec3 dlight = calcDirectionalLight(n, l);
+	dlight = dlight * vary_directional.rgb * vary_pointlight_col;
 	vec4 diff = texture2D(diffuseMap,vary_texcoord0.xy);
 
-	vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, vertex_color.a);
+	vec4 col = vec4(vary_ambient + dlight*shadow, vertex_color.a);
 	vec4 color = diff * col;
 	
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
+	vec3 light_col = vec3(0,0,0);
+
+  #define LIGHT_LOOP(i) \
+		light_col += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, vary_norm, light_position[i], light_direction[i], light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
+
+	LIGHT_LOOP(1)
+	LIGHT_LOOP(2)
+	LIGHT_LOOP(3)
+	LIGHT_LOOP(4)
+	LIGHT_LOOP(5)
+	LIGHT_LOOP(6)
+	LIGHT_LOOP(7)
 
-	color.rgb += diff.rgb * vary_pointlight_col.rgb;
+	color.rgb += diff.rgb * vary_pointlight_col * light_col;
 
 	frag_color = color;	
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
old mode 100644
new mode 100755
index c3950a10e17ef8e3d3ee0e6472a724d3c1486de2..fae279fba059578e1cd6b2e0bc2c07852fb94212
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaNonIndexedNoColorF.glsl
@@ -53,6 +53,7 @@ VARYING vec3 vary_fragcoord;
 VARYING vec3 vary_position;
 VARYING vec3 vary_pointlight_col;
 VARYING vec2 vary_texcoord0;
+VARYING vec3 vary_norm;
 
 uniform vec2 shadow_res;
 
@@ -60,6 +61,47 @@ uniform float shadow_bias;
 
 uniform mat4 inv_proj;
 
+uniform vec4 light_position[8];
+uniform vec3 light_direction[8];
+uniform vec3 light_attenuation[8]; 
+uniform vec3 light_diffuse[8];
+
+vec3 calcDirectionalLight(vec3 n, vec3 l)
+{
+        float a = pow(max(dot(n,l),0.0), 0.7);
+        return vec3(a, a, a);
+}
+
+vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+{
+	//get light vector
+	vec3 lv = lp.xyz-v;
+	
+	//get distance
+	float d = dot(lv,lv);
+	
+	float da = 0.0;
+
+	if (d > 0.0 && la > 0.0 && fa > 0.0)
+	{
+		//normalize light vector
+		lv = normalize(lv);
+	
+		//distance attenuation
+		float dist2 = d/la;
+		da = clamp(1.0-(dist2-1.0*(1.0-fa))/fa, 0.0, 1.0);
+
+		// spotlight coefficient.
+		float spot = max(dot(-ln, lv), is_pointlight);
+		da *= spot*spot; // GL_SPOT_EXPONENT=2
+
+		//angular attenuation
+		da *= max(pow(dot(n, lv), 0.7), 0.0);		
+	}
+
+	return vec3(da,da,da);	
+}
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).a;
@@ -169,15 +211,31 @@ void main()
 	{
 		shadow = 1.0;
 	}
+	vec3 n = vary_norm;
+	vec3 l = light_position[0].xyz;
+	vec3 dlight = calcDirectionalLight(n, l);
+	dlight = dlight * vary_directional.rgb * vary_pointlight_col;
 	
-	vec4 col = vec4(vary_ambient + vary_directional.rgb*shadow, 1.0);
+	vec4 col = vec4(vary_ambient + dlight*shadow, 1.0);
 	vec4 color = diff * col;
 	
 	color.rgb = atmosLighting(color.rgb);
 
 	color.rgb = scaleSoftClip(color.rgb);
+	vec3 light_col = vec3(0,0,0);
+
+  #define LIGHT_LOOP(i) \
+		light_col += light_diffuse[i].rgb * calcPointLightOrSpotLight(pos.xyz, vary_norm, light_position[i], light_direction[i], light_attenuation[i].x, light_attenuation[i].y, light_attenuation[i].z);
+
+	LIGHT_LOOP(1)
+	LIGHT_LOOP(2)
+	LIGHT_LOOP(3)
+	LIGHT_LOOP(4)
+	LIGHT_LOOP(5)
+	LIGHT_LOOP(6)
+	LIGHT_LOOP(7)
 
-	color.rgb += diff.rgb * vary_pointlight_col.rgb;
+	color.rgb += diff.rgb * vary_pointlight_col * light_col;
 
 	frag_color = color;
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
old mode 100644
new mode 100755
index 9629cfe824e6f312755be7bd07b8ab7ee567efa4..7f4d82ecc6a302dc3d2b9b57dc770b8705b9649d
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaSkinnedV.glsl
@@ -50,7 +50,7 @@ VARYING vec3 vary_pointlight_col;
 
 VARYING vec4 vertex_color;
 VARYING vec2 vary_texcoord0;
-
+VARYING vec3 vary_norm;
 
 uniform float near_clip;
 uniform float shadow_offset;
@@ -115,7 +115,8 @@ void main()
 	n.xyz = normalize(n.xyz-pos.xyz);
 	
 	vec3 norm = n.xyz;
-	
+	vary_norm = norm;
+
 	float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
 	vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
 			
diff --git a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
old mode 100644
new mode 100755
index 1586aab0f25587cd34ae815f330535af4d8b0f1c..13c6ffc607c323c78ca08f6651e71c8ff026a3cf
--- a/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/alphaV.glsl
@@ -25,19 +25,36 @@
 
 uniform mat3 normal_matrix;
 uniform mat4 texture_matrix0;
+uniform mat4 projection_matrix;
 uniform mat4 modelview_matrix;
 uniform mat4 modelview_projection_matrix;
 
 ATTRIBUTE vec3 position;
+
+#ifdef USE_INDEXED_TEX
 void passTextureIndex();
+#endif
+
 ATTRIBUTE vec3 normal;
+
+#ifdef USE_VERTEX_COLOR
 ATTRIBUTE vec4 diffuse_color;
+#endif
+
 ATTRIBUTE vec2 texcoord0;
 
+#ifdef HAS_SKIN
+mat4 getObjectSkinnedTransform();
+#else
+#ifdef IS_AVATAR_SKIN
+mat4 getSkinnedTransform();
+#endif
+#endif
+
 vec4 calcLighting(vec3 pos, vec3 norm, vec4 color, vec4 baseCol);
 void calcAtmospherics(vec3 inPositionEye);
 
-float calcDirectionalLight(vec3 n, vec3 l);
+vec3 calcDirectionalLight(vec3 n, vec3 l);
 
 vec3 atmosAmbient(vec3 light);
 vec3 atmosAffectDirectionalLight(float lightIntensity);
@@ -50,9 +67,12 @@ VARYING vec3 vary_fragcoord;
 VARYING vec3 vary_position;
 VARYING vec3 vary_pointlight_col;
 
+#ifdef USE_VERTEX_COLOR
 VARYING vec4 vertex_color;
-VARYING vec2 vary_texcoord0;
+#endif
 
+VARYING vec2 vary_texcoord0;
+VARYING vec3 vary_norm;
 
 uniform float near_clip;
 uniform float shadow_offset;
@@ -63,13 +83,15 @@ uniform vec3 light_direction[8];
 uniform vec3 light_attenuation[8]; 
 uniform vec3 light_diffuse[8];
 
-float calcDirectionalLight(vec3 n, vec3 l)
+uniform vec3 sun_dir;
+
+vec3 calcDirectionalLight(vec3 n, vec3 l)
 {
         float a = max(dot(n,l),0.0);
-        return a;
+        return vec3(a,a,a);
 }
 
-float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
+vec3 calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, float fa, float is_pointlight)
 {
 	//get light vector
 	vec3 lv = lp.xyz-v;
@@ -96,55 +118,107 @@ float calcPointLightOrSpotLight(vec3 v, vec3 n, vec4 lp, vec3 ln, float la, floa
 		da *= max(dot(n, lv), 0.0);		
 	}
 
-	return da;	
+	return vec3(da,da,da);	
 }
 
 void main()
 {
+	vec4 pos;
+	vec3 norm;
+	
 	//transform vertex
+#ifdef HAS_SKIN
+	mat4 trans = getObjectSkinnedTransform();
+	trans = modelview_matrix * trans;
+	
+	pos = trans * vec4(position.xyz, 1.0);
+	
+	norm = position.xyz + normal.xyz;
+	norm = normalize((trans * vec4(norm, 1.0)).xyz - pos.xyz);
+	vec4 frag_pos = projection_matrix * pos;
+	gl_Position = frag_pos;
+#else
+
+#ifdef IS_AVATAR_SKIN
+	mat4 trans = getSkinnedTransform();
+	vec4 pos_in = vec4(position.xyz, 1.0);
+	pos.x = dot(trans[0], pos_in);
+	pos.y = dot(trans[1], pos_in);
+	pos.z = dot(trans[2], pos_in);
+	pos.w = 1.0;
+	
+	norm.x = dot(trans[0].xyz, normal);
+	norm.y = dot(trans[1].xyz, normal);
+	norm.z = dot(trans[2].xyz, normal);
+	norm = normalize(norm);
+	
+	vec4 frag_pos = projection_matrix * pos;
+	gl_Position = frag_pos;
+#else
+	norm = normalize(normal_matrix * normal);
 	vec4 vert = vec4(position.xyz, 1.0);
-	passTextureIndex();
-	vec4 pos = (modelview_matrix * vert);
+	pos = (modelview_matrix * vert);
 	gl_Position = modelview_projection_matrix*vec4(position.xyz, 1.0);
+#endif
 	
+#endif
+
+#ifdef USE_INDEXED_TEX
+	passTextureIndex();
 	vary_texcoord0 = (texture_matrix0 * vec4(texcoord0,0,1)).xy;
-		
-	vec3 norm = normalize(normal_matrix * normal);
+#else
+	vary_texcoord0 = texcoord0;
+#endif
 	
+	vary_norm = norm;
 	float dp_directional_light = max(0.0, dot(norm, light_position[0].xyz));
 	vary_position = pos.xyz + light_position[0].xyz * (1.0-dp_directional_light)*shadow_offset;
-		
+	
 	calcAtmospherics(pos.xyz);
 
+#ifndef USE_VERTEX_COLOR
+	vec4 diffuse_color = vec4(1,1,1,1);
+#endif
+
 	//vec4 color = calcLighting(pos.xyz, norm, diffuse_color, vec4(0.));
 	vec4 col = vec4(0.0, 0.0, 0.0, diffuse_color.a);
 
-	
-	// Collect normal lights
-	col.rgb += light_diffuse[2].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[2], light_direction[2], light_attenuation[2].x, light_attenuation[2].y, light_attenuation[2].z);
-	col.rgb += light_diffuse[3].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[3], light_direction[3], light_attenuation[3].x, light_attenuation[3].y, light_attenuation[3].z);
-	col.rgb += light_diffuse[4].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[4], light_direction[4], light_attenuation[4].x, light_attenuation[4].y, light_attenuation[4].z);
-	col.rgb += light_diffuse[5].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[5], light_direction[5], light_attenuation[5].x, light_attenuation[5].y, light_attenuation[5].z);
-	col.rgb += light_diffuse[6].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[6], light_direction[6], light_attenuation[6].x, light_attenuation[6].y, light_attenuation[6].z);
-	col.rgb += light_diffuse[7].rgb*calcPointLightOrSpotLight(pos.xyz, norm, light_position[7], light_direction[7], light_attenuation[7].x, light_attenuation[7].y, light_attenuation[7].z);
+	vec3 dff = pow(diffuse_color.rgb, vec3(2.2f,2.2f,2.2f));
 
-	vary_pointlight_col = col.rgb*diffuse_color.rgb;
+	vary_pointlight_col = dff;
 
 	col.rgb = vec3(0,0,0);
 
 	// Add windlight lights
-	col.rgb = atmosAmbient(vec3(0.));
+	col.rgb = atmosAmbient(col.rgb);
 	
-	vary_ambient = col.rgb*diffuse_color.rgb;
-	vary_directional.rgb = diffuse_color.rgb*atmosAffectDirectionalLight(max(calcDirectionalLight(norm, light_position[0].xyz), (1.0-diffuse_color.a)*(1.0-diffuse_color.a)));
+	float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
+	ambient *= 0.5;
+	ambient *= ambient;
+	ambient = (1.0-ambient);
+
+	col.rgb *= ambient;
+
+	vary_directional.rgb = atmosAffectDirectionalLight(1.0f);
+	vary_ambient = col.rgb*dff;
 	
-	col.rgb = col.rgb*diffuse_color.rgb;
+	col.rgb = col.rgb*dff;
 	
+#ifdef USE_VERTEX_COLOR
 	vertex_color = col;
-
-	
+#endif
 	
+#ifdef HAS_SKIN
+	vary_fragcoord.xyz = frag_pos.xyz + vec3(0,0,near_clip);
+#else
+
+#ifdef IS_AVATAR_SKIN
+	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
+#else
 	pos = modelview_projection_matrix * vert;
 	vary_fragcoord.xyz = pos.xyz + vec3(0,0,near_clip);
-	
+#endif
+
+#endif
+
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl b/indra/newview/app_settings/shaders/class2/deferred/avatarAlphaV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
old mode 100644
new mode 100755
index 5621e47ab70989761a7d7249fb43edb503c7b8a6..780df9ed1ac8c0a40ff9231b32af7f39bf09d988
--- a/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/multiSpotLightF.glsl
@@ -39,6 +39,7 @@ uniform samplerCube environmentMap;
 uniform sampler2DRect lightMap;
 uniform sampler2D noiseMap;
 uniform sampler2D projectionMap;
+uniform sampler2D lightFunc;
 
 uniform mat4 proj_mat; //screen space to light space
 uniform float proj_near; //near clip for projection
@@ -67,10 +68,51 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
+vec4 correctWithGamma(vec4 col)
+{
+	return vec4(pow(col.rgb, vec3(2.2)), col.a);
+}
+
+
 vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
-	
+	ret = correctWithGamma(ret);
+
 	vec2 dist = tc-vec2(0.5);
 	
 	float det = max(1.0-lod/(proj_lod*0.5), 0.0);
@@ -85,7 +127,8 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
-	
+	ret = correctWithGamma(ret);
+
 	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
 	
 	float det = min(lod/(proj_lod*0.5), 1.0);
@@ -102,7 +145,8 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
-	
+	ret = correctWithGamma(ret);
+
 	vec2 dist = tc-vec2(0.5);
 	
 	float d = dot(dist,dist);
@@ -135,9 +179,9 @@ void main()
 	
 	vec3 pos = getPosition(frag.xy).xyz;
 	vec3 lv = center.xyz-pos.xyz;
-	float dist2 = dot(lv,lv);
-	dist2 /= size;
-	if (dist2 > 1.0)
+	float dist = length(lv);
+	dist /= size;
+	if (dist > 1.0)
 	{
 		discard;
 	}
@@ -154,7 +198,10 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	
+	float envIntensity = norm.z;
+
+	norm = decode_normal(norm.xy);
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -168,7 +215,9 @@ void main()
 	proj_tc.xyz /= proj_tc.w;
 	
 	float fa = falloff+1.0;
-	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
+	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
+	dist_atten *= dist_atten;
+	dist_atten *= 2.0;
 	if (dist_atten <= 0.0)
 	{
 		discard;
@@ -177,11 +226,15 @@ void main()
 	lv = proj_origin-pos.xyz;
 	lv = normalize(lv);
 	float da = dot(norm, lv);
-		
+
 	vec3 col = vec3(0,0,0);
 		
 	vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
-		
+	
+	vec4 spec = texture2DRect(specularRect, frag.xy);
+
+	vec3 dlit = vec3(0, 0, 0);
+
 	float noise = texture2D(noiseMap, frag.xy/128.0).b;
 	if (proj_tc.z > 0.0 &&
 		proj_tc.x < 1.0 &&
@@ -189,21 +242,21 @@ void main()
 		proj_tc.x > 0.0 &&
 		proj_tc.y > 0.0)
 	{
-		float lit = 0.0;
 		float amb_da = proj_ambiance;
-		
+		float lit = 0.0;
+
 		if (da > 0.0)
 		{
+			lit = da * dist_atten * noise;
+
 			float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0);
 			float lod = diff * proj_lod;
 			
 			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod);
 		
-			vec3 lcol = color.rgb * plcol.rgb * plcol.a;
+			dlit = color.rgb * plcol.rgb * plcol.a;
 			
-			lit = da * dist_atten * noise;
-			
-			col = lcol*lit*diff_tex*shadow;
+			col = dlit*lit*diff_tex*shadow;
 			amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance;
 		}
 		
@@ -219,9 +272,36 @@ void main()
 		col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
 	}
 	
-	
-	vec4 spec = texture2DRect(specularRect, frag.xy);
+
 	if (spec.a > 0.0)
+	{
+		vec3 npos = -normalize(pos);
+		dlit *= min(da*6.0, 1.0) * dist_atten;
+
+		//vec3 ref = dot(pos+lv, norm);
+		vec3 h = normalize(lv+npos);
+		float nh = dot(norm, h);
+		float nv = dot(norm, npos);
+		float vh = dot(npos, h);
+		float sa = nh;
+		float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
+
+		float gtdenom = 2 * nh;
+		float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+								
+		if (nh > 0.0)
+		{
+			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+			col += dlit*scol*spec.rgb*shadow;
+			//col += spec.rgb;
+		}
+	}	
+	
+	
+	
+	
+
+	if (envIntensity > 0.0)
 	{
 		vec3 ref = reflect(normalize(pos), norm);
 		
@@ -239,8 +319,9 @@ void main()
 			{
 				stc.xy /= stc.w;
 
-				float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0);
+				float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0);
 				
+				//stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 								
 				if (stc.x < 1.0 &&
@@ -248,8 +329,7 @@ void main()
 					stc.x > 0.0 &&
 					stc.y > 0.0)
 				{
-					vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
-					col += dist_atten*scol.rgb*color.rgb*scol.a*spec.rgb*shadow;
+					col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*shadow*spec.rgb;										
 				}
 			}
 		}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
old mode 100644
new mode 100755
index 9df9d7590577d7ecce14892d8bd95057ac014242..67bac1f7c2e42079d9ddfa9a5bc932bf20d3fa6a
--- a/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/softenLightF.glsl
@@ -38,7 +38,6 @@ uniform sampler2DRect lightMap;
 uniform sampler2DRect depthMap;
 uniform samplerCube environmentMap;
 uniform sampler2D	  lightFunc;
-uniform vec3 gi_quad;
 
 uniform float blur_size;
 uniform float blur_fidelity;
@@ -60,16 +59,13 @@ uniform float density_multiplier;
 uniform float distance_multiplier;
 uniform float max_y;
 uniform vec4 glow;
+uniform float global_gamma;
 uniform float scene_light_strength;
 uniform mat3 env_mat;
 uniform vec4 shadow_clip;
 uniform mat3 ssao_effect_mat;
 
-uniform mat4 inv_proj;
-uniform vec2 screen_res;
-
 uniform vec3 sun_dir;
-
 VARYING vec2 vary_fragcoord;
 
 vec3 vary_PositionEye;
@@ -79,6 +75,43 @@ vec3 vary_AmblitColor;
 vec3 vary_AdditiveColor;
 vec3 vary_AtmosAttenuation;
 
+uniform mat4 inv_proj;
+uniform vec2 screen_res;
+
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition_d(vec2 pos_screen, float depth)
 {
 	vec2 sc = pos_screen.xy*2.0;
@@ -118,7 +151,6 @@ vec3 getAtmosAttenuation()
 	return vary_AtmosAttenuation;
 }
 
-
 void setPositionEye(vec3 v)
 {
 	vary_PositionEye = v;
@@ -222,6 +254,10 @@ void calcAtmospherics(vec3 inPositionEye, float ambFactor) {
 		  + tmpAmbient)));
 
 	//brightness of surface both sunlight and ambient
+	/*setSunlitColor(pow(vec3(sunlight * .5), vec3(global_gamma)) * global_gamma);
+	setAmblitColor(pow(vec3(tmpAmbient * .25), vec3(global_gamma)) * global_gamma);
+	setAdditiveColor(pow(getAdditiveColor() * vec3(1.0 - temp1), vec3(global_gamma)) * global_gamma);*/
+
 	setSunlitColor(vec3(sunlight * .5));
 	setAmblitColor(vec3(tmpAmbient * .25));
 	setAdditiveColor(getAdditiveColor() * vec3(1.0 - temp1));
@@ -239,6 +275,15 @@ vec3 atmosTransport(vec3 light) {
 	light += getAdditiveColor() * 2.0;
 	return light;
 }
+
+vec3 fullbrightAtmosTransport(vec3 light) {
+	float brightness = dot(light.rgb, vec3(0.33333));
+
+	return mix(atmosTransport(light.rgb), light.rgb + getAdditiveColor().rgb, brightness * brightness);
+}
+
+
+
 vec3 atmosGetDiffuseSunlightColor()
 {
 	return getSunlitColor();
@@ -273,65 +318,103 @@ vec3 scaleSoftClip(vec3 light)
 	return light;
 }
 
+
+vec3 fullbrightScaleSoftClip(vec3 light)
+{
+	//soft clip effect:
+	return light;
+}
+
 void main() 
 {
 	vec2 tc = vary_fragcoord.xy;
 	float depth = texture2DRect(depthMap, tc.xy).r;
 	vec3 pos = getPosition_d(tc, depth).xyz;
-	vec3 norm = texture2DRect(normalMap, tc).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	vec4 norm = texture2DRect(normalMap, tc);
+	float envIntensity = norm.z;
+	norm.xyz = decode_normal(norm.xy); // unpack norm
 		
 	float da = max(dot(norm.xyz, sun_dir.xyz), 0.0);
-	
+
+	float light_gamma = 1.0/1.3;
+	da = pow(da, light_gamma);
+
+
 	vec4 diffuse = texture2DRect(diffuseRect, tc);
 
+	//convert to gamma space
+	diffuse.rgb = pow(diffuse.rgb, vec3(1.0/2.2));
+	
 	vec3 col;
 	float bloom = 0.0;
-
-	if (diffuse.a < 0.9)
 	{
 		vec4 spec = texture2DRect(specularRect, vary_fragcoord.xy);
 		
 		vec2 scol_ambocc = texture2DRect(lightMap, vary_fragcoord.xy).rg;
+		scol_ambocc = pow(scol_ambocc, vec2(light_gamma));
+
 		float scol = max(scol_ambocc.r, diffuse.a); 
+
+		
+
 		float ambocc = scol_ambocc.g;
 	
 		calcAtmospherics(pos.xyz, ambocc);
 	
 		col = atmosAmbient(vec3(0));
-		col += atmosAffectDirectionalLight(max(min(da, scol), diffuse.a));
+		float ambient = min(abs(dot(norm.xyz, sun_dir.xyz)), 1.0);
+		ambient *= 0.5;
+		ambient *= ambient;
+		ambient = (1.0-ambient);
+
+		col.rgb *= ambient;
+
+		col += atmosAffectDirectionalLight(max(min(da, scol), 0.0));
 	
 		col *= diffuse.rgb;
 	
+		vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+
 		if (spec.a > 0.0) // specular reflection
 		{
 			// the old infinite-sky shiny reflection
 			//
-			vec3 refnormpersp = normalize(reflect(pos.xyz, norm.xyz));
+			
 			float sa = dot(refnormpersp, sun_dir.xyz);
-			vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*(6 * texture2D(lightFunc, vec2(sa, spec.a)).r);
-
+			vec3 dumbshiny = vary_SunlitColor*scol_ambocc.r*(texture2D(lightFunc, vec2(sa, spec.a)).r);
+			
 			// add the two types of shiny together
 			vec3 spec_contrib = dumbshiny * spec.rgb;
-			bloom = dot(spec_contrib, spec_contrib) / 4;
+			bloom = dot(spec_contrib, spec_contrib) / 6;
 			col += spec_contrib;
+		}
+	
+		
+		col = mix(col, diffuse.rgb, diffuse.a);
 
-			//add environmentmap
+		if (envIntensity > 0.0)
+		{ //add environmentmap
 			vec3 env_vec = env_mat * refnormpersp;
-			col = mix(col.rgb, textureCube(environmentMap, env_vec).rgb, 
-				max(spec.a-diffuse.a*2.0, 0.0)); 
-		}
 			
-		col = atmosLighting(col);
-		col = scaleSoftClip(col);
+			vec3 refcol = textureCube(environmentMap, env_vec).rgb;
 
-		col = mix(col, diffuse.rgb, diffuse.a);
-	}
-	else
-	{
-		col = diffuse.rgb;
+			col = mix(col.rgb, refcol, 
+				envIntensity);  
+
+		}
+						
+		if (norm.w < 0.5)
+		{
+			col = mix(atmosLighting(col), fullbrightAtmosTransport(col), diffuse.a);
+			col = mix(scaleSoftClip(col), fullbrightScaleSoftClip(col), diffuse.a);
+		}
+
+		col = pow(col, vec3(2.2));
+
+		//col = vec3(1,0,1);
+		//col.g = envIntensity;
 	}
-		
+	
 	frag_color.rgb = col;
 	frag_color.a = bloom;
 }
diff --git a/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/softenLightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
old mode 100644
new mode 100755
index 6d6ad6d5655560e5e07ce8008edf82c6500adb8d..fc0e6b2388991e5297073fafac187290ce002561
--- a/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/spotLightF.glsl
@@ -39,6 +39,7 @@ uniform samplerCube environmentMap;
 uniform sampler2DRect lightMap;
 uniform sampler2D noiseMap;
 uniform sampler2D projectionMap;
+uniform sampler2D lightFunc;
 
 uniform mat4 proj_mat; //screen space to light space
 uniform float proj_near; //near clip for projection
@@ -67,9 +68,49 @@ uniform vec2 screen_res;
 
 uniform mat4 inv_proj;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
+vec4 correctWithGamma(vec4 col)
+{
+	return vec4(pow(col.rgb, vec3(2.2)), col.a);
+}
+
 vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = tc-vec2(0.5);
 	
@@ -85,6 +126,7 @@ vec4 texture2DLodSpecular(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = vec2(0.5) - abs(tc-vec2(0.5));
 	
@@ -102,6 +144,7 @@ vec4 texture2DLodDiffuse(sampler2D projectionMap, vec2 tc, float lod)
 vec4 texture2DLodAmbient(sampler2D projectionMap, vec2 tc, float lod)
 {
 	vec4 ret = texture2DLod(projectionMap, tc, lod);
+	ret = correctWithGamma(ret);
 	
 	vec2 dist = tc-vec2(0.5);
 	
@@ -135,9 +178,9 @@ void main()
 	
 	vec3 pos = getPosition(frag.xy).xyz;
 	vec3 lv = trans_center.xyz-pos.xyz;
-	float dist2 = dot(lv,lv);
-	dist2 /= size;
-	if (dist2 > 1.0)
+	float dist = length(lv);
+	dist /= size;
+	if (dist > 1.0)
 	{
 		discard;
 	}
@@ -154,7 +197,8 @@ void main()
 	}
 	
 	vec3 norm = texture2DRect(normalMap, frag.xy).xyz;
-	norm = (norm.xyz-0.5)*2.0; // unpack norm
+	float envIntensity = norm.z;
+	norm = decode_normal(norm.xy);
 	
 	norm = normalize(norm);
 	float l_dist = -dot(lv, proj_n);
@@ -168,7 +212,10 @@ void main()
 	proj_tc.xyz /= proj_tc.w;
 	
 	float fa = falloff+1.0;
-	float dist_atten = min(1.0-(dist2-1.0*(1.0-fa))/fa, 1.0);
+	float dist_atten = min(1.0-(dist-1.0*(1.0-fa))/fa, 1.0);
+	dist_atten *= dist_atten;
+	dist_atten *= 2.0;
+
 	if (dist_atten <= 0.0)
 	{
 		discard;
@@ -182,6 +229,10 @@ void main()
 		
 	vec3 diff_tex = texture2DRect(diffuseRect, frag.xy).rgb;
 		
+	vec4 spec = texture2DRect(specularRect, frag.xy);
+
+	vec3 dlit = vec3(0, 0, 0);
+
 	float noise = texture2D(noiseMap, frag.xy/128.0).b;
 	if (proj_tc.z > 0.0 &&
 		proj_tc.x < 1.0 &&
@@ -189,21 +240,21 @@ void main()
 		proj_tc.x > 0.0 &&
 		proj_tc.y > 0.0)
 	{
-		float lit = 0.0;
 		float amb_da = proj_ambiance;
+		float lit = 0.0;
 		
 		if (da > 0.0)
 		{
+			lit = da * dist_atten * noise;
+
 			float diff = clamp((l_dist-proj_focus)/proj_range, 0.0, 1.0);
 			float lod = diff * proj_lod;
 			
 			vec4 plcol = texture2DLodDiffuse(projectionMap, proj_tc.xy, lod);
 		
-			vec3 lcol = color.rgb * plcol.rgb * plcol.a;
-			
-			lit = da * dist_atten * noise;
+			dlit = color.rgb * plcol.rgb * plcol.a;
 			
-			col = lcol*lit*diff_tex*shadow;
+			col = dlit*lit*diff_tex*shadow;
 			amb_da += (da*0.5)*(1.0-shadow)*proj_ambiance;
 		}
 		
@@ -219,9 +270,36 @@ void main()
 		col += amb_da*color.rgb*diff_tex.rgb*amb_plcol.rgb*amb_plcol.a;
 	}
 	
-	
-	vec4 spec = texture2DRect(specularRect, frag.xy);
+
 	if (spec.a > 0.0)
+	{
+		dlit *= min(da*6.0, 1.0) * dist_atten;
+		vec3 npos = -normalize(pos);
+
+		//vec3 ref = dot(pos+lv, norm);
+		vec3 h = normalize(lv+npos);
+		float nh = dot(norm, h);
+		float nv = dot(norm, npos);
+		float vh = dot(npos, h);
+		float sa = nh;
+		float fres = pow(1 - dot(h, npos), 5)*0.4+0.5;
+
+		float gtdenom = 2 * nh;
+		float gt = max(0, min(gtdenom * nv / vh, gtdenom * da / vh));
+								
+		if (nh > 0.0)
+		{
+			float scol = fres*texture2D(lightFunc, vec2(nh, spec.a)).r*gt/(nh*da);
+			col += dlit*scol*spec.rgb*shadow;
+			//col += spec.rgb;
+		}
+	}	
+	
+	
+	
+	
+
+	if (envIntensity > 0.0)
 	{
 		vec3 ref = reflect(normalize(pos), norm);
 		
@@ -239,8 +317,9 @@ void main()
 			{
 				stc.xy /= stc.w;
 
-				float fatten = clamp(spec.a*spec.a+spec.a*0.5, 0.25, 1.0);
+				float fatten = clamp(envIntensity*envIntensity+envIntensity*0.5, 0.25, 1.0);
 				
+				//stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 				stc.xy = (stc.xy - vec2(0.5)) * fatten + vec2(0.5);
 								
 				if (stc.x < 1.0 &&
@@ -248,8 +327,7 @@ void main()
 					stc.x > 0.0 &&
 					stc.y > 0.0)
 				{
-					vec4 scol = texture2DLodSpecular(projectionMap, stc.xy, proj_lod-spec.a*proj_lod);
-					col += dist_atten*scol.rgb*color.rgb*scol.a*spec.rgb*shadow;
+					col += color.rgb*texture2DLodSpecular(projectionMap, stc.xy, proj_lod-envIntensity*proj_lod).rgb*shadow*spec.rgb;										
 				}
 			}
 		}
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
old mode 100644
new mode 100755
index 890486c4b1dcab790fd6c9e33eb82255dcefab0b..7b09dd29ddec1029163a47badfd5c8afb5335380
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightF.glsl
@@ -65,6 +65,40 @@ uniform float shadow_offset;
 uniform float spot_shadow_bias;
 uniform float spot_shadow_offset;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -125,11 +159,9 @@ void main()
 	
 	vec4 pos = getPosition(pos_screen);
 	
-	vec4 nmap4 = texture2DRect(normalMap, pos_screen);
-	nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
-	float displace = nmap4.w;
-	vec3 norm = nmap4.xyz;
-	
+	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
+	norm = decode_normal(norm.xy); // unpack norm
+		
 	/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
 	{
 		frag_color = vec4(0.0); // doesn't matter
@@ -138,8 +170,8 @@ void main()
 	
 	float shadow = 0.0;
 	float dp_directional_light = max(0.0, dot(norm, sun_dir.xyz));
-
-	vec3 shadow_pos = pos.xyz + displace*norm;
+	
+	vec3 shadow_pos = pos.xyz;
 	vec3 offset = sun_dir.xyz * (1.0-dp_directional_light);
 	
 	vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
old mode 100644
new mode 100755
index 2dcd3d656fd8ca480d3f50c8e841f8f4e3ef9d0b..01e34ed792547cc994992145db801e27abf3db2a
--- a/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
+++ b/indra/newview/app_settings/shaders/class2/deferred/sunLightSSAOF.glsl
@@ -66,6 +66,40 @@ uniform float shadow_offset;
 uniform float spot_shadow_bias;
 uniform float spot_shadow_offset;
 
+#ifdef SINGLE_FP_ONLY
+vec2 encode_normal(vec3 n)
+{
+	vec2 sn;
+	sn.xy = (n.xy * vec2(0.5f,0.5f)) + vec2(0.5f,0.5f);
+	return sn;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+	vec3 n;
+	n.xy = (enc.xy * vec2(2.0f,2.0f)) - vec2(1.0f,1.0f);
+	n.z = sqrt(1.0f - dot(n.xy,n.xy));
+	return n;
+}
+#else
+vec2 encode_normal(vec3 n)
+{
+	float f = sqrt(8 * n.z + 8);
+	return n.xy / f + 0.5;
+}
+
+vec3 decode_normal (vec2 enc)
+{
+    vec2 fenc = enc*4-2;
+    float f = dot(fenc,fenc);
+    float g = sqrt(1-f/4);
+    vec3 n;
+    n.xy = fenc*g;
+    n.z = 1-f/2;
+    return n;
+}
+#endif
+
 vec4 getPosition(vec2 pos_screen)
 {
 	float depth = texture2DRect(depthMap, pos_screen.xy).r;
@@ -186,11 +220,9 @@ void main()
 	
 	vec4 pos = getPosition(pos_screen);
 	
-	vec4 nmap4 = texture2DRect(normalMap, pos_screen);
-	nmap4 = vec4((nmap4.xyz-0.5)*2.0,nmap4.w); // unpack norm
-	float displace = nmap4.w;
-	vec3 norm = nmap4.xyz;
-	
+	vec3 norm = texture2DRect(normalMap, pos_screen).xyz;
+	norm = decode_normal(norm.xy); // unpack norm
+		
 	/*if (pos.z == 0.0) // do nothing for sky *FIX: REMOVE THIS IF/WHEN THE POSITION MAP IS BEING USED AS A STENCIL
 	{
 		frag_color = vec4(0.0); // doesn't matter
@@ -199,8 +231,8 @@ void main()
 	
 	float shadow = 0.0;
 	float dp_directional_light = max(0.0, dot(norm, sun_dir.xyz));
-
-	vec3 shadow_pos = pos.xyz + displace*norm;
+	
+	vec3 shadow_pos = pos.xyz;
 	vec3 offset = sun_dir.xyz * (1.0-dp_directional_light);
 	
 	vec4 spos = vec4(shadow_pos+offset*shadow_offset, 1.0);
diff --git a/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl b/indra/newview/app_settings/shaders/class2/deferred/sunLightV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsSpecularV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class2/lighting/sumLightsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsHelpersV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
old mode 100644
new mode 100755
index da3d922017db3ed7844e544e647ba19260ddb758..d174805cc08c739c70b2255b4aafbdc096547dc9
--- a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
+++ b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsV.glsl
@@ -129,7 +129,7 @@ void calcAtmospherics(vec3 inPositionEye) {
 		vec3(blue_horizon * blue_weight * (sunlight*(1.-cloud_shadow) + tmpAmbient)
 	  + (haze_horizon * haze_weight) * (sunlight*(1.-cloud_shadow) * temp2.x
 		  + tmpAmbient)));
-
+	
 	//brightness of surface both sunlight and ambient
 	setSunlitColor(vec3(sunlight * .5));
 	setAmblitColor(vec3(tmpAmbient * .25));
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterF.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterV.glsl b/indra/newview/app_settings/shaders/class2/windlight/atmosphericsVarsWaterV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl b/indra/newview/app_settings/shaders/class2/windlight/cloudsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl b/indra/newview/app_settings/shaders/class2/windlight/gammaF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl b/indra/newview/app_settings/shaders/class2/windlight/skyV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl b/indra/newview/app_settings/shaders/class2/windlight/transportF.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl b/indra/newview/app_settings/shaders/class3/avatar/avatarV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsSpecularV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl b/indra/newview/app_settings/shaders/class3/lighting/sumLightsV.glsl
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/shaders/shader_hierarchy.txt b/indra/newview/app_settings/shaders/shader_hierarchy.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/static_data.db2 b/indra/newview/app_settings/static_data.db2
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/static_index.db2 b/indra/newview/app_settings/static_index.db2
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/std_bump.ini b/indra/newview/app_settings/std_bump.ini
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/toolbars.xml b/indra/newview/app_settings/toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/trees.xml b/indra/newview/app_settings/trees.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/ultra_graphics.xml b/indra/newview/app_settings/ultra_graphics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/viewerart.xml b/indra/newview/app_settings/viewerart.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/clouds2.tga b/indra/newview/app_settings/windlight/clouds2.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Colder%20Tones.xml b/indra/newview/app_settings/windlight/days/Colder%20Tones.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Default.xml b/indra/newview/app_settings/windlight/days/Default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml b/indra/newview/app_settings/windlight/days/Dynamic%20Richness.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml b/indra/newview/app_settings/windlight/days/Pirate%27s%20Dream.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml b/indra/newview/app_settings/windlight/days/Psycho%20Strobe%21.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Tropicalia.xml b/indra/newview/app_settings/windlight/days/Tropicalia.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/days/Weird-O.xml b/indra/newview/app_settings/windlight/days/Weird-O.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/postprocesseffects.xml b/indra/newview/app_settings/windlight/postprocesseffects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D12AM.xml b/indra/newview/app_settings/windlight/skies/A%2D12AM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D12PM.xml b/indra/newview/app_settings/windlight/skies/A%2D12PM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D3AM.xml b/indra/newview/app_settings/windlight/skies/A%2D3AM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D3PM.xml b/indra/newview/app_settings/windlight/skies/A%2D3PM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D6AM.xml b/indra/newview/app_settings/windlight/skies/A%2D6AM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D6PM.xml b/indra/newview/app_settings/windlight/skies/A%2D6PM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D9AM.xml b/indra/newview/app_settings/windlight/skies/A%2D9AM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/A%2D9PM.xml b/indra/newview/app_settings/windlight/skies/A%2D9PM.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Barcelona.xml b/indra/newview/app_settings/windlight/skies/Barcelona.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Blizzard.xml b/indra/newview/app_settings/windlight/skies/Blizzard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml b/indra/newview/app_settings/windlight/skies/Blue%20Midday.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml b/indra/newview/app_settings/windlight/skies/Coastal%20Afternoon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml b/indra/newview/app_settings/windlight/skies/Coastal%20Sunset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Default.xml b/indra/newview/app_settings/windlight/skies/Default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml b/indra/newview/app_settings/windlight/skies/Desert%20Sunset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Fine%20Day.xml b/indra/newview/app_settings/windlight/skies/Fine%20Day.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml b/indra/newview/app_settings/windlight/skies/Fluffy%20Big%20Clouds.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Foggy.xml b/indra/newview/app_settings/windlight/skies/Foggy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml b/indra/newview/app_settings/windlight/skies/Funky%20Funky%20Funky.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml b/indra/newview/app_settings/windlight/skies/Funky%20Funky.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Gelatto.xml b/indra/newview/app_settings/windlight/skies/Gelatto.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Ghost.xml b/indra/newview/app_settings/windlight/skies/Ghost.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml b/indra/newview/app_settings/windlight/skies/Incongruent%20Truths.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Midday%201.xml b/indra/newview/app_settings/windlight/skies/Midday%201.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Midday%202.xml b/indra/newview/app_settings/windlight/skies/Midday%202.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Midday%203.xml b/indra/newview/app_settings/windlight/skies/Midday%203.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Midday%204.xml b/indra/newview/app_settings/windlight/skies/Midday%204.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Midday.xml b/indra/newview/app_settings/windlight/skies/Midday.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Midnight.xml b/indra/newview/app_settings/windlight/skies/Midnight.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Night.xml b/indra/newview/app_settings/windlight/skies/Night.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Pirate.xml b/indra/newview/app_settings/windlight/skies/Pirate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Purple.xml b/indra/newview/app_settings/windlight/skies/Purple.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml b/indra/newview/app_settings/windlight/skies/Sailor%27s%20Delight.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml b/indra/newview/app_settings/windlight/skies/Sheer%20Surreality.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Sunrise.xml b/indra/newview/app_settings/windlight/skies/Sunrise.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/skies/Sunset.xml b/indra/newview/app_settings/windlight/skies/Sunset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/Default.xml b/indra/newview/app_settings/windlight/water/Default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/Glassy.xml b/indra/newview/app_settings/windlight/water/Glassy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/Murky.xml b/indra/newview/app_settings/windlight/water/Murky.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/Pond.xml b/indra/newview/app_settings/windlight/water/Pond.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml b/indra/newview/app_settings/windlight/water/SNAKE%21%21%21.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/Second%20Plague.xml b/indra/newview/app_settings/windlight/water/Second%20Plague.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/app_settings/windlight/water/Valdez.xml b/indra/newview/app_settings/windlight/water/Valdez.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/build_win32_appConfig.py b/indra/newview/build_win32_appConfig.py
old mode 100644
new mode 100755
diff --git a/indra/newview/character/attentions.xml b/indra/newview/character/attentions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/character/attentionsN.xml b/indra/newview/character/attentionsN.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_eye.llm b/indra/newview/character/avatar_eye.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_eye_1.llm b/indra/newview/character/avatar_eye_1.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_eyelashes.llm b/indra/newview/character/avatar_eyelashes.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_hair.llm b/indra/newview/character/avatar_hair.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_hair_1.llm b/indra/newview/character/avatar_hair_1.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_hair_2.llm b/indra/newview/character/avatar_hair_2.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_hair_3.llm b/indra/newview/character/avatar_hair_3.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_hair_4.llm b/indra/newview/character/avatar_hair_4.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_hair_5.llm b/indra/newview/character/avatar_hair_5.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_head.llm b/indra/newview/character/avatar_head.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_head_1.llm b/indra/newview/character/avatar_head_1.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_head_2.llm b/indra/newview/character/avatar_head_2.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_head_3.llm b/indra/newview/character/avatar_head_3.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_head_4.llm b/indra/newview/character/avatar_head_4.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_lad.xml b/indra/newview/character/avatar_lad.xml
old mode 100644
new mode 100755
index 284e9c44b286ee6b4352b2f47759395eac54aed9..e5b385f4aa3f66edac719dd119342ca65bf9208c
--- a/indra/newview/character/avatar_lad.xml
+++ b/indra/newview/character/avatar_lad.xml
@@ -1084,8 +1084,7 @@
          scale="0 0 .5" />
       </param_skeleton>
     </param>
-
-    <param
+                          <param
      id="11001"
      group="0"
      name="Hover"
@@ -12308,7 +12307,7 @@ render_pass="bump">
 	 <param_driver />
     </param>
 
-    <param
+  <param
      id="11000"
      group="0"
      name="AppearanceMessage_Version"
diff --git a/indra/newview/character/avatar_lower_body.llm b/indra/newview/character/avatar_lower_body.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_lower_body_1.llm b/indra/newview/character/avatar_lower_body_1.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_lower_body_2.llm b/indra/newview/character/avatar_lower_body_2.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_lower_body_3.llm b/indra/newview/character/avatar_lower_body_3.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_lower_body_4.llm b/indra/newview/character/avatar_lower_body_4.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_skeleton.xml b/indra/newview/character/avatar_skeleton.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_skirt.llm b/indra/newview/character/avatar_skirt.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_skirt_1.llm b/indra/newview/character/avatar_skirt_1.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_skirt_2.llm b/indra/newview/character/avatar_skirt_2.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_skirt_3.llm b/indra/newview/character/avatar_skirt_3.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_skirt_4.llm b/indra/newview/character/avatar_skirt_4.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_upper_body.llm b/indra/newview/character/avatar_upper_body.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_upper_body_1.llm b/indra/newview/character/avatar_upper_body_1.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_upper_body_2.llm b/indra/newview/character/avatar_upper_body_2.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_upper_body_3.llm b/indra/newview/character/avatar_upper_body_3.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/avatar_upper_body_4.llm b/indra/newview/character/avatar_upper_body_4.llm
old mode 100644
new mode 100755
diff --git a/indra/newview/character/blush_alpha.tga b/indra/newview/character/blush_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/body_skingrain.tga b/indra/newview/character/body_skingrain.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bodyfreckles_alpha.tga b/indra/newview/character/bodyfreckles_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bump_face_wrinkles.tga b/indra/newview/character/bump_face_wrinkles.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bump_head_base.tga b/indra/newview/character/bump_head_base.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bump_lowerbody_base.tga b/indra/newview/character/bump_lowerbody_base.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bump_pants_wrinkles.tga b/indra/newview/character/bump_pants_wrinkles.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bump_shirt_wrinkles.tga b/indra/newview/character/bump_shirt_wrinkles.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/bump_upperbody_base.tga b/indra/newview/character/bump_upperbody_base.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/checkerboard.tga b/indra/newview/character/checkerboard.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/eyebrows_alpha.tga b/indra/newview/character/eyebrows_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/eyeliner_alpha.tga b/indra/newview/character/eyeliner_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/eyeshadow_inner_alpha.tga b/indra/newview/character/eyeshadow_inner_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/eyeshadow_outer_alpha.tga b/indra/newview/character/eyeshadow_outer_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/eyewhite.tga b/indra/newview/character/eyewhite.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/facehair_chincurtains_alpha.tga b/indra/newview/character/facehair_chincurtains_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/facehair_moustache_alpha.tga b/indra/newview/character/facehair_moustache_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/facehair_sideburns_alpha.tga b/indra/newview/character/facehair_sideburns_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/facehair_soulpatch_alpha.tga b/indra/newview/character/facehair_soulpatch_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/freckles_alpha.tga b/indra/newview/character/freckles_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/genepool.xml b/indra/newview/character/genepool.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/character/glove_length_alpha.tga b/indra/newview/character/glove_length_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/gloves_fingers_alpha.tga b/indra/newview/character/gloves_fingers_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/head_alpha.tga b/indra/newview/character/head_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/head_color.tga b/indra/newview/character/head_color.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/head_hair.tga b/indra/newview/character/head_hair.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/head_highlights_alpha.tga b/indra/newview/character/head_highlights_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/head_shading_alpha.tga b/indra/newview/character/head_shading_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/head_skingrain.tga b/indra/newview/character/head_skingrain.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/jacket_length_lower_alpha.tga b/indra/newview/character/jacket_length_lower_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/jacket_length_upper_alpha.tga b/indra/newview/character/jacket_length_upper_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/jacket_open_lower_alpha.tga b/indra/newview/character/jacket_open_lower_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/jacket_open_upper_alpha.tga b/indra/newview/character/jacket_open_upper_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/lipgloss_alpha.tga b/indra/newview/character/lipgloss_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/lips_mask.tga b/indra/newview/character/lips_mask.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/lipstick_alpha.tga b/indra/newview/character/lipstick_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/lowerbody_color.tga b/indra/newview/character/lowerbody_color.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/lowerbody_highlights_alpha.tga b/indra/newview/character/lowerbody_highlights_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/lowerbody_shading_alpha.tga b/indra/newview/character/lowerbody_shading_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/nailpolish_alpha.tga b/indra/newview/character/nailpolish_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/pants_length_alpha.tga b/indra/newview/character/pants_length_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/pants_waist_alpha.tga b/indra/newview/character/pants_waist_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/rosyface_alpha.tga b/indra/newview/character/rosyface_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/rouge_alpha.tga b/indra/newview/character/rouge_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/shirt_bottom_alpha.tga b/indra/newview/character/shirt_bottom_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/shirt_collar_alpha.tga b/indra/newview/character/shirt_collar_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/shirt_collar_back_alpha.tga b/indra/newview/character/shirt_collar_back_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/shirt_sleeve_alpha.tga b/indra/newview/character/shirt_sleeve_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/shoe_height_alpha.tga b/indra/newview/character/shoe_height_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/skirt_length_alpha.tga b/indra/newview/character/skirt_length_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/skirt_slit_back_alpha.tga b/indra/newview/character/skirt_slit_back_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/skirt_slit_front_alpha.tga b/indra/newview/character/skirt_slit_front_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/skirt_slit_left_alpha.tga b/indra/newview/character/skirt_slit_left_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/skirt_slit_right_alpha.tga b/indra/newview/character/skirt_slit_right_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/underpants_trial_female.tga b/indra/newview/character/underpants_trial_female.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/underpants_trial_male.tga b/indra/newview/character/underpants_trial_male.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/undershirt_trial_female.tga b/indra/newview/character/undershirt_trial_female.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/upperbody_color.tga b/indra/newview/character/upperbody_color.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/upperbody_highlights_alpha.tga b/indra/newview/character/upperbody_highlights_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/upperbody_shading_alpha.tga b/indra/newview/character/upperbody_shading_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/character/upperbodyfreckles_alpha.tga b/indra/newview/character/upperbodyfreckles_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_ARROW.tif b/indra/newview/cursors_mac/UI_CURSOR_ARROW.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_ARROWDRAG.tif b/indra/newview/cursors_mac/UI_CURSOR_ARROWDRAG.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_ARROWLOCKED.tif b/indra/newview/cursors_mac/UI_CURSOR_ARROWLOCKED.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_GRABLOCKED.tif b/indra/newview/cursors_mac/UI_CURSOR_GRABLOCKED.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_NO.tif b/indra/newview/cursors_mac/UI_CURSOR_NO.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_NOLOCKED.tif b/indra/newview/cursors_mac/UI_CURSOR_NOLOCKED.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_END_ADD.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif b/indra/newview/cursors_mac/UI_CURSOR_PATHFINDING_START_ADD.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZENESW.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZENESW.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZENS.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZENS.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZENWSE.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZENWSE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_SIZEWE.tif b/indra/newview/cursors_mac/UI_CURSOR_SIZEWE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLBUY.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLCAMERA.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLCAMERA.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLCREATE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLCREATE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLFOCUS.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLFOCUS.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLGRAB.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLGRAB.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLLAND.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLLAND.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLMEDIAOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLMEDIAOPEN.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLOPEN.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPAN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPAN.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPAUSE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPAUSE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPICKOBJECT3.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPICKOBJECT3.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLPLAY.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLPLAY.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLROTATE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLROTATE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSCALE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSCALE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLSIT.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLTRANSLATE.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLTRANSLATE.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMIN.tif b/indra/newview/cursors_mac/UI_CURSOR_TOOLZOOMIN.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/cursors_mac/UI_CURSOR_WORKING.tif b/indra/newview/cursors_mac/UI_CURSOR_WORKING.tif
old mode 100644
new mode 100755
diff --git a/indra/newview/da.lproj/language.txt b/indra/newview/da.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/es.lproj/language.txt b/indra/newview/es.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/featuretable.txt b/indra/newview/featuretable.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/featuretable_linux.txt b/indra/newview/featuretable_linux.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/featuretable_mac.txt b/indra/newview/featuretable_mac.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/featuretable_solaris.txt b/indra/newview/featuretable_solaris.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/featuretable_xp.txt b/indra/newview/featuretable_xp.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/fmod_hidden_symbols.exp b/indra/newview/fmod_hidden_symbols.exp
deleted file mode 100644
index 1e790255bc65f0a58eba47152a17532bbf50eab6..0000000000000000000000000000000000000000
--- a/indra/newview/fmod_hidden_symbols.exp
+++ /dev/null
@@ -1,240 +0,0 @@
-_CarbonSndPlayDoubleBuffer
-_ConvertFromIeeeExtended
-__book_maptype1_quantvals
-__book_unquantize
-__float32_pack
-__float32_unpack
-__ilog
-__make_words
-_lpc_clear
-_lpc_init
-__vorbis_block_alloc
-__vorbis_block_ripcord
-__vorbis_apply_window
-__vorbis_window_get
-_vorbis_analysis_blockout
-_vorbis_analysis_buffer
-_vorbis_analysis_wrote
-_vorbis_block_clear
-_vorbis_block_init
-_vorbis_dsp_clear
-_vorbis_synthesis_blockin
-_vorbis_synthesis_init
-_vorbis_synthesis_pcmout
-_vorbis_synthesis_read
-_vorbis_packet_blocksize
-_vorbis_synthesis
-_vorbis_book_clear
-_vorbis_book_decode
-_vorbis_book_decodev_add
-_vorbis_book_decodev_set
-_vorbis_book_decodevs_add
-_vorbis_book_decodevv_add
-_vorbis_book_init_decode
-_vorbis_comment_add
-_vorbis_comment_add_tag
-_vorbis_comment_clear
-_vorbis_comment_init
-_vorbis_comment_query
-_vorbis_comment_query_count
-_vorbis_coslook
-_vorbis_fromdBlook
-_vorbis_info_blocksize
-_vorbis_info_clear
-_vorbis_info_init
-_vorbis_invsq2explook
-_vorbis_invsqlook
-_vorbis_lpc_from_curve
-_vorbis_lpc_from_data
-_vorbis_lpc_predict
-_vorbis_lsp_to_curve
-_vorbis_staticbook_clear
-_vorbis_staticbook_destroy
-_vorbis_staticbook_unpack
-_vorbis_synthesis_headerin
-_vorbis_synthesis_lapout
-_vorbis_synthesis_restart
-_vorbis_synthesis_trackonly
-_vorbis_window
-_ogg_packet_clear
-_ogg_page_bos
-_ogg_page_checksum_set
-_ogg_page_continued
-_ogg_page_eos
-_ogg_page_granulepos
-_ogg_page_packets
-_ogg_page_pageno
-_ogg_page_serialno
-_ogg_page_version
-_ogg_stream_reset_serialno
-_ogg_stream_clear
-_ogg_stream_destroy
-_ogg_stream_eos
-_ogg_stream_flush
-_ogg_stream_init
-_ogg_stream_packetout
-_ogg_stream_packetpeek
-_ogg_stream_pagein
-_ogg_stream_pageout
-_ogg_stream_reset
-_ogg_sync_buffer
-_ogg_sync_clear
-_ogg_sync_destroy
-_ogg_sync_init
-_ogg_sync_pageout
-_ogg_sync_pageseek
-_ogg_sync_reset
-_ogg_sync_wrote
-_ov_bitrate
-_ov_bitrate_instant
-_ov_clear
-_ov_comment
-_ov_info
-_ov_open
-_ov_open_callbacks
-_ov_pcm_seek
-_ov_pcm_seek_page
-_ov_pcm_tell
-_ov_pcm_total
-_ov_raw_seek
-_ov_raw_tell
-_ov_raw_total
-_ov_read
-_ov_read_float
-_ov_seekable
-_ov_serialnumber
-_ov_streams
-_ov_test
-_ov_test_callbacks
-_ov_test_open
-_ov_time_seek
-_ov_time_seek_page
-_ov_time_tell
-_ov_time_total
-_ogg_toupper
-_oggpackB_adv
-_oggpackB_adv1
-_oggpackB_bits
-_oggpackB_bytes
-_oggpackB_get_buffer
-_oggpackB_look
-_oggpackB_look1
-_oggpackB_read
-_oggpackB_read1
-_oggpackB_readinit
-_oggpackB_reset
-_oggpack_adv
-_oggpack_adv1
-_oggpack_bits
-_oggpack_bytes
-_oggpack_get_buffer
-_oggpack_look
-_oggpack_look1
-_oggpack_read
-_oggpack_read1
-_oggpack_readinit
-_oggpack_reset
-_ov_crosslap
-_ov_pcm_seek_lap
-_ov_pcm_seek_page_lap
-_ov_raw_seek_lap
-_ov_time_seek_lap
-_ov_time_seek_page_lap
-_II_step_one
-_II_step_two
-_MyRecComp
-_SampleRates
-_Sinfo
-_ValidStepIndex
-__Z11fmodwrapperv
-__Z11fmodwrapperv.eh
-__floor_P
-__mapping_P
-__residue_P
-__ve_envelope_clear
-__ve_envelope_init
-__ve_envelope_mark
-__ve_envelope_search
-__ve_envelope_shift
-__vi_gpsy_free
-__vi_psy_free
-__vorbis_window_init
-__vp_ampmax_decay
-__vp_couple
-__vp_global_free
-__vp_global_look
-__vp_noise_normalize
-__vp_noise_normalize_sort
-__vp_noisemask
-__vp_offset_and_mix
-__vp_psy_clear
-__vp_psy_init
-__vp_quantize_couple_memo
-__vp_quantize_couple_sort
-__vp_remove_floor
-__vp_tonemask
-_alloc_0
-_alloc_1
-_alloc_2
-_alloc_3
-_alloc_4
-_bandInfo
-_cdcallback
-_cdchannel
-_cdmode
-_cdnumtracks
-_cdstream
-_cdtrack
-_drft_backward
-_drft_clear
-_drft_forward
-_drft_init
-_eatwhite
-_floor0_exportbundle
-_floor1_exportbundle
-_gFreeList
-_gNMRecBusy
-_gNMRecPtr
-_gSilenceOnes
-_gSilenceTwos
-_longLimit
-_mapping0_exportbundle
-_mdct_backward
-_mdct_clear
-_mdct_forward
-_mdct_init
-_muls
-_mystrdup
-_res0_free_info
-_res0_free_look
-_res0_inverse
-_res0_look
-_res0_unpack
-_res1_class
-_res1_inverse
-_res2_inverse
-_residue0_exportbundle
-_residue1_exportbundle
-_residue2_exportbundle
-_scale
-_shortLimit
-_tabsel_123
-_F_Free
-_F_Malloc
-_F_ReAlloc
-_F_memcmp
-_F_memmove
-_F_strcat
-_F_strchr
-_F_strcmp
-_F_strcpy
-_F_stricmp
-_F_strlen
-_F_strncat
-_F_strncmp
-_F_strncpy
-_F_strnicmp
-_F_strstr
-_F_strupr
-_F_tolower
-_F_toupper
diff --git a/indra/newview/fonts/DejaVu-license.txt b/indra/newview/fonts/DejaVu-license.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/fonts/DejaVuSans-Bold.ttf b/indra/newview/fonts/DejaVuSans-Bold.ttf
old mode 100644
new mode 100755
diff --git a/indra/newview/fonts/DejaVuSans-BoldOblique.ttf b/indra/newview/fonts/DejaVuSans-BoldOblique.ttf
old mode 100644
new mode 100755
diff --git a/indra/newview/fonts/DejaVuSans-Oblique.ttf b/indra/newview/fonts/DejaVuSans-Oblique.ttf
old mode 100644
new mode 100755
diff --git a/indra/newview/fonts/DejaVuSans.ttf b/indra/newview/fonts/DejaVuSans.ttf
old mode 100644
new mode 100755
diff --git a/indra/newview/fonts/DejaVuSansMono.ttf b/indra/newview/fonts/DejaVuSansMono.ttf
old mode 100644
new mode 100755
diff --git a/indra/newview/fr.lproj/language.txt b/indra/newview/fr.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/generate_breakpad_symbols.py b/indra/newview/generate_breakpad_symbols.py
old mode 100644
new mode 100755
diff --git a/indra/newview/gpu_table.txt b/indra/newview/gpu_table.txt
old mode 100644
new mode 100755
index 4c39014c8b5238a1cdfc75d41fd96fad94ccab47..c64e11929df8b09d55a9d2787487405d50eb2c3e
--- a/indra/newview/gpu_table.txt
+++ b/indra/newview/gpu_table.txt
@@ -32,20 +32,20 @@
 //		1 - We claim to support this card.
 //
 
-3Dfx									.*3Dfx.*								0	0	0	0
-3Dlabs									.*3Dlabs.*								0	0	0	0
-ATI 3D-Analyze							.*ATI.*3D-Analyze.*						0	0	0	0
-ATI All-in-Wonder 7500					.*ATI.*All-in-Wonder 75.*				0	1	0	0
-ATI All-in-Wonder 8500					.*ATI.*All-in-Wonder 85.*				0	1	0	0
-ATI All-in-Wonder 9200					.*ATI.*All-in-Wonder 92.*				0	1	0	0
+3Dfx									.*3Dfx.*											0	0	0	0
+3Dlabs									.*3Dlabs.*											0	0	0	0
+ATI 3D-Analyze							.*ATI.*3D-Analyze.*									0	0	0	0
+ATI All-in-Wonder 7500					.*ATI.*All-in-Wonder 75.*							0	1	0	0
+ATI All-in-Wonder 8500					.*ATI.*All-in-Wonder 85.*							0	1	0	0
+ATI All-in-Wonder 9200					.*ATI.*All-in-Wonder 92.*							0	1	0	0
 ATI All-in-Wonder 9xxx					.*ATI.*All-in-Wonder 9.*				1	1	0	0
-ATI All-in-Wonder HD					.*ATI.*All-in-Wonder HD.*				1	1	1	3.3
-ATI All-in-Wonder X600					.*ATI.*All-in-Wonder X6.*				1	1	0	0
-ATI All-in-Wonder X800					.*ATI.*All-in-Wonder X8.*				1	1	1	2.1
-ATI All-in-Wonder X1800					.*ATI.*All-in-Wonder X18.*				3	1	0	0
-ATI All-in-Wonder X1900					.*ATI.*All-in-Wonder X19.*				3	1	0	0
-ATI All-in-Wonder PCI-E					.*ATI.*All-in-Wonder.*PCI-E.*			1	1	0	0
-ATI All-in-Wonder Radeon				.*ATI.*All-in-Wonder Radeon.*			0	1	0	0
+ATI All-in-Wonder HD					.*ATI.*All-in-Wonder HD.*							1	1	1	3.3
+ATI All-in-Wonder X600					.*ATI.*All-in-Wonder X6.*							1	1	0	0
+ATI All-in-Wonder X800					.*ATI.*All-in-Wonder X8.*							1	1	1	2.1
+ATI All-in-Wonder X1800					.*ATI.*All-in-Wonder X18.*							3	1	0	0
+ATI All-in-Wonder X1900					.*ATI.*All-in-Wonder X19.*							3	1	0	0
+ATI All-in-Wonder PCI-E					.*ATI.*All-in-Wonder.*PCI-E.*						1	1	0	0
+ATI All-in-Wonder Radeon				.*ATI.*All-in-Wonder Radeon.*						0	1	0	0
 ATI ASUS ARES							.*ATI.*ASUS.*ARES.*						3	1	0	0
 ATI ASUS A9xxx							.*ATI.*ASUS.*A9.*						1	1	0	0
 ATI ASUS AH24xx							.*ATI.*ASUS.*AH24.*						1	1	1	3.3
@@ -79,30 +79,30 @@ ATI ASUS Radeon X1xxx					.*ATI.*ASUS.*X1.*						2	1	1	2.1
 ATI Radeon X7xx							.*ATI.*ASUS.*X7.*						1	1	0	0
 ATI Radeon X19xx						.*ATI.*(Radeon|Diamond) X19.* ?.*		2	1	1	2.1
 ATI Radeon X18xx						.*ATI.*(Radeon|Diamond) X18.* ?.*		3	1	1	2.1
-ATI Radeon X17xx						.*ATI.*(Radeon|Diamond) X17.* ?.*		1	1	1	2.1
+ATI Radeon X17xx						.*ATI.*(Radeon|Diamond) X17.* ?.*					1	1	1	2.1
 ATI Radeon X16xx						.*ATI.*(Radeon|Diamond) X16.* ?.*		1	1	1	2.1
 ATI Radeon X15xx						.*ATI.*(Radeon|Diamond) X15.* ?.*		1	1	1	2.1
 ATI Radeon X13xx						.*ATI.*(Radeon|Diamond) X13.* ?.*		1	1	1	2.1
 ATI Radeon X1xxx						.*ATI.*(Radeon|Diamond) X1.. ?.*		0	1	1	2.1
 ATI Radeon X2xxx						.*ATI.*(Radeon|Diamond) X2.. ?.*		1	1	1	2.1
-ATI Display Adapter						.*ATI.*display adapter.*				1	1	1	4.1
-ATI FireGL 5200							.*ATI.*FireGL V52.*						1	1	1	2.1
-ATI FireGL 5xxx							.*ATI.*FireGL V5.*						2	1	1	3.3
-ATI FireGL								.*ATI.*Fire.*GL.*						4	1	1	4.2
+ATI Display Adapter						.*ATI.*display adapter.*							1	1	1	4.1
+ATI FireGL 5200							.*ATI.*FireGL V52.*									1	1	1	2.1
+ATI FireGL 5xxx							.*ATI.*FireGL V5.*									2	1	1	3.3
+ATI FireGL								.*ATI.*Fire.*GL.*									4	1	1	4.2
 ATI FirePro M3900						.*ATI.*FirePro.*M39.*					2	1	0	0
-ATI FirePro M5800						.*ATI.*FirePro.*M58.*					3	1	0	0
-ATI FirePro M7740						.*ATI.*FirePro.*M77.*					3	1	0	0
-ATI FirePro M7820						.*ATI.*FirePro.*M78.*					5	1	1	4.2
+ATI FirePro M5800						.*ATI.*FirePro.*M58.*								3	1	0	0
+ATI FirePro M7740						.*ATI.*FirePro.*M77.*								3	1	0	0
+ATI FirePro M7820						.*ATI.*FirePro.*M78.*								5	1	1	4.2
 ATI FireMV								.*ATI.*FireMV.*							0	1	1	1.3
-ATI Generic								.*ATI.*Generic.*						0	0	0	0
-ATI Hercules 9800						.*ATI.*Hercules.*9800.*					1	1	0	0
+ATI Generic								.*ATI.*Generic.*									0	0	0	0
+ATI Hercules 9800						.*ATI.*Hercules.* 9800.*							1	1	0	0
 ATI IGP 340M							.*ATI.*IGP.*340M.*						0	0	0	0
-ATI M52									.*ATI.*M52.*							1	1	0	0
-ATI M54									.*ATI.*M54.*							1	1	0	0
-ATI M56									.*ATI.*M56.*							1	1	0	0
-ATI M71									.*ATI.*M71.*							1	1	0	0
-ATI M72									.*ATI.*M72.*							1	1	0	0
-ATI M76									.*ATI.*M76.*							3	1	0	0
+ATI M52									.*ATI.*M52.*										1	1	0	0
+ATI M54									.*ATI.*M54.*										1	1	0	0
+ATI M56									.*ATI.*M56.*										1	1	0	0
+ATI M71									.*ATI.*M71.*										1	1	0	0
+ATI M72									.*ATI.*M72.*										1	1	0	0
+ATI M76									.*ATI.*M76.*										3	1	0	0
 ATI Radeon HD 64xx						.*ATI.*AMD Radeon.* HD [67]4..[MG]		2	1	1	4.2
 ATI Radeon HD 65xx						.*ATI.*AMD Radeon.* HD [67]5..[MG]		2	1	1	4.2
 ATI Radeon HD 66xx						.*ATI.*AMD Radeon.* HD [67]6..[MG]		3	1	1	4.2
@@ -124,12 +124,12 @@ ATI ASUS HD7600							.*ATI.*ASUS.* HD76.*					3	1	0	0
 ATI ASUS HD7700							.*ATI.*ASUS.* HD77.*					4	1	1	4.2
 ATI ASUS HD7800							.*ATI.*ASUS.* HD78.*					5	1	1	4.2
 ATI ASUS HD7900							.*ATI.*ASUS.* HD79.*					5	1	1	4.2
-ATI Mobility Radeon 4100				.*ATI.*Mobility.*41..					1	1	1	3.3
-ATI Mobility Radeon 7xxx				.*ATI.*Mobility.*Radeon 7.*				0	1	1	1.3
-ATI Mobility Radeon 8xxx				.*ATI.*Mobility.*Radeon 8.*				0	1	0	0
-ATI Mobility Radeon 9800				.*ATI.*Mobility.*98.*					1	1	0	0
-ATI Mobility Radeon 9700				.*ATI.*Mobility.*97.*					0	1	1	2.1
-ATI Mobility Radeon 9600				.*ATI.*Mobility.*96.*					1	1	1	2.1
+ATI Mobility Radeon 4100				.*ATI.*Mobility.* 41..								1	1	1	3.3
+ATI Mobility Radeon 7xxx				.*ATI.*Mobility.*Radeon 7.*							0	1	1	1.3
+ATI Mobility Radeon 8xxx				.*ATI.*Mobility.*Radeon 8.*							0	1	0	0
+ATI Mobility Radeon 9800				.*ATI.*Mobility.* 98.*								1	1	0	0
+ATI Mobility Radeon 9700				.*ATI.*Mobility.* 97.*								0	1	1	2.1
+ATI Mobility Radeon 9600				.*ATI.*Mobility.* 96.*								1	1	1	2.1
 ATI Mobility Radeon HD 530v				.*ATI.*Mobility.*HD *530v.*				1	1	1	3.3
 ATI Mobility Radeon HD 540v				.*ATI.*Mobility.*HD *540v.*				1	1	1	3.3
 ATI Mobility Radeon HD 545v				.*ATI.*Mobility.*HD *545v.*				2	1	1	4
@@ -176,7 +176,7 @@ ATI Radeon HD 3400						.*ATI.*Radeon HD *34..					1	1	1	4
 ATI Radeon HD 3500						.*ATI.*Radeon HD *35..					2	1	0	0
 ATI Radeon HD 3600						.*ATI.*Radeon HD *36..					3	1	1	3.3
 ATI Radeon HD 3700						.*ATI.*Radeon HD *37..					3	1	0	0
-ATI HD3700								.*ATI.* HD37..							3	1	0	3.3
+ATI HD3700								.*ATI.* HD37..										3	1	0	3.3
 ATI Radeon HD 3800						.*ATI.*Radeon HD *38..					3	1	1	4
 ATI Radeon HD 4100						.*ATI.*Radeon HD *41..					1	1	0	0
 ATI Radeon HD 4200						.*ATI.*Radeon HD *42..					1	1	1	4
@@ -202,128 +202,128 @@ ATI Radeon HD 6600						.*ATI.*Radeon HD *66..					3	1	1	4.2
 ATI Radeon HD 6700						.*ATI.*Radeon HD *67..					3	1	1	4.2
 ATI Radeon HD 6800						.*ATI.*Radeon HD *68..					4	1	1	4.2
 ATI Radeon HD 6900						.*ATI.*Radeon HD *69..					5	1	1	4.2
-ATI Radeon OpenGL						.*ATI.*Radeon OpenGL.*					0	0	0	0
-ATI Radeon 2100							.*ATI.*Radeon 21..						0	1	1	2.1
-ATI Radeon 3000							.*ATI.*Radeon 30..						1	1	1	4
-ATI Radeon 3100							.*ATI.*Radeon 31..						0	1	1	3.3
-ATI Radeon 5xxx							.*ATI.*Radeon 5...						3	1	0	0
-ATI Radeon 7xxx							.*ATI.*Radeon 7...						0	1	1	2
-ATI Radeon 8xxx							.*ATI.*Radeon 8...						0	1	0	0
-ATI Radeon 9000							.*ATI.*Radeon 90..						0	1	1	1.3
-ATI Radeon 9100							.*ATI.*Radeon 91..						0	1	0	0
-ATI Radeon 9200							.*ATI.*Radeon 92..						0	1	1	1.3
-ATI Radeon 9500							.*ATI.*Radeon 95..						0	1	1	2.1
-ATI Radeon 9600							.*ATI.*Radeon 96..						0	1	1	2.1
-ATI Radeon 9700							.*ATI.*Radeon 97..						1	1	0	0
-ATI Radeon 9800							.*ATI.*Radeon 98..						1	1	1	2.1
-ATI Radeon RV250						.*ATI.*RV250.*							0	1	0	0
-ATI Radeon RV600						.*ATI.*RV6.*							1	1	0	0
-ATI Radeon RX700						.*ATI.*RX70.*							1	1	0	0
+ATI Radeon OpenGL						.*ATI.*Radeon OpenGL.*								0	0	0	0
+ATI Radeon 2100							.*ATI.*Radeon 21..									0	1	1	2.1
+ATI Radeon 3000							.*ATI.*Radeon 30..									1	1	1	4
+ATI Radeon 3100							.*ATI.*Radeon 31..									0	1	1	3.3
+ATI Radeon 5xxx							.*ATI.*Radeon 5...									3	1	0	0
+ATI Radeon 7xxx							.*ATI.*Radeon 7...									0	1	1	2
+ATI Radeon 8xxx							.*ATI.*Radeon 8...									0	1	0	0
+ATI Radeon 9000							.*ATI.*Radeon 90..									0	1	1	1.3
+ATI Radeon 9100							.*ATI.*Radeon 91..									0	1	0	0
+ATI Radeon 9200							.*ATI.*Radeon 92..									0	1	1	1.3
+ATI Radeon 9500							.*ATI.*Radeon 95..									0	1	1	2.1
+ATI Radeon 9600							.*ATI.*Radeon 96..									0	1	1	2.1
+ATI Radeon 9700							.*ATI.*Radeon 97..									1	1	0	0
+ATI Radeon 9800							.*ATI.*Radeon 98..									1	1	1	2.1
+ATI Radeon RV250						.*ATI.*RV250.*										0	1	0	0
+ATI Radeon RV600						.*ATI.*RV6.*										1	1	0	0
+ATI Radeon RX700						.*ATI.*RX70.*										1	1	0	0
 ATI Radeon RX800						.*ATI.*Radeon *RX80.*					2	1	0	0
-ATI RS880M								.*ATI.*RS880M							1	1	0	0
-ATI Radeon RX9550						.*ATI.*RX9550.*							1	1	0	0
-ATI Radeon VE							.*ATI.*Radeon.*VE.*						0	0	0	0
+ATI RS880M								.*ATI.*RS880M										1	1	0	0
+ATI Radeon RX9550						.*ATI.*RX9550.*										1	1	0	0
+ATI Radeon VE							.*ATI.*Radeon.*VE.*									0	0	0	0
 ATI Radeon X300							.*ATI.*Radeon *X3.*						1	1	1	2.1
-ATI Radeon X400							.*ATI.*Radeon ?X4.*						0	1	0	0
-ATI Radeon X500							.*ATI.*Radeon ?X5.*						1	1	1	2.1
+ATI Radeon X400							.*ATI.*Radeon ?X4.*									0	1	0	0
+ATI Radeon X500							.*ATI.*Radeon ?X5.*									1	1	1	2.1
 ATI Radeon X600							.*ATI.*Radeon ?X6.*						1	1	1	2.1
-ATI Radeon X700							.*ATI.*Radeon ?X7.*						2	1	1	2.1
-ATI Radeon X800							.*ATI.*Radeon ?X8.*						1	1	1	2.1
-ATI Radeon X900							.*ATI.*Radeon ?X9.*						2	1	0	0
-ATI Radeon Xpress						.*ATI.*Radeon Xpress.*					0	1	1	2.1
-ATI Rage 128							.*ATI.*Rage 128.*						0	1	0	0
-ATI R300 (9700)							.*R300.*								0	1	1	2.1
-ATI R350 (9800)							.*R350.*								1	1	0	0
-ATI R580 (X1900)						.*R580.*								3	1	0	0
-ATI RC410 (Xpress 200)					.*RC410.*								0	0	0	0
-ATI RS48x (Xpress 200x)					.*RS48.*								0	0	0	0
-ATI RS600 (Xpress 3200)					.*RS600.*								0	0	0	0
-ATI RV350 (9600)						.*RV350.*								0	1	0	0
-ATI RV370 (X300)						.*RV370.*								0	1	0	0
-ATI RV410 (X700)						.*RV410.*								1	1	0	0
-ATI RV515								.*RV515.*								1	1	0	0
-ATI RV570 (X1900 GT/PRO)				.*RV570.*								3	1	0	0
-ATI RV380								.*RV380.*								0	1	0	0
-ATI RV530								.*RV530.*								1	1	0	0
-ATI RX480 (Xpress 200P)					.*RX480.*								0	1	0	0
-ATI RX700								.*RX700.*								1	1	0	0
-AMD ANTILLES (HD 6990)					.*(AMD|ATI).*Antilles.*					3	1	0	0
-AMD BARTS (HD 6800)						.*(AMD|ATI).*Barts.*					3	1	1	2.1
-AMD CAICOS (HD 6400)					.*(AMD|ATI).*Caicos.*					3	1	0	0
-AMD CAYMAN (HD 6900)					.*(AMD|ATI).*(Cayman|CAYMAM).*			3	1	0	0
+ATI Radeon X700							.*ATI.*Radeon ?X7.*									2	1	1	2.1
+ATI Radeon X800							.*ATI.*Radeon ?X8.*									1	1	1	2.1
+ATI Radeon X900							.*ATI.*Radeon ?X9.*									2	1	0	0
+ATI Radeon Xpress						.*ATI.*Radeon Xpress.*								0	1	1	2.1
+ATI Rage 128							.*ATI.*Rage 128.*									0	1	0	0
+ATI R300 (9700)							.*R300.*											0	1	1	2.1
+ATI R350 (9800)							.*R350.*											1	1	0	0
+ATI R580 (X1900)						.*R580.*											3	1	0	0
+ATI RC410 (Xpress 200)					.*RC410.*											0	0	0	0
+ATI RS48x (Xpress 200x)					.*RS48.*											0	0	0	0
+ATI RS600 (Xpress 3200)					.*RS600.*											0	0	0	0
+ATI RV350 (9600)						.*RV350.*											0	1	0	0
+ATI RV370 (X300)						.*RV370.*											0	1	0	0
+ATI RV410 (X700)						.*RV410.*											1	1	0	0
+ATI RV515								.*RV515.*											1	1	0	0
+ATI RV570 (X1900 GT/PRO)				.*RV570.*											3	1	0	0
+ATI RV380								.*RV380.*											0	1	0	0
+ATI RV530								.*RV530.*											1	1	0	0
+ATI RX480 (Xpress 200P)					.*RX480.*											0	1	0	0
+ATI RX700								.*RX700.*											1	1	0	0
+AMD ANTILLES (HD 6990)					.*(AMD|ATI).*Antilles.*								3	1	0	0
+AMD BARTS (HD 6800)						.*(AMD|ATI).*Barts.*								3	1	1	2.1
+AMD CAICOS (HD 6400)					.*(AMD|ATI).*Caicos.*								3	1	0	0
+AMD CAYMAN (HD 6900)					.*(AMD|ATI).*(Cayman|CAYMAM).*						3	1	0	0
 AMD CEDAR (HD 5450)						.*(AMD|ATI).*Cedar.*					2	1	0	0
-AMD CYPRESS (HD 5800)					.*(AMD|ATI).*Cypress.*					3	1	0	0
-AMD HEMLOCK (HD 5970)					.*(AMD|ATI).*Hemlock.*					3	1	0	0
-AMD JUNIPER (HD 5700)					.*(AMD|ATI).*Juniper.*					3	1	0	0
-AMD PARK								.*(AMD|ATI).*Park.*						3	1	0	0
+AMD CYPRESS (HD 5800)					.*(AMD|ATI).*Cypress.*								3	1	0	0
+AMD HEMLOCK (HD 5970)					.*(AMD|ATI).*Hemlock.*								3	1	0	0
+AMD JUNIPER (HD 5700)					.*(AMD|ATI).*Juniper.*								3	1	0	0
+AMD PARK								.*(AMD|ATI).*Park.*									3	1	0	0
 AMD REDWOOD (HD 5500/5600)				.*(AMD|ATI).*Redwood.*					3	1	0	0
 AMD TURKS (HD 6500/6600)				.*(AMD|ATI).*Turks.*					3	1	0	0
-AMD RS780 (HD 3200)						.*RS780.*								0	1	1	2.1
-AMD RS880 (HD 4200)						.*RS880.*								0	1	1	3.2
-AMD RV610 (HD 2400)						.*RV610.*								1	1	0	0
-AMD RV620 (HD 3400)						.*RV620.*								1	1	0	0
-AMD RV630 (HD 2600)						.*RV630.*								2	1	0	0
+AMD RS780 (HD 3200)						.*RS780.*											0	1	1	2.1
+AMD RS880 (HD 4200)						.*RS880.*											0	1	1	3.2
+AMD RV610 (HD 2400)						.*RV610.*											1	1	0	0
+AMD RV620 (HD 3400)						.*RV620.*											1	1	0	0
+AMD RV630 (HD 2600)						.*RV630.*											2	1	0	0
 AMD RV635 (HD 3600)						.*RV635.*								3	1	0	0
-AMD RV670 (HD 3800)						.*RV670.*								3	1	0	0
-AMD R680 (HD 3870 X2)					.*R680.*								3	1	0	0
-AMD R700 (HD 4800 X2)					.*R700.*								3	1	0	0
-AMD RV710 (HD 4300)						.*RV710.*								0	1	1	1.4
+AMD RV670 (HD 3800)						.*RV670.*											3	1	0	0
+AMD R680 (HD 3870 X2)					.*R680.*											3	1	0	0
+AMD R700 (HD 4800 X2)					.*R700.*											3	1	0	0
+AMD RV710 (HD 4300)						.*RV710.*											0	1	1	1.4
 AMD RV730 (HD 4600)						.*RV730.*								3	1	0	0
-AMD RV740 (HD 4700)						.*RV740.*								3	1	0	0
-AMD RV770 (HD 4800)						.*RV770.*								3	1	0	0
-AMD RV790 (HD 4800)						.*RV790.*								3	1	0	0
-ATI 760G/Radeon 3000					.*ATI.*AMD 760G.*						1	1	1	3.3
-ATI 780L/Radeon 3000					.*ATI.*AMD 780L.*						1	1	0	0
-ATI Radeon DDR							.*ATI.*Radeon ?DDR.*					0	1	0	0
+AMD RV740 (HD 4700)						.*RV740.*											3	1	0	0
+AMD RV770 (HD 4800)						.*RV770.*											3	1	0	0
+AMD RV790 (HD 4800)						.*RV790.*											3	1	0	0
+ATI 760G/Radeon 3000					.*ATI.*AMD 760G.*									1	1	1	3.3
+ATI 780L/Radeon 3000					.*ATI.*AMD 780L.*									1	1	0	0
+ATI Radeon DDR							.*ATI.*Radeon ?DDR.*								0	1	0	0
 ATI FirePro 2000						.*ATI.*FirePro 2.*						2	1	1	4.1
-ATI FirePro 3000						.*ATI.*FirePro V3.*						2	1	0	0
+ATI FirePro 3000						.*ATI.*FirePro V3.*									2	1	0	0
 ATI FirePro 4000						.*ATI.*FirePro V4.*						2	1	0	0
-ATI FirePro 5000						.*ATI.*FirePro V5.*						3	1	0	0
-ATI FirePro 7000						.*ATI.*FirePro V7.*						3	1	0	0
-ATI FirePro M							.*ATI.*FirePro M.*						3	1	1	4.2
-ATI R300 (9700)							.*R300.*								0	1	1	2.1
+ATI FirePro 5000						.*ATI.*FirePro V5.*									3	1	0	0
+ATI FirePro 7000						.*ATI.*FirePro V7.*									3	1	0	0
+ATI FirePro M							.*ATI.*FirePro M.*									3	1	1	4.2
+ATI R300 (9700)							.*R300.*											0	1	1	2.1
 ATI Radeon								.*ATI.*(Diamond|Radeon).*				0	1	0	4.2
-Intel X3100								.*Intel.*X3100.*						1	1	1	2.1
-Intel GMA 3600							.*Intel.* 3600.*						0	1	1	3
-Intel 830M								.*Intel.*830M							0	0	0	0
-Intel 845G								.*Intel.*845G							0	0	1	1.4
-Intel 855GM								.*Intel.*855GM							0	0	1	1.4
-Intel 865G								.*Intel.*865G							0	0	1	1.4
-Intel 900								.*Intel.*900.*900						0	0	0	0
-Intel 915GM								.*Intel.*915GM							0	0	1	1.4
-Intel 915G								.*Intel.*915G							0	0	1	1.4
-Intel 945GM								.*Intel.*945GM.*						0	1	1	1.4
-Intel 945G								.*Intel.*945G.*							0	1	1	1.4
-Intel 950								.*Intel.*950.*							0	1	1	1.4
-Intel 965								.*Intel.*965.*							0	1	1	2.1
-Intel G33								.*Intel.*G33.*							1	0	1	1.4
-Intel G41								.*Intel.*G41.*							1	1	1	2.1
-Intel G45								.*Intel.*G45.*							1	1	1	2.1
-Intel Bear Lake							.*Intel.*Bear Lake.*					1	0	1	1.4
-Intel Broadwater						.*Intel.*Broadwater.*					0	0	1	1.4
-Intel Brookdale							.*Intel.*Brookdale.*					0	0	1	1.3
-Intel Cantiga							.*Intel.*Cantiga.*						0	0	1	2
-Intel Eaglelake							.*Intel.*Eaglelake.*					1	1	1	2
-Intel Graphics Media HD					.*Intel.*Graphics Media.*HD.*			1	1	1	2.1
-Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*				2	1	0	4
-Intel HD Graphics 3000					.*Intel.*HD Graphics 3.*				3	1	1	3.1
-Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*				3	1	1	4
+Intel X3100								.*Intel.*X3100.*									1	1	1	2.1
+Intel GMA 3600							.*Intel.* 3600.*									0	1	1	3
+Intel 830M								.*Intel.*830M										0	0	0	0
+Intel 845G								.*Intel.*845G										0	0	1	1.4
+Intel 855GM								.*Intel.*855GM										0	0	1	1.4
+Intel 865G								.*Intel.*865G										0	0	1	1.4
+Intel 900								.*Intel.*900.*900									0	0	0	0
+Intel 915GM								.*Intel.*915GM										0	0	1	1.4
+Intel 915G								.*Intel.*915G										0	0	1	1.4
+Intel 945GM								.*Intel.*945GM.*									0	1	1	1.4
+Intel 945G								.*Intel.*945G.*										0	1	1	1.4
+Intel 950								.*Intel.*950.*										0	1	1	1.4
+Intel 965								.*Intel.*965.*										0	1	1	2.1
+Intel G33								.*Intel.*G33.*										1	0	1	1.4
+Intel G41								.*Intel.*G41.*										1	1	1	2.1
+Intel G45								.*Intel.*G45.*										1	1	1	2.1
+Intel Bear Lake							.*Intel.*Bear Lake.*								1	0	1	1.4
+Intel Broadwater						.*Intel.*Broadwater.*								0	0	1	1.4
+Intel Brookdale							.*Intel.*Brookdale.*								0	0	1	1.3
+Intel Cantiga							.*Intel.*Cantiga.*									0	0	1	2
+Intel Eaglelake							.*Intel.*Eaglelake.*								1	1	1	2
+Intel Graphics Media HD					.*Intel.*Graphics Media.*HD.*						1	1	1	2.1
+Intel HD Graphics 2000					.*Intel.*HD Graphics 2.*							2	1	0	4
+Intel HD Graphics 3000					.*Intel.*HD Graphics 3.*							3	1	1	3.1
+Intel HD Graphics 4000					.*Intel.*HD Graphics 4.*							3	1	1	4
 Intel HD2000							.*Intel.*HD2000.*						2	1	0	0
 Intel HD3000							.*Intel.*HD3000.*						3	1	0	0
-Intel HD Graphics						.*Intel.*HD Graphics.*					2	1	1	4
-Intel Mobile 4 Series					.*Intel.*Mobile.* 4 Series.*			0	1	1	2.1
-Intel 4 Series Internal					.*Intel.* 4 Series Internal.*			1	1	1	2.1
-Intel Media Graphics HD					.*Intel.*Media Graphics HD.*			0	1	0	0
-Intel Montara							.*Intel.*Montara.*						0	0	1	1.3
-Intel Pineview							.*Intel.*Pineview.*						0	1	1	1.4
-Intel Springdale						.*Intel.*Springdale.*					0	0	1	1.3
-Intel Grantsdale						.*Intel.*Grantsdale.*					1	1	0	0
-Intel Q45/Q43							.*Intel.*Q4.*							1	1	1	2.1
-Intel B45/B43							.*Intel.*B4.*							1	1	1	2.1
-Intel 3D-Analyze						.*Intel.*3D-Analyze.*					2	1	0	0
-Matrox									.*Matrox.*								0	0	0	0
+Intel HD Graphics						.*Intel.*HD Graphics.*								2	1	1	4
+Intel Mobile 4 Series					.*Intel.*Mobile.* 4 Series.*						0	1	1	2.1
+Intel 4 Series Internal					.*Intel.* 4 Series Internal.*						1	1	1	2.1
+Intel Media Graphics HD					.*Intel.*Media Graphics HD.*						0	1	0	0
+Intel Montara							.*Intel.*Montara.*									0	0	1	1.3
+Intel Pineview							.*Intel.*Pineview.*									0	1	1	1.4
+Intel Springdale						.*Intel.*Springdale.*								0	0	1	1.3
+Intel Grantsdale						.*Intel.*Grantsdale.*								1	1	0	0
+Intel Q45/Q43							.*Intel.*Q4.*										1	1	1	2.1
+Intel B45/B43							.*Intel.*B4.*										1	1	1	2.1
+Intel 3D-Analyze						.*Intel.*3D-Analyze.*								2	1	0	0
+Matrox									.*Matrox.*											0	0	0	0
 Mesa									.*Mesa.*								1	0	1	2.1
-Gallium									.*Gallium.*								1	1	1	2.1
+Gallium									.*Gallium.*											1	1	1	2.1
 NVIDIA G100M							.*NVIDIA .*100M.*						4	1	1	3.3
 NVIDIA G102M							.*NVIDIA .*102M.*						1	1	1	3.3
 NVIDIA G103M							.*NVIDIA .*103M.*						2	1	1	3.3
@@ -380,14 +380,14 @@ NVIDIA GTX 660M							.*NVIDIA .*GTX *66*M.*					5	1	0	0
 NVIDIA GTX 670M							.*NVIDIA .*GTX *67*M.*					5	1	1	4.2
 NVIDIA GTX 680M							.*NVIDIA .*GTX *68*M.*					5	1	0	0
 NVIDIA GTX 690M							.*NVIDIA .*GTX *69*M.*					5	1	0	0
-NVIDIA G100								.*NVIDIA .*G10.*						3	1	1	4.2
+NVIDIA G100								.*NVIDIA .*G10.*									3	1	1	4.2
 NVIDIA GT 120							.*NVIDIA .*GT *12.*						2	1	0	3
 NVIDIA GT 130							.*NVIDIA .*GT *13.*						2	1	0	3.3
 NVIDIA GTS 150							.*NVIDIA .*GTS *15.*					2	1	0	0
-NVIDIA 200								.*NVIDIA .*GeForce 20.*					2	1	1	3.3
-NVIDIA G200								.*NVIDIA .*GeForce G20.*				2	1	1	3.3
-NVIDIA G210								.*NVIDIA .*GeForce G210.*				3	1	1	3.3
-NVIDIA 210								.*NVIDIA .*GeForce 210.*				3	1	1	3.3
+NVIDIA 200								.*NVIDIA .*GeForce 20.*								2	1	1	3.3
+NVIDIA G200								.*NVIDIA .*GeForce G20.*							2	1	1	3.3
+NVIDIA G210								.*NVIDIA .*GeForce G210.*							3	1	1	3.3
+NVIDIA 210								.*NVIDIA .*GeForce 210.*							3	1	1	3.3
 NVIDIA GT 220							.*NVIDIA .*GT *22.*						2	1	1	3.3
 NVIDIA GT 230							.*NVIDIA .*GT *23.*						2	1	1	3.3
 NVIDIA GT 240							.*NVIDIA .*GT *24.*						4	1	1	3.3
@@ -397,12 +397,12 @@ NVIDIA GTX 260							.*NVIDIA .*GTX *26.*					4	1	1	3.3
 NVIDIA GTX 270							.*NVIDIA .*GTX *27.*					4	1	0	3.3
 NVIDIA GTX 280							.*NVIDIA .*GTX *28.*					4	1	1	3.3
 NVIDIA GTX 290							.*NVIDIA .*GTX *29.*					5	1	0	3.3
-NVIDIA 310								.*NVIDIA .*GeForce 310.*				3	1	1	3.3
-NVIDIA 315								.*NVIDIA .*GeForce 315.*				3	1	1	3.3
+NVIDIA 310								.*NVIDIA .*GeForce 310.*							3	1	1	3.3
+NVIDIA 315								.*NVIDIA .*GeForce 315.*							3	1	1	3.3
 NVIDIA GT 320							.*NVIDIA .*GT *32.*						3	1	0	3.3
 NVIDIA GT 330							.*NVIDIA .*GT *33.*						3	1	0	3.3
 NVIDIA GT 340							.*NVIDIA .*GT *34.*						3	1	0	0
-NVIDIA 405								.*NVIDIA .* 405.*						3	1	0	3.3
+NVIDIA 405								.*NVIDIA .* 405.*									3	1	0	3.3
 NVIDIA GT 420							.*NVIDIA .*GT *42.*						3	1	1	4.2
 NVIDIA GT 430							.*NVIDIA .*GT *43.*						3	1	1	4.2
 NVIDIA GT 440							.*NVIDIA .*GT *44.*						4	1	0	4.2
@@ -429,125 +429,125 @@ NVIDIA GTX 660							.*NVIDIA .*GTX *66.*					5	1	0	4.3
 NVIDIA GTX 670							.*NVIDIA .*GTX *67.*					5	1	1	4.2
 NVIDIA GTX 680							.*NVIDIA .*GTX *68.*					5	1	1	4.2
 NVIDIA GTX 690							.*NVIDIA .*GTX *69.*					5	1	1	4.2
-NVIDIA C51								.*NVIDIA .*C51.*						0	1	1	2
-NVIDIA G72								.*NVIDIA .*G72.*						1	1	0	0
-NVIDIA G73								.*NVIDIA .*G73.*						1	1	0	0
-NVIDIA G84								.*NVIDIA .*G84.*						2	1	0	0
-NVIDIA G86								.*NVIDIA .*G86.*						3	1	0	0
-NVIDIA G92								.*NVIDIA .*G92.*						3	1	0	0
-NVIDIA GeForce							.*GeForce 256.*							0	0	0	0
-NVIDIA GeForce 2						.*GeForce ?2 ?.*						0	1	1	1.5
+NVIDIA C51								.*NVIDIA .*C51.*									0	1	1	2
+NVIDIA G72								.*NVIDIA .*G72.*									1	1	0	0
+NVIDIA G73								.*NVIDIA .*G73.*									1	1	0	0
+NVIDIA G84								.*NVIDIA .*G84.*									2	1	0	0
+NVIDIA G86								.*NVIDIA .*G86.*									3	1	0	0
+NVIDIA G92								.*NVIDIA .*G92.*									3	1	0	0
+NVIDIA GeForce							.*GeForce 256.*										0	0	0	0
+NVIDIA GeForce 2						.*GeForce ?2 ?.*									0	1	1	1.5
 NVIDIA GeForce 3						.*GeForce ?3 ?.*						2	1	1	2.1
 NVIDIA GeForce 3 Ti						.*GeForce ?3 Ti.*						0	1	0	0
-NVIDIA GeForce 4						.*NVIDIA .*GeForce ?4.*					0	1	1	1.5
+NVIDIA GeForce 4						.*NVIDIA .*GeForce ?4.*								0	1	1	1.5
 NVIDIA GeForce 4 Go						.*NVIDIA .*GeForce ?4.*Go.*				0	1	0	0
 NVIDIA GeForce 4 MX						.*NVIDIA .*GeForce ?4 MX.*				0	1	0	0
 NVIDIA GeForce 4 PCX					.*NVIDIA .*GeForce ?4 PCX.*				0	1	0	0
 NVIDIA GeForce 4 Ti						.*NVIDIA .*GeForce ?4 Ti.*				0	1	0	0
-NVIDIA GeForce 6100						.*NVIDIA .*GeForce 61.*					3	1	1	4.2
-NVIDIA GeForce 6200						.*NVIDIA .*GeForce 62.*					0	1	1	2.1
-NVIDIA GeForce 6500						.*NVIDIA .*GeForce 65.*					1	1	1	2.1
-NVIDIA GeForce 6600						.*NVIDIA .*GeForce 66.*					2	1	1	2.1
-NVIDIA GeForce 6700						.*NVIDIA .*GeForce 67.*					2	1	1	2.1
-NVIDIA GeForce 6800						.*NVIDIA .*GeForce 68.*					1	1	1	2.1
-NVIDIA GeForce 7000						.*NVIDIA .*GeForce 70.*					1	1	1	2.1
-NVIDIA GeForce 7100						.*NVIDIA .*GeForce 71.*					1	1	1	2.1
-NVIDIA GeForce 7200						.*NVIDIA .*GeForce 72.*					1	1	0	0
-NVIDIA GeForce 7300						.*NVIDIA .*GeForce 73.*					1	1	1	2.1
-NVIDIA GeForce 7500						.*NVIDIA .*GeForce 75.*					2	1	1	2.1
-NVIDIA GeForce 7600						.*NVIDIA .*GeForce 76.*					2	1	1	2.1
-NVIDIA GeForce 7800						.*NVIDIA .*GeForce 78.*					2	1	1	2.1
-NVIDIA GeForce 7900						.*NVIDIA .*GeForce 79.*					3	1	1	2.1
+NVIDIA GeForce 6100						.*NVIDIA .*GeForce 61.*								3	1	1	4.2
+NVIDIA GeForce 6200						.*NVIDIA .*GeForce 62.*								0	1	1	2.1
+NVIDIA GeForce 6500						.*NVIDIA .*GeForce 65.*								1	1	1	2.1
+NVIDIA GeForce 6600						.*NVIDIA .*GeForce 66.*								2	1	1	2.1
+NVIDIA GeForce 6700						.*NVIDIA .*GeForce 67.*								2	1	1	2.1
+NVIDIA GeForce 6800						.*NVIDIA .*GeForce 68.*								1	1	1	2.1
+NVIDIA GeForce 7000						.*NVIDIA .*GeForce 70.*								1	1	1	2.1
+NVIDIA GeForce 7100						.*NVIDIA .*GeForce 71.*								1	1	1	2.1
+NVIDIA GeForce 7200						.*NVIDIA .*GeForce 72.*								1	1	0	0
+NVIDIA GeForce 7300						.*NVIDIA .*GeForce 73.*								1	1	1	2.1
+NVIDIA GeForce 7500						.*NVIDIA .*GeForce 75.*								2	1	1	2.1
+NVIDIA GeForce 7600						.*NVIDIA .*GeForce 76.*								2	1	1	2.1
+NVIDIA GeForce 7800						.*NVIDIA .*GeForce 78.*								2	1	1	2.1
+NVIDIA GeForce 7900						.*NVIDIA .*GeForce 79.*								3	1	1	2.1
 NVIDIA GeForce 8100						.*NVIDIA .*GeForce 81.*					1	1	0	0
 NVIDIA GeForce 8200M					.*NVIDIA .*GeForce 8200M.*				1	1	0	3.3
 NVIDIA GeForce 8200						.*NVIDIA .*GeForce 82.*					1	1	0	2.1
-NVIDIA GeForce 8300						.*NVIDIA .*GeForce 83.*					3	1	1	3.3
+NVIDIA GeForce 8300						.*NVIDIA .*GeForce 83.*								3	1	1	3.3
 NVIDIA GeForce 8400M					.*NVIDIA .*GeForce 8400M.*				1	1	1	3.3
-NVIDIA GeForce 8400						.*NVIDIA .*GeForce 84.*					2	1	1	3.3
-NVIDIA GeForce 8500						.*NVIDIA .*GeForce 85.*					2	1	1	3.3
+NVIDIA GeForce 8400						.*NVIDIA .*GeForce 84.*								2	1	1	3.3
+NVIDIA GeForce 8500						.*NVIDIA .*GeForce 85.*								2	1	1	3.3
 NVIDIA GeForce 8600M					.*NVIDIA .*GeForce 8600M.*				2	1	1	3.3
-NVIDIA GeForce 8600						.*NVIDIA .*GeForce 86.*					3	1	1	3.3
+NVIDIA GeForce 8600						.*NVIDIA .*GeForce 86.*								3	1	1	3.3
 NVIDIA GeForce 8700M					.*NVIDIA .*GeForce 8700M.*				2	1	1	3.3
-NVIDIA GeForce 8700						.*NVIDIA .*GeForce 87.*					3	1	0	0
+NVIDIA GeForce 8700						.*NVIDIA .*GeForce 87.*								3	1	0	0
 NVIDIA GeForce 8800M					.*NVIDIA .*GeForce 8800M.*				2	1	1	3.3
-NVIDIA GeForce 8800						.*NVIDIA .*GeForce 88.*					3	1	1	3.3
+NVIDIA GeForce 8800						.*NVIDIA .*GeForce 88.*								3	1	1	3.3
 NVIDIA GeForce 9100M					.*NVIDIA .*GeForce 9100M.*				0	1	0	0
-NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*					0	1	0	3.3
+NVIDIA GeForce 9100						.*NVIDIA .*GeForce 91.*								0	1	0	3.3
 NVIDIA GeForce 9200M					.*NVIDIA .*GeForce 9200M.*				1	1	0	3.1
-NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*					1	1	0	3.3
+NVIDIA GeForce 9200						.*NVIDIA .*GeForce 92.*								1	1	0	3.3
 NVIDIA GeForce 9300M					.*NVIDIA .*GeForce 9300M.*				1	1	1	3.3
-NVIDIA GeForce 9300						.*NVIDIA .*GeForce 93.*					1	1	1	3.3
+NVIDIA GeForce 9300						.*NVIDIA .*GeForce 93.*								1	1	1	3.3
 NVIDIA GeForce 9400M					.*NVIDIA .*GeForce 9400M.*				2	1	1	3.3
-NVIDIA GeForce 9400						.*NVIDIA .*GeForce 94.*					3	1	1	3.3
+NVIDIA GeForce 9400						.*NVIDIA .*GeForce 94.*								3	1	1	3.3
 NVIDIA GeForce 9500M					.*NVIDIA .*GeForce 9500M.*				1	1	1	3.3
-NVIDIA GeForce 9500						.*NVIDIA .*GeForce 95.*					3	1	1	3.3
+NVIDIA GeForce 9500						.*NVIDIA .*GeForce 95.*								3	1	1	3.3
 NVIDIA GeForce 9600M					.*NVIDIA .*GeForce 9600M.*				2	1	1	3.3
-NVIDIA GeForce 9600						.*NVIDIA .*GeForce 96.*					3	1	1	3.3
+NVIDIA GeForce 9600						.*NVIDIA .*GeForce 96.*								3	1	1	3.3
 NVIDIA GeForce 9700M					.*NVIDIA .*GeForce 9700M.*				0	1	1	3.3
 NVIDIA GeForce 9800M					.*NVIDIA .*GeForce 9800M.*				2	1	1	3.3
-NVIDIA GeForce 9800						.*NVIDIA .*GeForce 98.*					3	1	1	3.3
-NVIDIA GeForce FX 5100					.*NVIDIA .*GeForce FX 51.*				0	1	0	0
-NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*				0	1	0	2.1
-NVIDIA GeForce FX 5300					.*NVIDIA .*GeForce FX 53.*				0	1	0	0
-NVIDIA GeForce FX 5500					.*NVIDIA .*GeForce FX 55.*				0	1	1	2.1
-NVIDIA GeForce FX 5600					.*NVIDIA .*GeForce FX 56.*				1	1	1	2.1
-NVIDIA GeForce FX 5700					.*NVIDIA .*GeForce FX 57.*				0	1	1	2.1
-NVIDIA GeForce FX 5800					.*NVIDIA .*GeForce FX 58.*				1	1	0	0
-NVIDIA GeForce FX 5900					.*NVIDIA .*GeForce FX 59.*				1	1	1	2.1
-NVIDIA GeForce FX Go5100				.*NVIDIA .*GeForce FX Go51.*			0	1	0	0
+NVIDIA GeForce 9800						.*NVIDIA .*GeForce 98.*								3	1	1	3.3
+NVIDIA GeForce FX 5100					.*NVIDIA .*GeForce FX 51.*							0	1	0	0
+NVIDIA GeForce FX 5200					.*NVIDIA .*GeForce FX 52.*							0	1	0	2.1
+NVIDIA GeForce FX 5300					.*NVIDIA .*GeForce FX 53.*							0	1	0	0
+NVIDIA GeForce FX 5500					.*NVIDIA .*GeForce FX 55.*							0	1	1	2.1
+NVIDIA GeForce FX 5600					.*NVIDIA .*GeForce FX 56.*							1	1	1	2.1
+NVIDIA GeForce FX 5700					.*NVIDIA .*GeForce FX 57.*							0	1	1	2.1
+NVIDIA GeForce FX 5800					.*NVIDIA .*GeForce FX 58.*							1	1	0	0
+NVIDIA GeForce FX 5900					.*NVIDIA .*GeForce FX 59.*							1	1	1	2.1
+NVIDIA GeForce FX Go5100				.*NVIDIA .*GeForce FX Go51.*						0	1	0	0
 NVIDIA GeForce FX Go5200				.*NVIDIA .*GeForce FX Go52.*			0	1	0	0
-NVIDIA GeForce FX Go5300				.*NVIDIA .*GeForce FX Go53.*			0	1	0	0
-NVIDIA GeForce FX Go5500				.*NVIDIA .*GeForce FX Go55.*			0	1	0	0
-NVIDIA GeForce FX Go5600				.*NVIDIA .*GeForce FX Go56.*			0	1	1	2.1
-NVIDIA GeForce FX Go5700				.*NVIDIA .*GeForce FX Go57.*			1	1	1	1.5
-NVIDIA GeForce FX Go5800				.*NVIDIA .*GeForce FX Go58.*			1	1	0	0
-NVIDIA GeForce FX Go5900				.*NVIDIA .*GeForce FX Go59.*			1	1	0	0
-NVIDIA GeForce FX Go5xxx				.*NVIDIA .*GeForce FX Go.*				0	1	0	0
-NVIDIA GeForce Go 6100					.*NVIDIA .*GeForce Go 61.*				0	1	1	2.1
+NVIDIA GeForce FX Go5300				.*NVIDIA .*GeForce FX Go53.*						0	1	0	0
+NVIDIA GeForce FX Go5500				.*NVIDIA .*GeForce FX Go55.*						0	1	0	0
+NVIDIA GeForce FX Go5600				.*NVIDIA .*GeForce FX Go56.*						0	1	1	2.1
+NVIDIA GeForce FX Go5700				.*NVIDIA .*GeForce FX Go57.*						1	1	1	1.5
+NVIDIA GeForce FX Go5800				.*NVIDIA .*GeForce FX Go58.*						1	1	0	0
+NVIDIA GeForce FX Go5900				.*NVIDIA .*GeForce FX Go59.*						1	1	0	0
+NVIDIA GeForce FX Go5xxx				.*NVIDIA .*GeForce FX Go.*							0	1	0	0
+NVIDIA GeForce Go 6100					.*NVIDIA .*GeForce Go 61.*							0	1	1	2.1
 NVIDIA GeForce Go 6200					.*NVIDIA .*GeForce Go 62.*				0	1	0	0
 NVIDIA GeForce Go 6400					.*NVIDIA .*GeForce Go 64.*				1	1	1	2
-NVIDIA GeForce Go 6500					.*NVIDIA .*GeForce Go 65.*				1	1	0	0
-NVIDIA GeForce Go 6600					.*NVIDIA .*GeForce Go 66.*				0	1	1	2.1
-NVIDIA GeForce Go 6700					.*NVIDIA .*GeForce Go 67.*				1	1	0	0
-NVIDIA GeForce Go 6800					.*NVIDIA .*GeForce Go 68.*				0	1	1	2.1
+NVIDIA GeForce Go 6500					.*NVIDIA .*GeForce Go 65.*							1	1	0	0
+NVIDIA GeForce Go 6600					.*NVIDIA .*GeForce Go 66.*							0	1	1	2.1
+NVIDIA GeForce Go 6700					.*NVIDIA .*GeForce Go 67.*							1	1	0	0
+NVIDIA GeForce Go 6800					.*NVIDIA .*GeForce Go 68.*							0	1	1	2.1
 NVIDIA GeForce Go 7200					.*NVIDIA .*GeForce Go 72.*				1	1	0	0
-NVIDIA GeForce Go 7300 LE				.*NVIDIA .*GeForce Go 73.*LE.*			1	1	0	0
-NVIDIA GeForce Go 7300					.*NVIDIA .*GeForce Go 73.*				1	1	1	2.1
-NVIDIA GeForce Go 7400					.*NVIDIA .*GeForce Go 74.*				1	1	1	2.1
-NVIDIA GeForce Go 7600					.*NVIDIA .*GeForce Go 76.*				1	1	1	2.1
-NVIDIA GeForce Go 7700					.*NVIDIA .*GeForce Go 77.*				0	1	1	2.1
-NVIDIA GeForce Go 7800					.*NVIDIA .*GeForce Go 78.*				2	1	0	0
-NVIDIA GeForce Go 7900					.*NVIDIA .*GeForce Go 79.*				1	1	1	2.1
-NVIDIA D9M								.*NVIDIA .*D9M.*						1	1	0	0
-NVIDIA G94								.*NVIDIA .*G94.*						3	1	0	0
-NVIDIA GeForce Go 6						.*GeForce Go 6.*						1	1	0	0
-NVIDIA ION 2							.*NVIDIA .*ION 2.*						2	1	0	0
-NVIDIA ION 								.*NVIDIA Corporation.*ION.*				2	1	1	3.3
-NVIDIA NB8M								.*NVIDIA .*NB8M.*						1	1	0	0
-NVIDIA NB8P								.*NVIDIA .*NB8P.*						2	1	0	0
-NVIDIA NB9E								.*NVIDIA .*NB9E.*						3	1	0	0
-NVIDIA NB9M								.*NVIDIA .*NB9M.*						1	1	0	0
-NVIDIA NB9P								.*NVIDIA .*NB9P.*						2	1	0	0
+NVIDIA GeForce Go 7300 LE				.*NVIDIA .*GeForce Go 73.*LE.*						1	1	0	0
+NVIDIA GeForce Go 7300					.*NVIDIA .*GeForce Go 73.*							1	1	1	2.1
+NVIDIA GeForce Go 7400					.*NVIDIA .*GeForce Go 74.*							1	1	1	2.1
+NVIDIA GeForce Go 7600					.*NVIDIA .*GeForce Go 76.*							1	1	1	2.1
+NVIDIA GeForce Go 7700					.*NVIDIA .*GeForce Go 77.*							0	1	1	2.1
+NVIDIA GeForce Go 7800					.*NVIDIA .*GeForce Go 78.*							2	1	0	0
+NVIDIA GeForce Go 7900					.*NVIDIA .*GeForce Go 79.*							1	1	1	2.1
+NVIDIA D9M								.*NVIDIA .*D9M.*									1	1	0	0
+NVIDIA G94								.*NVIDIA .*G94.*									3	1	0	0
+NVIDIA GeForce Go 6						.*GeForce Go 6.*									1	1	0	0
+NVIDIA ION 2							.*NVIDIA .*ION 2.*									2	1	0	0
+NVIDIA ION 								.*NVIDIA Corporation.*ION.*							2	1	1	3.3
+NVIDIA NB8M								.*NVIDIA .*NB8M.*									1	1	0	0
+NVIDIA NB8P								.*NVIDIA .*NB8P.*									2	1	0	0
+NVIDIA NB9E								.*NVIDIA .*NB9E.*									3	1	0	0
+NVIDIA NB9M								.*NVIDIA .*NB9M.*									1	1	0	0
+NVIDIA NB9P								.*NVIDIA .*NB9P.*									2	1	0	0
 NVIDIA N10								.*NVIDIA .*N10.*						1	1	0	0
 NVIDIA GeForce PCX						.*GeForce PCX.*							0	1	0	0
 NVIDIA Generic							.*NVIDIA .*Unknown.*					0	0	0	3
-NVIDIA NV17								.*NVIDIA .*NV17.*						0	1	0	0
-NVIDIA NV34								.*NVIDIA .*NV34.*						0	1	0	0
-NVIDIA NV35								.*NVIDIA .*NV35.*						0	1	0	0
-NVIDIA NV36								.*NVIDIA .*NV36.*						1	1	0	0
-NVIDIA NV41								.*NVIDIA .*NV41.*						1	1	0	0
-NVIDIA NV43								.*NVIDIA .*NV43.*						1	1	0	0
-NVIDIA NV44								.*NVIDIA .*NV44.*						1	1	0	0
-NVIDIA nForce							.*NVIDIA .*nForce.*						0	0	0	3.3
-NVIDIA MCP51							.*NVIDIA .*MCP51.*						1	1	0	0
+NVIDIA NV17								.*NVIDIA .*NV17.*									0	1	0	0
+NVIDIA NV34								.*NVIDIA .*NV34.*									0	1	0	0
+NVIDIA NV35								.*NVIDIA .*NV35.*									0	1	0	0
+NVIDIA NV36								.*NVIDIA .*NV36.*									1	1	0	0
+NVIDIA NV41								.*NVIDIA .*NV41.*									1	1	0	0
+NVIDIA NV43								.*NVIDIA .*NV43.*									1	1	0	0
+NVIDIA NV44								.*NVIDIA .*NV44.*									1	1	0	0
+NVIDIA nForce							.*NVIDIA .*nForce.*									0	0	0	3.3
+NVIDIA MCP51							.*NVIDIA .*MCP51.*									1	1	0	0
 NVIDIA MCP61							.*NVIDIA .*MCP61.*						1	1	0	0
-NVIDIA MCP67							.*NVIDIA .*MCP67.*						1	1	0	0
-NVIDIA MCP68							.*NVIDIA .*MCP68.*						1	1	0	0
-NVIDIA MCP73							.*NVIDIA .*MCP73.*						1	1	0	0
-NVIDIA MCP77							.*NVIDIA .*MCP77.*						1	1	0	0
-NVIDIA MCP78							.*NVIDIA .*MCP78.*						1	1	0	0
-NVIDIA MCP79							.*NVIDIA .*MCP79.*						1	1	0	0
-NVIDIA MCP7A							.*NVIDIA .*MCP7A.*						1	1	0	0
+NVIDIA MCP67							.*NVIDIA .*MCP67.*									1	1	0	0
+NVIDIA MCP68							.*NVIDIA .*MCP68.*									1	1	0	0
+NVIDIA MCP73							.*NVIDIA .*MCP73.*									1	1	0	0
+NVIDIA MCP77							.*NVIDIA .*MCP77.*									1	1	0	0
+NVIDIA MCP78							.*NVIDIA .*MCP78.*									1	1	0	0
+NVIDIA MCP79							.*NVIDIA .*MCP79.*									1	1	0	0
+NVIDIA MCP7A							.*NVIDIA .*MCP7A.*									1	1	0	0
 NVIDIA Quadro2							.*Quadro2.*								0	1	0	0
 NVIDIA Quadro 1000M						.*Quadro.*1000M.*						2	1	0	4.2
 NVIDIA Quadro 2000 M/D					.*Quadro.*2000.*						3	1	0	4.2
@@ -555,12 +555,12 @@ NVIDIA Quadro 3000M						.*Quadro.*3000M.*						3	1	0	0
 NVIDIA Quadro 4000M						.*Quadro.*4000M.*						3	1	0	0
 NVIDIA Quadro 4000						.*Quadro *4000.*						3	1	0	4.2
 NVIDIA Quadro 50x0 M					.*Quadro.*50.0.*						3	1	0	0
-NVIDIA Quadro 6000						.*Quadro.*6000.*						3	1	0	0
-NVIDIA Quadro 400						.*Quadro.*400.*							2	1	0	3.3
+NVIDIA Quadro 6000						.*Quadro.* 6000.*									3	1	0	0
+NVIDIA Quadro 400						.*Quadro.* 400.*									2	1	0	3.3
 NVIDIA Quadro 600						.*Quadro.*600.*							2	1	0	3.3
 NVIDIA Quadro4							.*Quadro4.*								0	1	0	0
-NVIDIA Quadro DCC						.*Quadro DCC.*							0	1	0	0
-NVIDIA Quadro CX						.*Quadro.*CX.*							3	1	0	0
+NVIDIA Quadro DCC						.*Quadro DCC.*										0	1	0	0
+NVIDIA Quadro CX						.*Quadro.*CX.*										3	1	0	0
 NVIDIA Quadro FX 770M					.*Quadro.*FX *770M.*					2	1	0	0
 NVIDIA Quadro FX 1500M					.*Quadro.*FX *1500M.*					1	1	0	2.1
 NVIDIA Quadro FX 1600M					.*Quadro.*FX *1600M.*					2	1	0	0
@@ -574,7 +574,7 @@ NVIDIA Quadro FX 3800					.*Quadro.*FX *3800.*					3	1	0	3.2
 NVIDIA Quadro FX 4500					.*Quadro.*FX *45.*						3	1	0	0
 NVIDIA Quadro FX 880M					.*Quadro.*FX *880M.*					3	1	0	3.3
 NVIDIA Quadro FX 4800					.*NVIDIA .*Quadro *FX *4800.*			3	1	0	0
-NVIDIA Quadro FX						.*Quadro FX.*							1	1	0	3.3
+NVIDIA Quadro FX						.*Quadro FX.*										1	1	0	3.3
 NVIDIA Quadro NVS 1xxM					.*Quadro NVS *1.[05]M.*					0	1	1	3.3
 NVIDIA Quadro NVS 300M					.*NVIDIA .*NVS *300M.*					2	1	0	0
 NVIDIA Quadro NVS 320M					.*NVIDIA .*NVS *320M.*					2	1	0	0
@@ -583,16 +583,16 @@ NVIDIA Quadro NVS 3100M					.*NVIDIA .*NVS *3100M.*					2	1	0	0
 NVIDIA Quadro NVS 4200M					.*NVIDIA .*NVS *4200M.*					2	1	0	4.1
 NVIDIA Quadro NVS 5100M					.*NVIDIA .*NVS *5100M.*					2	1	0	0
 NVIDIA Quadro NVS						.*NVIDIA .*NVS							0	1	0	3.2
-NVIDIA Corporation N12P					.*NVIDIA .*N12P.*						1	1	1	4.1
+NVIDIA Corporation N12P					.*NVIDIA .*N12P.*									1	1	1	4.1
 NVIDIA Corporation N11M					.*NVIDIA .*N11M.*						2	1	0	0
 NVIDIA RIVA TNT							.*RIVA TNT.*							0	0	0	0
-S3										.*S3 Graphics.*							0	0	1	1.4
-SiS										SiS.*									0	0	1	1.5
-Trident									Trident.*								0	0	0	0
-Tungsten Graphics						Tungsten.*								0	0	0	0
-XGI										XGI.*									0	0	0	0
-VIA										VIA.*									0	0	0	0
-Apple Generic							Apple.*Generic.*						0	0	0	0
-Apple Software Renderer					Apple.*Software Renderer.*				0	0	0	0
-Humper									Humper.*								0	1	1	2.1
-PowerVR SGX545							.*PowerVR SGX.*							1	1	1	3
+S3										.*S3 Graphics.*										0	0	1	1.4
+SiS										SiS.*												0	0	1	1.5
+Trident									Trident.*											0	0	0	0
+Tungsten Graphics						Tungsten.*											0	0	0	0
+XGI										XGI.*												0	0	0	0
+VIA										VIA.*												0	0	0	0
+Apple Generic							Apple.*Generic.*									0	0	0	0
+Apple Software Renderer					Apple.*Software Renderer.*							0	0	0	0
+Humper									Humper.*											0	1	1	2.1
+PowerVR SGX545							.*PowerVR SGX.*										1	1	1	3
diff --git a/indra/newview/groupchatlistener.cpp b/indra/newview/groupchatlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/groupchatlistener.h b/indra/newview/groupchatlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/hu.lproj/language.txt b/indra/newview/hu.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife.icns b/indra/newview/icons/beta/secondlife.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife.ico b/indra/newview/icons/beta/secondlife.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_128.png b/indra/newview/icons/beta/secondlife_128.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_16.png b/indra/newview/icons/beta/secondlife_16.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_256.BMP b/indra/newview/icons/beta/secondlife_256.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_256.png b/indra/newview/icons/beta/secondlife_256.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_32.png b/indra/newview/icons/beta/secondlife_32.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_48.png b/indra/newview/icons/beta/secondlife_48.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/beta/secondlife_512.png b/indra/newview/icons/beta/secondlife_512.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/development/secondlife.icns b/indra/newview/icons/development/secondlife.icns
deleted file mode 100644
index 44f63d384cfdbb99bfb8ced8290f02712d215562..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife.icns and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife.ico b/indra/newview/icons/development/secondlife.ico
deleted file mode 100644
index b53f23ae582a94eab61a0052b83eecdc1b0b93aa..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife.ico and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_128.png b/indra/newview/icons/development/secondlife_128.png
deleted file mode 100644
index 9b9fe656fc981622898a3e5fde160d1554205745..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_128.png and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_16.png b/indra/newview/icons/development/secondlife_16.png
deleted file mode 100644
index 91493a033c93e2e33b889b77dbc1654bc2f64f0c..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_16.png and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_256.BMP b/indra/newview/icons/development/secondlife_256.BMP
deleted file mode 100644
index 174b22319a273d57d22c6a47a7a93038e45dd348..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_256.BMP and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_256.png b/indra/newview/icons/development/secondlife_256.png
deleted file mode 100644
index 29ed40abdcc7ce8cf3eaf35ca21531a44edefd61..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_256.png and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_32.png b/indra/newview/icons/development/secondlife_32.png
deleted file mode 100644
index 3b84f5ec77ffedf7a357560a9b7d6b19c341741c..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_32.png and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_48.png b/indra/newview/icons/development/secondlife_48.png
deleted file mode 100644
index d2636d9d72f47319ab66bbb04fdfa513d578d90f..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_48.png and /dev/null differ
diff --git a/indra/newview/icons/development/secondlife_512.png b/indra/newview/icons/development/secondlife_512.png
deleted file mode 100644
index 75f9b231f4303c4c3dc811d6aa86e5e51508bb4e..0000000000000000000000000000000000000000
Binary files a/indra/newview/icons/development/secondlife_512.png and /dev/null differ
diff --git a/indra/newview/icons/project/secondlife.icns b/indra/newview/icons/project/secondlife.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife.ico b/indra/newview/icons/project/secondlife.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_128.png b/indra/newview/icons/project/secondlife_128.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_16.png b/indra/newview/icons/project/secondlife_16.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_256.BMP b/indra/newview/icons/project/secondlife_256.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_256.png b/indra/newview/icons/project/secondlife_256.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_32.png b/indra/newview/icons/project/secondlife_32.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_48.png b/indra/newview/icons/project/secondlife_48.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/project/secondlife_512.png b/indra/newview/icons/project/secondlife_512.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife.icns b/indra/newview/icons/release/secondlife.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife.ico b/indra/newview/icons/release/secondlife.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_128.png b/indra/newview/icons/release/secondlife_128.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_16.png b/indra/newview/icons/release/secondlife_16.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_256.BMP b/indra/newview/icons/release/secondlife_256.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_256.png b/indra/newview/icons/release/secondlife_256.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_32.png b/indra/newview/icons/release/secondlife_32.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_48.png b/indra/newview/icons/release/secondlife_48.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/release/secondlife_512.png b/indra/newview/icons/release/secondlife_512.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife.icns b/indra/newview/icons/test/secondlife.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife.ico b/indra/newview/icons/test/secondlife.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_128.png b/indra/newview/icons/test/secondlife_128.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_16.png b/indra/newview/icons/test/secondlife_16.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_256.BMP b/indra/newview/icons/test/secondlife_256.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_256.png b/indra/newview/icons/test/secondlife_256.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_32.png b/indra/newview/icons/test/secondlife_32.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_48.png b/indra/newview/icons/test/secondlife_48.png
old mode 100644
new mode 100755
diff --git a/indra/newview/icons/test/secondlife_512.png b/indra/newview/icons/test/secondlife_512.png
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/darwin/dmg-cleanup.applescript b/indra/newview/installers/darwin/dmg-cleanup.applescript
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/darwin/fix_application_icon_position.sh b/indra/newview/installers/darwin/fix_application_icon_position.sh
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/darwin/release-dmg/Applications-alias.r b/indra/newview/installers/darwin/release-dmg/Applications-alias.r
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/darwin/release-dmg/_DS_Store b/indra/newview/installers/darwin/release-dmg/_DS_Store
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/darwin/release-dmg/_VolumeIcon.icns b/indra/newview/installers/darwin/release-dmg/_VolumeIcon.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/darwin/release-dmg/background.jpg b/indra/newview/installers/darwin/release-dmg/background.jpg
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/install_icon.BMP b/indra/newview/installers/windows/install_icon.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/install_icon.ico b/indra/newview/installers/windows/install_icon.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/language_menu.nsi b/indra/newview/installers/windows/language_menu.nsi
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/uninstall_icon.BMP b/indra/newview/installers/windows/uninstall_icon.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/installers/windows/uninstall_icon.ico b/indra/newview/installers/windows/uninstall_icon.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/it.lproj/language.txt b/indra/newview/it.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/licenses-linux.txt b/indra/newview/licenses-linux.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/licenses-mac.txt b/indra/newview/licenses-mac.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/licenses-solaris.txt b/indra/newview/licenses-solaris.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/licenses-win32.txt b/indra/newview/licenses-win32.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/linux_tools/client-readme-joystick.txt b/indra/newview/linux_tools/client-readme-joystick.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/linux_tools/client-readme-voice.txt b/indra/newview/linux_tools/client-readme-voice.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/linux_tools/client-readme.txt b/indra/newview/linux_tools/client-readme.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/linux_tools/wrapper.sh b/indra/newview/linux_tools/wrapper.sh
index 1381e49c62bb34f45a9f374b1da6ec57608fc3cb..d8440eebf1c54c4b8a1f687a666285229c71c330 100755
--- a/indra/newview/linux_tools/wrapper.sh
+++ b/indra/newview/linux_tools/wrapper.sh
@@ -4,17 +4,17 @@
 ## These options are for self-assisted troubleshooting during this beta
 ## testing phase; you should not usually need to touch them.
 
+## - Avoids using any FMOD Ex audio driver.
+#export LL_BAD_FMODEX_DRIVER=x
 ## - Avoids using any OpenAL audio driver.
 #export LL_BAD_OPENAL_DRIVER=x
-## - Avoids using any FMOD audio driver.
-#export LL_BAD_FMOD_DRIVER=x
 
-## - Avoids using the FMOD ESD audio driver.
-#export LL_BAD_FMOD_ESD=x
-## - Avoids using the FMOD OSS audio driver.
-#export LL_BAD_FMOD_OSS=x
-## - Avoids using the FMOD ALSA audio driver.
+## - Avoids using the FMOD Ex PulseAudio audio driver.
+#export LL_BAD_FMOD_PULSEAUDIO=x
+## - Avoids using the FMOD or FMOD Ex ALSA audio driver.
 #export LL_BAD_FMOD_ALSA=x
+## - Avoids using the FMOD or FMOD Ex OSS audio driver.
+#export LL_BAD_FMOD_OSS=x
 
 ## - Avoids the optional OpenGL extensions which have proven most problematic
 ##   on some hardware.  Disabling this option may cause BETTER PERFORMANCE but
@@ -122,7 +122,7 @@ export SAVED_LD_LIBRARY_PATH="${LD_LIBRARY_PATH}"
 export LD_LIBRARY_PATH="$PWD/lib:${LD_LIBRARY_PATH}"
 
 # Have to deal specially with gridargs.dat; typical contents look like:
-# --channel "Second Life Developer"  --settings settings_developer.xml
+# --channel "Second Life Test"  --settings settings_test.xml
 # Simply embedding $(<etc/gridargs.dat) into a command line treats each of
 # Second, Life and Developer as separate args -- no good. We need bash to
 # process quotes using eval.
diff --git a/indra/newview/llaccountingcostmanager.cpp b/indra/newview/llaccountingcostmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llaccountingcostmanager.h b/indra/newview/llaccountingcostmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagent.cpp b/indra/newview/llagent.cpp
index 8c42defa73f25bc7a47871ffd8911b7b54848403..3e94c5edf758ade2e383e3f2bf00aea8ddfbb541 100755
--- a/indra/newview/llagent.cpp
+++ b/indra/newview/llagent.cpp
@@ -4317,7 +4317,7 @@ void LLAgent::sendAgentSetAppearance()
 		return;
 	}
 	
-
+	
 	LL_DEBUGS("Avatar") << gAgentAvatarp->avString() << "TAT: Sent AgentSetAppearance: " << gAgentAvatarp->getBakedStatusForPrintout() << LL_ENDL;
 	//dumpAvatarTEs( "sendAgentSetAppearance()" );
 
@@ -4425,7 +4425,7 @@ void LLAgent::sendAgentSetAppearance()
 		}
 	}
 
-	//llinfos << "Avatar XML num VisualParams transmitted = " << transmitted_params << llendl;
+//	llinfos << "Avatar XML num VisualParams transmitted = " << transmitted_params << llendl;
 	sendReliableMessage();
 }
 
diff --git a/indra/newview/llagent.h b/indra/newview/llagent.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentaccess.cpp b/indra/newview/llagentaccess.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentaccess.h b/indra/newview/llagentaccess.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentcamera.cpp b/indra/newview/llagentcamera.cpp
old mode 100644
new mode 100755
index 0896aa5972467beedf965b9318826ab5df116e99..488a134aa24d008fc6cca74fdd3f708f75be5b89
--- a/indra/newview/llagentcamera.cpp
+++ b/indra/newview/llagentcamera.cpp
@@ -2267,22 +2267,22 @@ void LLAgentCamera::changeCameraToCustomizeAvatar()
 		gFocusMgr.setKeyboardFocus( NULL );
 		gFocusMgr.setMouseCapture( NULL );
 
-		// Remove any pitch or rotation from the avatar
-		LLVector3 at = gAgent.getAtAxis();
-		at.mV[VZ] = 0.f;
-		at.normalize();
-		gAgent.resetAxes(at);
-
-		gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);
-		gAgent.setCustomAnim(TRUE);
-		gAgentAvatarp->startMotion(ANIM_AGENT_CUSTOMIZE);
-		LLMotion* turn_motion = gAgentAvatarp->findMotion(ANIM_AGENT_CUSTOMIZE);
-
-		if (turn_motion)
-		{
-			// delay camera animation long enough to play through turn animation
-			setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP);
-		}
+			// Remove any pitch or rotation from the avatar
+			LLVector3 at = gAgent.getAtAxis();
+			at.mV[VZ] = 0.f;
+			at.normalize();
+			gAgent.resetAxes(at);
+
+			gAgent.sendAnimationRequest(ANIM_AGENT_CUSTOMIZE, ANIM_REQUEST_START);
+			gAgent.setCustomAnim(TRUE);
+			gAgentAvatarp->startMotion(ANIM_AGENT_CUSTOMIZE);
+			LLMotion* turn_motion = gAgentAvatarp->findMotion(ANIM_AGENT_CUSTOMIZE);
+
+			if (turn_motion)
+			{
+				// delay camera animation long enough to play through turn animation
+				setAnimationDuration(turn_motion->getDuration() + CUSTOMIZE_AVATAR_CAMERA_ANIM_SLOP);
+			}
 	}
 
 	LLVector3 agent_at = gAgent.getAtAxis();
diff --git a/indra/newview/llagentcamera.h b/indra/newview/llagentcamera.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentdata.cpp b/indra/newview/llagentdata.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentdata.h b/indra/newview/llagentdata.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentlanguage.cpp b/indra/newview/llagentlanguage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentlanguage.h b/indra/newview/llagentlanguage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentlistener.cpp b/indra/newview/llagentlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentlistener.h b/indra/newview/llagentlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentpicksinfo.cpp b/indra/newview/llagentpicksinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentpicksinfo.h b/indra/newview/llagentpicksinfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentpilot.cpp b/indra/newview/llagentpilot.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentpilot.h b/indra/newview/llagentpilot.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentui.cpp b/indra/newview/llagentui.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentui.h b/indra/newview/llagentui.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentwearables.cpp b/indra/newview/llagentwearables.cpp
index c88694ef76b9054cfbe20543c33027a4681c0d07..1edbbe2a2e8cf4ca6f49a7a817b99796fc5d7f96 100755
--- a/indra/newview/llagentwearables.cpp
+++ b/indra/newview/llagentwearables.cpp
@@ -62,15 +62,15 @@ using namespace LLAvatarAppearanceDefines;
 
 // Callback to wear and start editing an item that has just been created.
 void wear_and_edit_cb(const LLUUID& inv_item)
-{
-	if (inv_item.isNull()) return;
-	
-	// Request editing the item after it gets worn.
-	gAgentWearables.requestEditingWearable(inv_item);
-	
-	// Wear it.
-	LLAppearanceMgr::instance().wearItemOnAvatar(inv_item);
-}
+	{
+		if (inv_item.isNull()) return;
+
+		// Request editing the item after it gets worn.
+		gAgentWearables.requestEditingWearable(inv_item);
+
+		// Wear it.
+		LLAppearanceMgr::instance().wearItemOnAvatar(inv_item);
+	}
 
 ///////////////////////////////////////////////////////////////////////////////
 
@@ -180,10 +180,10 @@ void LLAgentWearables::initClass()
 }
 
 void LLAgentWearables::setAvatarObject(LLVOAvatarSelf *avatar)
-{
+{ 
 	llassert(avatar);
-	avatar->outputRezTiming("Sending wearables request");
-	sendAgentWearablesRequest();
+		avatar->outputRezTiming("Sending wearables request");
+		sendAgentWearablesRequest();
 	setAvatarAppearance(avatar);
 }
 
@@ -706,7 +706,7 @@ LLViewerWearable* LLAgentWearables::getViewerWearable(const LLWearableType::ETyp
 }
 
 const LLViewerWearable* LLAgentWearables::getViewerWearable(const LLWearableType::EType type, U32 index /*= 0*/) const
-{
+	{
 	return dynamic_cast<const LLViewerWearable*> (getWearable(type, index));
 }
 
@@ -714,39 +714,39 @@ const LLViewerWearable* LLAgentWearables::getViewerWearable(const LLWearableType
 BOOL LLAgentWearables::selfHasWearable(LLWearableType::EType type)
 {
 	return (gAgentWearables.getWearableCount(type) > 0);
-}
-
+	}
+	
 // virtual
 void LLAgentWearables::wearableUpdated(LLWearable *wearable, BOOL removed)
-{
+	{
 	if (isAgentAvatarValid())
 	{
 		const BOOL upload_result = removed;
 		gAgentAvatarp->wearableUpdated(wearable->getType(), upload_result);
-	}
+}
 
 	LLWearableData::wearableUpdated(wearable, removed);
 
 	if (!removed)
-	{
+{
 		LLViewerWearable* viewer_wearable = dynamic_cast<LLViewerWearable*>(wearable);
 		viewer_wearable->refreshName();
 
-		// Hack pt 2. If the wearable we just loaded has definition version 24,
-		// then force a re-save of this wearable after slamming the version number to 22.
-		// This number was incorrectly incremented for internal builds before release, and
-		// this fix will ensure that the affected wearables are re-saved with the right version number.
-		// the versions themselves are compatible. This code can be removed before release.
-		if( wearable->getDefinitionVersion() == 24 )
-		{
-			wearable->setDefinitionVersion(22);
-			U32 index = getWearableIndex(wearable);
+	// Hack pt 2. If the wearable we just loaded has definition version 24,
+	// then force a re-save of this wearable after slamming the version number to 22.
+	// This number was incorrectly incremented for internal builds before release, and
+	// this fix will ensure that the affected wearables are re-saved with the right version number.
+	// the versions themselves are compatible. This code can be removed before release.
+	if( wearable->getDefinitionVersion() == 24 )
+	{
+		wearable->setDefinitionVersion(22);
+		U32 index = getWearableIndex(wearable);
 			llinfos << "forcing wearable type " << wearable->getType() << " to version 22 from 24" << llendl;
-			saveWearable(wearable->getType(),index,TRUE);
-		}
+		saveWearable(wearable->getType(),index,TRUE);
+	}
 
 		checkWearableAgainstInventory(viewer_wearable);
-	}
+}
 }
 
 BOOL LLAgentWearables::itemUpdatePending(const LLUUID& item_id) const
@@ -965,8 +965,8 @@ class OnWearableItemCreatedCB: public LLInventoryCallback
 		llinfos << "All items created" << llendl;
 		LLPointer<LLInventoryCallback> link_waiter = new LLUpdateAppearanceOnDestroy;
 		LLAppearanceMgr::instance().linkAll(LLAppearanceMgr::instance().getCOF(),
-											mItemsToLink,
-											link_waiter);
+												mItemsToLink,
+												link_waiter);
 	}
 	void addPendingWearable(LLViewerWearable *wearable)
 	{
@@ -1496,12 +1496,12 @@ void LLAgentWearables::queryWearableCache()
 // virtual
 void LLAgentWearables::invalidateBakedTextureHash(LLMD5& hash) const
 {
-	// Add some garbage into the hash so that it becomes invalid.
-	if (isAgentAvatarValid())
-	{
-		hash.update((const unsigned char*)gAgentAvatarp->getID().mData, UUID_BYTES);
-	}
-}
+		// Add some garbage into the hash so that it becomes invalid.
+			if (isAgentAvatarValid())
+			{
+				hash.update((const unsigned char*)gAgentAvatarp->getID().mData, UUID_BYTES);
+			}
+		}
 
 // User has picked "remove from avatar" from a menu.
 // static
diff --git a/indra/newview/llagentwearables.h b/indra/newview/llagentwearables.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llagentwearablesfetch.cpp b/indra/newview/llagentwearablesfetch.cpp
old mode 100644
new mode 100755
index 2d2d730396bc9583311d0e162ef9eff44d251f2b..8b6b6db525058d2547a04262d55deffaf41e27f1
--- a/indra/newview/llagentwearablesfetch.cpp
+++ b/indra/newview/llagentwearablesfetch.cpp
@@ -36,44 +36,44 @@
 
 
 void order_my_outfits_cb()
-{
-	if (!LLApp::isRunning())
 	{
-		llwarns << "called during shutdown, skipping" << llendl;
-		return;
-	}
+		if (!LLApp::isRunning())
+		{
+			llwarns << "called during shutdown, skipping" << llendl;
+			return;
+		}
 		
-	const LLUUID& my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
-	if (my_outfits_id.isNull()) return;
+		const LLUUID& my_outfits_id = gInventory.findCategoryUUIDForType(LLFolderType::FT_MY_OUTFITS);
+		if (my_outfits_id.isNull()) return;
 
-	LLInventoryModel::cat_array_t* cats;
-	LLInventoryModel::item_array_t* items;
-	gInventory.getDirectDescendentsOf(my_outfits_id, cats, items);
-	if (!cats) return;
+		LLInventoryModel::cat_array_t* cats;
+		LLInventoryModel::item_array_t* items;
+		gInventory.getDirectDescendentsOf(my_outfits_id, cats, items);
+		if (!cats) return;
 
-	//My Outfits should at least contain saved initial outfit and one another outfit
-	if (cats->size() < 2)
-	{
-		llwarning("My Outfits category was not populated properly", 0);
-		return;
-	}
+		//My Outfits should at least contain saved initial outfit and one another outfit
+		if (cats->size() < 2)
+		{
+			llwarning("My Outfits category was not populated properly", 0);
+			return;
+		}
 
-	llinfos << "Starting updating My Outfits with wearables ordering information" << llendl;
+		llinfos << "Starting updating My Outfits with wearables ordering information" << llendl;
 
-	for (LLInventoryModel::cat_array_t::iterator outfit_iter = cats->begin();
-		 outfit_iter != cats->end(); ++outfit_iter)
-	{
-		const LLUUID& cat_id = (*outfit_iter)->getUUID();
-		if (cat_id.isNull()) continue;
+		for (LLInventoryModel::cat_array_t::iterator outfit_iter = cats->begin();
+			outfit_iter != cats->end(); ++outfit_iter)
+		{
+			const LLUUID& cat_id = (*outfit_iter)->getUUID();
+			if (cat_id.isNull()) continue;
 
-		// saved initial outfit already contains wearables ordering information
-		if (cat_id == LLAppearanceMgr::getInstance()->getBaseOutfitUUID()) continue;
+			// saved initial outfit already contains wearables ordering information
+			if (cat_id == LLAppearanceMgr::getInstance()->getBaseOutfitUUID()) continue;
 
-		LLAppearanceMgr::getInstance()->updateClothingOrderingInfo(cat_id);
-	}
+			LLAppearanceMgr::getInstance()->updateClothingOrderingInfo(cat_id);
+		}
 
-	llinfos << "Finished updating My Outfits with wearables ordering information" << llendl;
-}
+		llinfos << "Finished updating My Outfits with wearables ordering information" << llendl;
+	}
 
 LLInitialWearablesFetch::LLInitialWearablesFetch(const LLUUID& cof_id) :
 	LLInventoryFetchDescendentsObserver(cof_id)
diff --git a/indra/newview/llagentwearablesfetch.h b/indra/newview/llagentwearablesfetch.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llanimstatelabels.cpp b/indra/newview/llanimstatelabels.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llanimstatelabels.h b/indra/newview/llanimstatelabels.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappcorehttp.cpp b/indra/newview/llappcorehttp.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llappcorehttp.h b/indra/newview/llappcorehttp.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappearance.h b/indra/newview/llappearance.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappearancemgr.cpp b/indra/newview/llappearancemgr.cpp
index 652f199e2835686dbe4426cd4a47ac41bbe782b4..fd9236c8b384cf6403edb779c320396cc1a80e04 100755
--- a/indra/newview/llappearancemgr.cpp
+++ b/indra/newview/llappearancemgr.cpp
@@ -196,7 +196,7 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 		LLEventTimer(5.0)
 	{
 		if (!mTrackingPhase.empty())
-		{
+	{
 			selfStartPhase(mTrackingPhase);
 		}
 	}
@@ -212,23 +212,23 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 			addItem(item->getUUID());
 		}
 	}
-
+		
 	// Request or re-request operation for specified item.
 	void addItem(const LLUUID& item_id)
 	{
 		LL_DEBUGS("Avatar") << "item_id " << item_id << llendl;
-		
+
 		if (!requestOperation(item_id))
 		{
 			LL_DEBUGS("Avatar") << "item_id " << item_id << " requestOperation false, skipping" << llendl;
 			return;
-		}
+	}
 
 		mPendingRequests++;
 		// On a re-request, this will reset the timer.
 		mWaitTimes[item_id] = LLTimer();
 		if (mRetryCounts.find(item_id) == mRetryCounts.end())
-		{
+	{
 			mRetryCounts[item_id] = 0;
 		}
 		else
@@ -242,7 +242,7 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 	void onOp(const LLUUID& src_id, const LLUUID& dst_id, LLTimer timestamp)
 	{
 		if (ll_frand() < gSavedSettings.getF32("InventoryDebugSimulateLateOpRate"))
-		{
+	{
 			llwarns << "Simulating late operation by punting handling to later" << llendl;
 			doAfterInterval(boost::bind(&LLCallAfterInventoryBatchMgr::onOp,this,src_id,dst_id,timestamp),
 							mRetryAfter);
@@ -265,12 +265,12 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 			onCompletionOrFailure();
 		}
 	}
-
+		
 	void onCompletionOrFailure()
 	{
 		assert (!mCompletionOrFailureCalled);
 		mCompletionOrFailureCalled = true;
-		
+
 		// Will never call onCompletion() if any item has been flagged as
 		// a failure - otherwise could wind up with corrupted
 		// outfit, involuntary nudity, etc.
@@ -288,7 +288,7 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 			onFailure();
 		}
 	}
-
+		
 	void onFailure()
 	{
 		llinfos << "failed" << llendl;
@@ -300,7 +300,7 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 		llinfos << "done" << llendl;
 		mOnCompletionFunc();
 	}
-	
+
 	// virtual
 	// Will be deleted after returning true - only safe to do this if all callbacks have fired.
 	BOOL tick()
@@ -313,7 +313,7 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 		// been serviced, since it will result in this object being
 		// deleted.
 		bool all_done = (mPendingRequests==0);
-
+		
 		if (!mWaitTimes.empty())
 		{
 			llwarns << "still waiting on " << mWaitTimes.size() << " items" << llendl;
@@ -323,20 +323,20 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 				// Use a copy of iterator because it may be erased/invalidated.
 				std::map<LLUUID,LLTimer>::iterator curr_it = it;
 				++it;
-				
+
 				F32 time_waited = curr_it->second.getElapsedTimeF32();
 				S32 retries = mRetryCounts[curr_it->first];
 				if (time_waited > mRetryAfter)
 				{
 					if (retries < mMaxRetries)
-					{
+		{
 						LL_DEBUGS("Avatar") << "Waited " << time_waited <<
 							" for " << curr_it->first << ", retrying" << llendl;
 						mRetryCount++;
 						addItem(curr_it->first);
-					}
-					else
-					{
+		}
+		else
+		{
 						llwarns << "Giving up on " << curr_it->first << " after too many retries" << llendl;
 						mWaitTimes.erase(curr_it);
 						mFailCount++;
@@ -347,8 +347,8 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 					onCompletionOrFailure();
 				}
 
-			}
 		}
+	}
 		return all_done;
 	}
 
@@ -360,7 +360,7 @@ class LLCallAfterInventoryBatchMgr: public LLEventTimer
 		LL_DEBUGS("Avatar") << "Times: n " << mTimeStats.getCount() << " min " << mTimeStats.getMinValue() << " max " << mTimeStats.getMaxValue() << llendl;
 		LL_DEBUGS("Avatar") << "Mean " << mTimeStats.getMean() << " stddev " << mTimeStats.getStdDev() << llendl;
 	}
-	
+
 	virtual ~LLCallAfterInventoryBatchMgr()
 	{
 		LL_DEBUGS("Avatar") << "deleting" << llendl;
@@ -397,9 +397,9 @@ class LLCallAfterInventoryCopyMgr: public LLCallAfterInventoryBatchMgr
 	{
 		addItems(src_items);
 	}
-	
+
 	virtual bool requestOperation(const LLUUID& item_id)
-	{
+		{
 		LLViewerInventoryItem *item = gInventory.getItem(item_id);
 		llassert(item);
 		LL_DEBUGS("Avatar") << "copying item " << item_id << llendl;
@@ -479,9 +479,9 @@ class LLCallAfterInventoryLinkMgr: public LLCallAfterInventoryBatchMgr
 			LLAppearanceMgr::instance().purgeBaseOutfitLink(cof);
 
 			if (catp && catp->getPreferredType() == LLFolderType::FT_OUTFIT)
-			{
+	{
 				if (ll_frand() < gSavedSettings.getF32("InventoryDebugSimulateOpFailureRate"))
-				{
+		{
 					LL_DEBUGS("Avatar") << "simulating failure by not sending request for item " << item_id << llendl;
 					return true;
 				}
@@ -841,69 +841,69 @@ bool LLWearableHoldingPattern::pollFetchCompletion()
 void recovered_item_link_cb(const LLUUID& item_id, LLWearableType::EType type, LLViewerWearable *wearable, LLWearableHoldingPattern* holder)
 {
 	if (!holder->isMostRecent())
-	{
-		llwarns << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl;
-		// runway skip here?
-	}
+		{
+			llwarns << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl;
+			// runway skip here?
+		}
 
 	llinfos << "Recovered item link for type " << type << llendl;
 	holder->eraseTypeToLink(type);
-	// Add wearable to FoundData for actual wearing
-	LLViewerInventoryItem *item = gInventory.getItem(item_id);
-	LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
+		// Add wearable to FoundData for actual wearing
+		LLViewerInventoryItem *item = gInventory.getItem(item_id);
+		LLViewerInventoryItem *linked_item = item ? item->getLinkedItem() : NULL;
 
-	if (linked_item)
-	{
-		gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
-			
-		if (item)
+		if (linked_item)
 		{
-			LLFoundData found(linked_item->getUUID(),
-							  linked_item->getAssetUUID(),
-							  linked_item->getName(),
-							  linked_item->getType(),
-							  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID,
-							  true // is replacement
-				);
+			gInventory.addChangedMask(LLInventoryObserver::LABEL, linked_item->getUUID());
+			
+			if (item)
+			{
+				LLFoundData found(linked_item->getUUID(),
+								  linked_item->getAssetUUID(),
+								  linked_item->getName(),
+								  linked_item->getType(),
+								  linked_item->isWearableType() ? linked_item->getWearableType() : LLWearableType::WT_INVALID,
+								  true // is replacement
+					);
 			found.mWearable = wearable;
 			holder->getFoundList().push_front(found);
+			}
+			else
+			{
+				llwarns << self_av_string() << "inventory item not found for recovered wearable" << llendl;
+			}
 		}
 		else
 		{
-			llwarns << self_av_string() << "inventory item not found for recovered wearable" << llendl;
+			llwarns << self_av_string() << "inventory link not found for recovered wearable" << llendl;
 		}
 	}
-	else
-	{
-		llwarns << self_av_string() << "inventory link not found for recovered wearable" << llendl;
-	}
-}
 
 void recovered_item_cb(const LLUUID& item_id, LLWearableType::EType type, LLViewerWearable *wearable, LLWearableHoldingPattern* holder)
 {
 	if (!holder->isMostRecent())
-	{
-		// runway skip here?
-		llwarns << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl;
-	}
+		{
+			// runway skip here?
+			llwarns << self_av_string() << "skipping because LLWearableHolding pattern is invalid (superceded by later outfit request)" << llendl;
+		}
 
 	LL_DEBUGS("Avatar") << self_av_string() << "Recovered item for type " << type << LL_ENDL;
-	LLViewerInventoryItem *itemp = gInventory.getItem(item_id);
+		LLViewerInventoryItem *itemp = gInventory.getItem(item_id);
 	wearable->setItemID(item_id);
 	LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(recovered_item_link_cb,_1,type,wearable,holder));
 	holder->eraseTypeToRecover(type);
-	llassert(itemp);
-	if (itemp)
-	{
-		link_inventory_item( gAgent.getID(),
-							 item_id,
-							 LLAppearanceMgr::instance().getCOF(),
-							 itemp->getName(),
-							 itemp->getDescription(),
-							 LLAssetType::AT_LINK,
-							 cb);
+		llassert(itemp);
+		if (itemp)
+		{
+			link_inventory_item( gAgent.getID(),
+					     item_id,
+					     LLAppearanceMgr::instance().getCOF(),
+					     itemp->getName(),
+						 itemp->getDescription(),
+					     LLAssetType::AT_LINK,
+					     cb);
+		}
 	}
-}
 
 void LLWearableHoldingPattern::recoverMissingWearable(LLWearableType::EType type)
 {
@@ -1290,7 +1290,7 @@ bool LLAppearanceMgr::wearItemOnAvatar(const LLUUID& item_id_to_wear, bool do_up
 	if (gInventory.isObjectDescendentOf(item_to_wear->getUUID(), gInventory.getLibraryRootFolderID()))
 	{
 		LLPointer<LLInventoryCallback> cb = new LLBoostFuncInventoryCallback(boost::bind(wear_on_avatar_cb,_1,replace));
-		copy_inventory_item(gAgent.getID(), item_to_wear->getPermissions().getOwner(), item_to_wear->getUUID(), LLUUID::null, std::string(), cb);
+		copy_inventory_item(gAgent.getID(), item_to_wear->getPermissions().getOwner(), item_to_wear->getUUID(), LLUUID::null, std::string(),cb);
 		return false;
 	} 
 	else if (!gInventory.isObjectDescendentOf(item_to_wear->getUUID(), gInventory.getRootFolderID()))
@@ -1680,8 +1680,8 @@ void LLAppearanceMgr::purgeCategory(const LLUUID& category, bool keep_outfit_lin
 			}
 			else
 			{
-				gInventory.purgeObject(item->getUUID());
-			}
+			gInventory.purgeObject(item->getUUID());
+		}
 #else
 			gInventory.purgeObject(item->getUUID());
 		}
@@ -2267,7 +2267,7 @@ void LLAppearanceMgr::wearInventoryCategoryOnAvatar( LLInventoryCategory* catego
 	// Avoid unintentionally overwriting old wearables.  We have to do
 	// this up front to avoid having to deal with the case of multiple
 	// wearables being dirty.
-	if (!category) return;
+	if(!category) return;
 
 	if ( !LLInventoryCallbackManager::is_instantiated() )
 	{
@@ -2388,7 +2388,7 @@ void LLAppearanceMgr::addCOFItemLink(const LLUUID &item_id, bool do_update, LLPo
 }
 
 void modified_cof_cb(const LLUUID& inv_item)
-{
+{		
 	LLAppearanceMgr::instance().updateAppearanceFromCOF();
 
 	// Start editing the item if previously requested.
@@ -3237,7 +3237,7 @@ void LLAppearanceMgr::requestServerAppearanceUpdate(LLCurl::ResponderPtr respond
 		llwarns << "No cap for UpdateAvatarAppearance." << llendl;
 		return;
 	}
-	
+
 	LLSD body;
 	S32 cof_version = getCOFVersion();
 	if (gSavedSettings.getBOOL("DebugAvatarExperimentalServerAppearanceUpdate"))
@@ -3253,7 +3253,7 @@ void LLAppearanceMgr::requestServerAppearanceUpdate(LLCurl::ResponderPtr respond
 		}
 	}
 	LL_DEBUGS("Avatar") << "request url " << url << " my_cof_version " << cof_version << llendl;
-	
+
 	//LLCurl::ResponderPtr responder_ptr;
 	if (!responder_ptr.get())
 	{
@@ -3347,33 +3347,33 @@ std::string LLAppearanceMgr::getAppearanceServiceURL() const
 }
 
 void show_created_outfit(LLUUID& folder_id, bool show_panel = true)
-{
-	if (!LLApp::isRunning())
 	{
-		llwarns << "called during shutdown, skipping" << llendl;
-		return;
-	}
-	
-	LLSD key;
-	
+		if (!LLApp::isRunning())
+		{
+			llwarns << "called during shutdown, skipping" << llendl;
+			return;
+		}
+
+		LLSD key;
+		
 	//EXT-7727. For new accounts inventory callback is created during login process
 	// and may be processed after login process is finished
 	if (show_panel)
-	{
-		LLFloaterSidePanelContainer::showPanel("appearance", "panel_outfits_inventory", key);
-		
-	}
-	LLOutfitsList *outfits_list =
-		dynamic_cast<LLOutfitsList*>(LLFloaterSidePanelContainer::getPanel("appearance", "outfitslist_tab"));
-	if (outfits_list)
-	{
+		{
+			LLFloaterSidePanelContainer::showPanel("appearance", "panel_outfits_inventory", key);
+
+		}
+		LLOutfitsList *outfits_list =
+			dynamic_cast<LLOutfitsList*>(LLFloaterSidePanelContainer::getPanel("appearance", "outfitslist_tab"));
+		if (outfits_list)
+		{
 		outfits_list->setSelectedOutfitByUUID(folder_id);
+		}
+
+		LLAppearanceMgr::getInstance()->updateIsDirty();
+		gAgentWearables.notifyLoadingFinished(); // New outfit is saved.
+		LLAppearanceMgr::getInstance()->updatePanelOutfitName("");
 	}
-	
-	LLAppearanceMgr::getInstance()->updateIsDirty();
-	gAgentWearables.notifyLoadingFinished(); // New outfit is saved.
-	LLAppearanceMgr::getInstance()->updatePanelOutfitName("");
-}
 
 LLUUID LLAppearanceMgr::makeNewOutfitLinks(const std::string& new_folder_name, bool show_panel)
 {
@@ -3415,13 +3415,13 @@ void LLAppearanceMgr::removeItemsFromAvatar(const uuid_vec_t& ids_to_remove)
 		llwarns << "called with empty list, nothing to do" << llendl;
 	}
 	for (uuid_vec_t::const_iterator it = ids_to_remove.begin(); it != ids_to_remove.end(); ++it)
-	{
+			{
 		const LLUUID& id_to_remove = *it;
 		const LLUUID& linked_item_id = gInventory.getLinkedItemID(id_to_remove);
 		removeCOFItemLinks(linked_item_id);
-	}
+			}
 	updateAppearanceFromCOF();
-}
+	}
 
 void LLAppearanceMgr::removeItemFromAvatar(const LLUUID& id_to_remove)
 {
diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp
old mode 100644
new mode 100755
index 3adf956ae3ab33f897ca169eae7f0521296e3afe..f92274dbbd84d0ed7b80bab78b745b4355ef61ac
--- a/indra/newview/llappviewer.cpp
+++ b/indra/newview/llappviewer.cpp
@@ -30,7 +30,6 @@
 
 // Viewer includes
 #include "llversioninfo.h"
-#include "llversionviewer.h"
 #include "llfeaturemanager.h"
 #include "lluictrlfactory.h"
 #include "lltexteditor.h"
@@ -118,17 +117,19 @@
 
 #include "llleap.h"
 #include "stringize.h"
+#include "llcoros.h"
 
 // Third party library includes
 #include <boost/bind.hpp>
 #include <boost/foreach.hpp>
 #include <boost/algorithm/string.hpp>
+#include <boost/regex.hpp>
 
 
 #if LL_WINDOWS
-#	include <share.h> // For _SH_DENYWR in initMarkerFile
+#	include <share.h> // For _SH_DENYWR in processMarkerFiles
 #else
-#   include <sys/file.h> // For initMarkerFile support
+#   include <sys/file.h> // For processMarkerFiles
 #endif
 
 #include "llapr.h"
@@ -252,6 +253,7 @@ static LLAppViewerListener sAppViewerListener(LLAppViewer::instance);
 // viewer.cpp - these are only used in viewer, should be easily moved.
 
 #if LL_DARWIN
+const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.indra.viewer";
 extern void init_apple_menu(const char* product);
 #endif // LL_DARWIN
 
@@ -269,6 +271,20 @@ BOOL gShowObjectUpdates = FALSE;
 BOOL gUseQuickTime = TRUE;
 
 eLastExecEvent gLastExecEvent = LAST_EXEC_NORMAL;
+S32 gLastExecDuration = -1; // (<0 indicates unknown) 
+
+#if LL_WINDOWS  
+#   define LL_PLATFORM_KEY "win"
+#elif LL_DARWIN
+#   define LL_PLATFORM_KEY "mac"
+#elif LL_LINUX
+#   define LL_PLATFORM_KEY "lnx"
+#elif LL_SOLARIS
+#   define LL_PLATFORM_KEY "sol"
+#else
+#   error "Unknown Platform"
+#endif
+const char* gPlatform = LL_PLATFORM_KEY;
 
 LLSD gDebugInfo;
 
@@ -328,8 +344,9 @@ BOOL gLogoutInProgress = FALSE;
 ////////////////////////////////////////////////////////////
 // Internal globals... that should be removed.
 static std::string gArgs;
-
+const int MAX_MARKER_LENGTH = 1024;
 const std::string MARKER_FILE_NAME("SecondLife.exec_marker");
+const std::string START_MARKER_FILE_NAME("SecondLife.start_marker");
 const std::string ERROR_MARKER_FILE_NAME("SecondLife.error_marker");
 const std::string LLERROR_MARKER_FILE_NAME("SecondLife.llerror_marker");
 const std::string LOGOUT_MARKER_FILE_NAME("SecondLife.logout_marker");
@@ -582,7 +599,8 @@ static void settings_to_globals()
 static void settings_modify()
 {
 	LLRenderTarget::sUseFBO				= gSavedSettings.getBOOL("RenderDeferred");
-	LLPipeline::sRenderDeferred			= gSavedSettings.getBOOL("RenderDeferred");
+	LLPipeline::sRenderBump				= gSavedSettings.getBOOL("RenderObjectBump");
+	LLPipeline::sRenderDeferred		= LLPipeline::sRenderBump && gSavedSettings.getBOOL("RenderDeferred");
 	LLVOAvatar::sUseImpostors			= gSavedSettings.getBOOL("RenderUseImpostors");
 	LLVOSurfacePatch::sLODFactor		= gSavedSettings.getF32("RenderTerrainLODFactor");
 	LLVOSurfacePatch::sLODFactor *= LLVOSurfacePatch::sLODFactor; //square lod factor to get exponential range of [1,4]
@@ -642,7 +660,7 @@ LLTextureFetch* LLAppViewer::sTextureFetch = NULL;
 
 LLAppViewer::LLAppViewer() : 
 	mMarkerFile(),
-	mLogoutMarkerFile(NULL),
+	mLogoutMarkerFile(),
 	mReportedCrash(false),
 	mNumSessions(0),
 	mPurgeCache(false),
@@ -672,6 +690,7 @@ LLAppViewer::LLAppViewer() :
 	gLoggedInTime.stop();
 	
 	LLLoginInstance::instance().setUpdaterService(mUpdater.get());
+	LLLoginInstance::instance().setPlatformInfo(gPlatform, getOSInfo().getOSVersionString());
 }
 
 LLAppViewer::~LLAppViewer()
@@ -723,8 +742,10 @@ bool LLAppViewer::init()
 	// this allows simple skinned file lookups to work
 	gDirUtilp->setSkinFolder("default", "en");
 
-	initLogging();
+	initLoggingAndGetLastDuration();
 	
+	processMarkerFiles();
+
 	//
 	// OK to write stuff to logs now, we've now crash reported if necessary
 	//
@@ -738,6 +759,7 @@ bool LLAppViewer::init()
 
 	//set the max heap size.
 	initMaxHeapSize() ;
+	LLCoros::instance().setStackSize(gSavedSettings.getS32("CoroutineStackSize"));
 
 	LLPrivateMemoryPoolManager::initClass((BOOL)gSavedSettings.getBOOL("MemoryPrivatePoolEnabled"), (U32)gSavedSettings.getU32("MemoryPrivatePoolSize")*1024*1024) ;
 
@@ -746,7 +768,7 @@ bool LLAppViewer::init()
 	logdir += gDirUtilp->getDirDelimiter();
 	setMiniDumpDir(logdir);
 
-	// Although initLogging() is the right place to mess with
+	// Although initLoggingAndGetLastDuration() is the right place to mess with
 	// setFatalFunction(), we can't query gSavedSettings until after
 	// initConfiguration().
 	S32 rc(gSavedSettings.getS32("QAModeTermCode"));
@@ -1707,19 +1729,7 @@ bool LLAppViewer::cleanup()
 		gAudiop->setStreamingAudioImpl(NULL);
 
 		// shut down the audio subsystem
-
-		bool want_longname = false;
-		if (gAudiop->getDriverName(want_longname) == "FMOD")
-		{
-			// This hack exists because fmod likes to occasionally
-			// crash or hang forever when shutting down, for no
-			// apparent reason.
-			llwarns << "Hack, skipping FMOD audio engine cleanup" << llendflush;
-		}
-		else
-		{
 			gAudiop->shutdown();
-		}
 
 		delete gAudiop;
 		gAudiop = NULL;
@@ -1795,6 +1805,8 @@ bool LLAppViewer::cleanup()
 
 	LLAvatarAppearance::cleanupClass();
 	
+	LLAvatarAppearance::cleanupClass();
+	
 	LLPostProcess::cleanupClass();
 
 	LLTracker::cleanupInstance();
@@ -2118,7 +2130,7 @@ void errorCallback(const std::string &error_string)
 	LLError::crashAndLoop(error_string);
 }
 
-bool LLAppViewer::initLogging()
+void LLAppViewer::initLoggingAndGetLastDuration()
 {
 	//
 	// Set up logging defaults for the viewer
@@ -2132,17 +2144,61 @@ bool LLAppViewer::initLogging()
 							     "SecondLife.old");
 	LLFile::remove(old_log_file);
 
-	// Rename current log file to ".old"
+	// Get name of the log file
 	std::string log_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
 							     "SecondLife.log");
+	/*
+	 * Before touching any log files, compute the duration of the last run
+	 * by comparing the ctime of the previous start marker file with the ctime
+	 * of the last log file.
+	 */
+	std::string start_marker_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, START_MARKER_FILE_NAME);
+	llstat start_marker_stat;
+	llstat log_file_stat;
+	std::ostringstream duration_log_stream; // can't log yet, so save any message for when we can below
+	int start_stat_result = LLFile::stat(start_marker_file_name, &start_marker_stat);
+	int log_stat_result = LLFile::stat(log_file, &log_file_stat);
+	if ( 0 == start_stat_result && 0 == log_stat_result )
+	{
+		int elapsed_seconds = log_file_stat.st_ctime - start_marker_stat.st_ctime;
+		// only report a last run time if the last viewer was the same version
+		// because this stat will be counted against this version
+		if ( markerIsSameVersion(start_marker_file_name) )
+		{
+			gLastExecDuration = elapsed_seconds;
+		}
+		else
+		{
+			duration_log_stream << "start marker from some other version; duration is not reported";
+			gLastExecDuration = -1;
+		}
+	}
+	else
+	{
+		// at least one of the LLFile::stat calls failed, so we can't compute the run time
+		duration_log_stream << "duration stat failure; start: "<< start_stat_result << " log: " << log_stat_result;
+		gLastExecDuration = -1; // unknown
+	}
+	std::string duration_log_msg(duration_log_stream.str());
+	
+	// Create a new start marker file for comparison with log file time for the next run
+	LLAPRFile start_marker_file ;
+	start_marker_file.open(start_marker_file_name, LL_APR_WB);
+	if (start_marker_file.getFileHandle())
+	{
+		recordMarkerVersion(start_marker_file);
+		start_marker_file.close();
+	}
+
+	// Rename current log file to ".old"
 	LLFile::rename(log_file, old_log_file);
 
 	// Set the log file to SecondLife.log
-
 	LLError::logToFile(log_file);
-
-	// *FIX:Mani no error handling here!
-	return true;
+	if (!duration_log_msg.empty())
+	{
+		LL_WARNS("MarkerFile") << duration_log_msg << LL_ENDL;
+	}
 }
 
 bool LLAppViewer::loadSettingsFromDirectory(const std::string& location_key,
@@ -2717,51 +2773,34 @@ bool LLAppViewer::initConfiguration()
 		}
 	}
 
-	if (!gSavedSettings.getBOOL("AllowMultipleViewers"))
+	//
+	// Check for another instance of the app running
+	//
+	if (mSecondInstance && !gSavedSettings.getBOOL("AllowMultipleViewers"))
 	{
-	    //
-	    // Check for another instance of the app running
-	    //
+		std::ostringstream msg;
+		msg << LLTrans::getString("MBAlreadyRunning");
+		OSMessageBox(
+			msg.str(),
+			LLStringUtil::null,
+			OSMB_OK);
+		return false;
+	}
 
-		mSecondInstance = anotherInstanceRunning();
-		
-		if (mSecondInstance)
+	if (mSecondInstance)
+	{
+		// This is the second instance of SL. Turn off voice support,
+		// but make sure the setting is *not* persisted.
+		LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice");
+		if(disable_voice)
 		{
-			std::ostringstream msg;
-			msg << LLTrans::getString("MBAlreadyRunning");
-			OSMessageBox(
-				msg.str(),
-				LLStringUtil::null,
-				OSMB_OK);
-			return false;
+			const BOOL DO_NOT_PERSIST = FALSE;
+			disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST);
 		}
-
-		initMarkerFile();
-        
-        checkForCrash();
-    }
+	}
 	else
 	{
-		mSecondInstance = anotherInstanceRunning();
-		
-		if (mSecondInstance)
-		{
-			// This is the second instance of SL. Turn off voice support,
-			// but make sure the setting is *not* persisted.
-			LLControlVariable* disable_voice = gSavedSettings.getControl("CmdLineDisableVoice");
-			if(disable_voice)
-			{
-				const BOOL DO_NOT_PERSIST = FALSE;
-				disable_voice->setValue(LLSD(TRUE), DO_NOT_PERSIST);
-			}
-		}
-
-		initMarkerFile();
-        
-        if(!mSecondInstance)
-        {
-            checkForCrash();
-        }
+		checkForCrash();
 	}
 
    	// NextLoginLocation is set from the command line option
@@ -2790,6 +2829,16 @@ bool LLAppViewer::initConfiguration()
 
 	loadColorSettings();
 
+	// Let anyone else who cares know that we've populated our settings
+	// variables.
+	for (LLControlGroup::key_iter ki(LLControlGroup::beginKeys()), kend(LLControlGroup::endKeys());
+		 ki != kend; ++ki)
+	{
+		// For each named instance of LLControlGroup, send an event saying
+		// we've initialized an LLControlGroup instance by that name.
+		LLEventPumps::instance().obtain("LLControlGroup").post(LLSDMap("init", *ki));
+	}
+
 	return true; // Config was successful.
 }
 
@@ -2868,25 +2917,46 @@ namespace {
 		std::string notification_name;
 		void (*apply_callback)(LLSD const &, LLSD const &) = NULL;
 
+		/* Build up the notification name...
+		 * it can be any of these, which are included here for the sake of grep:
+		 *   RequiredUpdateDownloadedDialog
+		 *   RequiredUpdateDownloadedVerboseDialog
+		 *   OtherChannelRequiredUpdateDownloadedDialog
+		 *   OtherChannelRequiredUpdateDownloadedVerbose
+		 *   DownloadBackgroundTip
+		 *   DownloadBackgroundDialog
+		 *   OtherChannelDownloadBackgroundTip
+		 *   OtherChannelDownloadBackgroundDialog
+		 */
+		{
+			LL_DEBUGS("UpdaterService") << "data = ";
+			std::ostringstream data_dump;
+			LLSDSerialize::toNotation(data, data_dump);
+			LL_CONT << data_dump.str() << LL_ENDL;
+		}
+		if(data["channel"].asString() != LLVersionInfo::getChannel())
+		{
+			notification_name.append("OtherChannel");
+		}
 		if(data["required"].asBoolean())
 		{
 			if(LLStartUp::getStartupState() <= STATE_LOGIN_WAIT)
 			{
 				// The user never saw the progress bar.
 				apply_callback = &apply_update_ok_callback;
-				notification_name = "RequiredUpdateDownloadedVerboseDialog";
+				notification_name += "RequiredUpdateDownloadedVerboseDialog";
 			}
 			else if(LLStartUp::getStartupState() < STATE_WORLD_INIT)
 			{
 				// The user is logging in but blocked.
 				apply_callback = &apply_update_ok_callback;
-				notification_name = "RequiredUpdateDownloadedDialog";
+				notification_name += "RequiredUpdateDownloadedDialog";
 			}
 			else
 			{
 				// The user is already logged in; treat like an optional update.
 				apply_callback = &apply_update_callback;
-				notification_name = "DownloadBackgroundTip";
+				notification_name += "DownloadBackgroundTip";
 			}
 		}
 		else
@@ -2896,16 +2966,26 @@ namespace {
 			{
 				// CHOP-262 we need to use a different notification
 				// method prior to login.
-				notification_name = "DownloadBackgroundDialog";
+				notification_name += "DownloadBackgroundDialog";
 			}
 			else
 			{
-				notification_name = "DownloadBackgroundTip";
+				notification_name += "DownloadBackgroundTip";
 			}
 		}
 
 		LLSD substitutions;
 		substitutions["VERSION"] = data["version"];
+		std::string new_channel = data["channel"].asString();
+		substitutions["NEW_CHANNEL"] = new_channel;
+		std::string info_url    = data["info_url"].asString();
+		if ( !info_url.empty() )
+		{
+			substitutions["INFO_URL"] = info_url;
+		}
+		else
+		{
+			LL_WARNS("UpdaterService") << "no info url supplied - defaulting to hard coded release notes pattern" << LL_ENDL;
 
 		// truncate version at the rightmost '.' 
 		std::string version_short(data["version"]);
@@ -2924,7 +3004,8 @@ namespace {
 
 		relnotes_url.setArg("[CHANNEL_URL]", channel_escaped.get());
 		relnotes_url.setArg("[RELEASE_NOTES_BASE_URL]", LLTrans::getString("RELEASE_NOTES_BASE_URL"));
-		substitutions["RELEASE_NOTES_FULL_URL"] = relnotes_url.getString();
+			substitutions["INFO_URL"] = relnotes_url.getString();
+		}
 
 		LLNotificationsUtil::add(notification_name, substitutions, LLSD(), apply_callback);
 	}
@@ -2973,16 +3054,40 @@ void LLAppViewer::initUpdater()
 	std::string url = gSavedSettings.getString("UpdaterServiceURL");
 	std::string channel = LLVersionInfo::getChannel();
 	std::string version = LLVersionInfo::getVersion();
-	std::string protocol_version = gSavedSettings.getString("UpdaterServiceProtocolVersion");
 	std::string service_path = gSavedSettings.getString("UpdaterServicePath");
 	U32 check_period = gSavedSettings.getU32("UpdaterServiceCheckPeriod");
+	bool willing_to_test;
+	LL_DEBUGS("UpdaterService") << "channel " << channel << LL_ENDL;
+	static const boost::regex is_test_channel("\\bTest$");
+	if (boost::regex_search(channel, is_test_channel)) 
+	{
+		LL_INFOS("UpdaterService") << "Test build: overriding willing_to_test by sending testno" << LL_ENDL;
+		willing_to_test = false;
+	}
+	else
+	{
+		willing_to_test = gSavedSettings.getBOOL("UpdaterWillingToTest");
+	}
+    unsigned char unique_id[MD5HEX_STR_SIZE];
+	if ( ! llHashedUniqueID(unique_id) )
+	{
+		if ( willing_to_test )
+		{
+			LL_WARNS("UpdaterService") << "Unable to provide a unique id; overriding willing_to_test by sending testno" << LL_ENDL;
+		}
+		willing_to_test = false;
+	}
 
 	mUpdater->setAppExitCallback(boost::bind(&LLAppViewer::forceQuit, this));
-	mUpdater->initialize(protocol_version, 
-						 url, 
+	mUpdater->initialize(url, 
 						 service_path, 
 						 channel, 
-						 version);
+						 version,
+						 gPlatform,
+						 getOSInfo().getOSVersionString(),
+						 unique_id,
+						 willing_to_test
+						 );
  	mUpdater->setCheckPeriod(check_period);
 	mUpdater->setBandwidthLimit((int)gSavedSettings.getF32("UpdaterMaximumBandwidth") * (1024/8));
 	gSavedSettings.getControl("UpdaterMaximumBandwidth")->getSignal()->
@@ -3240,8 +3345,8 @@ void LLAppViewer::writeSystemInfo()
 	}
 	
 	// Dump some debugging info
-	LL_INFOS("SystemInfo") << LLTrans::getString("APP_NAME")
-			<< " version " << LLVersionInfo::getShortVersion() << LL_ENDL;
+	LL_INFOS("SystemInfo") << "Application: " << LLTrans::getString("APP_NAME") << LL_ENDL;
+	LL_INFOS("SystemInfo") << "Version: " << LLVersionInfo::getChannelAndVersion() << LL_ENDL;
 
 	// Dump the local time and time zone
 	time_t now;
@@ -3367,22 +3472,26 @@ void LLAppViewer::handleViewerCrash()
 	//we're already in a crash situation	
 	if (gDirUtilp)
 	{
-		std::string crash_file_name;
-		if(gLLErrorActivated) crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LLERROR_MARKER_FILE_NAME);
-		else crash_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,ERROR_MARKER_FILE_NAME);
-		llinfos << "Creating crash marker file " << crash_file_name << llendl;
-		
-		LLAPRFile crash_file ;
-		crash_file.open(crash_file_name, LL_APR_W);
-		if (crash_file.getFileHandle())
+		std::string crash_marker_file_name = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,
+																			gLLErrorActivated
+																			? LLERROR_MARKER_FILE_NAME
+																			: ERROR_MARKER_FILE_NAME);
+		LLAPRFile crash_marker_file ;
+		crash_marker_file.open(crash_marker_file_name, LL_APR_WB);
+		if (crash_marker_file.getFileHandle())
 		{
-			LL_INFOS("MarkerFile") << "Created crash marker file " << crash_file_name << LL_ENDL;
+			LL_INFOS("MarkerFile") << "Created crash marker file " << crash_marker_file_name << LL_ENDL;
+			recordMarkerVersion(crash_marker_file);
 		}
 		else
 		{
-			LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_file_name << LL_ENDL;
-		}		
+			LL_WARNS("MarkerFile") << "Cannot create error marker file " << crash_marker_file_name << LL_ENDL;
+		}
 	}
+	else
+	{
+		LL_WARNS("MarkerFile") << "No gDirUtilp with which to create error marker file name" << LL_ENDL;
+	}		
 	
 	if (gMessageSystem && gDirUtilp)
 	{
@@ -3428,46 +3537,52 @@ void LLAppViewer::handleViewerCrash()
 	return;
 }
 
-bool LLAppViewer::anotherInstanceRunning()
+// static
+void LLAppViewer::recordMarkerVersion(LLAPRFile& marker_file) 
+{		
+	std::string marker_version(LLVersionInfo::getChannelAndVersion());
+	if ( marker_version.length() > MAX_MARKER_LENGTH )
+	{
+		LL_WARNS_ONCE("MarkerFile") << "Version length ("<< marker_version.length()<< ")"
+									<< " greater than maximum (" << MAX_MARKER_LENGTH << ")"
+									<< ": marker matching may be incorrect"
+									<< LL_ENDL;
+	}
+
+	// record the viewer version in the marker file
+	marker_file.write(marker_version.data(), marker_version.length());
+}
+
+bool LLAppViewer::markerIsSameVersion(const std::string& marker_name) const
 {
-	// We create a marker file when the program starts and remove the file when it finishes.
-	// If the file is currently locked, that means another process is already running.
+	bool sameVersion = false;
 
-	std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME);
-	LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
+	std::string my_version(LLVersionInfo::getChannelAndVersion());
+	char marker_version[MAX_MARKER_LENGTH];
+	S32  marker_version_length;
 
-	//Freeze case checks
-	if (LLAPRFile::isExist(marker_file, NULL, LL_APR_RB))
+	LLAPRFile marker_file;
+	marker_file.open(marker_name, LL_APR_RB);
+	if (marker_file.getFileHandle())
 	{
-		// File exists, try opening with write permissions
-		LLAPRFile outfile ;
-		outfile.open(marker_file, LL_APR_WB);
-		apr_file_t* fMarker = outfile.getFileHandle() ; 
-		if (!fMarker)
+		marker_version_length = marker_file.read(marker_version, sizeof(marker_version));
+		std::string marker_string(marker_version, marker_version_length);
+		if ( 0 == my_version.compare( 0, my_version.length(), marker_version, 0, marker_version_length ) )
 		{
-			// Another instance is running. Skip the rest of these operations.
-			LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL;
-			return true;
+			sameVersion = true;
 		}
-		if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
-		{
-			LL_INFOS("MarkerFile") << "Marker file is locked." << LL_ENDL;
-			return true;
-		}
-		// No other instances; we'll lock this file now & delete on quit.		
-	}
-	LL_DEBUGS("MarkerFile") << "Marker file isn't locked." << LL_ENDL;
-	return false;
+		LL_DEBUGS("MarkerFile") << "Compare markers for '" << marker_name << "': "
+								<< "\n   mine '" << my_version    << "'"
+								<< "\n marker '" << marker_string << "'"
+								<< "\n " << ( sameVersion ? "same" : "different" ) << " version"
+								<< LL_ENDL;
+		marker_file.close();
+	}
+	return sameVersion;
 }
 
-void LLAppViewer::initMarkerFile()
+void LLAppViewer::processMarkerFiles()
 {
-	//First, check for the existence of other files.
-	//There are marker files for two different types of crashes
-	
-	mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME);
-	LL_DEBUGS("MarkerFile") << "Checking marker file for lock..." << LL_ENDL;
-
 	//We've got 4 things to test for here
 	// - Other Process Running (SecondLife.exec_marker present, locked)
 	// - Freeze (SecondLife.exec_marker present, not locked)
@@ -3475,78 +3590,179 @@ void LLAppViewer::initMarkerFile()
 	// - Other Crash (SecondLife.error_marker present)
 	// These checks should also remove these files for the last 2 cases if they currently exist
 
-	//LLError/Error checks. Only one of these should ever happen at a time.
-	std::string logout_marker_file =  gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LOGOUT_MARKER_FILE_NAME);
-	std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME);
-	std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME);
+	bool marker_is_same_version = true;
+	// first, look for the marker created at startup and deleted on a clean exit
+	mMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,MARKER_FILE_NAME);
+	if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB))
+	{
+		// File exists...
+		// first, read it to see if it was created by the same version (we need this later)
+		marker_is_same_version = markerIsSameVersion(mMarkerFileName);
 
-	if (LLAPRFile::isExist(mMarkerFileName, NULL, LL_APR_RB) && !anotherInstanceRunning())
+		// now test to see if this file is locked by a running process (try to open for write)
+		LL_DEBUGS("MarkerFile") << "Checking exec marker file for lock..." << LL_ENDL;
+		mMarkerFile.open(mMarkerFileName, LL_APR_WB);
+		apr_file_t* fMarker = mMarkerFile.getFileHandle() ; 
+		if (!fMarker)
+		{
+			LL_INFOS("MarkerFile") << "Exec marker file open failed - assume it is locked." << LL_ENDL;
+			mSecondInstance = true; // lock means that instance is running.
+		}
+		else
+		{
+			// We were able to open it, now try to lock it ourselves...
+			if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS)
+			{
+				LL_WARNS_ONCE("MarkerFile") << "Locking exec marker failed." << LL_ENDL;
+				mSecondInstance = true; // lost a race? be conservative
+			}
+			else
+			{
+				// No other instances; we've locked this file now, so record our version; delete on quit.		
+				recordMarkerVersion(mMarkerFile);
+				LL_DEBUGS("MarkerFile") << "Exec marker file existed but was not locked; rewritten." << LL_ENDL;
+			}
+		}
+
+		if (mSecondInstance)
+		{
+			LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' owned by another instance" << LL_ENDL;
+		}
+		else if (marker_is_same_version)
+		{
+			// the file existed, is ours, and matched our version, so we can report on what it says
+			LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found; last exec FROZE" << LL_ENDL;
+			gLastExecEvent = LAST_EXEC_FROZE;
+				
+		}
+		else
+		{
+			LL_INFOS("MarkerFile") << "Exec marker '"<< mMarkerFileName << "' found, but versions did not match" << LL_ENDL;
+		}
+	}
+	else // marker did not exist... last exec (if any) did not freeze
 	{
-		gLastExecEvent = LAST_EXEC_FROZE;
-		LL_INFOS("MarkerFile") << "Exec marker found: program froze on previous execution" << LL_ENDL;
-	}    
+		// Create the marker file for this execution & lock it; it will be deleted on a clean exit
+		apr_status_t s;
+		s = mMarkerFile.open(mMarkerFileName, LL_APR_WB, TRUE);	
+
+		if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
+		{
+			LL_DEBUGS("MarkerFile") << "Exec marker file '"<< mMarkerFileName << "' created." << LL_ENDL;
+			if (APR_SUCCESS == apr_file_lock(mMarkerFile.getFileHandle(), APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE)) 
+			{
+				recordMarkerVersion(mMarkerFile);
+				LL_DEBUGS("MarkerFile") << "Exec marker file locked." << LL_ENDL;
+			}
+			else
+			{
+				LL_WARNS("MarkerFile") << "Exec marker file cannot be locked." << LL_ENDL;
+			}
+		}
+		else
+		{
+			LL_WARNS("MarkerFile") << "Failed to create exec marker file '"<< mMarkerFileName << "'." << LL_ENDL;
+		}
+	}
+
+	// now check for cases in which the exec marker may have been cleaned up by crash handlers
+
+	// check for any last exec event report based on whether or not it happened during logout
+	// (the logout marker is created when logout begins)
+	std::string logout_marker_file =  gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LOGOUT_MARKER_FILE_NAME);
 	if(LLAPRFile::isExist(logout_marker_file, NULL, LL_APR_RB))
 	{
-		gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
-		LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+		if (markerIsSameVersion(logout_marker_file))
+		{
+			gLastExecEvent = LAST_EXEC_LOGOUT_FROZE;
+			LL_INFOS("MarkerFile") << "Logout crash marker '"<< logout_marker_file << "', changing LastExecEvent to LOGOUT_FROZE" << LL_ENDL;
+		}
+		else
+		{
+			LL_INFOS("MarkerFile") << "Logout crash marker '"<< logout_marker_file << "' found, but versions did not match" << LL_ENDL;
+		}
 		LLAPRFile::remove(logout_marker_file);
 	}
+	// further refine based on whether or not a marker created during an llerr crash is found
+	std::string llerror_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, LLERROR_MARKER_FILE_NAME);
 	if(LLAPRFile::isExist(llerror_marker_file, NULL, LL_APR_RB))
 	{
-		if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
-		else gLastExecEvent = LAST_EXEC_LLERROR_CRASH;
-		LL_INFOS("MarkerFile") << "Last exec LLError crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+		if (markerIsSameVersion(llerror_marker_file))
+		{
+			if ( gLastExecEvent == LAST_EXEC_LOGOUT_FROZE )
+			{
+				gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
+				LL_INFOS("MarkerFile") << "LLError marker '"<< llerror_marker_file << "' crashed, setting LastExecEvent to LOGOUT_CRASH" << LL_ENDL;
+			}
+			else
+			{
+				gLastExecEvent = LAST_EXEC_LLERROR_CRASH;
+				LL_INFOS("MarkerFile") << "LLError marker '"<< llerror_marker_file << "' crashed, setting LastExecEvent to LLERROR_CRASH" << LL_ENDL;
+			}
+		}
+		else
+		{
+			LL_INFOS("MarkerFile") << "LLError marker '"<< llerror_marker_file << "' found, but versions did not match" << LL_ENDL;
+		}
 		LLAPRFile::remove(llerror_marker_file);
 	}
+	// and last refine based on whether or not a marker created during a non-llerr crash is found
+	std::string error_marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, ERROR_MARKER_FILE_NAME);
 	if(LLAPRFile::isExist(error_marker_file, NULL, LL_APR_RB))
 	{
-		if(gLastExecEvent == LAST_EXEC_LOGOUT_FROZE) gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
-		else gLastExecEvent = LAST_EXEC_OTHER_CRASH;
-		LL_INFOS("MarkerFile") << "Last exec crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+		if (markerIsSameVersion(error_marker_file))
+		{
+			if (gLastExecEvent == LAST_EXEC_LOGOUT_FROZE)
+			{
+				gLastExecEvent = LAST_EXEC_LOGOUT_CRASH;
+				LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' crashed, setting LastExecEvent to LOGOUT_CRASH" << LL_ENDL;
+			}
+			else
+			{
+				gLastExecEvent = LAST_EXEC_OTHER_CRASH;
+				LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' crashed, setting LastExecEvent to " << gLastExecEvent << LL_ENDL;
+			}
+		}
+		else
+		{
+			LL_INFOS("MarkerFile") << "Error marker '"<< error_marker_file << "' marker found, but versions did not match" << LL_ENDL;
+		}
 		LLAPRFile::remove(error_marker_file);
 	}
-
-	// No new markers if another instance is running.
-	if(anotherInstanceRunning()) 
-	{
-		return;
-	}
-	
-	// Create the marker file for this execution & lock it
-	apr_status_t s;
-	s = mMarkerFile.open(mMarkerFileName, LL_APR_W, TRUE);	
-
-	if (s == APR_SUCCESS && mMarkerFile.getFileHandle())
-	{
-		LL_DEBUGS("MarkerFile") << "Marker file created." << LL_ENDL;
-	}
-	else
-	{
-		LL_INFOS("MarkerFile") << "Failed to create marker file." << LL_ENDL;
-		return;
-	}
-	if (apr_file_lock(mMarkerFile.getFileHandle(), APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) 
-	{
-		mMarkerFile.close() ;
-		LL_INFOS("MarkerFile") << "Marker file cannot be locked." << LL_ENDL;
-		return;
-	}
-
-	LL_DEBUGS("MarkerFile") << "Marker file locked." << LL_ENDL;
 }
 
 void LLAppViewer::removeMarkerFile(bool leave_logout_marker)
 {
-	LL_DEBUGS("MarkerFile") << "removeMarkerFile()" << LL_ENDL;
-	if (mMarkerFile.getFileHandle())
-	{
-		mMarkerFile.close() ;
-		LLAPRFile::remove( mMarkerFileName );
+	if (!mSecondInstance)
+	{		
+		LL_DEBUGS("MarkerFile") << (leave_logout_marker?"leave":"remove") <<" logout" << LL_ENDL;
+		if (mMarkerFile.getFileHandle())
+		{
+			LL_DEBUGS("MarkerFile") << "removing exec marker '"<<mMarkerFileName<<"'"<< LL_ENDL;
+			mMarkerFile.close() ;
+			LLAPRFile::remove( mMarkerFileName );
+		}
+		else
+		{
+			LL_WARNS("MarkerFile") << "marker '"<<mMarkerFileName<<"' not open"<< LL_ENDL;
+		}
+		if (!leave_logout_marker)
+		{
+			if (mLogoutMarkerFile.getFileHandle())
+			{
+				LL_DEBUGS("MarkerFile") << "removing logout marker '"<<mLogoutMarkerFileName<<"'"<< LL_ENDL;
+				mLogoutMarkerFile.close();
+			}
+			else
+			{
+				LL_WARNS("MarkerFile") << "logout marker '"<<mLogoutMarkerFileName<<"' not open"<< LL_ENDL;
+			}
+			LLAPRFile::remove( mLogoutMarkerFileName );
+		}
 	}
-	if (mLogoutMarkerFile != NULL && !leave_logout_marker)
+	else
 	{
-		LLAPRFile::remove( mLogoutMarkerFileName );
-		mLogoutMarkerFile = NULL;
+		LL_WARNS("MarkerFile") << "leaving markers because this is a second instance" << LL_ENDL;
 	}
 }
 
@@ -3601,6 +3817,12 @@ void LLAppViewer::requestQuit()
 		gAgentAvatarp->updateAvatarRezMetrics(true); // force a last packet to be sent.
 	}
 	
+	// Try to send last batch of avatar rez metrics.
+	if (!gDisconnected && isAgentAvatarValid())
+	{
+		gAgentAvatarp->updateAvatarRezMetrics(true); // force a last packet to be sent.
+	}
+	
 	LLHUDEffectSpiral *effectp = (LLHUDEffectSpiral*)LLHUDManager::getInstance()->createViewerEffect(LLHUDObject::LL_HUD_EFFECT_POINT, TRUE);
 	effectp->setPositionGlobal(gAgent.getPositionGlobal());
 	effectp->setColor(LLColor4U(gAgent.getEffectColor()));
@@ -4739,6 +4961,22 @@ void LLAppViewer::sendLogoutRequest()
 {
 	if(!mLogoutRequestSent && gMessageSystem)
 	{
+		//Set internal status variables and marker files before actually starting the logout process
+		gLogoutInProgress = TRUE;
+		mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME);
+		
+		LLAPRFile outfile ;
+		mLogoutMarkerFile.open(mLogoutMarkerFileName, LL_APR_WB);
+		if (mLogoutMarkerFile.getFileHandle())
+		{
+			LL_INFOS("MarkerFile") << "Created logout marker file '"<< mLogoutMarkerFileName << "' " << LL_ENDL;
+			recordMarkerVersion(outfile);
+		}
+		else
+		{
+			LL_WARNS("MarkerFile") << "Cannot create logout marker file " << mLogoutMarkerFileName << LL_ENDL;
+		}		
+
 		LLMessageSystem* msg = gMessageSystem;
 		msg->newMessageFast(_PREHASH_LogoutRequest);
 		msg->nextBlockFast(_PREHASH_AgentData);
@@ -4754,23 +4992,6 @@ void LLAppViewer::sendLogoutRequest()
 		{
 			LLVoiceClient::getInstance()->leaveChannel();
 		}
-
-		//Set internal status variables and marker files
-		gLogoutInProgress = TRUE;
-		mLogoutMarkerFileName = gDirUtilp->getExpandedFilename(LL_PATH_LOGS,LOGOUT_MARKER_FILE_NAME);
-		
-		LLAPRFile outfile ;
-		outfile.open(mLogoutMarkerFileName, LL_APR_W);
-		mLogoutMarkerFile =  outfile.getFileHandle() ;
-		if (mLogoutMarkerFile)
-		{
-			llinfos << "Created logout marker file " << mLogoutMarkerFileName << llendl;
-    		apr_file_close(mLogoutMarkerFile);
-		}
-		else
-		{
-			llwarns << "Cannot create logout marker file " << mLogoutMarkerFileName << llendl;
-		}		
 	}
 }
 
@@ -5019,11 +5240,12 @@ void LLAppViewer::disconnectViewer()
 
 void LLAppViewer::forceErrorLLError()
 {
-   	llerrs << "This is an llerror" << llendl;
+   	llerrs << "This is a deliberate llerror" << llendl;
 }
 
 void LLAppViewer::forceErrorBreakpoint()
 {
+   	llwarns << "Forcing a deliberate breakpoint" << llendl;
 #ifdef LL_WINDOWS
     DebugBreak();
 #endif
@@ -5032,6 +5254,7 @@ void LLAppViewer::forceErrorBreakpoint()
 
 void LLAppViewer::forceErrorBadMemoryAccess()
 {
+   	llwarns << "Forcing a deliberate bad memory access" << llendl;
     S32* crash = NULL;
     *crash = 0xDEADBEEF;  
     return;
@@ -5039,6 +5262,7 @@ void LLAppViewer::forceErrorBadMemoryAccess()
 
 void LLAppViewer::forceErrorInfiniteLoop()
 {
+   	llwarns << "Forcing a deliberate infinite loop" << llendl;
     while(true)
     {
         ;
@@ -5048,12 +5272,14 @@ void LLAppViewer::forceErrorInfiniteLoop()
  
 void LLAppViewer::forceErrorSoftwareException()
 {
+   	llwarns << "Forcing a deliberate exception" << llendl;
     // *FIX: Any way to insure it won't be handled?
     throw; 
 }
 
 void LLAppViewer::forceErrorDriverCrash()
 {
+   	llwarns << "Forcing a deliberate driver crash" << llendl;
 	glDeleteTextures(1, NULL);
 }
 
@@ -5167,16 +5393,8 @@ void LLAppViewer::handleLoginComplete()
 void LLAppViewer::launchUpdater()
 {
 		LLSD query_map = LLSD::emptyMap();
-	// *TODO place os string in a global constant
-#if LL_WINDOWS  
-	query_map["os"] = "win";
-#elif LL_DARWIN
-	query_map["os"] = "mac";
-#elif LL_LINUX
-	query_map["os"] = "lnx";
-#elif LL_SOLARIS
-	query_map["os"] = "sol";
-#endif
+	query_map["os"] = gPlatform;
+
 	// *TODO change userserver to be grid on both viewer and sim, since
 	// userserver no longer exists.
 	query_map["userserver"] = LLGridManager::getInstance()->getGridId();
diff --git a/indra/newview/llappviewer.h b/indra/newview/llappviewer.h
old mode 100644
new mode 100755
index 08039100b3e7e8385f5d90d47a65197762fae974..cd91ae8b2bc9c3ba76b67418270af5c6d939790d
--- a/indra/newview/llappviewer.h
+++ b/indra/newview/llappviewer.h
@@ -183,7 +183,7 @@ class LLAppViewer : public LLApp
 	
 protected:
 	virtual bool initWindow(); // Initialize the viewer's window.
-	virtual bool initLogging(); // Initialize log files, logging system, return false on failure.
+	virtual void initLoggingAndGetLastDuration(); // Initialize log files, logging system
 	virtual void initConsole() {}; // Initialize OS level debugging console.
 	virtual bool initHardwareTest() { return true; } // A false result indicates the app should quit.
 	virtual bool initSLURLHandler();
@@ -215,9 +215,10 @@ class LLAppViewer : public LLApp
 
 	void writeSystemInfo(); // Write system info to "debug_info.log"
 
-	bool anotherInstanceRunning(); 
-	void initMarkerFile(); 
-    
+	void processMarkerFiles(); 
+	static void recordMarkerVersion(LLAPRFile& marker_file);
+	bool markerIsSameVersion(const std::string& marker_name) const;
+	
     void idle(); 
     void idleShutdown();
 	// update avatar SLID and display name caches
@@ -237,7 +238,7 @@ class LLAppViewer : public LLApp
 	LLAPRFile mMarkerFile; // A file created to indicate the app is running.
 
 	std::string mLogoutMarkerFileName;
-	apr_file_t* mLogoutMarkerFile; // A file created to indicate the app is running.
+	LLAPRFile mLogoutMarkerFile; // A file created to indicate the app is running.
 
 	
 	LLOSInfo mSysOSInfo; 
@@ -321,6 +322,9 @@ typedef enum
 } eLastExecEvent;
 
 extern eLastExecEvent gLastExecEvent; // llstartup
+extern S32 gLastExecDuration; ///< the duration of the previous run in seconds (<0 indicates unknown)
+
+extern const char* gPlatform;
 
 extern U32 gFrameCount;
 extern U32 gForegroundFrameCount;
diff --git a/indra/newview/llappviewerlinux.cpp b/indra/newview/llappviewerlinux.cpp
old mode 100644
new mode 100755
index 869565216864d5c81633d6e3e8ebf3079f47cb4c..b16bb573e1b483ffd6958312bd16581397effb7f
--- a/indra/newview/llappviewerlinux.cpp
+++ b/indra/newview/llappviewerlinux.cpp
@@ -440,7 +440,7 @@ bool LLAppViewerLinux::beingDebugged()
 #endif
 }
 
-bool LLAppViewerLinux::initLogging()
+void LLAppViewerLinux::initLoggingAndGetLastDuration()
 {
 	// Remove the last stack trace, if any
 	// This file is no longer created, since the move to Google Breakpad
@@ -449,7 +449,7 @@ bool LLAppViewerLinux::initLogging()
 		gDirUtilp->getExpandedFilename(LL_PATH_LOGS,"stack_trace.log");
 	LLFile::remove(old_stack_file);
 
-	return LLAppViewer::initLogging();
+	LLAppViewer::initLoggingAndGetLastDuration();
 }
 
 bool LLAppViewerLinux::initParseCommandLine(LLCommandLineParser& clp)
diff --git a/indra/newview/llappviewerlinux.h b/indra/newview/llappviewerlinux.h
old mode 100644
new mode 100755
index 58e516018018784a32ef2790eb23c215f8092c93..fb77600c10e7c02ca2ff45f9f8fa57f0eeba107c
--- a/indra/newview/llappviewerlinux.h
+++ b/indra/newview/llappviewerlinux.h
@@ -63,7 +63,7 @@ class LLAppViewerLinux : public LLAppViewer
 	virtual bool restoreErrorTrap();
 	virtual void handleCrashReporting(bool reportFreeze);
 
-	virtual bool initLogging();
+	virtual void initLoggingAndGetLastDuration();
 	virtual bool initParseCommandLine(LLCommandLineParser& clp);
 
 	virtual bool initSLURLHandler();
diff --git a/indra/newview/llappviewerlinux_api.h b/indra/newview/llappviewerlinux_api.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerlinux_api.xml b/indra/newview/llappviewerlinux_api.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerlinux_api_dbus.cpp b/indra/newview/llappviewerlinux_api_dbus.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerlinux_api_dbus.h b/indra/newview/llappviewerlinux_api_dbus.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerlinux_api_dbus_syms_raw.inc b/indra/newview/llappviewerlinux_api_dbus_syms_raw.inc
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerlistener.cpp b/indra/newview/llappviewerlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerlistener.h b/indra/newview/llappviewerlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewermacosx.cpp b/indra/newview/llappviewermacosx.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewermacosx.h b/indra/newview/llappviewermacosx.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llappviewerwin32.cpp b/indra/newview/llappviewerwin32.cpp
old mode 100644
new mode 100755
index 82b93b52a2a126c4858879519f753a30ece3009d..3cf3c739d942b27a3205027018ce8526bcae6491
--- a/indra/newview/llappviewerwin32.cpp
+++ b/indra/newview/llappviewerwin32.cpp
@@ -490,7 +490,7 @@ bool LLAppViewerWin32::init()
 	// (Don't send our data to Microsoft--at least until we are Logo approved and have a way
 	// of getting the data back from them.)
 	//
-	llinfos << "Turning off Windows error reporting." << llendl;
+	// llinfos << "Turning off Windows error reporting." << llendl;
 	disableWinErrorReporting();
 
 #ifndef LL_RELEASE_FOR_DOWNLOAD
@@ -509,9 +509,9 @@ bool LLAppViewerWin32::cleanup()
 	return result;
 }
 
-bool LLAppViewerWin32::initLogging()
+void LLAppViewerWin32::initLoggingAndGetLastDuration()
 {
-	return LLAppViewer::initLogging();
+	LLAppViewer::initLoggingAndGetLastDuration();
 }
 
 void LLAppViewerWin32::initConsole()
diff --git a/indra/newview/llappviewerwin32.h b/indra/newview/llappviewerwin32.h
old mode 100644
new mode 100755
index 67594aea483cd180e06dd5318b73823b21423759..386bddd495dbd9326de6a4803dcd6811f1330746
--- a/indra/newview/llappviewerwin32.h
+++ b/indra/newview/llappviewerwin32.h
@@ -44,7 +44,7 @@ class LLAppViewerWin32 : public LLAppViewer
 	virtual bool cleanup();
 
 protected:
-	virtual bool initLogging(); // Override to clean stack_trace info.
+	virtual void initLoggingAndGetLastDuration(); // Override to clean stack_trace info.
 	virtual void initConsole(); // Initialize OS level debugging console.
 	virtual bool initHardwareTest(); // Win32 uses DX9 to test hardware.
 	virtual bool initParseCommandLine(LLCommandLineParser& clp);
diff --git a/indra/newview/llassetuploadqueue.cpp b/indra/newview/llassetuploadqueue.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llassetuploadqueue.h b/indra/newview/llassetuploadqueue.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llassetuploadresponders.cpp b/indra/newview/llassetuploadresponders.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llassetuploadresponders.h b/indra/newview/llassetuploadresponders.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llattachmentsmgr.cpp b/indra/newview/llattachmentsmgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llattachmentsmgr.h b/indra/newview/llattachmentsmgr.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llaudiosourcevo.cpp b/indra/newview/llaudiosourcevo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llaudiosourcevo.h b/indra/newview/llaudiosourcevo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llautoreplace.cpp b/indra/newview/llautoreplace.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llautoreplace.h b/indra/newview/llautoreplace.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llavataractions.h b/indra/newview/llavataractions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatariconctrl.h b/indra/newview/llavatariconctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatarlist.cpp b/indra/newview/llavatarlist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatarlist.h b/indra/newview/llavatarlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatarlistitem.cpp b/indra/newview/llavatarlistitem.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatarlistitem.h b/indra/newview/llavatarlistitem.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatarpropertiesprocessor.cpp b/indra/newview/llavatarpropertiesprocessor.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llavatarpropertiesprocessor.h b/indra/newview/llavatarpropertiesprocessor.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llblockedlistitem.cpp b/indra/newview/llblockedlistitem.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llblockedlistitem.h b/indra/newview/llblockedlistitem.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llblocklist.cpp b/indra/newview/llblocklist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llblocklist.h b/indra/newview/llblocklist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llbox.cpp b/indra/newview/llbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llbox.h b/indra/newview/llbox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llbreadcrumbview.cpp b/indra/newview/llbreadcrumbview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llbreadcrumbview.h b/indra/newview/llbreadcrumbview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llbreastmotion.cpp b/indra/newview/llbreastmotion.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llbreastmotion.h b/indra/newview/llbreastmotion.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llbrowsernotification.cpp b/indra/newview/llbrowsernotification.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llbuycurrencyhtml.cpp b/indra/newview/llbuycurrencyhtml.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llbuycurrencyhtml.h b/indra/newview/llbuycurrencyhtml.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcallbacklist.cpp b/indra/newview/llcallbacklist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcallbacklist.h b/indra/newview/llcallbacklist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcallingcard.cpp b/indra/newview/llcallingcard.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcallingcard.h b/indra/newview/llcallingcard.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcapabilitylistener.cpp b/indra/newview/llcapabilitylistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcapabilitylistener.h b/indra/newview/llcapabilitylistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcapabilityprovider.h b/indra/newview/llcapabilityprovider.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcaphttpsender.cpp b/indra/newview/llcaphttpsender.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcaphttpsender.h b/indra/newview/llcaphttpsender.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchannelmanager.cpp b/indra/newview/llchannelmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchannelmanager.h b/indra/newview/llchannelmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchatbar.cpp b/indra/newview/llchatbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchatbar.h b/indra/newview/llchatbar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchathistory.cpp b/indra/newview/llchathistory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchathistory.h b/indra/newview/llchathistory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchatitemscontainerctrl.cpp b/indra/newview/llchatitemscontainerctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchatitemscontainerctrl.h b/indra/newview/llchatitemscontainerctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchatmsgbox.cpp b/indra/newview/llchatmsgbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchatmsgbox.h b/indra/newview/llchatmsgbox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchiclet.cpp b/indra/newview/llchiclet.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchiclet.h b/indra/newview/llchiclet.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llchicletbar.cpp b/indra/newview/llchicletbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llchicletbar.h b/indra/newview/llchicletbar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llclassifiedinfo.cpp b/indra/newview/llclassifiedinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llclassifiedinfo.h b/indra/newview/llclassifiedinfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llclassifiedstatsresponder.cpp b/indra/newview/llclassifiedstatsresponder.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llclassifiedstatsresponder.h b/indra/newview/llclassifiedstatsresponder.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcofwearables.cpp b/indra/newview/llcofwearables.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcofwearables.h b/indra/newview/llcofwearables.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcolorswatch.cpp b/indra/newview/llcolorswatch.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcolorswatch.h b/indra/newview/llcolorswatch.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommanddispatcherlistener.cpp b/indra/newview/llcommanddispatcherlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommanddispatcherlistener.h b/indra/newview/llcommanddispatcherlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommandhandler.h b/indra/newview/llcommandhandler.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommandlineparser.cpp b/indra/newview/llcommandlineparser.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommandlineparser.h b/indra/newview/llcommandlineparser.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommunicationchannel.cpp b/indra/newview/llcommunicationchannel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcommunicationchannel.h b/indra/newview/llcommunicationchannel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcompilequeue.cpp b/indra/newview/llcompilequeue.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcompilequeue.h b/indra/newview/llcompilequeue.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llconfirmationmanager.cpp b/indra/newview/llconfirmationmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llconfirmationmanager.h b/indra/newview/llconfirmationmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationlog.h b/indra/newview/llconversationlog.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationloglist.cpp b/indra/newview/llconversationloglist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationloglist.h b/indra/newview/llconversationloglist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationloglistitem.cpp b/indra/newview/llconversationloglistitem.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationloglistitem.h b/indra/newview/llconversationloglistitem.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llconversationmodel.cpp b/indra/newview/llconversationmodel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcurrencyuimanager.cpp b/indra/newview/llcurrencyuimanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcurrencyuimanager.h b/indra/newview/llcurrencyuimanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llcylinder.cpp b/indra/newview/llcylinder.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llcylinder.h b/indra/newview/llcylinder.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldateutil.cpp b/indra/newview/lldateutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldateutil.h b/indra/newview/lldateutil.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldaycyclemanager.cpp b/indra/newview/lldaycyclemanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldaycyclemanager.h b/indra/newview/lldaycyclemanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldebugmessagebox.cpp b/indra/newview/lldebugmessagebox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldebugmessagebox.h b/indra/newview/lldebugmessagebox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldebugview.cpp b/indra/newview/lldebugview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldebugview.h b/indra/newview/lldebugview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldeferredsounds.cpp b/indra/newview/lldeferredsounds.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldeferredsounds.h b/indra/newview/lldeferredsounds.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldelayedgestureerror.cpp b/indra/newview/lldelayedgestureerror.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldelayedgestureerror.h b/indra/newview/lldelayedgestureerror.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldirpicker.cpp b/indra/newview/lldirpicker.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldirpicker.h b/indra/newview/lldirpicker.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldndbutton.cpp b/indra/newview/lldndbutton.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldndbutton.h b/indra/newview/lldndbutton.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldonotdisturbnotificationstorage.cpp b/indra/newview/lldonotdisturbnotificationstorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldonotdisturbnotificationstorage.h b/indra/newview/lldonotdisturbnotificationstorage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawable.cpp b/indra/newview/lldrawable.cpp
old mode 100644
new mode 100755
index bb1d263670d3504b96796793ec358ae305a8bb0e..8c9fd4152aa1af6f5edfadb42801c1c7a79fe934
--- a/indra/newview/lldrawable.cpp
+++ b/indra/newview/lldrawable.cpp
@@ -308,6 +308,49 @@ LLFace*	LLDrawable::addFace(const LLTextureEntry *te, LLViewerTexture *texturep)
 
 }
 
+LLFace*	LLDrawable::addFace(const LLTextureEntry *te, LLViewerTexture *texturep, LLViewerTexture *normalp)
+{
+	LLFace *face;
+	face = new LLFace(this, mVObjp);
+	
+	face->setTEOffset(mFaces.size());
+	face->setTexture(texturep);
+	face->setNormalMap(normalp);
+	face->setPoolType(gPipeline.getPoolTypeFromTE(te, texturep));
+	
+	mFaces.push_back(face);
+	
+	if (isState(UNLIT))
+	{
+		face->setState(LLFace::FULLBRIGHT);
+	}
+	
+	return face;
+	
+}
+
+LLFace*	LLDrawable::addFace(const LLTextureEntry *te, LLViewerTexture *texturep, LLViewerTexture *normalp, LLViewerTexture *specularp)
+{
+	LLFace *face;
+	face = new LLFace(this, mVObjp);
+	
+	face->setTEOffset(mFaces.size());
+	face->setTexture(texturep);
+	face->setNormalMap(normalp);
+	face->setSpecularMap(specularp);
+	face->setPoolType(gPipeline.getPoolTypeFromTE(te, texturep));
+	
+	mFaces.push_back(face);
+	
+	if (isState(UNLIT))
+	{
+		face->setState(LLFace::FULLBRIGHT);
+	}
+	
+	return face;
+	
+}
+
 void LLDrawable::setNumFaces(const S32 newFaces, LLFacePool *poolp, LLViewerTexture *texturep)
 {
 	if (newFaces == (S32)mFaces.size())
@@ -441,7 +484,7 @@ void LLDrawable::makeActive()
 	}
 
 	llassert(isAvatar() || isRoot() || mParent->isActive());
-	}
+}
 
 
 void LLDrawable::makeStatic(BOOL warning_enabled)
diff --git a/indra/newview/lldrawable.h b/indra/newview/lldrawable.h
old mode 100644
new mode 100755
index 4608d16fec66cc1ccfb2cbe1916e41238d2cd91a..c3f6d77edc3bd9ba31d1b221eb0089ef36c78b67
--- a/indra/newview/lldrawable.h
+++ b/indra/newview/lldrawable.h
@@ -145,6 +145,8 @@ class LLDrawable : public LLRefCount
 	//void                removeFace(const S32 i); // SJB: Avoid using this, it's slow
 	LLFace*				addFace(LLFacePool *poolp, LLViewerTexture *texturep);
 	LLFace*				addFace(const LLTextureEntry *te, LLViewerTexture *texturep);
+	LLFace*				addFace(const LLTextureEntry *te, LLViewerTexture *texturep, LLViewerTexture *normalp);
+	LLFace*				addFace(const LLTextureEntry *te, LLViewerTexture *texturep, LLViewerTexture *normalp, LLViewerTexture *specularp);
 	void				deleteFaces(S32 offset, S32 count);
 	void                setNumFaces(const S32 numFaces, LLFacePool *poolp, LLViewerTexture *texturep);
 	void                setNumFacesFast(const S32 numFaces, LLFacePool *poolp, LLViewerTexture *texturep);
@@ -284,7 +286,6 @@ class LLDrawable : public LLRefCount
  		NEARBY_LIGHT	= 0x00200000, // In gPipeline.mNearbyLightSet
 		BUILT			= 0x00400000,
 		FORCE_INVISIBLE = 0x00800000, // stay invis until CLEAR_INVISIBLE is set (set of orphaned)
-		CLEAR_INVISIBLE = 0x01000000, // clear FORCE_INVISIBLE next draw frame
 		REBUILD_SHADOW =  0x02000000,
 		HAS_ALPHA		= 0x04000000,
 		RIGGED			= 0x08000000,
diff --git a/indra/newview/lldrawpool.cpp b/indra/newview/lldrawpool.cpp
old mode 100644
new mode 100755
index 94dd927d26ce1a53dcdcdb85def8bf99b2f29ff1..04e31e648678dc5166db54663a4049c1e1b630c9
--- a/indra/newview/lldrawpool.cpp
+++ b/indra/newview/lldrawpool.cpp
@@ -35,6 +35,7 @@
 #include "lldrawpoolalpha.h"
 #include "lldrawpoolavatar.h"
 #include "lldrawpoolbump.h"
+#include "lldrawpoolmaterials.h"
 #include "lldrawpoolground.h"
 #include "lldrawpoolsimple.h"
 #include "lldrawpoolsky.h"
@@ -47,6 +48,7 @@
 #include "llspatialpartition.h"
 #include "llviewercamera.h"
 #include "lldrawpoolwlsky.h"
+#include "llglslshader.h"
 
 S32 LLDrawPool::sNumDrawPools = 0;
 
@@ -64,6 +66,12 @@ LLDrawPool *LLDrawPool::createPool(const U32 type, LLViewerTexture *tex0)
 	case POOL_GRASS:
 		poolp = new LLDrawPoolGrass();
 		break;
+	case POOL_ALPHA_MASK:
+		poolp = new LLDrawPoolAlphaMask();
+		break;
+	case POOL_FULLBRIGHT_ALPHA_MASK:
+		poolp = new LLDrawPoolFullbrightAlphaMask();
+		break;
 	case POOL_FULLBRIGHT:
 		poolp = new LLDrawPoolFullbright();
 		break;
@@ -98,6 +106,9 @@ LLDrawPool *LLDrawPool::createPool(const U32 type, LLViewerTexture *tex0)
 	case POOL_BUMP:
 		poolp = new LLDrawPoolBump();
 		break;
+	case POOL_MATERIALS:
+		poolp = new LLDrawPoolMaterials();
+		break;
 	case POOL_WL_SKY:
 		poolp = new LLDrawPoolWLSky();
 		break;
@@ -411,6 +422,27 @@ void LLRenderPass::pushBatches(U32 type, U32 mask, BOOL texture, BOOL batch_text
 	}
 }
 
+void LLRenderPass::pushMaskBatches(U32 type, U32 mask, BOOL texture, BOOL batch_textures)
+{
+	for (LLCullResult::drawinfo_iterator i = gPipeline.beginRenderMap(type); i != gPipeline.endRenderMap(type); ++i)	
+	{
+		LLDrawInfo* pparams = *i;
+		if (pparams) 
+		{
+			if (LLGLSLShader::sCurBoundShaderPtr)
+			{
+				LLGLSLShader::sCurBoundShaderPtr->setMinimumAlpha(pparams->mAlphaMaskCutoff);
+			}
+			else
+			{
+				gGL.setAlphaRejectSettings(LLRender::CF_GREATER, pparams->mAlphaMaskCutoff);
+			}
+			
+			pushBatch(*pparams, mask, texture, batch_textures);
+		}
+	}
+}
+
 void LLRenderPass::applyModelMatrix(LLDrawInfo& params)
 {
 	if (params.mModelMatrix != gGLLastMatrix)
diff --git a/indra/newview/lldrawpool.h b/indra/newview/lldrawpool.h
old mode 100644
new mode 100755
index ab9bb9e611ebbf0becf5091cb03fb0422f08c28d..3bde0d29befc36b26cb460730df24fc195496a6c
--- a/indra/newview/lldrawpool.h
+++ b/indra/newview/lldrawpool.h
@@ -50,10 +50,13 @@ class LLDrawPool
 		POOL_GROUND,
 		POOL_FULLBRIGHT,
 		POOL_BUMP,
+		POOL_MATERIALS,
 		POOL_TERRAIN,	
 		POOL_SKY,
 		POOL_WL_SKY,
 		POOL_TREE,
+		POOL_ALPHA_MASK,
+		POOL_FULLBRIGHT_ALPHA_MASK,
 		POOL_GRASS,
 		POOL_INVISIBLE, // see below *
 		POOL_AVATAR,
@@ -133,6 +136,22 @@ class LLRenderPass : public LLDrawPool
 		PASS_SHINY,
 		PASS_BUMP,
 		PASS_POST_BUMP,
+		PASS_MATERIAL,
+		PASS_MATERIAL_ALPHA,
+		PASS_MATERIAL_ALPHA_MASK,
+		PASS_MATERIAL_ALPHA_EMISSIVE,
+		PASS_SPECMAP,
+		PASS_SPECMAP_BLEND,
+		PASS_SPECMAP_MASK,
+		PASS_SPECMAP_EMISSIVE,
+		PASS_NORMMAP,
+		PASS_NORMMAP_BLEND,
+		PASS_NORMMAP_MASK,
+		PASS_NORMMAP_EMISSIVE,
+		PASS_NORMSPEC,
+		PASS_NORMSPEC_BLEND,
+		PASS_NORMSPEC_MASK,
+		PASS_NORMSPEC_EMISSIVE,
 		PASS_GLOW,
 		PASS_ALPHA,
 		PASS_ALPHA_MASK,
@@ -151,6 +170,7 @@ class LLRenderPass : public LLDrawPool
 
 	static void applyModelMatrix(LLDrawInfo& params);
 	virtual void pushBatches(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE);
+	virtual void pushMaskBatches(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_textures = FALSE);
 	virtual void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures = FALSE);
 	virtual void renderGroup(LLSpatialGroup* group, U32 type, U32 mask, BOOL texture = TRUE);
 	virtual void renderGroups(U32 type, U32 mask, BOOL texture = TRUE);
diff --git a/indra/newview/lldrawpoolalpha.cpp b/indra/newview/lldrawpoolalpha.cpp
old mode 100644
new mode 100755
index 313b310e1e87769b87bedf3de987eee8c60dd53a..c832e1401da8076bd92b2a6b484d6a46427a1384
--- a/indra/newview/lldrawpoolalpha.cpp
+++ b/indra/newview/lldrawpoolalpha.cpp
@@ -71,33 +71,6 @@ void LLDrawPoolAlpha::prerender()
 	mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT);
 }
 
-S32 LLDrawPoolAlpha::getNumDeferredPasses()
-{
-	return 1;
-}
-
-void LLDrawPoolAlpha::beginDeferredPass(S32 pass)
-{
-	
-}
-
-void LLDrawPoolAlpha::endDeferredPass(S32 pass)
-{
-	
-}
-
-void LLDrawPoolAlpha::renderDeferred(S32 pass)
-{
-	LLFastTimer t(FTM_RENDER_GRASS);
-	gDeferredDiffuseAlphaMaskProgram.bind();
-	gDeferredDiffuseAlphaMaskProgram.setMinimumAlpha(0.33f);
-
-	//render alpha masked objects
-	LLRenderPass::pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
-	gDeferredDiffuseAlphaMaskProgram.unbind();			
-}
-
-
 S32 LLDrawPoolAlpha::getNumPostDeferredPasses() 
 { 
 	if (LLPipeline::sImpostorRender)
@@ -121,8 +94,10 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
 	if (pass == 0)
 	{
 		simple_shader = &gDeferredAlphaProgram;
-		fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
-
+		fullbright_shader = &gObjectFullbrightProgram;
+		fullbright_shader->bind();
+		fullbright_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f); 
+		fullbright_shader->unbind();
 		//prime simple shader (loads shadow relevant uniforms)
 		gPipeline.bindDeferredShader(*simple_shader);
 	}
@@ -133,8 +108,7 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
 		gPipeline.mDeferredDepth.copyContents(gPipeline.mDeferredScreen, 0, 0, gPipeline.mDeferredScreen.getWidth(), gPipeline.mDeferredScreen.getHeight(),
 							0, 0, gPipeline.mDeferredDepth.getWidth(), gPipeline.mDeferredDepth.getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST);	
 		gPipeline.mDeferredDepth.bindTarget();
-		simple_shader = NULL;
-		fullbright_shader = NULL;
+		simple_shader = fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
 		gObjectFullbrightAlphaMaskProgram.bind();
 		gObjectFullbrightAlphaMaskProgram.setMinimumAlpha(0.33f);
 	}
@@ -150,7 +124,6 @@ void LLDrawPoolAlpha::beginPostDeferredPass(S32 pass)
 
 void LLDrawPoolAlpha::endPostDeferredPass(S32 pass) 
 { 
-
 	if (pass == 1)
 	{
 		gPipeline.mDeferredDepth.flush();
@@ -173,14 +146,14 @@ void LLDrawPoolAlpha::beginRenderPass(S32 pass)
 	
 	if (LLPipeline::sUnderWaterRender)
 	{
-		simple_shader = &gObjectSimpleWaterAlphaMaskProgram;
-		fullbright_shader = &gObjectFullbrightWaterAlphaMaskProgram;
+		simple_shader = &gObjectSimpleWaterProgram;
+		fullbright_shader = &gObjectFullbrightWaterProgram;
 		emissive_shader = &gObjectEmissiveWaterProgram;
 	}
 	else
 	{
-		simple_shader = &gObjectSimpleAlphaMaskProgram;
-		fullbright_shader = &gObjectFullbrightAlphaMaskProgram;
+		simple_shader = &gObjectSimpleProgram;
+		fullbright_shader = &gObjectFullbrightProgram;
 		emissive_shader = &gObjectEmissiveProgram;
 	}
 
@@ -218,43 +191,7 @@ void LLDrawPoolAlpha::render(S32 pass)
 	{
 		gGL.setColorMask(true, true);
 	}
-
-	if (LLPipeline::sAutoMaskAlphaNonDeferred)
-	{
-		mColorSFactor = LLRender::BF_ONE;  // }
-		mColorDFactor = LLRender::BF_ZERO; // } these are like disabling blend on the color channels, but we're still blending on the alpha channel so that we can suppress glow
-		mAlphaSFactor = LLRender::BF_ZERO;
-		mAlphaDFactor = LLRender::BF_ZERO; // block (zero-out) glow where the alpha test succeeds
-		gGL.blendFunc(mColorSFactor, mColorDFactor, mAlphaSFactor, mAlphaDFactor);
-
-		if (mVertexShaderLevel > 0)
-		{
-			if (!LLPipeline::sRenderDeferred || !deferred_render)
-			{
-				simple_shader->bind();
-				simple_shader->setMinimumAlpha(0.33f);
-
-				pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
-			}
-			if (fullbright_shader)
-			{
-				fullbright_shader->bind();
-				fullbright_shader->setMinimumAlpha(0.33f);
-			}
-			pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
-			//LLGLSLShader::bindNoShader();
-		}
-		else
-		{
-			gGL.setAlphaRejectSettings(LLRender::CF_GREATER, 0.33f); //OK
-			gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
-			pushBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask());
-			gPipeline.enableLightsDynamic();
-			pushBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask());
-			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
-		}
-	}
-
+	
 	LLGLDepthTest depth(GL_TRUE, LLDrawPoolWater::sSkipScreenCopy || 
 				(deferred_render && pass == 1) ? GL_TRUE : GL_FALSE);
 
@@ -302,7 +239,7 @@ void LLDrawPoolAlpha::render(S32 pass)
 
 	if (mVertexShaderLevel > 0)
 	{
-		renderAlpha(getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX);
+		renderAlpha(getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX | LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2);
 	}
 	else
 	{
@@ -412,8 +349,14 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 				}
 
 				LLRenderPass::applyModelMatrix(params);
-
 				
+				LLMaterial* mat = NULL;
+
+				if (deferred_render && !LLPipeline::sUnderWaterRender)
+				{
+					mat = params.mMaterial;
+				}
+
 				if (params.mFullbright)
 				{
 					// Turn off lighting if it hasn't already been so.
@@ -446,11 +389,30 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 					light_enabled = TRUE;
 				}
 
-				// If we need shaders, and we're not ALREADY using the proper shader, then bind it
-				// (this way we won't rebind shaders unnecessarily).
-				if(use_shaders && (current_shader != target_shader))
+				if (deferred_render && mat)
 				{
-					llassert(target_shader != NULL);
+					U32 mask = params.mShaderMask;
+
+					llassert(mask < LLMaterial::SHADER_COUNT);
+					target_shader = &(gDeferredMaterialProgram[mask]);
+
+					if (current_shader != target_shader)
+					{
+						gPipeline.bindDeferredShader(*target_shader);
+					}
+				}
+				else if (!params.mFullbright)
+				{
+					target_shader = simple_shader;
+				}
+				else
+				{
+					target_shader = fullbright_shader;
+				}
+				
+				if(use_shaders && (current_shader != target_shader))
+				{// If we need shaders, and we're not ALREADY using the proper shader, then bind it
+				// (this way we won't rebind shaders unnecessarily).
 					current_shader = target_shader;
 					current_shader->bind();
 				}
@@ -459,6 +421,38 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 					LLGLSLShader::bindNoShader();
 					current_shader = NULL;
 				}
+				
+				if (use_shaders && mat)
+				{
+					// We have a material.  Supply the appropriate data here.
+					if (LLPipeline::sRenderDeferred)
+					{
+						current_shader->uniform4f(LLShaderMgr::SPECULAR_COLOR, params.mSpecColor.mV[0], params.mSpecColor.mV[1], params.mSpecColor.mV[2], params.mSpecColor.mV[3]);						
+						current_shader->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, params.mEnvIntensity);
+						current_shader->uniform1f(LLShaderMgr::EMISSIVE_BRIGHTNESS, params.mFullbright ? 1.f : 0.f);
+
+						if (params.mNormalMap)
+						{
+							params.mNormalMap->addTextureStats(params.mVSize);
+							current_shader->bindTexture(LLShaderMgr::BUMP_MAP, params.mNormalMap);
+						} 
+						
+						if (params.mSpecularMap)
+						{
+							params.mSpecularMap->addTextureStats(params.mVSize);
+							current_shader->bindTexture(LLShaderMgr::SPECULAR_MAP, params.mSpecularMap);
+						} 
+					}
+
+				} else if (LLPipeline::sRenderDeferred && current_shader && (current_shader == simple_shader))
+				{
+					current_shader->uniform4f(LLShaderMgr::SPECULAR_COLOR, 1.0f, 1.0f, 1.0f, 1.0f);						
+					current_shader->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, 0.0f);			
+					LLViewerFetchedTexture::sFlatNormalImagep->addTextureStats(params.mVSize);
+					current_shader->bindTexture(LLShaderMgr::BUMP_MAP, LLViewerFetchedTexture::sFlatNormalImagep);						
+					LLViewerFetchedTexture::sWhiteImagep->addTextureStats(params.mVSize);
+					current_shader->bindTexture(LLShaderMgr::SPECULAR_MAP, LLViewerFetchedTexture::sWhiteImagep);
+				}
 
 				if (params.mGroup)
 				{
@@ -477,12 +471,20 @@ void LLDrawPoolAlpha::renderAlpha(U32 mask)
 						}
 					}
 				}
-				else
+				else  
 				{ //not batching textures or batch has only 1 texture -- might need a texture matrix
 					if (params.mTexture.notNull())
 					{
 						params.mTexture->addTextureStats(params.mVSize);
-						gGL.getTexUnit(0)->bind(params.mTexture, TRUE) ;
+						if (use_shaders && mat)
+						{
+							current_shader->bindTexture(LLShaderMgr::DIFFUSE_MAP, params.mTexture);
+						}
+						else
+						{
+							gGL.getTexUnit(0)->bind(params.mTexture, TRUE);
+						}
+						
 						if (params.mTextureMatrix)
 						{
 							tex_setup = true;
diff --git a/indra/newview/lldrawpoolalpha.h b/indra/newview/lldrawpoolalpha.h
old mode 100644
new mode 100755
index a4245e561d85cf3e70a377b59c73405b8f219805..43122218edadba815be0945cf5911beeb18fd27d
--- a/indra/newview/lldrawpoolalpha.h
+++ b/indra/newview/lldrawpoolalpha.h
@@ -50,11 +50,6 @@ class LLDrawPoolAlpha: public LLRenderPass
 	LLDrawPoolAlpha(U32 type = LLDrawPool::POOL_ALPHA);
 	/*virtual*/ ~LLDrawPoolAlpha();
 
-	/*virtual*/ S32 getNumDeferredPasses();
-	/*virtual*/ void beginDeferredPass(S32 pass);
-	/*virtual*/ void endDeferredPass(S32 pass);
-	/*virtual*/ void renderDeferred(S32 pass);
-
 	/*virtual*/ S32 getNumPostDeferredPasses();
 	/*virtual*/ void beginPostDeferredPass(S32 pass);
 	/*virtual*/ void endPostDeferredPass(S32 pass);
@@ -70,7 +65,7 @@ class LLDrawPoolAlpha: public LLRenderPass
 	void renderGroupAlpha(LLSpatialGroup* group, U32 type, U32 mask, BOOL texture = TRUE);
 	void renderAlpha(U32 mask);
 	void renderAlphaHighlight(U32 mask);
-	
+		
 	static BOOL sShowDebugAlpha;
 
 private:
diff --git a/indra/newview/lldrawpoolavatar.cpp b/indra/newview/lldrawpoolavatar.cpp
old mode 100644
new mode 100755
index 294cecc7037f1bbf7dc749eb820eefb5a4c8fcfa..075299386e70a039a0389425130ab93c1e2e79f6
--- a/indra/newview/lldrawpoolavatar.cpp
+++ b/indra/newview/lldrawpoolavatar.cpp
@@ -62,6 +62,7 @@ S32 LLDrawPoolAvatar::sDiffuseChannel = 0;
 
 
 static bool is_deferred_render = false;
+static bool is_post_deferred_render = false;
 
 extern BOOL gUseGLPick;
 
@@ -183,6 +184,9 @@ void LLDrawPoolAvatar::beginDeferredPass(S32 pass)
 	case 4:
 		beginDeferredRiggedBump();
 		break;
+	default:
+		beginDeferredRiggedMaterial(pass-5);
+		break;
 	}
 }
 
@@ -215,6 +219,9 @@ void LLDrawPoolAvatar::endDeferredPass(S32 pass)
 	case 4:
 		endDeferredRiggedBump();
 		break;
+	default:
+		endDeferredRiggedMaterial(pass-5);
+		break;
 	}
 }
 
@@ -225,7 +232,7 @@ void LLDrawPoolAvatar::renderDeferred(S32 pass)
 
 S32 LLDrawPoolAvatar::getNumPostDeferredPasses()
 {
-	return 6;
+	return 10;
 }
 
 void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass)
@@ -247,9 +254,12 @@ void LLDrawPoolAvatar::beginPostDeferredPass(S32 pass)
 	case 4:
 		beginRiggedFullbrightAlpha();
 		break;
-	case 5:
+	case 9:
 		beginRiggedGlow();
 		break;
+	default:
+		beginDeferredRiggedMaterialAlpha(pass-5);
+		break;
 	}
 }
 
@@ -275,11 +285,34 @@ void LLDrawPoolAvatar::beginDeferredRiggedAlpha()
 	gPipeline.enableLightsDynamic();
 }
 
+void LLDrawPoolAvatar::beginDeferredRiggedMaterialAlpha(S32 pass)
+{
+	switch (pass)
+	{
+	case 0: pass = 1; break;
+	case 1: pass = 5; break;
+	case 2: pass = 9; break;
+	default: pass = 13; break;
+	}
+
+	pass += LLMaterial::SHADER_COUNT;
+
+	sVertexProgram = &gDeferredMaterialProgram[pass];
+
+	gPipeline.bindDeferredShader(*sVertexProgram);
+	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
+	normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);
+	specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP);
+	gPipeline.enableLightsDynamic();
+}
+
 void LLDrawPoolAvatar::endDeferredRiggedAlpha()
 {
 	LLVertexBuffer::unbind();
 	gPipeline.unbindDeferredShader(*sVertexProgram);
 	sDiffuseChannel = 0;
+	normal_channel = -1;
+	specular_channel = -1;
 	sVertexProgram = NULL;
 }
 
@@ -305,6 +338,9 @@ void LLDrawPoolAvatar::endPostDeferredPass(S32 pass)
 	case 5:
 		endRiggedGlow();
 		break;
+	default:
+		endDeferredRiggedAlpha();
+		break;
 	}
 }
 
@@ -328,17 +364,23 @@ void LLDrawPoolAvatar::renderPostDeferred(S32 pass)
 		6, //rigged fullbright shiny
 		7, //rigged alpha
 		8, //rigged fullbright alpha
-		9, //rigged glow
+		9, //rigged material alpha 1
+		10,//rigged material alpha 2
+		11,//rigged material alpha 3
+		12,//rigged material alpha 4
+		13, //rigged glow
 	};
 
-	pass = actual_pass[pass];
+	S32 p = actual_pass[pass];
 
 	if (LLPipeline::sImpostorRender)
 	{ //HACK for impostors so actual pass ends up being proper pass
-		pass -= 2;
+		p -= 2;
 	}
 
-	render(pass);
+	is_post_deferred_render = true;
+	render(p);
+	is_post_deferred_render = false;
 }
 
 
@@ -425,12 +467,10 @@ void LLDrawPoolAvatar::renderShadow(S32 pass)
 	}
 	else
 	{
-		renderRigged(avatarp, RIGGED_SIMPLE);
-		renderRigged(avatarp, RIGGED_ALPHA);
-		renderRigged(avatarp, RIGGED_FULLBRIGHT);
-		renderRigged(avatarp, RIGGED_FULLBRIGHT_SHINY);
-		renderRigged(avatarp, RIGGED_SHINY);
-		renderRigged(avatarp, RIGGED_FULLBRIGHT_ALPHA);
+		for (U32 i = 0; i < NUM_RIGGED_PASSES; ++i)
+		{
+			renderRigged(avatarp, i);
+		}
 	}
 }
 
@@ -455,7 +495,7 @@ S32 LLDrawPoolAvatar::getNumDeferredPasses()
 	}
 	else
 	{
-		return 5;
+		return 21;
 	}
 }
 
@@ -839,6 +879,8 @@ void LLDrawPoolAvatar::beginRiggedGlow()
 	{
 		sDiffuseChannel = 0;
 		sVertexProgram->bind();
+
+		sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, LLPipeline::sRenderDeferred ? 2.2f : 1.1f);
 	}
 }
 
@@ -857,7 +899,14 @@ void LLDrawPoolAvatar::beginRiggedFullbright()
 		}
 		else
 		{
-			sVertexProgram = &gSkinnedObjectFullbrightProgram;
+			if (LLPipeline::sRenderDeferred)
+			{
+				sVertexProgram = &gDeferredSkinnedFullbrightProgram;
+			}
+			else
+			{
+				sVertexProgram = &gSkinnedObjectFullbrightProgram;
+			}
 		}
 	}
 	else
@@ -876,6 +925,15 @@ void LLDrawPoolAvatar::beginRiggedFullbright()
 	{
 		sDiffuseChannel = 0;
 		sVertexProgram->bind();
+
+		if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
+		{
+			sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0f);
+		} 
+		else 
+		{
+			sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+		}
 	}
 }
 
@@ -942,7 +1000,14 @@ void LLDrawPoolAvatar::beginRiggedFullbrightShiny()
 		}
 		else
 		{
-			sVertexProgram = &gSkinnedObjectFullbrightShinyProgram;
+			if (LLPipeline::sRenderDeferred)
+			{
+				sVertexProgram = &gDeferredSkinnedFullbrightShinyProgram;
+			}
+			else
+			{
+				sVertexProgram = &gSkinnedObjectFullbrightShinyProgram;
+			}
 		}
 	}
 	else
@@ -957,11 +1022,19 @@ void LLDrawPoolAvatar::beginRiggedFullbrightShiny()
 		}
 	}
 
-
 	if (sShaderLevel > 0 || gPipeline.canUseVertexShaders())
 	{
 		sVertexProgram->bind();
 		LLDrawPoolBump::bindCubeMap(sVertexProgram, 2, sDiffuseChannel, cube_channel, false);
+
+		if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
+		{
+			sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0f);
+		} 
+		else 
+		{
+			sVertexProgram->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+		}
 	}
 }
 
@@ -1010,6 +1083,42 @@ void LLDrawPoolAvatar::endDeferredRiggedBump()
 	sVertexProgram = NULL;
 }
 
+void LLDrawPoolAvatar::beginDeferredRiggedMaterial(S32 pass)
+{
+	if (pass == 1 ||
+		pass == 5 ||
+		pass == 9 ||
+		pass == 13)
+	{ //skip alpha passes
+		return;
+	}
+	sVertexProgram = &gDeferredMaterialProgram[pass+LLMaterial::SHADER_COUNT];
+	sVertexProgram->bind();
+	normal_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::BUMP_MAP);
+	specular_channel = sVertexProgram->enableTexture(LLViewerShaderMgr::SPECULAR_MAP);
+	sDiffuseChannel = sVertexProgram->enableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
+}
+
+void LLDrawPoolAvatar::endDeferredRiggedMaterial(S32 pass)
+{
+	if (pass == 1 ||
+		pass == 5 ||
+		pass == 9 ||
+		pass == 13)
+	{
+		return;
+	}
+
+	LLVertexBuffer::unbind();
+	sVertexProgram->disableTexture(LLViewerShaderMgr::BUMP_MAP);
+	sVertexProgram->disableTexture(LLViewerShaderMgr::SPECULAR_MAP);
+	sVertexProgram->disableTexture(LLViewerShaderMgr::DIFFUSE_MAP);
+	sVertexProgram->unbind();
+	normal_channel = -1;
+	sDiffuseChannel = 0;
+	sVertexProgram = NULL;
+}
+
 void LLDrawPoolAvatar::beginDeferredSkinned()
 {
 	sShaderLevel = mVertexShaderLevel;
@@ -1167,6 +1276,22 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 		else
 		{
 			renderRiggedSimple(avatarp);
+
+			if (LLPipeline::sRenderDeferred)
+			{ //render "simple" materials
+				renderRigged(avatarp, RIGGED_MATERIAL);
+				renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_MASK);
+				renderRigged(avatarp, RIGGED_MATERIAL_ALPHA_EMISSIVE);
+				renderRigged(avatarp, RIGGED_NORMMAP);
+				renderRigged(avatarp, RIGGED_NORMMAP_MASK);
+				renderRigged(avatarp, RIGGED_NORMMAP_EMISSIVE);	
+				renderRigged(avatarp, RIGGED_SPECMAP);
+				renderRigged(avatarp, RIGGED_SPECMAP_MASK);
+				renderRigged(avatarp, RIGGED_SPECMAP_EMISSIVE);
+				renderRigged(avatarp, RIGGED_NORMSPEC);
+				renderRigged(avatarp, RIGGED_NORMSPEC_MASK);
+				renderRigged(avatarp, RIGGED_NORMSPEC_EMISSIVE);
+			}
 		}
 		return;
 	}
@@ -1185,9 +1310,27 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 		return;
 	}
 
+	if (is_deferred_render && pass >= 5 && pass <= 21)
+	{
+		S32 p = pass-5;
+
+		if (p != 1 &&
+			p != 5 &&
+			p != 9 &&
+			p != 13)
+		{
+			renderDeferredRiggedMaterial(avatarp, p);
+		}
+		return;
+	}
+
+
+
+
 	if (pass == 5)
 	{
 		renderRiggedShinySimple(avatarp);
+				
 		return;
 	}
 
@@ -1197,11 +1340,29 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 		return;
 	}
 
-	if (pass >= 7 && pass < 9)
+	if (pass >= 7 && pass < 13)
 	{
 		if (pass == 7)
 		{
 			renderRiggedAlpha(avatarp);
+
+			if (LLPipeline::sRenderDeferred && !is_post_deferred_render)
+			{ //render transparent materials under water
+				LLGLEnable blend(GL_BLEND);
+
+				gGL.setColorMask(true, true);
+				gGL.blendFunc(LLRender::BF_SOURCE_ALPHA,
+								LLRender::BF_ONE_MINUS_SOURCE_ALPHA,
+								LLRender::BF_ZERO,
+								LLRender::BF_ONE_MINUS_SOURCE_ALPHA);
+
+				renderRigged(avatarp, RIGGED_MATERIAL_ALPHA);
+				renderRigged(avatarp, RIGGED_SPECMAP_BLEND);
+				renderRigged(avatarp, RIGGED_NORMMAP_BLEND);
+				renderRigged(avatarp, RIGGED_NORMSPEC_BLEND);
+
+				gGL.setColorMask(true, false);
+			}
 			return;
 		}
 
@@ -1210,9 +1371,32 @@ void LLDrawPoolAvatar::renderAvatars(LLVOAvatar* single_avatar, S32 pass)
 			renderRiggedFullbrightAlpha(avatarp);
 			return;
 		}
+
+		if (LLPipeline::sRenderDeferred && is_post_deferred_render)
+		{
+			S32 p = 0;
+			switch (pass)
+			{
+			case 9: p = 1; break;
+			case 10: p = 5; break;
+			case 11: p = 9; break;
+			case 12: p = 13; break;
+			}
+
+			{
+				LLGLEnable blend(GL_BLEND);
+				renderDeferredRiggedMaterial(avatarp, p);
+			}
+			return;
+		}
+		else if (pass == 9)
+		{
+			renderRiggedGlow(avatarp);
+			return;
+		}
 	}
 
-	if (pass == 9)
+	if (pass == 13)
 	{
 		renderRiggedGlow(avatarp);
 		
@@ -1474,9 +1658,11 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
 		{
 			if (sShaderLevel > 0)
 			{ //upload matrix palette to shader
-				LLMatrix4 mat[64];
+				LLMatrix4 mat[32];
+
+				U32 count = llmin((U32) skin->mJointNames.size(), (U32) 32);
 
-				for (U32 i = 0; i < skin->mJointNames.size(); ++i)
+				for (U32 i = 0; i < count; ++i)
 				{
 					LLJoint* joint = avatar->getJoint(skin->mJointNames[i]);
 					if (joint)
@@ -1489,7 +1675,7 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
 				stop_glerror();
 
 				LLDrawPoolAvatar::sVertexProgram->uniformMatrix4fv("matrixPalette", 
-					skin->mJointNames.size(),
+					count,
 					FALSE,
 					(GLfloat*) mat[0].mMatrix);
 				
@@ -1510,10 +1696,59 @@ void LLDrawPoolAvatar::renderRigged(LLVOAvatar* avatar, U32 type, bool glow)
 				gGL.diffuseColor4f(0,0,0,face->getTextureEntry()->getGlow());
 			}*/
 
-			gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture());
-			if (normal_channel > -1)
+			const LLTextureEntry* te = face->getTextureEntry();
+			LLMaterial* mat = te->getMaterialParams().get();
+
+			if (mat)
 			{
-				LLDrawPoolBump::bindBumpMap(face, normal_channel);
+				gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture(LLRender::DIFFUSE_MAP));
+				gGL.getTexUnit(normal_channel)->bind(face->getTexture(LLRender::NORMAL_MAP));
+				gGL.getTexUnit(specular_channel)->bind(face->getTexture(LLRender::SPECULAR_MAP));
+
+				LLColor4 col = mat->getSpecularLightColor();
+				F32 spec = mat->getSpecularLightExponent()/255.f;
+
+				F32 env = mat->getEnvironmentIntensity()/255.f;
+
+				if (mat->getSpecularID().isNull())
+				{
+					env = te->getShiny()*0.25f;
+					col.set(env,env,env,0);
+					spec = env;
+				}
+		
+				BOOL fullbright = te->getFullbright();
+
+				sVertexProgram->uniform1f(LLShaderMgr::EMISSIVE_BRIGHTNESS, fullbright ? 1.f : 0.f);
+				sVertexProgram->uniform4f(LLShaderMgr::SPECULAR_COLOR, col.mV[0], col.mV[1], col.mV[2], spec);
+				sVertexProgram->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, env);
+
+				if (mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
+				{
+					sVertexProgram->setMinimumAlpha(mat->getAlphaMaskCutoff()/255.f);
+				}
+				else
+				{
+					sVertexProgram->setMinimumAlpha(0.f);
+				}
+
+				for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
+				{
+					LLViewerTexture* tex = face->getTexture(i);
+					if (tex)
+					{
+						tex->addTextureStats(avatar->getPixelArea());
+					}
+				}
+			}
+			else
+			{
+				gGL.getTexUnit(sDiffuseChannel)->bind(face->getTexture());
+				sVertexProgram->setMinimumAlpha(0.f);
+				if (normal_channel > -1)
+				{
+					LLDrawPoolBump::bindBumpMap(face, normal_channel);
+				}
 			}
 
 			if (face->mTextureMatrix)
@@ -1545,6 +1780,11 @@ void LLDrawPoolAvatar::renderDeferredRiggedBump(LLVOAvatar* avatar)
 	renderRigged(avatar, RIGGED_DEFERRED_BUMP);
 }
 
+void LLDrawPoolAvatar::renderDeferredRiggedMaterial(LLVOAvatar* avatar, S32 pass)
+{
+	renderRigged(avatar, pass);
+}
+
 static LLFastTimer::DeclareTimer FTM_RIGGED_VBO("Rigged VBO");
 
 void LLDrawPoolAvatar::updateRiggedVertexBuffers(LLVOAvatar* avatar)
diff --git a/indra/newview/lldrawpoolavatar.h b/indra/newview/lldrawpoolavatar.h
old mode 100644
new mode 100755
index 69e306885893797c00e5b222c59d338d59a43739..7d0368a9459d7b7363228e12e7968730e490f14b
--- a/indra/newview/lldrawpoolavatar.h
+++ b/indra/newview/lldrawpoolavatar.h
@@ -75,7 +75,7 @@ class LLDrawPoolAvatar : public LLFacePool
 	/*virtual*/ void beginDeferredPass(S32 pass);
 	/*virtual*/ void endDeferredPass(S32 pass);
 	/*virtual*/ void renderDeferred(S32 pass);
-
+	
 	/*virtual*/ S32 getNumPostDeferredPasses();
 	/*virtual*/ void beginPostDeferredPass(S32 pass);
 	/*virtual*/ void endPostDeferredPass(S32 pass);
@@ -113,6 +113,8 @@ class LLDrawPoolAvatar : public LLFacePool
 	void beginRiggedFullbrightAlpha();
 	void beginRiggedGlow();
 	void beginDeferredRiggedAlpha();
+	void beginDeferredRiggedMaterial(S32 pass);
+	void beginDeferredRiggedMaterialAlpha(S32 pass);
 
 	void endRiggedSimple();
 	void endRiggedFullbright();
@@ -122,6 +124,8 @@ class LLDrawPoolAvatar : public LLFacePool
 	void endRiggedFullbrightAlpha();
 	void endRiggedGlow();
 	void endDeferredRiggedAlpha();
+	void endDeferredRiggedMaterial(S32 pass);
+	void endDeferredRiggedMaterialAlpha(S32 pass);
 
 	void beginDeferredRiggedSimple();
 	void beginDeferredRiggedBump();
@@ -146,10 +150,27 @@ class LLDrawPoolAvatar : public LLFacePool
 	void renderRiggedGlow(LLVOAvatar* avatar);
 	void renderDeferredRiggedSimple(LLVOAvatar* avatar);
 	void renderDeferredRiggedBump(LLVOAvatar* avatar);
-
+	void renderDeferredRiggedMaterial(LLVOAvatar* avatar, S32 pass);
+	
 	typedef enum
 	{
-		RIGGED_SIMPLE = 0,
+		RIGGED_MATERIAL=0,
+		RIGGED_MATERIAL_ALPHA,
+		RIGGED_MATERIAL_ALPHA_MASK,
+		RIGGED_MATERIAL_ALPHA_EMISSIVE,
+		RIGGED_SPECMAP,
+		RIGGED_SPECMAP_BLEND,
+		RIGGED_SPECMAP_MASK,
+		RIGGED_SPECMAP_EMISSIVE,
+		RIGGED_NORMMAP,
+		RIGGED_NORMMAP_BLEND,
+		RIGGED_NORMMAP_MASK,
+		RIGGED_NORMMAP_EMISSIVE,
+		RIGGED_NORMSPEC,
+		RIGGED_NORMSPEC_BLEND,
+		RIGGED_NORMSPEC_MASK,
+		RIGGED_NORMSPEC_EMISSIVE,
+		RIGGED_SIMPLE,
 		RIGGED_FULLBRIGHT,
 		RIGGED_SHINY,
 		RIGGED_FULLBRIGHT_SHINY,
@@ -164,6 +185,48 @@ class LLDrawPoolAvatar : public LLFacePool
 
 	typedef enum
 	{
+		RIGGED_MATERIAL_MASK =
+						LLVertexBuffer::MAP_VERTEX | 
+						LLVertexBuffer::MAP_NORMAL | 
+						LLVertexBuffer::MAP_TEXCOORD0 |
+						LLVertexBuffer::MAP_COLOR |
+						LLVertexBuffer::MAP_WEIGHT4,
+		RIGGED_MATERIAL_ALPHA_VMASK = RIGGED_MATERIAL_MASK,
+		RIGGED_MATERIAL_ALPHA_MASK_MASK = RIGGED_MATERIAL_MASK,
+		RIGGED_MATERIAL_ALPHA_EMISSIVE_MASK = RIGGED_MATERIAL_MASK,
+		RIGGED_SPECMAP_VMASK =
+						LLVertexBuffer::MAP_VERTEX | 
+						LLVertexBuffer::MAP_NORMAL | 
+						LLVertexBuffer::MAP_TEXCOORD0 |
+						LLVertexBuffer::MAP_TEXCOORD2 |
+						LLVertexBuffer::MAP_COLOR |
+						LLVertexBuffer::MAP_WEIGHT4,
+		RIGGED_SPECMAP_BLEND_MASK = RIGGED_SPECMAP_VMASK,
+		RIGGED_SPECMAP_MASK_MASK = RIGGED_SPECMAP_VMASK,
+		RIGGED_SPECMAP_EMISSIVE_MASK = RIGGED_SPECMAP_VMASK,
+		RIGGED_NORMMAP_VMASK =
+						LLVertexBuffer::MAP_VERTEX | 
+						LLVertexBuffer::MAP_NORMAL | 
+						LLVertexBuffer::MAP_TANGENT | 
+						LLVertexBuffer::MAP_TEXCOORD0 |
+						LLVertexBuffer::MAP_TEXCOORD1 |
+						LLVertexBuffer::MAP_COLOR |
+						LLVertexBuffer::MAP_WEIGHT4,
+		RIGGED_NORMMAP_BLEND_MASK = RIGGED_NORMMAP_VMASK,
+		RIGGED_NORMMAP_MASK_MASK = RIGGED_NORMMAP_VMASK,
+		RIGGED_NORMMAP_EMISSIVE_MASK = RIGGED_NORMMAP_VMASK,
+		RIGGED_NORMSPEC_VMASK =
+						LLVertexBuffer::MAP_VERTEX | 
+						LLVertexBuffer::MAP_NORMAL | 
+						LLVertexBuffer::MAP_TANGENT | 
+						LLVertexBuffer::MAP_TEXCOORD0 |
+						LLVertexBuffer::MAP_TEXCOORD1 |
+						LLVertexBuffer::MAP_TEXCOORD2 |
+						LLVertexBuffer::MAP_COLOR |
+						LLVertexBuffer::MAP_WEIGHT4,
+		RIGGED_NORMSPEC_BLEND_MASK = RIGGED_NORMSPEC_VMASK,
+		RIGGED_NORMSPEC_MASK_MASK = RIGGED_NORMSPEC_VMASK,
+		RIGGED_NORMSPEC_EMISSIVE_MASK = RIGGED_NORMSPEC_VMASK,
 		RIGGED_SIMPLE_MASK = LLVertexBuffer::MAP_VERTEX | 
 							 LLVertexBuffer::MAP_NORMAL | 
 							 LLVertexBuffer::MAP_TEXCOORD0 |
@@ -184,7 +247,7 @@ class LLDrawPoolAvatar : public LLFacePool
 		RIGGED_DEFERRED_BUMP_MASK = LLVertexBuffer::MAP_VERTEX | 
 							 LLVertexBuffer::MAP_NORMAL | 
 							 LLVertexBuffer::MAP_TEXCOORD0 |
-							 LLVertexBuffer::MAP_BINORMAL |
+							 LLVertexBuffer::MAP_TANGENT |
 							 LLVertexBuffer::MAP_COLOR |
 							 LLVertexBuffer::MAP_WEIGHT4,
 		RIGGED_DEFERRED_SIMPLE_MASK = LLVertexBuffer::MAP_VERTEX | 
diff --git a/indra/newview/lldrawpoolbump.cpp b/indra/newview/lldrawpoolbump.cpp
old mode 100644
new mode 100755
index e8d43c86312fe6658e19929daec7bbe5ad6987f4..155e289c9d1385fd28077a23ab00d0ae411da70f
--- a/indra/newview/lldrawpoolbump.cpp
+++ b/indra/newview/lldrawpoolbump.cpp
@@ -153,7 +153,7 @@ void LLStandardBumpmap::addstandard()
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mLabel = label;
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage = 
 			LLViewerTextureManager::getFetchedTexture(LLUUID(bump_image_id));	
-		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLGLTexture::BOOST_BUMP) ;
+		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setBoostLevel(LLGLTexture::LOCAL) ;
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->setLoadedCallback(LLBumpImageList::onSourceStandardLoaded, 0, TRUE, FALSE, NULL, NULL );
 		gStandardBumpmapList[LLStandardBumpmap::sStandardBumpmapCount].mImage->forceToSaveRawImage(0) ;
 		LLStandardBumpmap::sStandardBumpmapCount++;
@@ -449,9 +449,6 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
 	LLCubeMap* cube_map = gSky.mVOSkyp ? gSky.mVOSkyp->getCubeMap() : NULL;
 	if( cube_map )
 	{
-		cube_map->disable();
-		cube_map->restoreMatrix();
-
 		if (!invisible && shader_level > 1)
 		{
 			shader->disableTexture(LLViewerShaderMgr::ENVIRONMENT_MAP, LLTexUnit::TT_CUBE_MAP);
@@ -464,6 +461,8 @@ void LLDrawPoolBump::unbindCubeMap(LLGLSLShader* shader, S32 shader_level, S32&
 				}
 			}
 		}
+		cube_map->disable();
+		cube_map->restoreMatrix();
 	}
 
 	if (!LLGLSLShader::sNoFixedFunction)
@@ -514,7 +513,14 @@ void LLDrawPoolBump::beginFullbrightShiny()
 	}
 	else
 	{
-		shader = &gObjectFullbrightShinyProgram;
+		if (LLPipeline::sRenderDeferred)
+		{
+			shader = &gDeferredFullbrightShinyProgram;
+		}
+		else
+		{
+			shader = &gObjectFullbrightShinyProgram;
+		}
 	}
 
 	LLCubeMap* cube_map = gSky.mVOSkyp ? gSky.mVOSkyp->getCubeMap() : NULL;
@@ -850,7 +856,7 @@ void LLDrawPoolBump::renderDeferred(S32 pass)
 	LLCullResult::drawinfo_iterator begin = gPipeline.beginRenderMap(type);
 	LLCullResult::drawinfo_iterator end = gPipeline.endRenderMap(type);
 
-	U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_BINORMAL | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_COLOR;
+	U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_COLOR;
 	
 	for (LLCullResult::drawinfo_iterator i = begin; i != end; ++i)	
 	{
@@ -915,6 +921,8 @@ void LLBumpImageList::init()
 	llassert( mDarknessEntries.size() == 0 );
 
 	LLStandardBumpmap::init();
+
+	LLStandardBumpmap::restoreGL();
 }
 
 void LLBumpImageList::clear()
diff --git a/indra/newview/lldrawpoolbump.h b/indra/newview/lldrawpoolbump.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolground.cpp b/indra/newview/lldrawpoolground.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolground.h b/indra/newview/lldrawpoolground.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolmaterials.cpp b/indra/newview/lldrawpoolmaterials.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..08a36bddf181fe7b18666eb18f239218c356fdef
--- /dev/null
+++ b/indra/newview/lldrawpoolmaterials.cpp
@@ -0,0 +1,217 @@
+/** 
+ * @file lldrawpool.cpp
+ * @brief LLDrawPoolMaterials class implementation
+ * @author Jonathan "Geenz" Goodman
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "lldrawpoolmaterials.h"
+#include "llviewershadermgr.h"
+#include "pipeline.h"
+
+S32 diffuse_channel = -1;
+
+LLDrawPoolMaterials::LLDrawPoolMaterials()
+:  LLRenderPass(LLDrawPool::POOL_MATERIALS)
+{
+	
+}
+
+void LLDrawPoolMaterials::prerender()
+{
+	mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT); 
+}
+
+S32 LLDrawPoolMaterials::getNumDeferredPasses()
+{
+	return 12;
+}
+
+void LLDrawPoolMaterials::beginDeferredPass(S32 pass)
+{
+	U32 shader_idx[] = 
+	{
+		0, //LLRenderPass::PASS_MATERIAL,
+		//1, //LLRenderPass::PASS_MATERIAL_ALPHA,
+		2, //LLRenderPass::PASS_MATERIAL_ALPHA_MASK,
+		3, //LLRenderPass::PASS_MATERIAL_ALPHA_GLOW,
+		4, //LLRenderPass::PASS_SPECMAP,
+		//5, //LLRenderPass::PASS_SPECMAP_BLEND,
+		6, //LLRenderPass::PASS_SPECMAP_MASK,
+		7, //LLRenderPass::PASS_SPECMAP_GLOW,
+		8, //LLRenderPass::PASS_NORMMAP,
+		//9, //LLRenderPass::PASS_NORMMAP_BLEND,
+		10, //LLRenderPass::PASS_NORMMAP_MASK,
+		11, //LLRenderPass::PASS_NORMMAP_GLOW,
+		12, //LLRenderPass::PASS_NORMSPEC,
+		//13, //LLRenderPass::PASS_NORMSPEC_BLEND,
+		14, //LLRenderPass::PASS_NORMSPEC_MASK,
+		15, //LLRenderPass::PASS_NORMSPEC_GLOW,
+	};
+	
+	mShader = &(gDeferredMaterialProgram[shader_idx[pass]]);
+	mShader->bind();
+
+	diffuse_channel = mShader->enableTexture(LLShaderMgr::DIFFUSE_MAP);
+		
+	LLFastTimer t(FTM_RENDER_MATERIALS);
+}
+
+void LLDrawPoolMaterials::endDeferredPass(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_MATERIALS);
+
+	mShader->unbind();
+
+	LLRenderPass::endRenderPass(pass);
+}
+
+void LLDrawPoolMaterials::renderDeferred(S32 pass)
+{
+	U32 type_list[] = 
+	{
+		LLRenderPass::PASS_MATERIAL,
+		//LLRenderPass::PASS_MATERIAL_ALPHA,
+		LLRenderPass::PASS_MATERIAL_ALPHA_MASK,
+		LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE,
+		LLRenderPass::PASS_SPECMAP,
+		//LLRenderPass::PASS_SPECMAP_BLEND,
+		LLRenderPass::PASS_SPECMAP_MASK,
+		LLRenderPass::PASS_SPECMAP_EMISSIVE,
+		LLRenderPass::PASS_NORMMAP,
+		//LLRenderPass::PASS_NORMMAP_BLEND,
+		LLRenderPass::PASS_NORMMAP_MASK,
+		LLRenderPass::PASS_NORMMAP_EMISSIVE,
+		LLRenderPass::PASS_NORMSPEC,
+		//LLRenderPass::PASS_NORMSPEC_BLEND,
+		LLRenderPass::PASS_NORMSPEC_MASK,
+		LLRenderPass::PASS_NORMSPEC_EMISSIVE,
+	};
+
+	llassert(pass < sizeof(type_list)/sizeof(U32));
+
+	U32 type = type_list[pass];
+
+	U32 mask = mShader->mAttributeMask;
+
+	LLCullResult::drawinfo_iterator begin = gPipeline.beginRenderMap(type);
+	LLCullResult::drawinfo_iterator end = gPipeline.endRenderMap(type);
+	
+	for (LLCullResult::drawinfo_iterator i = begin; i != end; ++i)
+	{
+		LLDrawInfo& params = **i;
+		
+		mShader->uniform4f(LLShaderMgr::SPECULAR_COLOR, params.mSpecColor.mV[0], params.mSpecColor.mV[1], params.mSpecColor.mV[2], params.mSpecColor.mV[3]);
+		mShader->uniform1f(LLShaderMgr::ENVIRONMENT_INTENSITY, params.mEnvIntensity);
+		
+		if (params.mNormalMap)
+		{
+			params.mNormalMap->addTextureStats(params.mVSize);
+			bindNormalMap(params.mNormalMap);
+		}
+		
+		if (params.mSpecularMap)
+		{
+			params.mSpecularMap->addTextureStats(params.mVSize);
+			bindSpecularMap(params.mSpecularMap);
+		}
+		
+		mShader->setMinimumAlpha(params.mAlphaMaskCutoff);
+		mShader->uniform1f(LLShaderMgr::EMISSIVE_BRIGHTNESS, params.mFullbright ? 1.f : 0.f);
+
+		pushBatch(params, mask, TRUE);
+	}
+}
+
+void LLDrawPoolMaterials::bindSpecularMap(LLViewerTexture* tex)
+{
+	mShader->bindTexture(LLShaderMgr::SPECULAR_MAP, tex);
+}
+
+void LLDrawPoolMaterials::bindNormalMap(LLViewerTexture* tex)
+{
+	mShader->bindTexture(LLShaderMgr::BUMP_MAP, tex);
+}
+
+void LLDrawPoolMaterials::pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures)
+{
+	applyModelMatrix(params);
+	
+	bool tex_setup = false;
+	
+	if (batch_textures && params.mTextureList.size() > 1)
+	{
+		for (U32 i = 0; i < params.mTextureList.size(); ++i)
+		{
+			if (params.mTextureList[i].notNull())
+			{
+				gGL.getTexUnit(i)->bind(params.mTextureList[i], TRUE);
+			}
+		}
+	}
+	else
+	{ //not batching textures or batch has only 1 texture -- might need a texture matrix
+		if (params.mTextureMatrix)
+		{
+			//if (mShiny)
+			{
+				gGL.getTexUnit(0)->activate();
+				gGL.matrixMode(LLRender::MM_TEXTURE);
+			}
+			
+			gGL.loadMatrix((GLfloat*) params.mTextureMatrix->mMatrix);
+			gPipeline.mTextureMatrixOps++;
+			
+			tex_setup = true;
+		}
+		
+		if (mVertexShaderLevel > 1 && texture)
+		{
+			if (params.mTexture.notNull())
+			{
+				gGL.getTexUnit(diffuse_channel)->bind(params.mTexture);
+				params.mTexture->addTextureStats(params.mVSize);
+			}
+			else
+			{
+				gGL.getTexUnit(diffuse_channel)->unbind(LLTexUnit::TT_TEXTURE);
+			}
+		}
+	}
+	
+	if (params.mGroup)
+	{
+		params.mGroup->rebuildMesh();
+	}
+	params.mVertexBuffer->setBuffer(mask);
+	params.mVertexBuffer->drawRange(params.mDrawMode, params.mStart, params.mEnd, params.mCount, params.mOffset);
+	gPipeline.addTrianglesDrawn(params.mCount, params.mDrawMode);
+	if (tex_setup)
+	{
+		gGL.getTexUnit(0)->activate();
+		gGL.loadIdentity();
+		gGL.matrixMode(LLRender::MM_MODELVIEW);
+	}
+}
diff --git a/indra/newview/lldrawpoolmaterials.h b/indra/newview/lldrawpoolmaterials.h
new file mode 100644
index 0000000000000000000000000000000000000000..eae1aba87cd8ed375b7f278711ddbb5a56b53d78
--- /dev/null
+++ b/indra/newview/lldrawpoolmaterials.h
@@ -0,0 +1,75 @@
+/** 
+ * @file lldrawpoolmaterials.h
+ * @brief LLDrawPoolMaterials class definition
+ * @author Jonathan "Geenz" Goodman
+ *
+ * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLDRAWPOOLMATERIALS_H
+#define LL_LLDRAWPOOLMATERIALS_H
+
+#include "v4coloru.h"
+#include "v2math.h"
+#include "v3math.h"
+#include "llvertexbuffer.h"
+#include "lldrawpool.h"
+
+class LLViewerTexture;
+class LLDrawInfo;
+class LLGLSLShader;
+
+class LLDrawPoolMaterials : public LLRenderPass
+{
+	LLGLSLShader *mShader;
+public:
+	LLDrawPoolMaterials();
+	
+	enum
+	{
+		VERTEX_DATA_MASK =	LLVertexBuffer::MAP_VERTEX |
+		LLVertexBuffer::MAP_NORMAL |
+		LLVertexBuffer::MAP_TEXCOORD0 |
+		LLVertexBuffer::MAP_TEXCOORD1 |
+		LLVertexBuffer::MAP_TEXCOORD2 |
+		LLVertexBuffer::MAP_COLOR |
+		LLVertexBuffer::MAP_TANGENT
+	};
+	
+	/*virtual*/ U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+	
+	/*virtual*/ void render(S32 pass = 0) { }
+	/*virtual*/ S32	 getNumPasses() {return 0;}
+	/*virtual*/ void prerender();
+	
+	/*virtual*/ S32 getNumDeferredPasses();
+	/*virtual*/ void beginDeferredPass(S32 pass);
+	/*virtual*/ void endDeferredPass(S32 pass);
+	/*virtual*/ void renderDeferred(S32 pass);
+	
+	void bindSpecularMap(LLViewerTexture* tex);
+	void bindNormalMap(LLViewerTexture* tex);
+	
+	/*virtual*/ void pushBatch(LLDrawInfo& params, U32 mask, BOOL texture, BOOL batch_textures = FALSE);
+};
+
+#endif //LL_LLDRAWPOOLMATERIALS_H
diff --git a/indra/newview/lldrawpoolsimple.cpp b/indra/newview/lldrawpoolsimple.cpp
old mode 100644
new mode 100755
index 6e0ea78af2b2d326dbb639a943852d51cf688ec9..2cf9d833c60520d3f8d0f016c23a1d2394eaabb0
--- a/indra/newview/lldrawpoolsimple.cpp
+++ b/indra/newview/lldrawpoolsimple.cpp
@@ -47,6 +47,7 @@ static LLFastTimer::DeclareTimer FTM_RENDER_GRASS_DEFERRED("Deferred Grass");
 void LLDrawPoolGlow::beginPostDeferredPass(S32 pass)
 {
 	gDeferredEmissiveProgram.bind();
+	gDeferredEmissiveProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
 }
 
 static LLFastTimer::DeclareTimer FTM_RENDER_GLOW_PUSH("Glow Push");
@@ -110,6 +111,7 @@ void LLDrawPoolGlow::render(S32 pass)
 	
 	LLGLSLShader* shader = LLPipeline::sUnderWaterRender ? &gObjectEmissiveWaterProgram : &gObjectEmissiveProgram;
 	shader->bind();
+	shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.f);
 
 	LLGLDepthTest depth(GL_TRUE, GL_FALSE);
 	gGL.setColorMask(false, true);
@@ -198,7 +200,11 @@ void LLDrawPoolSimple::render(S32 pass)
 			if (LLPipeline::sRenderDeferred)
 			{ //if deferred rendering is enabled, bump faces aren't registered as simple
 				//render bump faces here as simple so bump faces will appear under water
-				pushBatches(LLRenderPass::PASS_BUMP, mask, TRUE, TRUE);
+				pushBatches(LLRenderPass::PASS_BUMP, mask, TRUE, TRUE);			
+				pushBatches(LLRenderPass::PASS_MATERIAL, mask, TRUE, TRUE);
+				pushBatches(LLRenderPass::PASS_SPECMAP, mask, TRUE, TRUE);
+				pushBatches(LLRenderPass::PASS_NORMMAP, mask, TRUE, TRUE);
+				pushBatches(LLRenderPass::PASS_NORMSPEC, mask, TRUE, TRUE);		
 			}
 		}
 		else
@@ -210,6 +216,169 @@ void LLDrawPoolSimple::render(S32 pass)
 	}
 }
 
+
+
+
+
+
+
+
+
+
+static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_MASK("Alpha Mask");
+
+LLDrawPoolAlphaMask::LLDrawPoolAlphaMask() :
+	LLRenderPass(POOL_ALPHA_MASK)
+{
+}
+
+void LLDrawPoolAlphaMask::prerender()
+{
+	mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT);
+}
+
+void LLDrawPoolAlphaMask::beginRenderPass(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK);
+
+	if (LLPipeline::sUnderWaterRender)
+	{
+		simple_shader = &gObjectSimpleWaterAlphaMaskProgram;
+	}
+	else
+	{
+		simple_shader = &gObjectSimpleAlphaMaskProgram;
+	}
+
+	if (mVertexShaderLevel > 0)
+	{
+		simple_shader->bind();
+	}
+	else 
+	{
+		// don't use shaders!
+		if (gGLManager.mHasShaderObjects)
+		{
+			LLGLSLShader::bindNoShader();
+		}		
+	}
+}
+
+void LLDrawPoolAlphaMask::endRenderPass(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK);
+	stop_glerror();
+	LLRenderPass::endRenderPass(pass);
+	stop_glerror();
+	if (mVertexShaderLevel > 0)
+	{
+		simple_shader->unbind();
+	}
+}
+
+void LLDrawPoolAlphaMask::render(S32 pass)
+{
+	LLGLDisable blend(GL_BLEND);
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK);
+	
+	if (mVertexShaderLevel > 0)
+	{
+		simple_shader->bind();
+		simple_shader->setMinimumAlpha(0.33f);
+
+		pushMaskBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+		pushMaskBatches(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+		pushMaskBatches(LLRenderPass::PASS_SPECMAP_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+		pushMaskBatches(LLRenderPass::PASS_NORMMAP_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+		pushMaskBatches(LLRenderPass::PASS_NORMSPEC_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+	}
+	else
+	{
+		LLGLEnable test(GL_ALPHA_TEST);
+		pushMaskBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask(), TRUE, FALSE);
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
+	}
+}
+
+LLDrawPoolFullbrightAlphaMask::LLDrawPoolFullbrightAlphaMask() :
+	LLRenderPass(POOL_FULLBRIGHT_ALPHA_MASK)
+{
+}
+
+void LLDrawPoolFullbrightAlphaMask::prerender()
+{
+	mVertexShaderLevel = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT);
+}
+
+void LLDrawPoolFullbrightAlphaMask::beginRenderPass(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK);
+
+	if (LLPipeline::sUnderWaterRender)
+	{
+		simple_shader = &gObjectFullbrightWaterAlphaMaskProgram;
+	}
+	else
+	{
+		simple_shader = &gObjectFullbrightAlphaMaskProgram;
+	}
+
+	if (mVertexShaderLevel > 0)
+	{
+		simple_shader->bind();
+	}
+	else 
+	{
+		// don't use shaders!
+		if (gGLManager.mHasShaderObjects)
+		{
+			LLGLSLShader::bindNoShader();
+		}		
+	}
+}
+
+void LLDrawPoolFullbrightAlphaMask::endRenderPass(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK);
+	stop_glerror();
+	LLRenderPass::endRenderPass(pass);
+	stop_glerror();
+	if (mVertexShaderLevel > 0)
+	{
+		simple_shader->unbind();
+	}
+}
+
+void LLDrawPoolFullbrightAlphaMask::render(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK);
+
+	if (mVertexShaderLevel > 0)
+	{
+		if (simple_shader)
+		{
+			simple_shader->bind();
+			simple_shader->setMinimumAlpha(0.33f);
+			if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
+			{
+				simple_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0f);
+			} else {
+				simple_shader->uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+			}
+		}
+		pushMaskBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+		//LLGLSLShader::bindNoShader();
+	}
+	else
+	{
+		LLGLEnable test(GL_ALPHA_TEST);
+		gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
+		pushMaskBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, getVertexDataMask(), TRUE, FALSE);
+		gPipeline.enableLightsDynamic();
+		gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT); //OK
+	}
+}
+
 //===============================
 //DEFERRED IMPLEMENTATION
 //===============================
@@ -239,6 +408,28 @@ void LLDrawPoolSimple::renderDeferred(S32 pass)
 	}
 }
 
+static LLFastTimer::DeclareTimer FTM_RENDER_ALPHA_MASK_DEFERRED("Deferred Alpha Mask");
+
+void LLDrawPoolAlphaMask::beginDeferredPass(S32 pass)
+{
+	
+}
+
+void LLDrawPoolAlphaMask::endDeferredPass(S32 pass)
+{
+	
+}
+
+void LLDrawPoolAlphaMask::renderDeferred(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_ALPHA_MASK_DEFERRED);
+	gDeferredDiffuseAlphaMaskProgram.bind();
+	gDeferredDiffuseAlphaMaskProgram.setMinimumAlpha(0.33f);
+	pushMaskBatches(LLRenderPass::PASS_ALPHA_MASK, getVertexDataMask() | LLVertexBuffer::MAP_TEXTURE_INDEX, TRUE, TRUE);
+	gDeferredDiffuseAlphaMaskProgram.unbind();			
+}
+
+
 // grass drawpool
 LLDrawPoolGrass::LLDrawPoolGrass() :
  LLRenderPass(POOL_GRASS)
@@ -403,14 +594,24 @@ void LLDrawPoolFullbright::render(S32 pass)
 	{
 		fullbright_shader->bind();
 		fullbright_shader->uniform1f(LLViewerShaderMgr::FULLBRIGHT, 1.f);
+		fullbright_shader->uniform1f(LLViewerShaderMgr::TEXTURE_GAMMA, 1.f);
+
 		U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXTURE_INDEX;
 		pushBatches(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask, TRUE, TRUE);
+		pushBatches(LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE, fullbright_mask, TRUE, TRUE);
+		pushBatches(LLRenderPass::PASS_SPECMAP_EMISSIVE, fullbright_mask, TRUE, TRUE);
+		pushBatches(LLRenderPass::PASS_NORMMAP_EMISSIVE, fullbright_mask, TRUE, TRUE);
+		pushBatches(LLRenderPass::PASS_NORMSPEC_EMISSIVE, fullbright_mask, TRUE, TRUE);
 	}
 	else
 	{
 		gPipeline.enableLightsFullbright(LLColor4(1,1,1,1));
 		U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR;
 		renderTexture(LLRenderPass::PASS_FULLBRIGHT, fullbright_mask);
+		pushBatches(LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE, fullbright_mask);
+		pushBatches(LLRenderPass::PASS_SPECMAP_EMISSIVE, fullbright_mask);
+		pushBatches(LLRenderPass::PASS_NORMMAP_EMISSIVE, fullbright_mask);
+		pushBatches(LLRenderPass::PASS_NORMSPEC_EMISSIVE, fullbright_mask);
 	}
 
 	stop_glerror();
@@ -421,3 +622,32 @@ S32 LLDrawPoolFullbright::getNumPasses()
 	return 1;
 }
 
+
+void LLDrawPoolFullbrightAlphaMask::beginPostDeferredPass(S32 pass)
+{
+	gObjectFullbrightAlphaMaskProgram.bind();
+	if (LLPipeline::sRenderingHUDs || !LLPipeline::sRenderDeferred)
+	{
+		gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 1.0f);
+	} 
+	else 
+	{
+		gObjectFullbrightAlphaMaskProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, 2.2f);
+	}
+}
+
+void LLDrawPoolFullbrightAlphaMask::renderPostDeferred(S32 pass)
+{
+	LLFastTimer t(FTM_RENDER_FULLBRIGHT);
+	LLGLDisable blend(GL_BLEND);
+	U32 fullbright_mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_COLOR | LLVertexBuffer::MAP_TEXTURE_INDEX;
+	pushMaskBatches(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, fullbright_mask, TRUE, TRUE);
+}
+
+void LLDrawPoolFullbrightAlphaMask::endPostDeferredPass(S32 pass)
+{
+	gObjectFullbrightAlphaMaskProgram.unbind();
+	LLRenderPass::endRenderPass(pass);
+}
+
+
diff --git a/indra/newview/lldrawpoolsimple.h b/indra/newview/lldrawpoolsimple.h
old mode 100644
new mode 100755
index bd62bc75025fc7179ea257df5760c32b8ed1cf05..608ad9e1eb0856a2095769b117f99fe070ee5cf9
--- a/indra/newview/lldrawpoolsimple.h
+++ b/indra/newview/lldrawpoolsimple.h
@@ -84,6 +84,59 @@ class LLDrawPoolGrass : public LLRenderPass
 	/*virtual*/ void prerender();
 };
 
+class LLDrawPoolAlphaMask : public LLRenderPass
+{
+public:
+	enum
+	{
+		VERTEX_DATA_MASK =	LLVertexBuffer::MAP_VERTEX |
+							LLVertexBuffer::MAP_NORMAL |
+							LLVertexBuffer::MAP_TEXCOORD0 |
+							LLVertexBuffer::MAP_COLOR
+	};
+	virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+
+	LLDrawPoolAlphaMask();
+
+	/*virtual*/ S32 getNumDeferredPasses() { return 1; }
+	/*virtual*/ void beginDeferredPass(S32 pass);
+	/*virtual*/ void endDeferredPass(S32 pass);
+	/*virtual*/ void renderDeferred(S32 pass);
+
+	/*virtual*/ S32	 getNumPasses() { return 1; }
+	/*virtual*/ void beginRenderPass(S32 pass);
+	/*virtual*/ void endRenderPass(S32 pass);
+	/*virtual*/ void render(S32 pass = 0);
+	/*virtual*/ void prerender();
+
+};
+
+class LLDrawPoolFullbrightAlphaMask : public LLRenderPass
+{
+public:
+	enum
+	{
+		VERTEX_DATA_MASK =	LLVertexBuffer::MAP_VERTEX |
+							LLVertexBuffer::MAP_TEXCOORD0 |
+							LLVertexBuffer::MAP_COLOR
+	};
+	virtual U32 getVertexDataMask() { return VERTEX_DATA_MASK; }
+
+	LLDrawPoolFullbrightAlphaMask();
+	
+	/*virtual*/ S32 getNumPostDeferredPasses() { return 1; }
+	/*virtual*/ void beginPostDeferredPass(S32 pass);
+	/*virtual*/ void endPostDeferredPass(S32 pass);
+	/*virtual*/ void renderPostDeferred(S32 pass);
+
+	/*virtual*/ S32	 getNumPasses() { return 1; }
+	/*virtual*/ void beginRenderPass(S32 pass);
+	/*virtual*/ void endRenderPass(S32 pass);
+	/*virtual*/ void render(S32 pass = 0);
+	/*virtual*/ void prerender();
+};
+
+
 class LLDrawPoolFullbright : public LLRenderPass
 {
 public:
diff --git a/indra/newview/lldrawpoolsky.cpp b/indra/newview/lldrawpoolsky.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolsky.h b/indra/newview/lldrawpoolsky.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolterrain.cpp b/indra/newview/lldrawpoolterrain.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolterrain.h b/indra/newview/lldrawpoolterrain.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpooltree.cpp b/indra/newview/lldrawpooltree.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpooltree.h b/indra/newview/lldrawpooltree.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolwater.cpp b/indra/newview/lldrawpoolwater.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolwater.h b/indra/newview/lldrawpoolwater.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolwlsky.cpp b/indra/newview/lldrawpoolwlsky.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldrawpoolwlsky.h b/indra/newview/lldrawpoolwlsky.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lldynamictexture.cpp b/indra/newview/lldynamictexture.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lldynamictexture.h b/indra/newview/lldynamictexture.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llemote.cpp b/indra/newview/llemote.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llemote.h b/indra/newview/llemote.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llenvmanager.cpp b/indra/newview/llenvmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llenvmanager.h b/indra/newview/llenvmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llestateinfomodel.cpp b/indra/newview/llestateinfomodel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llestateinfomodel.h b/indra/newview/llestateinfomodel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lleventnotifier.cpp b/indra/newview/lleventnotifier.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lleventnotifier.h b/indra/newview/lleventnotifier.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lleventpoll.cpp b/indra/newview/lleventpoll.cpp
old mode 100644
new mode 100755
index e0f7223a8ce745949d1ee8c60df93da53f322f74..c1630318e8dcd45c06d86d4053c1e0ab8a5d2909
--- a/indra/newview/lleventpoll.cpp
+++ b/indra/newview/lleventpoll.cpp
@@ -213,7 +213,7 @@ namespace
 		{
 			llwarns << "LLEventPollResponder error <" << mCount 
 					<< "> [status:" << status << "]: " << content
-					<< (mDone ? " -- done" : "") << llendl;
+					<<	(mDone ? " -- done"	: "") << llendl;
 			stop();
 
 			// At this point we have given up and the viewer will not receive HTTP messages from the simulator.
diff --git a/indra/newview/lleventpoll.h b/indra/newview/lleventpoll.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llexpandabletextbox.cpp b/indra/newview/llexpandabletextbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llexpandabletextbox.h b/indra/newview/llexpandabletextbox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llexternaleditor.cpp b/indra/newview/llexternaleditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llexternaleditor.h b/indra/newview/llexternaleditor.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llface.cpp b/indra/newview/llface.cpp
old mode 100644
new mode 100755
index 281f852b0aa26cd885cc2e980ae4958418205690..f021f4ed0f4e9f11912d317806c0e6431e957a96
--- a/indra/newview/llface.cpp
+++ b/indra/newview/llface.cpp
@@ -51,7 +51,7 @@
 #include "llviewerregion.h"
 #include "llviewerwindow.h"
 #include "llviewershadermgr.h"
-
+#include "llviewertexture.h"
 
 #define LL_MAX_INDICES_COUNT 1000000
 
@@ -106,41 +106,6 @@ void planarProjection(LLVector2 &tc, const LLVector4a& normal,
 	tc.mV[0] = 1.0f+((binormal.dot3(vec).getF32())*2 - 0.5f);
 }
 
-void sphericalProjection(LLVector2 &tc, const LLVector4a& normal,
-						 const LLVector4a &mCenter, const LLVector4a& vec)
-{	//BROKEN
-	/*tc.mV[0] = acosf(vd.mNormal * LLVector3(1,0,0))/3.14159f;
-	
-	tc.mV[1] = acosf(vd.mNormal * LLVector3(0,0,1))/6.284f;
-	if (vd.mNormal.mV[1] > 0)
-	{
-		tc.mV[1] = 1.0f-tc.mV[1];
-	}*/
-}
-
-void cylindricalProjection(LLVector2 &tc, const LLVector4a& normal, const LLVector4a &mCenter, const LLVector4a& vec)
-{	//BROKEN
-	/*LLVector3 binormal;
-	float d = vd.mNormal * LLVector3(1,0,0);
-	if (d >= 0.5f || d <= -0.5f)
-	{
-		binormal = LLVector3(0,1,0);
-	}
-	else{
-		binormal = LLVector3(1,0,0);
-	}
-	LLVector3 tangent = binormal % vd.mNormal;
-
-	tc.mV[1] = -((tangent*vec)*2 - 0.5f);
-
-	tc.mV[0] = acosf(vd.mNormal * LLVector3(1,0,0))/6.284f;
-
-	if (vd.mNormal.mV[1] < 0)
-	{
-		tc.mV[0] = 1.0f-tc.mV[0];
-	}*/
-}
-
 ////////////////////
 //
 // LLFace implementation
@@ -167,8 +132,12 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
 	//special value to indicate uninitialized position
 	mIndicesIndex	= 0xFFFFFFFF;
 	
-	mIndexInTex = 0;
-	mTexture		= NULL;
+	for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
+	{
+		mIndexInTex[i] = 0;
+		mTexture[i] = NULL;
+	}
+
 	mTEOffset		= -1;
 	mTextureIndex = 255;
 
@@ -185,8 +154,6 @@ void LLFace::init(LLDrawable* drawablep, LLViewerObject* objp)
 	mImportanceToCamera = 0.f ;
 	mBoundingSphereRadius = 0.0f ;
 
-	mAtlasInfop = NULL ;
-	mUsingAtlas  = FALSE ;
 	mHasMedia = FALSE ;
 }
 
@@ -197,9 +164,12 @@ void LLFace::destroy()
 		gPipeline.checkReferences(this);
 	}
 
-	if(mTexture.notNull())
+	for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
 	{
-		mTexture->removeFace(this) ;
+		if(mTexture[i].notNull())
+		{
+			mTexture[i]->removeFace(i, this) ;
+		}
 	}
 	
 	if (isState(LLFace::PARTICLE))
@@ -239,8 +209,7 @@ void LLFace::destroy()
 	}
 	
 	setDrawInfo(NULL);
-	removeAtlas();
-		
+			
 	mDrawablep = NULL;
 	mVObjp = NULL;
 }
@@ -293,48 +262,76 @@ void LLFace::setPool(LLFacePool* new_pool, LLViewerTexture *texturep)
 	setTexture(texturep) ;
 }
 
-void LLFace::setTexture(LLViewerTexture* tex) 
+void LLFace::setTexture(U32 ch, LLViewerTexture* tex) 
 {
-	if(mTexture == tex)
+	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
+
+	if(mTexture[ch] == tex)
 	{
 		return ;
 	}
 
-	if(mTexture.notNull())
+	if(mTexture[ch].notNull())
 	{
-		mTexture->removeFace(this) ;
-		removeAtlas() ;
+		mTexture[ch]->removeFace(ch, this) ;
 	}	
 	
 	if(tex)
 	{
-		tex->addFace(this) ;
+		tex->addFace(ch, this) ;
 	}
 
-	mTexture = tex ;
+	mTexture[ch] = tex ;
+}
+
+void LLFace::setTexture(LLViewerTexture* tex) 
+{
+	setDiffuseMap(tex);
+}
+
+void LLFace::setDiffuseMap(LLViewerTexture* tex)
+{
+	setTexture(LLRender::DIFFUSE_MAP, tex);
+}
+
+void LLFace::setNormalMap(LLViewerTexture* tex)
+{
+	setTexture(LLRender::NORMAL_MAP, tex);
+}
+
+void LLFace::setSpecularMap(LLViewerTexture* tex)
+{
+	setTexture(LLRender::SPECULAR_MAP, tex);
 }
 
 void LLFace::dirtyTexture()
 {
 	LLDrawable* drawablep = getDrawable();
 
-	if (mVObjp.notNull() && mVObjp->getVolume() && 
-		mTexture.notNull() && mTexture->getComponents() == 4)
-	{ //dirty texture on an alpha object should be treated as an LoD update
-		LLVOVolume* vobj = drawablep->getVOVolume();
-		if (vobj)
+	if (mVObjp.notNull() && mVObjp->getVolume())
+	{
+		for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)
 		{
-			vobj->mLODChanged = TRUE;
+			if (mTexture[ch].notNull() && mTexture[ch]->getComponents() == 4)
+			{ //dirty texture on an alpha object should be treated as an LoD update
+				LLVOVolume* vobj = drawablep->getVOVolume();
+				if (vobj)
+				{
+					vobj->mLODChanged = TRUE;
+				}
+				gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME, FALSE);
+			}
 		}
-		gPipeline.markRebuild(drawablep, LLDrawable::REBUILD_VOLUME, FALSE);
-	}		
+	}
 			
 	gPipeline.markTextured(drawablep);
 }
 
-void LLFace::switchTexture(LLViewerTexture* new_texture)
+void LLFace::switchTexture(U32 ch, LLViewerTexture* new_texture)
 {
-	if(mTexture == new_texture)
+	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
+	
+	if(mTexture[ch] == new_texture)
 	{
 		return ;
 	}
@@ -344,10 +341,17 @@ void LLFace::switchTexture(LLViewerTexture* new_texture)
 		llerrs << "Can not switch to a null texture." << llendl;
 		return;
 	}
-	new_texture->addTextureStats(mTexture->getMaxVirtualSize()) ;
 
-	getViewerObject()->changeTEImage(mTEOffset, new_texture) ;
-	setTexture(new_texture) ;	
+	llassert(mTexture[ch].notNull());
+
+	new_texture->addTextureStats(mTexture[ch]->getMaxVirtualSize()) ;
+
+	if (ch == LLRender::DIFFUSE_MAP)
+	{
+		getViewerObject()->changeTEImage(mTEOffset, new_texture) ;
+	}
+
+	setTexture(ch, new_texture) ;	
 	dirtyTexture();
 }
 
@@ -543,7 +547,9 @@ void LLFace::renderSelected(LLViewerTexture *imagep, const LLColor4& color)
 		}
 		else
 		{
-			mVertexBuffer->setBuffer(LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0);
+			// cheaters sometimes prosper...
+			//
+			mVertexBuffer->setBuffer(mVertexBuffer->getTypeMask());
 			mVertexBuffer->draw(LLRender::TRIANGLES, mIndicesCount, mIndicesIndex);
 		}
 
@@ -811,6 +817,12 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
 			size.mul(scale);
 		}
 
+		// Catch potential badness from normalization before it happens
+		//
+		llassert(mat_normal.mMatrix[0].isFinite3() && (mat_normal.mMatrix[0].dot3(mat_normal.mMatrix[0]).getF32() > F_APPROXIMATELY_ZERO));
+		llassert(mat_normal.mMatrix[1].isFinite3() && (mat_normal.mMatrix[1].dot3(mat_normal.mMatrix[1]).getF32() > F_APPROXIMATELY_ZERO));
+		llassert(mat_normal.mMatrix[2].isFinite3() && (mat_normal.mMatrix[2].dot3(mat_normal.mMatrix[2]).getF32() > F_APPROXIMATELY_ZERO));
+
 		mat_normal.mMatrix[0].normalize3fast();
 		mat_normal.mMatrix[1].normalize3fast();
 		mat_normal.mMatrix[2].normalize3fast();
@@ -896,7 +908,7 @@ BOOL LLFace::genVolumeBBoxes(const LLVolume &volume, S32 f,
 // integrated with getGeometryVolume() for its texture coordinate
 // generation - but i'll leave that to someone more familiar
 // with the implications.
-LLVector2 LLFace::surfaceToTexture(LLVector2 surface_coord, LLVector3 position, LLVector3 normal)
+LLVector2 LLFace::surfaceToTexture(LLVector2 surface_coord, const LLVector4a& position, const LLVector4a& normal)
 {
 	LLVector2 tc = surface_coord;
 	
@@ -916,7 +928,9 @@ LLVector2 LLFace::surfaceToTexture(LLVector2 surface_coord, LLVector3 position,
 		LLVector4a& center = *(mDrawablep->getVOVolume()->getVolume()->getVolumeFace(mTEOffset).mCenter);
 		
 		LLVector4a volume_position;
-		volume_position.load3(mDrawablep->getVOVolume()->agentPositionToVolume(position).mV);
+		LLVector3 v_position(position.getF32ptr());
+
+		volume_position.load3(mDrawablep->getVOVolume()->agentPositionToVolume(v_position).mV);
 		
 		if (!mDrawablep->getVOVolume()->isVolumeGlobal())
 		{
@@ -926,23 +940,14 @@ LLVector2 LLFace::surfaceToTexture(LLVector2 surface_coord, LLVector3 position,
 		}
 		
 		LLVector4a volume_normal;
-		volume_normal.load3(mDrawablep->getVOVolume()->agentDirectionToVolume(normal).mV);
+		LLVector3 v_normal(normal.getF32ptr());
+		volume_normal.load3(mDrawablep->getVOVolume()->agentDirectionToVolume(v_normal).mV);
 		volume_normal.normalize3fast();
 		
-		switch (texgen)
+		if (texgen == LLTextureEntry::TEX_GEN_PLANAR)
 		{
-		case LLTextureEntry::TEX_GEN_PLANAR:
 			planarProjection(tc, volume_normal, center, volume_position);
-			break;
-		case LLTextureEntry::TEX_GEN_SPHERICAL:
-			sphericalProjection(tc, volume_normal, center, volume_position);
-			break;
-		case LLTextureEntry::TEX_GEN_CYLINDRICAL:
-			cylindricalProjection(tc, volume_normal, center, volume_position);
-			break;
-		default:
-			break;
-		}		
+		}
 	}
 
 	if (mTextureMatrix)	// if we have a texture matrix, use it
@@ -969,7 +974,12 @@ void LLFace::getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_po
 	const LLMatrix4& vol_mat = getWorldMatrix();
 	const LLVolumeFace& vf = getViewerObject()->getVolume()->getVolumeFace(mTEOffset);
 	const LLVector4a& normal4a = vf.mNormals[0];
-	const LLVector4a& binormal4a = vf.mBinormals[0];
+	const LLVector4a& tangent = vf.mTangents[0];
+
+	LLVector4a binormal4a;
+	binormal4a.setCross3(normal4a, tangent);
+	binormal4a.mul(tangent.getF32ptr()[3]);
+
 	LLVector2 projected_binormal;
 	planarProjection(projected_binormal, normal4a, *vf.mCenter, binormal4a);
 	projected_binormal -= LLVector2(0.5f, 0.5f); // this normally happens in xform()
@@ -1059,6 +1069,12 @@ bool LLFace::canRenderAsMask()
 		return false;
 	}
 	
+	LLMaterial* mat = te->getMaterialParams();
+	if (mat && mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND)
+	{
+		return false;
+	}
+	
 	if ((te->getColor().mV[3] == 1.0f) && // can't treat as mask if we have face alpha
 		(te->getGlow() == 0.f) && // glowing masks are hard to implement - don't mask
 		getTexture()->getIsAlphaMask()) // texture actually qualifies for masking (lazily recalculated but expensive)
@@ -1091,7 +1107,7 @@ void LLFace::cacheFaceInVRAM(const LLVolumeFace& vf)
 {
 	LLFastTimer t(FTM_FACE_GEOM_VOLUME);
 	U32 mask = LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0 |
-				LLVertexBuffer::MAP_BINORMAL | LLVertexBuffer::MAP_NORMAL;
+				LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_NORMAL;
 	
 	if (vf.mWeights)
 	{
@@ -1104,11 +1120,11 @@ void LLFace::cacheFaceInVRAM(const LLVolumeFace& vf)
 	buff->allocateBuffer(vf.mNumVertices, 0, true);
 
 	LLStrider<LLVector4a> f_vert;
-	LLStrider<LLVector3> f_binorm;
+	LLStrider<LLVector4a> f_tangent;
 	LLStrider<LLVector3> f_norm;
 	LLStrider<LLVector2> f_tc;
 
-	buff->getBinormalStrider(f_binorm);
+	buff->getTangentStrider(f_tangent);
 	buff->getVertexStrider(f_vert);
 	buff->getNormalStrider(f_norm);
 	buff->getTexCoord0Strider(f_tc);
@@ -1116,7 +1132,7 @@ void LLFace::cacheFaceInVRAM(const LLVolumeFace& vf)
 	for (U32 i = 0; i < vf.mNumVertices; ++i)
 	{
 		*f_vert++ = vf.mPositions[i];
-		(*f_binorm++).set(vf.mBinormals[i].getF32ptr());
+		*f_tangent++ = vf.mTangents[i];
 		*f_tc++ = vf.mTexCoords[i];
 		(*f_norm++).set(vf.mNormals[i].getF32ptr());
 	}
@@ -1158,7 +1174,7 @@ static LLFastTimer::DeclareTimer FTM_FACE_GEOM_TEXTURE("Texture");
 static LLFastTimer::DeclareTimer FTM_FACE_GEOM_COLOR("Color");
 static LLFastTimer::DeclareTimer FTM_FACE_GEOM_EMISSIVE("Emissive");
 static LLFastTimer::DeclareTimer FTM_FACE_GEOM_WEIGHTS("Weights");
-static LLFastTimer::DeclareTimer FTM_FACE_GEOM_BINORMAL("Binormal");
+static LLFastTimer::DeclareTimer FTM_FACE_GEOM_TANGENT("Binormal");
 static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX("Index");
 static LLFastTimer::DeclareTimer FTM_FACE_GEOM_INDEX_TAIL("Tail");
 static LLFastTimer::DeclareTimer FTM_FACE_POSITION_STORE("Pos");
@@ -1219,11 +1235,12 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 	}
 
 	LLStrider<LLVector3> vert;
-	LLStrider<LLVector2> tex_coords;
+	LLStrider<LLVector2> tex_coords0;
+	LLStrider<LLVector2> tex_coords1;
 	LLStrider<LLVector2> tex_coords2;
 	LLStrider<LLVector3> norm;
 	LLStrider<LLColor4U> colors;
-	LLStrider<LLVector3> binorm;
+	LLStrider<LLVector3> tangent;
 	LLStrider<U16> indicesp;
 	LLStrider<LLVector4> wght;
 
@@ -1245,33 +1262,12 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 	bool rebuild_emissive = rebuild_color && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_EMISSIVE);
 	bool rebuild_tcoord = full_rebuild || mDrawablep->isState(LLDrawable::REBUILD_TCOORD);
 	bool rebuild_normal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_NORMAL);
-	bool rebuild_binormal = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_BINORMAL);
+	bool rebuild_tangent = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TANGENT);
 	bool rebuild_weights = rebuild_pos && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_WEIGHT4);
 
 	const LLTextureEntry *tep = mVObjp->getTE(f);
 	const U8 bump_code = tep ? tep->getBumpmap() : 0;
 
-	F32 tcoord_xoffset = 0.f ;
-	F32 tcoord_yoffset = 0.f ;
-	F32 tcoord_xscale = 1.f ;
-	F32 tcoord_yscale = 1.f ;
-	BOOL in_atlas = FALSE ;
-
-	if (rebuild_tcoord)
-	{
-		in_atlas = isAtlasInUse() ;
-		if(in_atlas)
-		{
-			const LLVector2* tmp = getTexCoordOffset() ;
-			tcoord_xoffset = tmp->mV[0] ; 
-			tcoord_yoffset = tmp->mV[1] ;
-
-			tmp = getTexCoordScale() ;
-			tcoord_xscale = tmp->mV[0] ; 
-			tcoord_yscale = tmp->mV[1] ;	
-		}
-	}
-	
 	BOOL is_static = mDrawablep->isStatic();
 	BOOL is_global = is_static;
 
@@ -1289,19 +1285,41 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 	LLColor4U color = tep->getColor();
 
 	if (rebuild_color)
-	{
-		if (tep)
+	{ //decide if shiny goes in alpha channel of color
+		if (tep && 
+			getPoolType() != LLDrawPool::POOL_ALPHA)  // <--- alpha channel MUST contain transparency, not shiny
 		{
-			GLfloat alpha[4] =
-			{
-				0.00f,
-				0.25f,
-				0.5f,
-				0.75f
-			};
+			LLMaterial* mat = tep->getMaterialParams().get();
+						
+			bool shiny_in_alpha = false;
 			
-			if (getPoolType() != LLDrawPool::POOL_ALPHA && (LLPipeline::sRenderDeferred || (LLPipeline::sRenderBump && tep->getShiny())))
+			if (LLPipeline::sRenderDeferred)
+			{ //store shiny in alpha if we don't have a specular map
+				if  (!mat || mat->getSpecularID().isNull())
+				{
+					shiny_in_alpha = true;
+				}
+			}
+			else
 			{
+				if (!mat || mat->getDiffuseAlphaMode() != LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
+				{
+					shiny_in_alpha = true;
+				}
+			}
+
+			if (shiny_in_alpha)
+			{
+
+				GLfloat alpha[4] =
+				{
+					0.00f,
+					0.25f,
+					0.5f,
+					0.75f
+				};
+			
+				llassert(tep->getShiny() <= 3);
 				color.mV[3] = U8 (alpha[tep->getShiny()] * 255);
 			}
 		}
@@ -1392,7 +1410,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 
 		if (vf.mVertexBuffer.isNull() || buff->getNumVerts() != vf.mNumVertices)
 		{
-			mVObjp->getVolume()->genBinormals(f);
+			mVObjp->getVolume()->genTangents(f);
 			LLFace::cacheFaceInVRAM(vf);
 			buff = (LLVertexBuffer*) vf.mVertexBuffer.get();
 		}		
@@ -1477,15 +1495,15 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 			glEndTransformFeedback();
 		}
 
-		if (rebuild_binormal)
+		if (rebuild_tangent)
 		{
-			LLFastTimer t(FTM_FACE_GEOM_BINORMAL);
-			gTransformBinormalProgram.bind();
+			LLFastTimer t(FTM_FACE_GEOM_TANGENT);
+			gTransformTangentProgram.bind();
 			
-			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_BINORMAL, mGeomIndex, mGeomCount);
+			mVertexBuffer->bindForFeedback(0, LLVertexBuffer::TYPE_TANGENT, mGeomIndex, mGeomCount);
 						
 			glBeginTransformFeedback(GL_POINTS);
-			buff->setBuffer(LLVertexBuffer::MAP_BINORMAL);
+			buff->setBuffer(LLVertexBuffer::MAP_TANGENT);
 			push_for_transform(buff, vf.mNumVertices, mGeomCount);
 			glEndTransformFeedback();
 		}
@@ -1547,7 +1565,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 		
 			if (bump_code)
 			{
-				mVObjp->getVolume()->genBinormals(f);
+				mVObjp->getVolume()->genTangents(f);
 				F32 offset_multiple; 
 				switch( bump_code )
 				{
@@ -1556,11 +1574,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 					break;
 					case BE_BRIGHTNESS:
 					case BE_DARKNESS:
-					if( mTexture.notNull() && mTexture->hasGLTexture())
+					if( mTexture[LLRender::DIFFUSE_MAP].notNull() && mTexture[LLRender::DIFFUSE_MAP]->hasGLTexture())
 					{
 						// Offset by approximately one texel
-						S32 cur_discard = mTexture->getDiscardLevel();
-						S32 max_size = llmax( mTexture->getWidth(), mTexture->getHeight() );
+						S32 cur_discard = mTexture[LLRender::DIFFUSE_MAP]->getDiscardLevel();
+						S32 max_size = llmax( mTexture[LLRender::DIFFUSE_MAP]->getWidth(), mTexture[LLRender::DIFFUSE_MAP]->getHeight() );
 						max_size <<= cur_discard;
 						const F32 ARTIFICIAL_OFFSET = 2.f;
 						offset_multiple = ARTIFICIAL_OFFSET / (F32)max_size;
@@ -1596,16 +1614,23 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 			U8 texgen = getTextureEntry()->getTexGen();
 			if (rebuild_tcoord && texgen != LLTextureEntry::TEX_GEN_DEFAULT)
 			{ //planar texgen needs binormals
-				mVObjp->getVolume()->genBinormals(f);
+				mVObjp->getVolume()->genTangents(f);
 			}
 
 			U8 tex_mode = 0;
 	
+			bool tex_anim = false;
+
+			LLVOVolume* vobj = (LLVOVolume*) (LLViewerObject*) mVObjp;	
+			tex_mode = vobj->mTexAnimMode;
+
+			if (vobj->mTextureAnimp)
+			{ //texture animation is in play, override specular and normal map tex coords with diffuse texcoords
+				tex_anim = true;
+			}
+
 			if (isState(TEXTURE_ANIM))
 			{
-				LLVOVolume* vobj = (LLVOVolume*) (LLViewerObject*) mVObjp;	
-				tex_mode = vobj->mTexAnimMode;
-
 				if (!tex_mode)
 				{
 					clearState(TEXTURE_ANIM);
@@ -1620,7 +1645,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 
 					do_xform = false;
 				}
-
+				
 				if (getVirtualSize() >= MIN_TEX_ANIM_SIZE)
 				{ //don't override texture transform during tc bake
 					tex_mode = 0;
@@ -1630,12 +1655,21 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 			LLVector4a scalea;
 			scalea.load3(scale.mV);
 
+			LLMaterial* mat = tep->getMaterialParams().get();
+
 			bool do_bump = bump_code && mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1);
-			bool do_tex_mat = tex_mode && mTextureMatrix;
 
-			if (!in_atlas && !do_bump)
-			{ //not in atlas or not bump mapped, might be able to do a cheap update
-				mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount);
+			if (mat && !do_bump)
+			{
+				do_bump  = mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1)
+					     || mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD2);
+			}
+			
+			bool do_tex_mat = tex_mode && mTextureMatrix;
+						
+			if (!do_bump)
+			{ //not bump mapped, might be able to do a cheap update
+				mVertexBuffer->getTexCoord0Strider(tex_coords0, mGeomIndex, mGeomCount);
 
 				if (texgen != LLTextureEntry::TEX_GEN_PLANAR)
 				{
@@ -1646,12 +1680,12 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 						{
 							LLFastTimer t(FTM_FACE_TEX_QUICK_NO_XFORM);
 							S32 tc_size = (num_vertices*2*sizeof(F32)+0xF) & ~0xF;
-							LLVector4a::memcpyNonAliased16((F32*) tex_coords.get(), (F32*) vf.mTexCoords, tc_size);
+							LLVector4a::memcpyNonAliased16((F32*) tex_coords0.get(), (F32*) vf.mTexCoords, tc_size);
 						}
 						else
 						{
 							LLFastTimer t(FTM_FACE_TEX_QUICK_XFORM);
-							F32* dst = (F32*) tex_coords.get();
+							F32* dst = (F32*) tex_coords0.get();
 							LLVector4a* src = (LLVector4a*) vf.mTexCoords;
 
 							LLVector4a trans;
@@ -1686,7 +1720,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 						}
 					}
 					else
-					{ //do tex mat, no texgen, no atlas, no bump
+					{ //do tex mat, no texgen, no bump
 						for (S32 i = 0; i < num_vertices; i++)
 						{	
 							LLVector2 tc(vf.mTexCoords[i]);
@@ -1697,12 +1731,12 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 							tmp = tmp * *mTextureMatrix;
 							tc.mV[0] = tmp.mV[0];
 							tc.mV[1] = tmp.mV[1];
-							*tex_coords++ = tc;	
+							*tex_coords0++ = tc;	
 						}
 					}
 				}
 				else
-				{ //no bump, no atlas, tex gen planar
+				{ //no bump, tex gen planar
 					LLFastTimer t(FTM_FACE_TEX_QUICK_PLANAR);
 					if (do_tex_mat)
 					{
@@ -1720,7 +1754,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 							tc.mV[0] = tmp.mV[0];
 							tc.mV[1] = tmp.mV[1];
 				
-							*tex_coords++ = tc;	
+							*tex_coords0++ = tc;	
 						}
 					}
 					else
@@ -1736,7 +1770,7 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 						
 							xform(tc, cos_ang, sin_ang, os, ot, ms, mt);
 
-							*tex_coords++ = tc;	
+							*tex_coords0++ = tc;	
 						}
 					}
 				}
@@ -1747,145 +1781,104 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 				}
 			}
 			else
-			{ //either bump mapped or in atlas, just do the whole expensive loop
+			{ //bump mapped or has material, just do the whole expensive loop
 				LLFastTimer t(FTM_FACE_TEX_DEFAULT);
-				mVertexBuffer->getTexCoord0Strider(tex_coords, mGeomIndex, mGeomCount, map_range);
-
-				std::vector<LLVector2> bump_tc;
-		
-				for (S32 i = 0; i < num_vertices; i++)
-				{	
-					LLVector2 tc(vf.mTexCoords[i]);
-			
-					LLVector4a& norm = vf.mNormals[i];
-				
-					LLVector4a& center = *(vf.mCenter);
-		   
-					if (texgen != LLTextureEntry::TEX_GEN_DEFAULT)
-					{
-						LLVector4a vec = vf.mPositions[i];
 				
-						vec.mul(scalea);
+				std::vector<LLVector2> bump_tc;
 
-						switch (texgen)
-						{
-							case LLTextureEntry::TEX_GEN_PLANAR:
-								planarProjection(tc, norm, center, vec);
-								break;
-							case LLTextureEntry::TEX_GEN_SPHERICAL:
-								sphericalProjection(tc, norm, center, vec);
-								break;
-							case LLTextureEntry::TEX_GEN_CYLINDRICAL:
-								cylindricalProjection(tc, norm, center, vec);
-								break;
-							default:
-								break;
-						}		
-					}
+				if (mat && !mat->getNormalID().isNull())
+				{ //writing out normal and specular texture coordinates, not bump offsets
+					do_bump = false;
+				}
 
-					if (tex_mode && mTextureMatrix)
-					{
-						LLVector3 tmp(tc.mV[0], tc.mV[1], 0.f);
-						tmp = tmp * *mTextureMatrix;
-						tc.mV[0] = tmp.mV[0];
-						tc.mV[1] = tmp.mV[1];
-					}
-					else
-					{
-						xform(tc, cos_ang, sin_ang, os, ot, ms, mt);
-					}
+				LLStrider<LLVector2> dst;
 
-					if(in_atlas)
+				for (U32 ch = 0; ch < 3; ++ch)
+				{
+					switch (ch)
 					{
-						//
-						//manually calculate tex-coord per vertex for varying address modes.
-						//should be removed if shader can handle this.
-						//
-
-						S32 int_part = 0 ;
-						switch(mTexture->getAddressMode())
-						{
-						case LLTexUnit::TAM_CLAMP:
-							if(tc.mV[0] < 0.f)
-							{
-								tc.mV[0] = 0.f ;
-							}
-							else if(tc.mV[0] > 1.f)
-							{
-								tc.mV[0] = 1.f;
-							}
-
-							if(tc.mV[1] < 0.f)
-							{
-								tc.mV[1] = 0.f ;
-							}
-							else if(tc.mV[1] > 1.f)
-							{
-								tc.mV[1] = 1.f;
-							}
+						case 0: 
+							mVertexBuffer->getTexCoord0Strider(dst, mGeomIndex, mGeomCount, map_range); 
 							break;
-						case LLTexUnit::TAM_MIRROR:
-							if(tc.mV[0] < 0.f)
-							{
-								tc.mV[0] = -tc.mV[0] ;
-							}
-							int_part = (S32)tc.mV[0] ;
-							if(int_part & 1) //odd number
-							{
-								tc.mV[0] = int_part + 1 - tc.mV[0] ;
-							}
-							else //even number
+						case 1:
+							if (mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD1))
 							{
-								tc.mV[0] -= int_part ;
-							}
+								mVertexBuffer->getTexCoord1Strider(dst, mGeomIndex, mGeomCount, map_range);
+								if (mat && !tex_anim)
+								{
+									r  = mat->getNormalRotation();
+									mat->getNormalOffset(os, ot);
+									mat->getNormalRepeat(ms, mt);
 
-							if(tc.mV[1] < 0.f)
-							{
-								tc.mV[1] = -tc.mV[1] ;
-							}
-							int_part = (S32)tc.mV[1] ;
-							if(int_part & 1) //odd number
-							{
-								tc.mV[1] = int_part + 1 - tc.mV[1] ;
+									cos_ang = cos(r);
+									sin_ang = sin(r);
+
+								}
 							}
-							else //even number
+							else
 							{
-								tc.mV[1] -= int_part ;
+								continue;
 							}
 							break;
-						case LLTexUnit::TAM_WRAP:
-							if(tc.mV[0] > 1.f)
-								tc.mV[0] -= (S32)(tc.mV[0] - 0.00001f) ;
-							else if(tc.mV[0] < -1.f)
-								tc.mV[0] -= (S32)(tc.mV[0] + 0.00001f) ;
-
-							if(tc.mV[1] > 1.f)
-								tc.mV[1] -= (S32)(tc.mV[1] - 0.00001f) ;
-							else if(tc.mV[1] < -1.f)
-								tc.mV[1] -= (S32)(tc.mV[1] + 0.00001f) ;
-
-							if(tc.mV[0] < 0.f)
+						case 2:
+							if (mVertexBuffer->hasDataType(LLVertexBuffer::TYPE_TEXCOORD2))
 							{
-								tc.mV[0] = 1.0f + tc.mV[0] ;
+								mVertexBuffer->getTexCoord2Strider(dst, mGeomIndex, mGeomCount, map_range);
+								if (mat && !tex_anim)
+								{
+									r  = mat->getSpecularRotation();
+									mat->getSpecularOffset(os, ot);
+									mat->getSpecularRepeat(ms, mt);
+
+									cos_ang = cos(r);
+									sin_ang = sin(r);
+								}
 							}
-							if(tc.mV[1] < 0.f)
+							else
 							{
-								tc.mV[1] = 1.0f + tc.mV[1] ;
+								continue;
 							}
 							break;
-						default:
-							break;
-						}
-				
-						tc.mV[0] = tcoord_xoffset + tcoord_xscale * tc.mV[0] ;
-						tc.mV[1] = tcoord_yoffset + tcoord_yscale * tc.mV[1] ;
 					}
+					
+
+					for (S32 i = 0; i < num_vertices; i++)
+					{	
+						LLVector2 tc(vf.mTexCoords[i]);
+			
+						LLVector4a& norm = vf.mNormals[i];
+				
+						LLVector4a& center = *(vf.mCenter);
+		   
+						if (texgen != LLTextureEntry::TEX_GEN_DEFAULT)
+						{
+							LLVector4a vec = vf.mPositions[i];
 				
+							vec.mul(scalea);
 
-					*tex_coords++ = tc;
-					if (do_bump)
-					{
-						bump_tc.push_back(tc);
+							if (texgen == LLTextureEntry::TEX_GEN_PLANAR)
+							{
+								planarProjection(tc, norm, center, vec);
+							}
+						}
+
+						if (tex_mode && mTextureMatrix)
+						{
+							LLVector3 tmp(tc.mV[0], tc.mV[1], 0.f);
+							tmp = tmp * *mTextureMatrix;
+							tc.mV[0] = tmp.mV[0];
+							tc.mV[1] = tmp.mV[1];
+						}
+						else
+						{
+							xform(tc, cos_ang, sin_ang, os, ot, ms, mt);
+						}
+
+						*dst++ = tc;
+						if (do_bump)
+						{
+							bump_tc.push_back(tc);
+						}
 					}
 				}
 
@@ -1894,17 +1887,20 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 					mVertexBuffer->flush();
 				}
 
-				if (do_bump)
+				if (!mat && do_bump)
 				{
-					mVertexBuffer->getTexCoord1Strider(tex_coords2, mGeomIndex, mGeomCount, map_range);
+					mVertexBuffer->getTexCoord1Strider(tex_coords1, mGeomIndex, mGeomCount, map_range);
 		
 					for (S32 i = 0; i < num_vertices; i++)
 					{
-						LLVector4a tangent;
-						tangent.setCross3(vf.mBinormals[i], vf.mNormals[i]);
+						LLVector4a tangent = vf.mTangents[i];
 
+						LLVector4a binorm;
+						binorm.setCross3(vf.mNormals[i], tangent);
+						binorm.mul(tangent.getF32ptr()[3]);
+						
 						LLMatrix4a tangent_to_object;
-						tangent_to_object.setRows(tangent, vf.mBinormals[i], vf.mNormals[i]);
+						tangent_to_object.setRows(tangent, binorm, vf.mNormals[i]);
 						LLVector4a t;
 						tangent_to_object.rotate(binormal_dir, t);
 						LLVector4a binormal;
@@ -1920,10 +1916,11 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 						}
 
 						binormal.normalize3fast();
+
 						LLVector2 tc = bump_tc[i];
 						tc += LLVector2( bump_s_primary_light_ray.dot3(tangent).getF32(), bump_t_primary_light_ray.dot3(binormal).getF32() );
 					
-						*tex_coords2++ = tc;
+						*tex_coords1++ = tc;
 					}
 
 					if (map_range)
@@ -2006,7 +2003,6 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 			LLFastTimer t(FTM_FACE_GEOM_NORMAL);
 			mVertexBuffer->getNormalStrider(norm, mGeomIndex, mGeomCount, map_range);
 			F32* normals = (F32*) norm.get();
-	
 			for (S32 i = 0; i < num_vertices; i++)
 			{	
 				LLVector4a normal;
@@ -2022,19 +2018,27 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 			}
 		}
 		
-		if (rebuild_binormal)
+		if (rebuild_tangent)
 		{
-			LLFastTimer t(FTM_FACE_GEOM_BINORMAL);
-			mVertexBuffer->getBinormalStrider(binorm, mGeomIndex, mGeomCount, map_range);
-			F32* binormals = (F32*) binorm.get();
-		
+			LLFastTimer t(FTM_FACE_GEOM_TANGENT);
+			mVertexBuffer->getTangentStrider(tangent, mGeomIndex, mGeomCount, map_range);
+			F32* tangents = (F32*) tangent.get();
+			
+			mVObjp->getVolume()->genTangents(f);
+			
+			LLVector4Logical mask;
+			mask.clear();
+			mask.setElement<3>();
+
 			for (S32 i = 0; i < num_vertices; i++)
-			{	
-				LLVector4a binormal;
-				mat_normal.rotate(vf.mBinormals[i], binormal);
-				binormal.normalize3fast();
-				binormal.store4a(binormals);
-				binormals += 4;
+			{
+				LLVector4a tangent_out;
+				mat_normal.rotate(vf.mTangents[i], tangent_out);
+				tangent_out.normalize3fast();
+				tangent_out.setSelectWithMask(mask, vf.mTangents[i], tangent_out);
+				tangent_out.store4a(tangents);
+				
+				tangents += 4;
 			}
 
 			if (map_range)
@@ -2097,11 +2101,10 @@ BOOL LLFace::getGeometryVolume(const LLVolume& volume,
 			LLVector4a src;
 
 		
-			U32 glow32 = glow |
-						 (glow << 8) |
-						 (glow << 16) |
-						 (glow << 24);
+			LLColor4U glow4u = LLColor4U(0,0,0,glow);
 
+			U32 glow32 = glow4u.mAll;
+			
 			U32 vec[4];
 			vec[0] = vec[1] = vec[2] = vec[3] = glow32;
 		
@@ -2153,9 +2156,9 @@ BOOL LLFace::hasMedia() const
 	{
 		return TRUE ;
 	}
-	if(mTexture.notNull()) 
+	if(mTexture[LLRender::DIFFUSE_MAP].notNull()) 
 	{
-		return mTexture->hasParcelMedia() ;  //if has a parcel media
+		return mTexture[LLRender::DIFFUSE_MAP]->hasParcelMedia() ;  //if has a parcel media
 	}
 
 	return FALSE ; //no media.
@@ -2207,7 +2210,7 @@ F32 LLFace::getTextureVirtualSize()
 	face_area = LLFace::adjustPixelArea(mImportanceToCamera, face_area) ;
 	if(face_area > LLViewerTexture::sMinLargeImageSize) //if is large image, shrink face_area by considering the partial overlapping.
 	{
-		if(mImportanceToCamera > LEAST_IMPORTANCE_FOR_LARGE_IMAGE && mTexture.notNull() && mTexture->isLargeImage())
+		if(mImportanceToCamera > LEAST_IMPORTANCE_FOR_LARGE_IMAGE && mTexture[LLRender::DIFFUSE_MAP].notNull() && mTexture[LLRender::DIFFUSE_MAP]->isLargeImage())
 		{		
 			face_area *= adjustPartialOverlapPixelArea(cos_angle_to_view_dir, radius );
 		}	
@@ -2246,7 +2249,7 @@ BOOL LLFace::calcPixelArea(F32& cos_angle_to_view_dir, F32& radius)
 		dist *= 16.f;
 	}
 
-	lookAt.normalize3fast() ;	
+	lookAt.normalize3fast();	
 
 	//get area of circle around node
 	F32 app_angle = atanf((F32) sqrt(size_squared) / dist);
@@ -2574,159 +2577,13 @@ LLVector3 LLFace::getPositionAgent() const
 	}
 }
 
-//
-//atlas
-//
-void LLFace::removeAtlas()
-{
-	setAtlasInUse(FALSE) ;
-	mAtlasInfop = NULL ;	
-}
-
-const LLTextureAtlas* LLFace::getAtlas()const 
-{
-	if(mAtlasInfop)
-	{
-		return mAtlasInfop->getAtlas() ;
-	}
-	return NULL ;
-}
-
-const LLVector2* LLFace::getTexCoordOffset()const 
-{
-	if(isAtlasInUse())
-	{
-		return mAtlasInfop->getTexCoordOffset() ;
-	}
-	return NULL ;
-}
-const LLVector2* LLFace::getTexCoordScale() const 
-{
-	if(isAtlasInUse())
-	{
-		return mAtlasInfop->getTexCoordScale() ;
-	}
-	return NULL ;
-}
-
-BOOL LLFace::isAtlasInUse()const
-{
-	return mUsingAtlas ;
-}
-
-BOOL LLFace::canUseAtlas()const
+LLViewerTexture* LLFace::getTexture(U32 ch) const
 {
-	//no drawable or no spatial group, do not use atlas
-	if(!mDrawablep || !mDrawablep->getSpatialGroup())
-	{
-		return FALSE ;
-	}
-
-	//if bump face, do not use atlas
-	if(getTextureEntry() && getTextureEntry()->getBumpmap())
-	{
-		return FALSE ;
-	}
-
-	//if animated texture, do not use atlas
-	if(isState(TEXTURE_ANIM))
-	{
-		return FALSE ;
-	}
+	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
 
-	return TRUE ;
-}
-
-void LLFace::setAtlasInUse(BOOL flag)
-{
-	//no valid atlas to use.
-	if(flag && (!mAtlasInfop || !mAtlasInfop->isValid()))
-	{
-		flag = FALSE ;
-	}
-
-	if(!flag && !mUsingAtlas)
-	{
-		return ;
-	}
-
-	//
-	//at this stage (flag || mUsingAtlas) is always true.
-	//
-
-	//rebuild the tex coords
-	if(mDrawablep)
-	{
-		gPipeline.markRebuild(mDrawablep, LLDrawable::REBUILD_TCOORD);
-		mUsingAtlas = flag ;
-	}
-	else
-	{
-		mUsingAtlas = FALSE ;
-	}
+	return mTexture[ch] ;
 }
 
-LLTextureAtlasSlot* LLFace::getAtlasInfo()
-{
-	return mAtlasInfop ;
-}
-
-void LLFace::setAtlasInfo(LLTextureAtlasSlot* atlasp)
-{	
-	if(mAtlasInfop != atlasp)
-	{
-		if(mAtlasInfop)
-		{
-			//llerrs << "Atlas slot changed!" << llendl ;
-		}
-		mAtlasInfop = atlasp ;
-	}
-}
-
-LLViewerTexture* LLFace::getTexture() const
-{
-	if(isAtlasInUse())
-	{
-		return (LLViewerTexture*)mAtlasInfop->getAtlas() ;
-	}
-
-	return mTexture ;
-}
-
-//switch to atlas or switch back to gl texture 
-//return TRUE if using atlas.
-BOOL LLFace::switchTexture()
-{
-	//no valid atlas or texture
-	if(!mAtlasInfop || !mAtlasInfop->isValid() || !mTexture)
-	{
-		return FALSE ;
-	}
-	
-	if(mTexture->getTexelsInAtlas() >= (U32)mVSize || 
-		mTexture->getTexelsInAtlas() >= mTexture->getTexelsInGLTexture())
-	{
-		//switch to use atlas
-		//atlas resolution is qualified, use it.		
-		if(!mUsingAtlas)
-		{
-			setAtlasInUse(TRUE) ;
-		}
-	}
-	else //if atlas not qualified.
-	{
-		//switch back to GL texture
-		if(mUsingAtlas && mTexture->isGLTextureCreated() && 
-			mTexture->getDiscardLevel() < mTexture->getDiscardLevelInAtlas())
-		{
-			setAtlasInUse(FALSE) ;
-		}
-	}
-
-	return mUsingAtlas ;
-}
-
-
 void LLFace::setVertexBuffer(LLVertexBuffer* buffer)
 {
 	mVertexBuffer = buffer;
@@ -2742,6 +2599,22 @@ void LLFace::clearVertexBuffer()
 U32 LLFace::getRiggedDataMask(U32 type)
 {
 	static const U32 rigged_data_mask[] = {
+		LLDrawPoolAvatar::RIGGED_MATERIAL_MASK,
+		LLDrawPoolAvatar::RIGGED_MATERIAL_ALPHA_VMASK,
+		LLDrawPoolAvatar::RIGGED_MATERIAL_ALPHA_MASK_MASK,
+		LLDrawPoolAvatar::RIGGED_MATERIAL_ALPHA_EMISSIVE_MASK,
+		LLDrawPoolAvatar::RIGGED_SPECMAP_VMASK,
+		LLDrawPoolAvatar::RIGGED_SPECMAP_BLEND_MASK,
+		LLDrawPoolAvatar::RIGGED_SPECMAP_MASK_MASK,
+		LLDrawPoolAvatar::RIGGED_SPECMAP_EMISSIVE_MASK,
+		LLDrawPoolAvatar::RIGGED_NORMMAP_VMASK,
+		LLDrawPoolAvatar::RIGGED_NORMMAP_BLEND_MASK,
+		LLDrawPoolAvatar::RIGGED_NORMMAP_MASK_MASK,
+		LLDrawPoolAvatar::RIGGED_NORMMAP_EMISSIVE_MASK,
+		LLDrawPoolAvatar::RIGGED_NORMSPEC_VMASK,
+		LLDrawPoolAvatar::RIGGED_NORMSPEC_BLEND_MASK,
+		LLDrawPoolAvatar::RIGGED_NORMSPEC_MASK_MASK,
+		LLDrawPoolAvatar::RIGGED_NORMSPEC_EMISSIVE_MASK,
 		LLDrawPoolAvatar::RIGGED_SIMPLE_MASK,
 		LLDrawPoolAvatar::RIGGED_FULLBRIGHT_MASK,
 		LLDrawPoolAvatar::RIGGED_SHINY_MASK,
diff --git a/indra/newview/llface.h b/indra/newview/llface.h
old mode 100644
new mode 100755
index de4d03351ce39ad319f01bb4ba932065e778ff10..0687544d53880f00ba956e9d6a40fa0046643cfd
--- a/indra/newview/llface.h
+++ b/indra/newview/llface.h
@@ -41,7 +41,6 @@
 #include "llvertexbuffer.h"
 #include "llviewertexture.h"
 #include "lldrawable.h"
-#include "lltextureatlasmanager.h"
 
 class LLFacePool;
 class LLVolume;
@@ -50,7 +49,6 @@ class LLTextureEntry;
 class LLVertexProgram;
 class LLViewerTexture;
 class LLGeometryManager;
-class LLTextureAtlasSlot;
 
 const F32 MIN_ALPHA_SIZE = 1024.f;
 const F32 MIN_TEX_ANIM_SIZE = 512.f;
@@ -110,13 +108,17 @@ class LLFace
 	U16				getGeomStart()		const	{ return mGeomIndex; }		// index into draw pool
 	void			setTextureIndex(U8 index);
 	U8				getTextureIndex() const		{ return mTextureIndex; }
+	void			setTexture(U32 ch, LLViewerTexture* tex);
 	void			setTexture(LLViewerTexture* tex) ;
-	void            switchTexture(LLViewerTexture* new_texture);
+	void			setDiffuseMap(LLViewerTexture* tex);
+	void			setNormalMap(LLViewerTexture* tex);
+	void			setSpecularMap(LLViewerTexture* tex);
+	void            switchTexture(U32 ch, LLViewerTexture* new_texture);
 	void            dirtyTexture();
 	LLXformMatrix*	getXform()			const	{ return mXform; }
 	BOOL			hasGeometry()		const	{ return mGeomCount > 0; }
 	LLVector3		getPositionAgent()	const;
-	LLVector2       surfaceToTexture(LLVector2 surface_coord, LLVector3 position, LLVector3 normal);
+	LLVector2       surfaceToTexture(LLVector2 surface_coord, const LLVector4a& position, const LLVector4a& normal);
 	void 			getPlanarProjectedParams(LLQuaternion* face_rot, LLVector3* face_pos, F32* scale) const;
 	bool			calcAlignedPlanarTE(const LLFace* align_to, LLVector2* st_offset,
 										LLVector2* st_scale, F32* st_rot) const;
@@ -130,8 +132,8 @@ class LLFace
 	F32				getVirtualSize() const { return mVSize; }
 	F32				getPixelArea() const { return mPixelArea; }
 
-	S32             getIndexInTex() const {return mIndexInTex ;}
-	void            setIndexInTex(S32 index) { mIndexInTex = index ;}
+	S32             getIndexInTex(U32 ch) const {llassert(ch < LLRender::NUM_TEXTURE_CHANNELS); return mIndexInTex[ch];}
+	void            setIndexInTex(U32 ch, S32 index) { llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);  mIndexInTex[ch] = index ;}
 
 	void			renderSetColor() const;
 	S32				renderElements(const U16 *index_array) const;
@@ -149,7 +151,7 @@ class LLFace
 	S32				getLOD()			const	{ return mVObjp.notNull() ? mVObjp->getLOD() : 0; }
 	void			setPoolType(U32 type)		{ mPoolType = type; }
 	S32				getTEOffset()				{ return mTEOffset; }
-	LLViewerTexture*	getTexture() const;
+	LLViewerTexture*	getTexture(U32 ch = LLRender::DIFFUSE_MAP) const;
 
 	void			setViewerObject(LLViewerObject* object);
 	void			setPool(LLFacePool *pool, LLViewerTexture *texturep);
@@ -223,16 +225,6 @@ class LLFace
 	void        setHasMedia(bool has_media)  { mHasMedia = has_media ;}
 	BOOL        hasMedia() const ;
 
-	//for atlas
-	LLTextureAtlasSlot*   getAtlasInfo() ;
-	void                  setAtlasInUse(BOOL flag);
-	void                  setAtlasInfo(LLTextureAtlasSlot* atlasp);
-	BOOL                  isAtlasInUse()const;
-	BOOL                  canUseAtlas() const;
-	const LLVector2*      getTexCoordScale() const ;
-	const LLVector2*      getTexCoordOffset()const;
-	const LLTextureAtlas* getAtlas()const ;
-	void                  removeAtlas() ;
 	BOOL                  switchTexture() ;
 
 	//vertex buffer tracking
@@ -266,6 +258,8 @@ class LLFace
 	F32			mLastSkinTime;
 	F32			mLastMoveTime;
 	LLMatrix4*	mTextureMatrix;
+	LLMatrix4*	mSpecMapMatrix;
+	LLMatrix4*	mNormalMapMatrix;
 	LLDrawInfo* mDrawInfo;
 
 private:
@@ -281,10 +275,12 @@ class LLFace
 	U8			mTextureIndex;		// index of texture channel to use for pseudo-atlasing
 	U32			mIndicesCount;
 	U32			mIndicesIndex;		// index into draw pool for indices (yeah, I know!)
-	S32         mIndexInTex ;
+	S32         mIndexInTex[LLRender::NUM_TEXTURE_CHANNELS];
 
 	LLXformMatrix* mXform;
-	LLPointer<LLViewerTexture> mTexture;
+
+	LLPointer<LLViewerTexture> mTexture[LLRender::NUM_TEXTURE_CHANNELS];
+	
 	LLPointer<LLDrawable> mDrawablep;
 	LLPointer<LLViewerObject> mVObjp;
 	S32			mTEOffset;
@@ -302,9 +298,6 @@ class LLFace
 	F32         mBoundingSphereRadius ;
 	bool        mHasMedia ;
 
-	//atlas
-	LLPointer<LLTextureAtlasSlot> mAtlasInfop ;
-	BOOL                          mUsingAtlas ;
 	
 protected:
 	static BOOL	sSafeRenderSelect;
diff --git a/indra/newview/llface.inl b/indra/newview/llface.inl
old mode 100644
new mode 100755
diff --git a/indra/newview/llfasttimerview.cpp b/indra/newview/llfasttimerview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfasttimerview.h b/indra/newview/llfasttimerview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfavoritesbar.cpp b/indra/newview/llfavoritesbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfavoritesbar.h b/indra/newview/llfavoritesbar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfeaturemanager.cpp b/indra/newview/llfeaturemanager.cpp
old mode 100644
new mode 100755
index a4cadcd5dcf1b18f11f9558813510ad00071c5ed..ddb9d3bc4369ab4d03c2dcbd41884776158e5488
--- a/indra/newview/llfeaturemanager.cpp
+++ b/indra/newview/llfeaturemanager.cpp
@@ -705,6 +705,20 @@ void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)
 	switch (level)
 	{
 		case 0:
+#if LL_DARWIN
+			// This Mac-specific change is to insure that we force 'Basic Shaders' for all Mac
+			// systems which support them instead of falling back to fixed-function unnecessarily
+			// MAINT-2157
+			//
+			if (gGLManager.mGLVersion < 2.1f)
+			{
+				maskFeatures("LowFixedFunction");			
+			}
+			else
+			{ //same as low, but with "Basic Shaders" enabled
+				maskFeatures("Low");
+			}
+#else
 			if (gGLManager.mGLVersion < 3.f || gGLManager.mIsIntel)
 			{ //only use fixed function by default if GL version < 3.0 or this is an intel graphics chip
 				maskFeatures("LowFixedFunction");			
@@ -713,6 +727,7 @@ void LLFeatureManager::setGraphicsLevel(S32 level, bool skipFeatures)
 			{ //same as low, but with "Basic Shaders" enabled
 				maskFeatures("Low");
 			}
+#endif
 			break;
 		case 1:
 			maskFeatures("LowMid");
diff --git a/indra/newview/llfeaturemanager.h b/indra/newview/llfeaturemanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfilepicker.cpp b/indra/newview/llfilepicker.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfilepicker.h b/indra/newview/llfilepicker.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfilteredwearablelist.cpp b/indra/newview/llfilteredwearablelist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfilteredwearablelist.h b/indra/newview/llfilteredwearablelist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfirstuse.cpp b/indra/newview/llfirstuse.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfirstuse.h b/indra/newview/llfirstuse.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llflexibleobject.cpp b/indra/newview/llflexibleobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llflexibleobject.h b/indra/newview/llflexibleobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterabout.cpp b/indra/newview/llfloaterabout.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterabout.h b/indra/newview/llfloaterabout.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterauction.cpp b/indra/newview/llfloaterauction.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterauction.h b/indra/newview/llfloaterauction.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterautoreplacesettings.cpp b/indra/newview/llfloaterautoreplacesettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterautoreplacesettings.h b/indra/newview/llfloaterautoreplacesettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateravatar.cpp b/indra/newview/llfloateravatar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateravatar.h b/indra/newview/llfloateravatar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateravatarpicker.cpp b/indra/newview/llfloateravatarpicker.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateravatarpicker.h b/indra/newview/llfloateravatarpicker.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateravatartextures.cpp b/indra/newview/llfloateravatartextures.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateravatartextures.h b/indra/newview/llfloateravatartextures.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbeacons.cpp b/indra/newview/llfloaterbeacons.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbeacons.h b/indra/newview/llfloaterbeacons.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuildoptions.cpp b/indra/newview/llfloaterbuildoptions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuildoptions.h b/indra/newview/llfloaterbuildoptions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbulkpermission.cpp b/indra/newview/llfloaterbulkpermission.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbulkpermission.h b/indra/newview/llfloaterbulkpermission.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbump.cpp b/indra/newview/llfloaterbump.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbump.h b/indra/newview/llfloaterbump.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuy.cpp b/indra/newview/llfloaterbuy.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuy.h b/indra/newview/llfloaterbuy.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuycontents.cpp b/indra/newview/llfloaterbuycontents.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuycontents.h b/indra/newview/llfloaterbuycontents.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuycurrency.cpp b/indra/newview/llfloaterbuycurrency.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuycurrency.h b/indra/newview/llfloaterbuycurrency.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuycurrencyhtml.cpp b/indra/newview/llfloaterbuycurrencyhtml.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuycurrencyhtml.h b/indra/newview/llfloaterbuycurrencyhtml.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuyland.cpp b/indra/newview/llfloaterbuyland.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbuyland.h b/indra/newview/llfloaterbuyland.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbvhpreview.cpp b/indra/newview/llfloaterbvhpreview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterbvhpreview.h b/indra/newview/llfloaterbvhpreview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatercamera.cpp b/indra/newview/llfloatercamera.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatercamera.h b/indra/newview/llfloatercamera.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterchatvoicevolume.cpp b/indra/newview/llfloaterchatvoicevolume.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterchatvoicevolume.h b/indra/newview/llfloaterchatvoicevolume.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatercolorpicker.cpp b/indra/newview/llfloatercolorpicker.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatercolorpicker.h b/indra/newview/llfloatercolorpicker.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterconversationlog.cpp b/indra/newview/llfloaterconversationlog.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterconversationlog.h b/indra/newview/llfloaterconversationlog.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterconversationpreview.cpp b/indra/newview/llfloaterconversationpreview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterconversationpreview.h b/indra/newview/llfloaterconversationpreview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterdeleteenvpreset.cpp b/indra/newview/llfloaterdeleteenvpreset.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterdeleteenvpreset.h b/indra/newview/llfloaterdeleteenvpreset.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterdestinations.cpp b/indra/newview/llfloaterdestinations.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterdestinations.h b/indra/newview/llfloaterdestinations.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterdisplayname.cpp b/indra/newview/llfloaterdisplayname.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterdisplayname.h b/indra/newview/llfloaterdisplayname.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatereditdaycycle.cpp b/indra/newview/llfloatereditdaycycle.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatereditdaycycle.h b/indra/newview/llfloatereditdaycycle.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatereditsky.cpp b/indra/newview/llfloatereditsky.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatereditsky.h b/indra/newview/llfloatereditsky.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatereditwater.cpp b/indra/newview/llfloatereditwater.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatereditwater.h b/indra/newview/llfloatereditwater.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterenvironmentsettings.cpp b/indra/newview/llfloaterenvironmentsettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterenvironmentsettings.h b/indra/newview/llfloaterenvironmentsettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterevent.cpp b/indra/newview/llfloaterevent.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterevent.h b/indra/newview/llfloaterevent.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterfonttest.cpp b/indra/newview/llfloaterfonttest.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterfonttest.h b/indra/newview/llfloaterfonttest.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergesture.cpp b/indra/newview/llfloatergesture.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergesture.h b/indra/newview/llfloatergesture.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergodtools.cpp b/indra/newview/llfloatergodtools.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergodtools.h b/indra/newview/llfloatergodtools.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergroupinvite.cpp b/indra/newview/llfloatergroupinvite.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergroupinvite.h b/indra/newview/llfloatergroupinvite.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergroups.cpp b/indra/newview/llfloatergroups.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatergroups.h b/indra/newview/llfloatergroups.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhandler.cpp b/indra/newview/llfloaterhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhandler.h b/indra/newview/llfloaterhandler.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhardwaresettings.cpp b/indra/newview/llfloaterhardwaresettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhardwaresettings.h b/indra/newview/llfloaterhardwaresettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhelpbrowser.cpp b/indra/newview/llfloaterhelpbrowser.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhelpbrowser.h b/indra/newview/llfloaterhelpbrowser.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhud.cpp b/indra/newview/llfloaterhud.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterhud.h b/indra/newview/llfloaterhud.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimagepreview.cpp b/indra/newview/llfloaterimagepreview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimagepreview.h b/indra/newview/llfloaterimagepreview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimcontainer.cpp b/indra/newview/llfloaterimcontainer.cpp
old mode 100644
new mode 100755
index 58817485fb564dac0ff0296ec12aa73c7d299de4..b40789db9c1b91604f247520aadb622b924e70a5
--- a/indra/newview/llfloaterimcontainer.cpp
+++ b/indra/newview/llfloaterimcontainer.cpp
@@ -2021,7 +2021,7 @@ void LLFloaterIMContainer::closeFloater(bool app_quitting/* = false*/)
 	{
 		LLMultiFloater::setMinimized(FALSE);
 	}
-	
+
 	LLFloater::closeFloater(app_quitting);
 }
 
diff --git a/indra/newview/llfloaterimcontainer.h b/indra/newview/llfloaterimcontainer.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimnearbychat.cpp b/indra/newview/llfloaterimnearbychat.cpp
old mode 100644
new mode 100755
index 49f36a2f321b1b1152a4f4eddf680fb4fff8d84a..56b0c15cb9e8ec03157270f9ef3e45ec0d04b085
--- a/indra/newview/llfloaterimnearbychat.cpp
+++ b/indra/newview/llfloaterimnearbychat.cpp
@@ -328,7 +328,7 @@ void LLFloaterIMNearbyChat::onChatFontChange(LLFontGL* fontp)
 void LLFloaterIMNearbyChat::show()
 {
 		openFloater(getKey());
-}
+	}
 
 bool LLFloaterIMNearbyChat::isChatVisible() const
 {
diff --git a/indra/newview/llfloaterimnearbychat.h b/indra/newview/llfloaterimnearbychat.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimnearbychathandler.cpp b/indra/newview/llfloaterimnearbychathandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimnearbychathandler.h b/indra/newview/llfloaterimnearbychathandler.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimnearbychatlistener.cpp b/indra/newview/llfloaterimnearbychatlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimnearbychatlistener.h b/indra/newview/llfloaterimnearbychatlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimsession.cpp b/indra/newview/llfloaterimsession.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimsession.h b/indra/newview/llfloaterimsession.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimsessiontab.cpp b/indra/newview/llfloaterimsessiontab.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterimsessiontab.h b/indra/newview/llfloaterimsessiontab.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterinspect.cpp b/indra/newview/llfloaterinspect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterinspect.h b/indra/newview/llfloaterinspect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterinventory.cpp b/indra/newview/llfloaterinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterinventory.h b/indra/newview/llfloaterinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterjoystick.cpp b/indra/newview/llfloaterjoystick.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterjoystick.h b/indra/newview/llfloaterjoystick.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterlagmeter.cpp b/indra/newview/llfloaterlagmeter.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterlagmeter.h b/indra/newview/llfloaterlagmeter.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterland.cpp b/indra/newview/llfloaterland.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterland.h b/indra/newview/llfloaterland.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterlandholdings.cpp b/indra/newview/llfloaterlandholdings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterlandholdings.h b/indra/newview/llfloaterlandholdings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermap.cpp b/indra/newview/llfloatermap.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermap.h b/indra/newview/llfloatermap.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermediasettings.cpp b/indra/newview/llfloatermediasettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermediasettings.h b/indra/newview/llfloatermediasettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermemleak.cpp b/indra/newview/llfloatermemleak.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermemleak.h b/indra/newview/llfloatermemleak.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermodelpreview.h b/indra/newview/llfloatermodelpreview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermodeluploadbase.cpp b/indra/newview/llfloatermodeluploadbase.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatermodeluploadbase.h b/indra/newview/llfloatermodeluploadbase.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaternamedesc.cpp b/indra/newview/llfloaternamedesc.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaternamedesc.h b/indra/newview/llfloaternamedesc.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaternotificationsconsole.cpp b/indra/newview/llfloaternotificationsconsole.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaternotificationsconsole.h b/indra/newview/llfloaternotificationsconsole.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterobjectweights.cpp b/indra/newview/llfloaterobjectweights.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterobjectweights.h b/indra/newview/llfloaterobjectweights.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateropenobject.cpp b/indra/newview/llfloateropenobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateropenobject.h b/indra/newview/llfloateropenobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateroutbox.cpp b/indra/newview/llfloateroutbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateroutbox.h b/indra/newview/llfloateroutbox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindingcharacters.cpp b/indra/newview/llfloaterpathfindingcharacters.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindingcharacters.h b/indra/newview/llfloaterpathfindingcharacters.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindingconsole.cpp b/indra/newview/llfloaterpathfindingconsole.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindingconsole.h b/indra/newview/llfloaterpathfindingconsole.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindinglinksets.cpp b/indra/newview/llfloaterpathfindinglinksets.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindinglinksets.h b/indra/newview/llfloaterpathfindinglinksets.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindingobjects.cpp b/indra/newview/llfloaterpathfindingobjects.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpathfindingobjects.h b/indra/newview/llfloaterpathfindingobjects.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpay.cpp b/indra/newview/llfloaterpay.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpay.h b/indra/newview/llfloaterpay.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterperms.cpp b/indra/newview/llfloaterperms.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterperms.h b/indra/newview/llfloaterperms.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpostprocess.cpp b/indra/newview/llfloaterpostprocess.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpostprocess.h b/indra/newview/llfloaterpostprocess.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterpreference.cpp b/indra/newview/llfloaterpreference.cpp
index bbf88060c1963c0601e1218d31312bd786cca8bb..55b03986d01098f3975c6121afbccb0b70727fb6 100755
--- a/indra/newview/llfloaterpreference.cpp
+++ b/indra/newview/llfloaterpreference.cpp
@@ -1089,8 +1089,9 @@ void LLFloaterPreference::refreshEnabledState()
 	ctrl_reflections->setEnabled(reflections);
 	
 	// Bump & Shiny	
+	LLCheckBoxCtrl* bumpshiny_ctrl = getChild<LLCheckBoxCtrl>("BumpShiny");
 	bool bumpshiny = gGLManager.mHasCubeMap && LLCubeMap::sUseCubeMaps && LLFeatureManager::getInstance()->isFeatureAvailable("RenderObjectBump");
-	getChild<LLCheckBoxCtrl>("BumpShiny")->setEnabled(bumpshiny ? TRUE : FALSE);
+	bumpshiny_ctrl->setEnabled(bumpshiny ? TRUE : FALSE);
 	
 	radio_reflection_detail->setEnabled(reflections);
 	
@@ -1148,7 +1149,8 @@ void LLFloaterPreference::refreshEnabledState()
 	//Deferred/SSAO/Shadows
 	LLCheckBoxCtrl* ctrl_deferred = getChild<LLCheckBoxCtrl>("UseLightShaders");
 	
-	BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") && 
+	BOOL enabled = LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
+						((bumpshiny_ctrl && bumpshiny_ctrl->get()) ? TRUE : FALSE) &&
 						shaders && 
 						gGLManager.mHasFramebufferObject &&
 						gSavedSettings.getBOOL("RenderAvatarVP") &&
@@ -1161,7 +1163,9 @@ void LLFloaterPreference::refreshEnabledState()
 	LLComboBox* ctrl_shadow = getChild<LLComboBox>("ShadowDetail");
 
 	enabled = enabled && LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferredSSAO") && (ctrl_deferred->get() ? TRUE : FALSE);
-		
+	
+	ctrl_deferred->set(gSavedSettings.getBOOL("RenderDeferred"));
+
 	ctrl_ssao->setEnabled(enabled);
 	ctrl_dof->setEnabled(enabled);
 
@@ -2319,3 +2323,4 @@ void LLFloaterPreferenceProxy::onChangeSocksSettings()
 	}
 
 }
+
diff --git a/indra/newview/llfloaterpreference.h b/indra/newview/llfloaterpreference.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterproperties.cpp b/indra/newview/llfloaterproperties.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterproperties.h b/indra/newview/llfloaterproperties.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterregiondebugconsole.cpp b/indra/newview/llfloaterregiondebugconsole.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterregiondebugconsole.h b/indra/newview/llfloaterregiondebugconsole.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterregioninfo.cpp b/indra/newview/llfloaterregioninfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterregioninfo.h b/indra/newview/llfloaterregioninfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterreporter.cpp b/indra/newview/llfloaterreporter.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterreporter.h b/indra/newview/llfloaterreporter.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterscriptdebug.cpp b/indra/newview/llfloaterscriptdebug.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterscriptdebug.h b/indra/newview/llfloaterscriptdebug.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterscriptlimits.cpp b/indra/newview/llfloaterscriptlimits.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterscriptlimits.h b/indra/newview/llfloaterscriptlimits.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersearch.cpp b/indra/newview/llfloatersearch.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersearch.h b/indra/newview/llfloatersearch.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersellland.cpp b/indra/newview/llfloatersellland.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersellland.h b/indra/newview/llfloatersellland.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersettingsdebug.cpp b/indra/newview/llfloatersettingsdebug.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersettingsdebug.h b/indra/newview/llfloatersettingsdebug.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersidepanelcontainer.cpp b/indra/newview/llfloatersidepanelcontainer.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersidepanelcontainer.h b/indra/newview/llfloatersidepanelcontainer.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersnapshot.cpp b/indra/newview/llfloatersnapshot.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersnapshot.h b/indra/newview/llfloatersnapshot.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersounddevices.cpp b/indra/newview/llfloatersounddevices.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatersounddevices.h b/indra/newview/llfloatersounddevices.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterspellchecksettings.cpp b/indra/newview/llfloaterspellchecksettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterspellchecksettings.h b/indra/newview/llfloaterspellchecksettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertelehub.cpp b/indra/newview/llfloatertelehub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertelehub.h b/indra/newview/llfloatertelehub.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertestinspectors.cpp b/indra/newview/llfloatertestinspectors.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertestinspectors.h b/indra/newview/llfloatertestinspectors.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertestlistview.cpp b/indra/newview/llfloatertestlistview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertestlistview.h b/indra/newview/llfloatertestlistview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertexturefetchdebugger.cpp b/indra/newview/llfloatertexturefetchdebugger.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertexturefetchdebugger.h b/indra/newview/llfloatertexturefetchdebugger.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertools.cpp b/indra/newview/llfloatertools.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertools.h b/indra/newview/llfloatertools.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertopobjects.cpp b/indra/newview/llfloatertopobjects.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertopobjects.h b/indra/newview/llfloatertopobjects.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertos.cpp b/indra/newview/llfloatertos.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertos.h b/indra/newview/llfloatertos.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertoybox.cpp b/indra/newview/llfloatertoybox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertoybox.h b/indra/newview/llfloatertoybox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertranslationsettings.cpp b/indra/newview/llfloatertranslationsettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatertranslationsettings.h b/indra/newview/llfloatertranslationsettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateruipreview.cpp b/indra/newview/llfloateruipreview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloateruipreview.h b/indra/newview/llfloateruipreview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterurlentry.cpp b/indra/newview/llfloaterurlentry.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterurlentry.h b/indra/newview/llfloaterurlentry.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatervoiceeffect.cpp b/indra/newview/llfloatervoiceeffect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatervoiceeffect.h b/indra/newview/llfloatervoiceeffect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatervoicevolume.cpp b/indra/newview/llfloatervoicevolume.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloatervoicevolume.h b/indra/newview/llfloatervoicevolume.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwebcontent.cpp b/indra/newview/llfloaterwebcontent.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwebcontent.h b/indra/newview/llfloaterwebcontent.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwebprofile.cpp b/indra/newview/llfloaterwebprofile.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwebprofile.h b/indra/newview/llfloaterwebprofile.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwhitelistentry.cpp b/indra/newview/llfloaterwhitelistentry.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwhitelistentry.h b/indra/newview/llfloaterwhitelistentry.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwindowsize.cpp b/indra/newview/llfloaterwindowsize.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterwindowsize.h b/indra/newview/llfloaterwindowsize.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfloaterworldmap.h b/indra/newview/llfloaterworldmap.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfolderviewmodelinventory.cpp b/indra/newview/llfolderviewmodelinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfolderviewmodelinventory.h b/indra/newview/llfolderviewmodelinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfollowcam.cpp b/indra/newview/llfollowcam.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llfollowcam.h b/indra/newview/llfollowcam.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llfriendcard.cpp b/indra/newview/llfriendcard.cpp
old mode 100644
new mode 100755
index 5c6ce9d311df02207c2f1edd8bb80bf293f9981a..16ed3f990c7cc13a4ff2b1604db0e64489b4982d
--- a/indra/newview/llfriendcard.cpp
+++ b/indra/newview/llfriendcard.cpp
@@ -521,7 +521,7 @@ class CreateFriendCardCallback : public LLInventoryCallback
 	void fire(const LLUUID& inv_item_id)
 	{
 		LLViewerInventoryItem* item = gInventory.getItem(inv_item_id);
-		
+
 		if (item)
 			LLFriendCardsManager::instance().extractAvatarID(item->getCreatorUUID());
 	}
diff --git a/indra/newview/llfriendcard.h b/indra/newview/llfriendcard.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llgesturelistener.cpp b/indra/newview/llgesturelistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgesturelistener.h b/indra/newview/llgesturelistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llgesturemgr.cpp b/indra/newview/llgesturemgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgesturemgr.h b/indra/newview/llgesturemgr.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llgiveinventory.cpp b/indra/newview/llgiveinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgiveinventory.h b/indra/newview/llgiveinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llglsandbox.cpp b/indra/newview/llglsandbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgroupactions.cpp b/indra/newview/llgroupactions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgroupactions.h b/indra/newview/llgroupactions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llgroupiconctrl.cpp b/indra/newview/llgroupiconctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgroupiconctrl.h b/indra/newview/llgroupiconctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llgrouplist.cpp b/indra/newview/llgrouplist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgrouplist.h b/indra/newview/llgrouplist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llgroupmgr.cpp b/indra/newview/llgroupmgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llgroupmgr.h b/indra/newview/llgroupmgr.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhasheduniqueid.cpp b/indra/newview/llhasheduniqueid.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..03192d3e61c16e9a162038ea61a68570c463a17e
--- /dev/null
+++ b/indra/newview/llhasheduniqueid.cpp
@@ -0,0 +1,55 @@
+/** 
+ * @file llhasheduniqueid.cpp
+ * @brief retrieves an obfuscated unique id for the system
+ *
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+#include "llhasheduniqueid.h"
+#include "llviewernetwork.h"
+#include "lluuid.h"
+#include "llmachineid.h"
+
+bool llHashedUniqueID(unsigned char id[MD5HEX_STR_SIZE])
+{
+	bool idIsUnique = true;
+	LLMD5 hashed_unique_id;
+	unsigned char unique_id[MAC_ADDRESS_BYTES];
+	if (   LLUUID::getNodeID(unique_id)
+		|| LLMachineID::getUniqueID(unique_id, sizeof(unique_id))
+		)
+	{
+		hashed_unique_id.update(unique_id, MAC_ADDRESS_BYTES);
+		hashed_unique_id.finalize();
+		hashed_unique_id.hex_digest((char*)id);
+		LL_INFOS_ONCE("AppInit") << "System ID " << id << LL_ENDL;
+	}
+	else
+	{
+		idIsUnique = false;
+		memcpy(id,"00000000000000000000000000000000", MD5HEX_STR_SIZE);
+		LL_WARNS_ONCE("AppInit") << "Failed to get an id; cannot uniquely identify this machine." << LL_ENDL;
+	}
+	return idIsUnique;
+}
+
diff --git a/indra/llcommon/llversionviewer.h b/indra/newview/llhasheduniqueid.h
similarity index 63%
rename from indra/llcommon/llversionviewer.h
rename to indra/newview/llhasheduniqueid.h
index ae5e3ecade2d9c1cac2650437fdb55164b58ae35..8ef706c1f3044a16ebfa41c7ffd9a9c8135500c9 100644
--- a/indra/llcommon/llversionviewer.h
+++ b/indra/newview/llhasheduniqueid.h
@@ -1,10 +1,10 @@
 /** 
- * @file llversionviewer.h
- * @brief
+ * @file llhasheduniqueid.h
+ * @brief retrieves obfuscated but unique id for the system
  *
- * $LicenseInfo:firstyear=2002&license=viewerlgpl$
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
  * Second Life Viewer Source Code
- * Copyright (C) 2010, Linden Research, Inc.
+ * Copyright (C) 2013, Linden Research, Inc.
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -23,19 +23,12 @@
  * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
  * $/LicenseInfo$
  */
+#ifndef LL_LLHASHEDUNIQUEID_H
+#define LL_LLHASHEDUNIQUEID_H
+#include "llmd5.h"
 
-#ifndef LL_LLVERSIONVIEWER_H
-#define LL_LLVERSIONVIEWER_H
+/// Get an obfuscated identifier for this system 
+bool llHashedUniqueID(unsigned char id[MD5HEX_STR_SIZE]);
+///< @returns true if the id is considered valid (if false, the id is all zeros)
 
-const S32 LL_VERSION_MAJOR = 3;
-const S32 LL_VERSION_MINOR = 5;
-const S32 LL_VERSION_PATCH = 1;
-const S32 LL_VERSION_BUILD = 264760;
-
-const char * const LL_CHANNEL = "Second Life Developer";
-
-#if LL_DARWIN
-const char * const LL_VERSION_BUNDLE_ID = "com.secondlife.indra.viewer";
-#endif
-
-#endif
+#endif // LL_LLHASHEDUNIQUEID_H
diff --git a/indra/newview/llhints.cpp b/indra/newview/llhints.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhints.h b/indra/newview/llhints.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhomelocationresponder.cpp b/indra/newview/llhomelocationresponder.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhomelocationresponder.h b/indra/newview/llhomelocationresponder.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffect.cpp b/indra/newview/llhudeffect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffect.h b/indra/newview/llhudeffect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectbeam.cpp b/indra/newview/llhudeffectbeam.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectbeam.h b/indra/newview/llhudeffectbeam.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectblob.cpp b/indra/newview/llhudeffectblob.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectblob.h b/indra/newview/llhudeffectblob.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectlookat.cpp b/indra/newview/llhudeffectlookat.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectlookat.h b/indra/newview/llhudeffectlookat.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectpointat.cpp b/indra/newview/llhudeffectpointat.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffectpointat.h b/indra/newview/llhudeffectpointat.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffecttrail.cpp b/indra/newview/llhudeffecttrail.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudeffecttrail.h b/indra/newview/llhudeffecttrail.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudicon.cpp b/indra/newview/llhudicon.cpp
old mode 100644
new mode 100755
index 7e1025c41b4695d1fc195fa70670a6a10ecf5f21..825c2b31bef19382ed6ba6053e76c04ccf37814f
--- a/indra/newview/llhudicon.cpp
+++ b/indra/newview/llhudicon.cpp
@@ -202,7 +202,7 @@ void LLHUDIcon::render()
 	renderIcon(FALSE);
 }
 
-BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3* intersection)
+BOOL LLHUDIcon::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, LLVector4a* intersection)
 {
 	if (mHidden)
 		return FALSE;
@@ -275,23 +275,18 @@ BOOL LLHUDIcon::lineSegmentIntersect(const LLVector3& start, const LLVector3& en
 	LLVector4a upper_right;
 	upper_right.setAdd(lower_right, y_scalea);
 
-	LLVector4a enda;
-	enda.load3(end.mV);
-	LLVector4a starta;
-	starta.load3(start.mV);
 	LLVector4a dir;
-	dir.setSub(enda, starta);
+	dir.setSub(end, start);
 
 	F32 a,b,t;
 
-	if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, starta, dir, a,b,t) ||
-		LLTriangleRayIntersect(upper_left, lower_left, lower_right, starta, dir, a,b,t))
+	if (LLTriangleRayIntersect(upper_right, upper_left, lower_right, start, dir, a,b,t) ||
+		LLTriangleRayIntersect(upper_left, lower_left, lower_right, start, dir, a,b,t))
 	{
 		if (intersection)
 		{
 			dir.mul(t);
-			starta.add(dir);
-			*intersection = LLVector3(starta.getF32ptr());
+			intersection->setAdd(start, dir);
 		}
 		return TRUE;
 	}
@@ -331,12 +326,12 @@ LLHUDIcon* LLHUDIcon::handlePick(S32 pick_id)
 }
 
 //static
-LLHUDIcon* LLHUDIcon::lineSegmentIntersectAll(const LLVector3& start, const LLVector3& end, LLVector3* intersection)
+LLHUDIcon* LLHUDIcon::lineSegmentIntersectAll(const LLVector4a& start, const LLVector4a& end, LLVector4a* intersection)
 {
 	icon_instance_t::iterator icon_it;
 
-	LLVector3 local_end = end;
-	LLVector3 position;
+	LLVector4a local_end = end;
+	LLVector4a position;
 
 	LLHUDIcon* ret = NULL;
 	for(icon_it = sIconInstances.begin(); icon_it != sIconInstances.end(); ++icon_it)
diff --git a/indra/newview/llhudicon.h b/indra/newview/llhudicon.h
old mode 100644
new mode 100755
index 644daa02997995e0200213fced30926ced785abc..557252ab0bf392aed09ec86661260de0e6b75c0d
--- a/indra/newview/llhudicon.h
+++ b/indra/newview/llhudicon.h
@@ -62,7 +62,7 @@ friend class LLHUDObject;
 
 	static S32 generatePickIDs(S32 start_id, S32 step_size);
 	static LLHUDIcon* handlePick(S32 pick_id);
-	static LLHUDIcon* lineSegmentIntersectAll(const LLVector3& start, const LLVector3& end, LLVector3* intersection);
+	static LLHUDIcon* lineSegmentIntersectAll(const LLVector4a& start, const LLVector4a& end, LLVector4a* intersection);
 
 	static void updateAll();
 	static void cleanupDeadIcons();
@@ -73,7 +73,7 @@ friend class LLHUDObject;
 	BOOL getHidden() const { return mHidden; }
 	void setHidden( BOOL hide ) { mHidden = hide; }
 
-	BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3* intersection);
+	BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, LLVector4a* intersection);
 
 protected:
 	LLHUDIcon(const U8 type);
diff --git a/indra/newview/llhudmanager.cpp b/indra/newview/llhudmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudmanager.h b/indra/newview/llhudmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudnametag.cpp b/indra/newview/llhudnametag.cpp
old mode 100644
new mode 100755
index 33360979558ff345bff4dcc2b2c1254e08ee156c..c3b49f739aa183d0aa881ba8701dfb1305172077
--- a/indra/newview/llhudnametag.cpp
+++ b/indra/newview/llhudnametag.cpp
@@ -116,7 +116,7 @@ LLHUDNameTag::~LLHUDNameTag()
 }
 
 
-BOOL LLHUDNameTag::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render)
+BOOL LLHUDNameTag::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, LLVector4a& intersection, BOOL debug_render)
 {
 	if (!mVisible || mHidden)
 	{
@@ -199,15 +199,23 @@ BOOL LLHUDNameTag::lineSegmentIntersect(const LLVector3& start, const LLVector3&
 		bg_pos + height_vec,
 	};
 
-	LLVector3 dir = end-start;
+	LLVector4a dir;
+	dir.setSub(end,start);
 	F32 a, b, t;
 
-	if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, a, b, t, FALSE) ||
-		LLTriangleRayIntersect(v[2], v[3], v[0], start, dir, a, b, t, FALSE) )
+	LLVector4a v0,v1,v2,v3;
+	v0.load3(v[0].mV);
+	v1.load3(v[1].mV);
+	v2.load3(v[2].mV);
+	v3.load3(v[3].mV);
+
+	if (LLTriangleRayIntersect(v0, v1, v2, start, dir, a, b, t) ||
+		LLTriangleRayIntersect(v2, v3, v0, start, dir, a, b, t) )
 	{
 		if (t <= 1.f)
 		{
-			intersection = start + dir*t;
+			dir.mul(t);
+			intersection.setAdd(start, dir);
 			return TRUE;
 		}
 	}
diff --git a/indra/newview/llhudnametag.h b/indra/newview/llhudnametag.h
old mode 100644
new mode 100755
index 72647d5b262dbd7c952f74f63909932f23b7d644..38a4f184153c09eae0264e2a64aa098c00a77c2a
--- a/indra/newview/llhudnametag.h
+++ b/indra/newview/llhudnametag.h
@@ -124,7 +124,7 @@ class LLHUDNameTag : public LLHUDObject
 	void setHidden( BOOL hide ) { mHidden = hide; }
 	void shift(const LLVector3& offset);
 
-	BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, LLVector3& intersection, BOOL debug_render = FALSE);
+	BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, LLVector4a& intersection, BOOL debug_render = FALSE);
 
 	static void shiftAll(const LLVector3& offset);
 	static void addPickable(std::set<LLViewerObject*> &pick_list);
diff --git a/indra/newview/llhudobject.cpp b/indra/newview/llhudobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudobject.h b/indra/newview/llhudobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudrender.cpp b/indra/newview/llhudrender.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudrender.h b/indra/newview/llhudrender.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudtext.cpp b/indra/newview/llhudtext.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudtext.h b/indra/newview/llhudtext.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudview.cpp b/indra/newview/llhudview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llhudview.h b/indra/newview/llhudview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llimhandler.cpp b/indra/newview/llimhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llimpanel.cpp b/indra/newview/llimpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llimpanel.h b/indra/newview/llimpanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llimview.cpp b/indra/newview/llimview.cpp
old mode 100644
new mode 100755
index 2c20409381d3331018c0b099d9a45ee7c62eb435..3b72ad3cd9f068084998185dc1cdcb5cfcd558cc
--- a/indra/newview/llimview.cpp
+++ b/indra/newview/llimview.cpp
@@ -228,7 +228,7 @@ void on_new_message(const LLSD& msg)
     // 0. nothing - exit
     if (("none" == user_preferences ||
     		ON_TOP_AND_ITEM_IS_SELECTED == conversations_floater_status)
-    	    && session_floater->isMessagePaneExpanded())
+    	&& session_floater->isMessagePaneExpanded())
     {
     	return;
     }
@@ -1561,7 +1561,7 @@ class LLViewerChatterBoxInvitationAcceptResponder :
 	}
 
 	void errorWithContent(U32 statusNum, const std::string& reason, const LLSD& content)
-	{
+	{		
 		llwarns << "LLViewerChatterBoxInvitationAcceptResponder error [status:"
 				<< statusNum << "]: " << content << llendl;
 		//throw something back to the viewer here?
diff --git a/indra/newview/llimview.h b/indra/newview/llimview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspect.cpp b/indra/newview/llinspect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspect.h b/indra/newview/llinspect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectavatar.cpp b/indra/newview/llinspectavatar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectavatar.h b/indra/newview/llinspectavatar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectgroup.cpp b/indra/newview/llinspectgroup.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectgroup.h b/indra/newview/llinspectgroup.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectobject.cpp b/indra/newview/llinspectobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectobject.h b/indra/newview/llinspectobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectremoteobject.cpp b/indra/newview/llinspectremoteobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspectremoteobject.h b/indra/newview/llinspectremoteobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspecttoast.cpp b/indra/newview/llinspecttoast.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinspecttoast.h b/indra/newview/llinspecttoast.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryactions.h b/indra/newview/llinventoryactions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorybridge.cpp b/indra/newview/llinventorybridge.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorybridge.h b/indra/newview/llinventorybridge.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryclipboard.cpp b/indra/newview/llinventoryclipboard.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryclipboard.h b/indra/newview/llinventoryclipboard.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryfilter.cpp b/indra/newview/llinventoryfilter.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryfilter.h b/indra/newview/llinventoryfilter.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryfunctions.cpp b/indra/newview/llinventoryfunctions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryfunctions.h b/indra/newview/llinventoryfunctions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryicon.cpp b/indra/newview/llinventoryicon.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryicon.h b/indra/newview/llinventoryicon.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryitemslist.cpp b/indra/newview/llinventoryitemslist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryitemslist.h b/indra/newview/llinventoryitemslist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorylistitem.cpp b/indra/newview/llinventorylistitem.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorylistitem.h b/indra/newview/llinventorylistitem.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorymodel.h b/indra/newview/llinventorymodel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorymodelbackgroundfetch.cpp b/indra/newview/llinventorymodelbackgroundfetch.cpp
old mode 100644
new mode 100755
index f2b39e71863d35f0f962f47d78677b2031d90f75..d88e0c3192ea2f3081f62c4558d2a8d7b52b1966
--- a/indra/newview/llinventorymodelbackgroundfetch.cpp
+++ b/indra/newview/llinventorymodelbackgroundfetch.cpp
@@ -686,23 +686,23 @@ void LLInventoryModelBackgroundFetch::bulkFetch()
 	{
 		if (folder_count)
 		{
-			std::string url = region->getCapability("FetchInventoryDescendents2");   			
+			std::string url = region->getCapability("FetchInventoryDescendents2");   
 			if ( !url.empty() )
 			{
-				mFetchCount++;
-				if (folder_request_body["folders"].size())
-				{
-					LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats);
-					LLHTTPClient::post(url, folder_request_body, fetcher, 300.0);
-				}
-				if (folder_request_body_lib["folders"].size())
-				{
-					std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2");
+			mFetchCount++;
+			if (folder_request_body["folders"].size())
+			{
+				LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body, recursive_cats);
+				LLHTTPClient::post(url, folder_request_body, fetcher, 300.0);
+			}
+			if (folder_request_body_lib["folders"].size())
+			{
+				std::string url_lib = gAgent.getRegion()->getCapability("FetchLibDescendents2");
 
-					LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats);
-					LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0);
-				}
-			}					
+				LLInventoryModelFetchDescendentsResponder *fetcher = new LLInventoryModelFetchDescendentsResponder(folder_request_body_lib, recursive_cats);
+				LLHTTPClient::post(url_lib, folder_request_body_lib, fetcher, 300.0);
+			}
+		}
 		}
 		if (item_count)
 		{
diff --git a/indra/newview/llinventorymodelbackgroundfetch.h b/indra/newview/llinventorymodelbackgroundfetch.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryobserver.cpp b/indra/newview/llinventoryobserver.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventoryobserver.h b/indra/newview/llinventoryobserver.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorypanel.cpp b/indra/newview/llinventorypanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llinventorypanel.h b/indra/newview/llinventorypanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lljoystickbutton.cpp b/indra/newview/lljoystickbutton.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lljoystickbutton.h b/indra/newview/lljoystickbutton.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllandmarkactions.cpp b/indra/newview/lllandmarkactions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllandmarkactions.h b/indra/newview/lllandmarkactions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllandmarklist.cpp b/indra/newview/lllandmarklist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllandmarklist.h b/indra/newview/lllandmarklist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllightconstants.h b/indra/newview/lllightconstants.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllistbrowser.cpp b/indra/newview/lllistbrowser.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllistbrowser.h b/indra/newview/lllistbrowser.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllistcontextmenu.cpp b/indra/newview/lllistcontextmenu.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllistcontextmenu.h b/indra/newview/lllistcontextmenu.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllistview.cpp b/indra/newview/lllistview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllistview.h b/indra/newview/lllistview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllocalbitmaps.cpp b/indra/newview/lllocalbitmaps.cpp
old mode 100644
new mode 100755
index 25df4889b0d69973132c69da1ad3b0517575b3ae..2d9385390b45bbd893d4a815b2712f035d6f2fdf
--- a/indra/newview/lllocalbitmaps.cpp
+++ b/indra/newview/lllocalbitmaps.cpp
@@ -58,6 +58,8 @@
 #include "lltexlayerparams.h"
 #include "llvovolume.h"
 #include "llnotificationsutil.h"
+#include "pipeline.h"
+#include "llmaterialmgr.h"
 
 /*=======================================*/
 /*  Formal declarations, constants, etc. */
@@ -339,7 +341,12 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
 		return;
 	}
 
-	updateUserPrims(old_id, new_id);
+	// processing updates per channel; makes the process scalable.
+	// the only actual difference is in SetTE* call i.e. SetTETexture, SetTENormal, etc.
+	updateUserPrims(old_id, new_id, LLRender::DIFFUSE_MAP);
+	updateUserPrims(old_id, new_id, LLRender::NORMAL_MAP);
+	updateUserPrims(old_id, new_id, LLRender::SPECULAR_MAP);
+	
 	updateUserSculpts(old_id, new_id); // isn't there supposed to be an IMG_DEFAULT_SCULPT or something?
 	
 	// default safeguard image for layers
@@ -367,15 +374,15 @@ void LLLocalBitmap::replaceIDs(LLUUID old_id, LLUUID new_id)
 
 // this function sorts the faces from a getFaceList[getNumFaces] into a list of objects
 // in order to prevent multiple sendTEUpdate calls per object during updateUserPrims
-std::vector<LLViewerObject*> LLLocalBitmap::prepUpdateObjects(LLUUID old_id)
+std::vector<LLViewerObject*> LLLocalBitmap::prepUpdateObjects(LLUUID old_id, U32 channel)
 {
 	std::vector<LLViewerObject*> obj_list;
 	LLViewerFetchedTexture* old_texture = gTextureList.findImage(old_id);
-
-	for(U32 face_iterator = 0; face_iterator < old_texture->getNumFaces(); face_iterator++)
+	
+	for(U32 face_iterator = 0; face_iterator < old_texture->getNumFaces(channel); face_iterator++)
 	{
 		// getting an object from a face
-		LLFace* face_to_object = (*old_texture->getFaceList())[face_iterator];
+		LLFace* face_to_object = (*old_texture->getFaceList(channel))[face_iterator];
 
 		if(face_to_object)
 		{
@@ -416,9 +423,9 @@ std::vector<LLViewerObject*> LLLocalBitmap::prepUpdateObjects(LLUUID old_id)
 	return obj_list;
 }
 
-void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id)
+void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id, U32 channel)
 {
-	std::vector<LLViewerObject*> objectlist = prepUpdateObjects(old_id);
+	std::vector<LLViewerObject*> objectlist = prepUpdateObjects(old_id, channel);
 
 	for(std::vector<LLViewerObject*>::iterator object_iterator = objectlist.begin();
 		object_iterator != objectlist.end(); object_iterator++)
@@ -427,7 +434,8 @@ void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id)
 
 		if(object)
 		{
-			bool update_obj = false;
+			bool update_tex = false;
+			bool update_mat = false;
 			S32 num_faces = object->getNumFaces();
 
 			for (U8 face_iter = 0; face_iter < num_faces; face_iter++)
@@ -435,20 +443,51 @@ void LLLocalBitmap::updateUserPrims(LLUUID old_id, LLUUID new_id)
 				if (object->mDrawable)
 				{
 					LLFace* face = object->mDrawable->getFace(face_iter);
-					if (face && face->getTexture() && face->getTexture()->getID() == old_id)
+					if (face && face->getTexture(channel) && face->getTexture(channel)->getID() == old_id)
 					{
-						object->setTEImage(face_iter, LLViewerTextureManager::getFetchedTexture(
-							new_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE));
+						// these things differ per channel, unless there already is a universal
+						// texture setting function to setTE that takes channel as a param?
+						// p.s.: switch for now, might become if - if an extra test is needed to verify before touching normalmap/specmap
+						switch(channel)
+						{
+							case LLRender::DIFFUSE_MAP:
+							{
+                                object->setTETexture(face_iter, new_id);
+                                update_tex = true;
+								break;
+							}
+
+							case LLRender::NORMAL_MAP:
+							{
+								object->setTENormalMap(face_iter, new_id);
+								update_mat = true;
+								update_tex = true;
+                                break;
+							}
+
+							case LLRender::SPECULAR_MAP:
+							{
+								object->setTESpecularMap(face_iter, new_id);
+                                update_mat = true;
+								update_tex = true;
+                                break;
+							}
+						}
+						// end switch
 
-						update_obj = true;
 					}
 				}
 			}
 			
-			if (update_obj)
+			if (update_tex)
 			{
 				object->sendTEUpdate();
 			}
+
+			if (update_mat)
+			{
+                object->mDrawable->getVOVolume()->faceMappingChanged();
+			}
 		}
 	}
 	
diff --git a/indra/newview/lllocalbitmaps.h b/indra/newview/lllocalbitmaps.h
old mode 100644
new mode 100755
index 580b6dfa7e06ffff4ded45e3247b10a59c9bc8e2..2ee84bf46e72970d7283df83ba6b4096860f839f
--- a/indra/newview/lllocalbitmaps.h
+++ b/indra/newview/lllocalbitmaps.h
@@ -62,8 +62,8 @@ class LLLocalBitmap
 	private: /* self update private section */
 		bool decodeBitmap(LLPointer<LLImageRaw> raw);
 		void replaceIDs(LLUUID old_id, LLUUID new_id);
-		std::vector<LLViewerObject*> prepUpdateObjects(LLUUID old_id);
-		void updateUserPrims(LLUUID old_id, LLUUID new_id);
+		std::vector<LLViewerObject*> prepUpdateObjects(LLUUID old_id, U32 channel);
+		void updateUserPrims(LLUUID old_id, LLUUID new_id, U32 channel);
 		void updateUserSculpts(LLUUID old_id, LLUUID new_id);
 		void updateUserLayers(LLUUID old_id, LLUUID new_id, LLWearableType::EType type);
 		LLAvatarAppearanceDefines::ETextureIndex getTexIndex(LLWearableType::EType type, LLAvatarAppearanceDefines::EBakedTextureIndex baked_texind);
diff --git a/indra/newview/lllocationhistory.cpp b/indra/newview/lllocationhistory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllocationhistory.h b/indra/newview/lllocationhistory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllocationinputctrl.cpp b/indra/newview/lllocationinputctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllocationinputctrl.h b/indra/newview/lllocationinputctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllogchat.cpp b/indra/newview/lllogchat.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lllogchat.h b/indra/newview/lllogchat.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llloginhandler.cpp b/indra/newview/llloginhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llloginhandler.h b/indra/newview/llloginhandler.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lllogininstance.cpp b/indra/newview/lllogininstance.cpp
old mode 100644
new mode 100755
index 419641d23c032495d72d5927ad0ee65556cae70a..f681c127474933238fa6100e10a4484a38c0e178
--- a/indra/newview/lllogininstance.cpp
+++ b/indra/newview/lllogininstance.cpp
@@ -30,7 +30,6 @@
 
 // llcommon
 #include "llevents.h"
-#include "llmd5.h"
 #include "stringize.h"
 
 // llmessage (!)
@@ -40,6 +39,7 @@
 #include "lllogin.h"
 
 // newview
+#include "llhasheduniqueid.h"
 #include "llviewernetwork.h"
 #include "llviewercontrol.h"
 #include "llversioninfo.h"
@@ -202,7 +202,7 @@ MandatoryUpdateMachine::MandatoryUpdateMachine(LLLoginInstance & loginInstance,
 
 void MandatoryUpdateMachine::start(void)
 {
-	llinfos << "starting manditory update machine" << llendl;
+	llinfos << "starting mandatory update machine" << llendl;
 	
 	if(mUpdaterService.isChecking()) {
 		switch(mUpdaterService.getState()) {
@@ -488,6 +488,13 @@ LLLoginInstance::LLLoginInstance() :
 	mDispatcher.add("indeterminate", "", boost::bind(&LLLoginInstance::handleIndeterminate, this, _1));
 }
 
+void LLLoginInstance::setPlatformInfo(const std::string platform,
+									  const std::string platform_version)
+{
+	mPlatform = platform;
+	mPlatformVersion = platform_version;
+}
+
 LLLoginInstance::~LLLoginInstance()
 {
 }
@@ -579,26 +586,22 @@ void LLLoginInstance::constructAuthParams(LLPointer<LLCredential> user_credentia
 	// (re)initialize the request params with creds.
 	LLSD request_params = user_credential->getLoginParams();
 
-	char hashed_unique_id_string[MD5HEX_STR_SIZE];		/* Flawfinder: ignore */
-	LLMD5 hashed_unique_id;
-	unsigned char unique_id[MAC_ADDRESS_BYTES];
-	if(LLUUID::getNodeID(unique_id) == 0) {
-		if(LLMachineID::getUniqueID(unique_id, sizeof(unique_id)) == 0) {
-			llerrs << "Failed to get an id; cannot uniquely identify this machine." << llendl;
-		}
+	unsigned char hashed_unique_id_string[MD5HEX_STR_SIZE];
+	if ( ! llHashedUniqueID(hashed_unique_id_string) )
+	{
+		llwarns << "Not providing a unique id in request params" << llendl;
 	}
-	hashed_unique_id.update(unique_id, MAC_ADDRESS_BYTES);
-	hashed_unique_id.finalize();
-	hashed_unique_id.hex_digest(hashed_unique_id_string);
-	
 	request_params["start"] = construct_start_string();
 	request_params["skipoptional"] = mSkipOptionalUpdate;
 	request_params["agree_to_tos"] = false; // Always false here. Set true in 
 	request_params["read_critical"] = false; // handleTOSResponse
 	request_params["last_exec_event"] = mLastExecEvent;
-	request_params["mac"] = hashed_unique_id_string;
-	request_params["version"] = LLVersionInfo::getChannelAndVersion(); // Includes channel name
+	request_params["last_exec_duration"] = mLastExecDuration;
+	request_params["mac"] = (char*)hashed_unique_id_string;
+	request_params["version"] = LLVersionInfo::getVersion();
 	request_params["channel"] = LLVersionInfo::getChannel();
+	request_params["platform"] = mPlatform;
+	request_params["platform_version"] = mPlatformVersion;
 	request_params["id0"] = mSerialNumber;
 	request_params["host_id"] = gSavedSettings.getString("HostID");
 	request_params["extended_errors"] = true; // request message_id and message_args
@@ -639,6 +642,8 @@ bool LLLoginInstance::handleLoginEvent(const LLSD& event)
 
 void LLLoginInstance::handleLoginFailure(const LLSD& event)
 {
+	
+
 	// Login has failed. 
 	// Figure out why and respond...
 	LLSD response = event["data"];
@@ -651,10 +656,13 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 	// to reconnect or to end the attempt in failure.
 	if(reason_response == "tos")
 	{
+		llinfos << "LLLoginInstance::handleLoginFailure ToS" << llendl;
+
 		LLSD data(LLSD::emptyMap());
 		data["message"] = message_response;
 		data["reply_pump"] = TOS_REPLY_PUMP;
-		gViewerWindow->setShowProgress(FALSE);
+		if (gViewerWindow)
+			gViewerWindow->setShowProgress(FALSE);
 		LLFloaterReg::showInstance("message_tos", data);
 		LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
 			.listen(TOS_LISTENER_NAME,
@@ -663,6 +671,8 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 	}
 	else if(reason_response == "critical")
 	{
+		llinfos << "LLLoginInstance::handleLoginFailure Crit" << llendl;
+
 		LLSD data(LLSD::emptyMap());
 		data["message"] = message_response;
 		data["reply_pump"] = TOS_REPLY_PUMP;
@@ -675,7 +685,9 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 			data["certificate"] = response["certificate"];
 		}
 		
-		gViewerWindow->setShowProgress(FALSE);
+		if (gViewerWindow)
+			gViewerWindow->setShowProgress(FALSE);
+
 		LLFloaterReg::showInstance("message_critical", data);
 		LLEventPumps::instance().obtain(TOS_REPLY_PUMP)
 			.listen(TOS_LISTENER_NAME,
@@ -684,21 +696,28 @@ void LLLoginInstance::handleLoginFailure(const LLSD& event)
 	}
 	else if(reason_response == "update" || gSavedSettings.getBOOL("ForceMandatoryUpdate"))
 	{
+		llinfos << "LLLoginInstance::handleLoginFailure update" << llendl;
+
 		gSavedSettings.setBOOL("ForceMandatoryUpdate", FALSE);
 		updateApp(true, message_response);
 	}
 	else if(reason_response == "optional")
 	{
+		llinfos << "LLLoginInstance::handleLoginFailure optional" << llendl;
+
 		updateApp(false, message_response);
 	}
 	else
 	{	
+		llinfos << "LLLoginInstance::handleLoginFailure attemptComplete" << llendl;
 		attemptComplete();
 	}	
 }
 
 void LLLoginInstance::handleLoginSuccess(const LLSD& event)
 {
+	llinfos << "LLLoginInstance::handleLoginSuccess" << llendl;
+
 	if(gSavedSettings.getBOOL("ForceMandatoryUpdate"))
 	{
 		LLSD response = event["data"];
@@ -720,6 +739,8 @@ void LLLoginInstance::handleLoginSuccess(const LLSD& event)
 void LLLoginInstance::handleDisconnect(const LLSD& event)
 {
     // placeholder
+
+	llinfos << "LLLoginInstance::handleDisconnect placeholder " << llendl;
 }
 
 void LLLoginInstance::handleIndeterminate(const LLSD& event)
@@ -728,10 +749,13 @@ void LLLoginInstance::handleIndeterminate(const LLSD& event)
 	// gave the viewer a new url and params to try.
 	// The login module handles the retry, but it gives us the
 	// server response so that we may show
-	// the user some status.
+	// the user some status.	
+
 	LLSD message = event.get("data").get("message");
 	if(message.isDefined())
 	{
+		llinfos << "LLLoginInstance::handleIndeterminate " << message.asString() << llendl;
+
 		LLSD progress_update;
 		progress_update["desc"] = message;
 		LLEventPumps::getInstance()->obtain("LLProgressView").post(progress_update);
@@ -742,12 +766,16 @@ bool LLLoginInstance::handleTOSResponse(bool accepted, const std::string& key)
 {
 	if(accepted)
 	{	
+		llinfos << "LLLoginInstance::handleTOSResponse: accepted" << llendl;
+
 		// Set the request data to true and retry login.
 		mRequestData["params"][key] = true; 
 		reconnect();
 	}
 	else
 	{
+		llinfos << "LLLoginInstance::handleTOSResponse: attemptComplete" << llendl;
+
 		attemptComplete();
 	}
 
@@ -784,20 +812,20 @@ void LLLoginInstance::updateApp(bool mandatory, const std::string& auth_msg)
 	LLSD payload;
 	payload["mandatory"] = mandatory;
 
-/*
- We're constructing one of the following 9 strings here:
-	 "DownloadWindowsMandatory"
-	 "DownloadWindowsReleaseForDownload"
-	 "DownloadWindows"
-	 "DownloadMacMandatory"
-	 "DownloadMacReleaseForDownload"
-	 "DownloadMac"
-	 "DownloadLinuxMandatory"
-	 "DownloadLinuxReleaseForDownload"
-	 "DownloadLinux"
- 
- I've called them out explicitly in this comment so that they can be grepped for.
- */
+	/*
+	 * We're constructing one of the following 9 strings here:
+	 *   "DownloadWindowsMandatory"
+	 *	 "DownloadWindowsReleaseForDownload"
+	 *	 "DownloadWindows"
+	 *	 "DownloadMacMandatory"
+	 *	 "DownloadMacReleaseForDownload"
+	 *	 "DownloadMac"
+	 *	 "DownloadLinuxMandatory"
+	 *	 "DownloadLinuxReleaseForDownload"
+	 *	 "DownloadLinux"
+ 	 *
+	 * I've called them out explicitly in this comment so that they can be grepped for.
+	 */
 	std::string notification_name = "Download";
 	
 #if LL_WINDOWS
diff --git a/indra/newview/lllogininstance.h b/indra/newview/lllogininstance.h
old mode 100644
new mode 100755
index 8b5343121907415e70fe547eafd05d32571259cd..b0247da7c8313a0a5859090072dd3ea5c4e6c3c8
--- a/indra/newview/lllogininstance.h
+++ b/indra/newview/lllogininstance.h
@@ -66,6 +66,8 @@ class LLLoginInstance : public LLSingleton<LLLoginInstance>
 	void setSkipOptionalUpdate(bool state) { mSkipOptionalUpdate = state; }
 	void setSerialNumber(const std::string& sn) { mSerialNumber = sn; }
 	void setLastExecEvent(int lee) { mLastExecEvent = lee; }
+	void setLastExecDuration(S32 duration) { mLastExecDuration = duration; }
+	void setPlatformInfo(const std::string platform, const std::string platform_version);
 
 	void setNotificationsInterface(LLNotificationsInterface* ni) { mNotifications = ni; }
 
@@ -99,6 +101,9 @@ class LLLoginInstance : public LLSingleton<LLLoginInstance>
 	F64 mTransferRate;
 	std::string mSerialNumber;
 	int mLastExecEvent;
+	S32 mLastExecDuration;
+	std::string mPlatform;
+	std::string mPlatformVersion;
 	UpdaterLauncherCallback mUpdaterLauncher;
 	LLEventDispatcher mDispatcher;
 	LLUpdaterService * mUpdaterService;	
diff --git a/indra/newview/lllookshistorypanel.h b/indra/newview/lllookshistorypanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmachineid.cpp b/indra/newview/llmachineid.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmachineid.h b/indra/newview/llmachineid.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmainlooprepeater.cpp b/indra/newview/llmainlooprepeater.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmainlooprepeater.h b/indra/newview/llmainlooprepeater.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmanip.cpp b/indra/newview/llmanip.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmanip.h b/indra/newview/llmanip.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmaniprotate.cpp b/indra/newview/llmaniprotate.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmaniprotate.h b/indra/newview/llmaniprotate.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmanipscale.cpp b/indra/newview/llmanipscale.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmanipscale.h b/indra/newview/llmanipscale.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmaniptranslate.cpp b/indra/newview/llmaniptranslate.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmaniptranslate.h b/indra/newview/llmaniptranslate.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmarketplacefunctions.cpp b/indra/newview/llmarketplacefunctions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmarketplacefunctions.h b/indra/newview/llmarketplacefunctions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmarketplacenotifications.cpp b/indra/newview/llmarketplacenotifications.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmarketplacenotifications.h b/indra/newview/llmarketplacenotifications.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmaterialmgr.cpp b/indra/newview/llmaterialmgr.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..16871adc4d568fe1522da6227ade681b8003856d
--- /dev/null
+++ b/indra/newview/llmaterialmgr.cpp
@@ -0,0 +1,782 @@
+/**
+ * @file llmaterialmgr.cpp
+ * @brief Material manager
+ *
+ * $LicenseInfo:firstyear=2013&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2013, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#include "llviewerprecompiledheaders.h"
+
+#include "llsdserialize.h"
+#include "llsdutil.h"
+
+#include "llagent.h"
+#include "llcallbacklist.h"
+#include "llmaterialmgr.h"
+#include "llviewerobject.h"
+#include "llviewerobjectlist.h"
+#include "llviewerregion.h"
+#include "llworld.h"
+
+/**
+ * Materials cap parameters
+ */
+
+#define MATERIALS_CAPABILITY_NAME                 "RenderMaterials"
+
+#define MATERIALS_CAP_ZIP_FIELD                   "Zipped"
+
+#define MATERIALS_CAP_FULL_PER_FACE_FIELD         "FullMaterialsPerFace"
+#define MATERIALS_CAP_FACE_FIELD                  "Face"
+#define MATERIALS_CAP_MATERIAL_FIELD              "Material"
+#define MATERIALS_CAP_OBJECT_ID_FIELD             "ID"
+#define MATERIALS_CAP_MATERIAL_ID_FIELD           "MaterialID"
+
+#define MATERIALS_GET_MAX_ENTRIES                 50
+#define MATERIALS_GET_TIMEOUT                     (60.f * 20)
+#define MATERIALS_POST_MAX_ENTRIES                50
+#define MATERIALS_POST_TIMEOUT                    (60.f * 5)
+#define MATERIALS_PUT_THROTTLE_SECS               1.f
+#define MATERIALS_PUT_MAX_ENTRIES                 50
+
+/**
+ * LLMaterialsResponder helper class
+ */
+
+class LLMaterialsResponder : public LLHTTPClient::Responder
+{
+public:
+	typedef boost::function<void (bool, const LLSD&)> CallbackFunction;
+
+	LLMaterialsResponder(const std::string& pMethod, const std::string& pCapabilityURL, CallbackFunction pCallback);
+	virtual ~LLMaterialsResponder();
+
+	virtual void result(const LLSD& pContent);
+	virtual void error(U32 pStatus, const std::string& pReason);
+
+private:
+	std::string      mMethod;
+	std::string      mCapabilityURL;
+	CallbackFunction mCallback;
+};
+
+LLMaterialsResponder::LLMaterialsResponder(const std::string& pMethod, const std::string& pCapabilityURL, CallbackFunction pCallback)
+	: LLHTTPClient::Responder()
+	, mMethod(pMethod)
+	, mCapabilityURL(pCapabilityURL)
+	, mCallback(pCallback)
+{
+}
+
+LLMaterialsResponder::~LLMaterialsResponder()
+{
+}
+
+void LLMaterialsResponder::result(const LLSD& pContent)
+{
+	LL_DEBUGS("Materials") << LL_ENDL;
+	mCallback(true, pContent);
+}
+
+void LLMaterialsResponder::error(U32 pStatus, const std::string& pReason)
+{
+	LL_WARNS("Materials")
+		<< "\n--------------------------------------------------------------------------\n"
+		<< mMethod << " Error[" << pStatus << "] cannot access cap '" << MATERIALS_CAPABILITY_NAME
+		<< "'\n  with url '" << mCapabilityURL	<< "' because " << pReason 
+		<< "\n--------------------------------------------------------------------------"
+		<< LL_ENDL;
+
+	LLSD emptyResult;
+	mCallback(false, emptyResult);
+}
+
+/**
+ * LLMaterialMgr class
+ */
+
+LLMaterialMgr::LLMaterialMgr()
+{
+	mMaterials.insert(std::pair<LLMaterialID, LLMaterialPtr>(LLMaterialID::null, LLMaterialPtr(NULL)));
+	gIdleCallbacks.addFunction(&LLMaterialMgr::onIdle, NULL);
+	LLWorld::instance().setRegionRemovedCallback(boost::bind(&LLMaterialMgr::onRegionRemoved, this, _1));
+}
+
+LLMaterialMgr::~LLMaterialMgr()
+{
+	gIdleCallbacks.deleteFunction(&LLMaterialMgr::onIdle, NULL);
+}
+
+bool LLMaterialMgr::isGetPending(const LLUUID& region_id, const LLMaterialID& material_id) const
+{
+	get_pending_map_t::const_iterator itPending = mGetPending.find(pending_material_t(region_id, material_id));
+	return (mGetPending.end() != itPending) && (LLFrameTimer::getTotalSeconds() < itPending->second + MATERIALS_POST_TIMEOUT);
+}
+
+void LLMaterialMgr::markGetPending(const LLUUID& region_id, const LLMaterialID& material_id)
+{
+	get_pending_map_t::iterator itPending = mGetPending.find(pending_material_t(region_id, material_id));
+	if (mGetPending.end() == itPending)
+	{
+		mGetPending.insert(std::pair<pending_material_t, F64>(pending_material_t(region_id, material_id), LLFrameTimer::getTotalSeconds()));
+	}
+	else
+	{
+		itPending->second = LLFrameTimer::getTotalSeconds();
+	}
+}
+
+const LLMaterialPtr LLMaterialMgr::get(const LLUUID& region_id, const LLMaterialID& material_id)
+{
+	LL_DEBUGS("Materials") << "region " << region_id << " material id " << material_id << LL_ENDL;
+	LLMaterialPtr material;
+	material_map_t::const_iterator itMaterial = mMaterials.find(material_id);
+	if (mMaterials.end() != itMaterial)
+	{
+		material = itMaterial->second;
+		LL_DEBUGS("Materials") << " found material " << LL_ENDL;
+	}
+	else
+	{
+		if (!isGetPending(region_id, material_id))
+		{
+			LL_DEBUGS("Materials") << " material pending " << material_id << LL_ENDL;
+			get_queue_t::iterator itQueue = mGetQueue.find(region_id);
+			if (mGetQueue.end() == itQueue)
+			{
+				LL_DEBUGS("Materials") << "mGetQueue add region " << region_id << " pending " << material_id << LL_ENDL;
+				std::pair<get_queue_t::iterator, bool> ret = mGetQueue.insert(std::pair<LLUUID, material_queue_t>(region_id, material_queue_t()));
+				itQueue = ret.first;
+			}
+			itQueue->second.insert(material_id);
+			markGetPending(region_id, material_id);
+		}
+		LL_DEBUGS("Materials") << " returning empty material " << LL_ENDL;
+		material = LLMaterialPtr();
+	}
+	return material;
+}
+
+boost::signals2::connection LLMaterialMgr::get(const LLUUID& region_id, const LLMaterialID& material_id, LLMaterialMgr::get_callback_t::slot_type cb)
+{
+	boost::signals2::connection connection;
+	
+	material_map_t::const_iterator itMaterial = mMaterials.find(material_id);
+	if (itMaterial != mMaterials.end())
+	{
+		LL_DEBUGS("Materials") << "region " << region_id << " found materialid " << material_id << LL_ENDL;
+		get_callback_t signal;
+		signal.connect(cb);
+		signal(material_id, itMaterial->second);
+		connection = boost::signals2::connection();
+	}
+	else
+	{
+		if (!isGetPending(region_id, material_id))
+		{
+			get_queue_t::iterator itQueue = mGetQueue.find(region_id);
+			if (mGetQueue.end() == itQueue)
+			{
+				LL_DEBUGS("Materials") << "mGetQueue inserting region "<<region_id << LL_ENDL;
+				std::pair<get_queue_t::iterator, bool> ret = mGetQueue.insert(std::pair<LLUUID, material_queue_t>(region_id, material_queue_t()));
+				itQueue = ret.first;
+			}
+			LL_DEBUGS("Materials") << "adding material id " << material_id << LL_ENDL;
+			itQueue->second.insert(material_id);
+			markGetPending(region_id, material_id);
+		}
+
+		get_callback_map_t::iterator itCallback = mGetCallbacks.find(material_id);
+		if (itCallback == mGetCallbacks.end())
+		{
+			std::pair<get_callback_map_t::iterator, bool> ret = mGetCallbacks.insert(std::pair<LLMaterialID, get_callback_t*>(material_id, new get_callback_t()));
+			itCallback = ret.first;
+		}
+		connection = itCallback->second->connect(cb);;
+	}
+	
+	return connection;
+}
+
+boost::signals2::connection LLMaterialMgr::getTE(const LLUUID& region_id, const LLMaterialID& material_id, U32 te, LLMaterialMgr::get_callback_te_t::slot_type cb)
+{
+	boost::signals2::connection connection;
+
+	material_map_t::const_iterator itMaterial = mMaterials.find(material_id);
+	if (itMaterial != mMaterials.end())
+	{
+		LL_DEBUGS("Materials") << "region " << region_id << " found materialid " << material_id << LL_ENDL;
+		get_callback_te_t signal;
+		signal.connect(cb);
+		signal(material_id, itMaterial->second, te);
+		connection = boost::signals2::connection();
+	}
+	else
+	{
+		if (!isGetPending(region_id, material_id))
+		{
+			get_queue_t::iterator itQueue = mGetQueue.find(region_id);
+			if (mGetQueue.end() == itQueue)
+			{
+				LL_DEBUGS("Materials") << "mGetQueue inserting region "<<region_id << LL_ENDL;
+				std::pair<get_queue_t::iterator, bool> ret = mGetQueue.insert(std::pair<LLUUID, material_queue_t>(region_id, material_queue_t()));
+				itQueue = ret.first;
+			}
+			LL_DEBUGS("Materials") << "adding material id " << material_id << LL_ENDL;
+			itQueue->second.insert(material_id);
+			markGetPending(region_id, material_id);
+		}
+
+		TEMaterialPair te_mat_pair;
+		te_mat_pair.te = te;
+		te_mat_pair.materialID = material_id;
+
+		get_callback_te_map_t::iterator itCallback = mGetTECallbacks.find(te_mat_pair);
+		if (itCallback == mGetTECallbacks.end())
+		{
+			std::pair<get_callback_te_map_t::iterator, bool> ret = mGetTECallbacks.insert(std::pair<TEMaterialPair, get_callback_te_t*>(te_mat_pair, new get_callback_te_t()));
+			itCallback = ret.first;
+		}
+		connection = itCallback->second->connect(cb);
+	}
+
+	return connection;
+}
+
+bool LLMaterialMgr::isGetAllPending(const LLUUID& region_id) const
+{
+	getall_pending_map_t::const_iterator itPending = mGetAllPending.find(region_id);
+	return (mGetAllPending.end() != itPending) && (LLFrameTimer::getTotalSeconds() < itPending->second + MATERIALS_GET_TIMEOUT);
+}
+
+void LLMaterialMgr::getAll(const LLUUID& region_id)
+{
+	if (!isGetAllPending(region_id))
+	{
+		LL_DEBUGS("Materials") << "queuing for region " << region_id << LL_ENDL;
+		mGetAllQueue.insert(region_id);
+	}
+	else
+	{
+		LL_DEBUGS("Materials") << "already pending for region " << region_id << LL_ENDL;
+	}
+}
+
+boost::signals2::connection LLMaterialMgr::getAll(const LLUUID& region_id, LLMaterialMgr::getall_callback_t::slot_type cb)
+{
+	if (!isGetAllPending(region_id))
+	{
+		mGetAllQueue.insert(region_id);
+	}
+
+	getall_callback_map_t::iterator itCallback = mGetAllCallbacks.find(region_id);
+	if (mGetAllCallbacks.end() == itCallback)
+	{
+		std::pair<getall_callback_map_t::iterator, bool> ret = mGetAllCallbacks.insert(std::pair<LLUUID, getall_callback_t*>(region_id, new getall_callback_t()));
+		itCallback = ret.first;
+	}
+	return itCallback->second->connect(cb);;
+}
+
+void LLMaterialMgr::put(const LLUUID& object_id, const U8 te, const LLMaterial& material)
+{
+	put_queue_t::iterator itQueue = mPutQueue.find(object_id);
+	if (mPutQueue.end() == itQueue)
+	{
+		LL_DEBUGS("Materials") << "mPutQueue insert object " << object_id << LL_ENDL;
+		mPutQueue.insert(std::pair<LLUUID, facematerial_map_t>(object_id, facematerial_map_t()));
+		itQueue = mPutQueue.find(object_id);
+	}
+
+	facematerial_map_t::iterator itFace = itQueue->second.find(te);
+	if (itQueue->second.end() == itFace)
+	{
+		itQueue->second.insert(std::pair<U8, LLMaterial>(te, material));
+	}
+	else
+	{
+		itFace->second = material;
+	}
+}
+
+void LLMaterialMgr::remove(const LLUUID& object_id, const U8 te)
+{
+	put(object_id, te, LLMaterial::null);
+}
+
+const LLMaterialPtr LLMaterialMgr::setMaterial(const LLUUID& region_id, const LLMaterialID& material_id, const LLSD& material_data)
+{
+	LL_DEBUGS("Materials") << "region " << region_id << " material id " << material_id << LL_ENDL;
+	material_map_t::const_iterator itMaterial = mMaterials.find(material_id);
+	if (mMaterials.end() == itMaterial)
+	{
+		LL_DEBUGS("Materials") << "new material" << LL_ENDL;
+		LLMaterialPtr newMaterial(new LLMaterial(material_data));
+		std::pair<material_map_t::const_iterator, bool> ret = mMaterials.insert(std::pair<LLMaterialID, LLMaterialPtr>(material_id, newMaterial));
+		itMaterial = ret.first;
+	}
+
+	TEMaterialPair te_mat_pair;
+	te_mat_pair.materialID = material_id;
+
+	U32 i = 0;
+	while (i < LLTEContents::MAX_TES)
+	{
+		te_mat_pair.te = i++;
+		get_callback_te_map_t::iterator itCallbackTE = mGetTECallbacks.find(te_mat_pair);
+		if (itCallbackTE != mGetTECallbacks.end())
+		{
+			(*itCallbackTE->second)(material_id, itMaterial->second, te_mat_pair.te);
+			delete itCallbackTE->second;
+			mGetTECallbacks.erase(itCallbackTE);
+		}
+	}
+
+	get_callback_map_t::iterator itCallback = mGetCallbacks.find(material_id);
+	if (itCallback != mGetCallbacks.end())
+	{
+		(*itCallback->second)(material_id, itMaterial->second);
+
+		delete itCallback->second;
+		mGetCallbacks.erase(itCallback);
+	}
+
+	mGetPending.erase(pending_material_t(region_id, material_id));
+
+	return itMaterial->second;
+}
+
+void LLMaterialMgr::onGetResponse(bool success, const LLSD& content, const LLUUID& region_id)
+{
+	if (!success)
+	{
+		// *TODO: is there any kind of error handling we can do here?
+		LL_WARNS("Materials")<< "failed"<<LL_ENDL;
+		return;
+	}
+
+	llassert(content.isMap());
+	llassert(content.has(MATERIALS_CAP_ZIP_FIELD));
+	llassert(content[MATERIALS_CAP_ZIP_FIELD].isBinary());
+
+	LLSD::Binary content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary();
+	std::string content_string(reinterpret_cast<const char*>(content_binary.data()), content_binary.size());
+	std::istringstream content_stream(content_string);
+
+	LLSD response_data;
+	if (!unzip_llsd(response_data, content_stream, content_binary.size()))
+	{
+		LL_WARNS("Materials") << "Cannot unzip LLSD binary content" << LL_ENDL;
+		return;
+	}
+
+	llassert(response_data.isArray());
+	LL_DEBUGS("Materials") << "response has "<< response_data.size() << " materials" << LL_ENDL;
+	for (LLSD::array_const_iterator itMaterial = response_data.beginArray(); itMaterial != response_data.endArray(); ++itMaterial)
+	{
+		const LLSD& material_data = *itMaterial;
+		llassert(material_data.isMap());
+
+		llassert(material_data.has(MATERIALS_CAP_OBJECT_ID_FIELD));
+		llassert(material_data[MATERIALS_CAP_OBJECT_ID_FIELD].isBinary());
+		LLMaterialID material_id(material_data[MATERIALS_CAP_OBJECT_ID_FIELD].asBinary());
+
+		llassert(material_data.has(MATERIALS_CAP_MATERIAL_FIELD));
+		llassert(material_data[MATERIALS_CAP_MATERIAL_FIELD].isMap());
+			
+		setMaterial(region_id, material_id, material_data[MATERIALS_CAP_MATERIAL_FIELD]);
+	}
+}
+
+void LLMaterialMgr::onGetAllResponse(bool success, const LLSD& content, const LLUUID& region_id)
+{
+	if (!success)
+	{
+		// *TODO: is there any kind of error handling we can do here?
+		LL_WARNS("Materials")<< "failed"<<LL_ENDL;
+		return;
+	}
+
+	llassert(content.isMap());
+	llassert(content.has(MATERIALS_CAP_ZIP_FIELD));
+	llassert(content[MATERIALS_CAP_ZIP_FIELD].isBinary());
+
+	LLSD::Binary content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary();
+	std::string content_string(reinterpret_cast<const char*>(content_binary.data()), content_binary.size());
+	std::istringstream content_stream(content_string);
+
+	LLSD response_data;
+	if (!unzip_llsd(response_data, content_stream, content_binary.size()))
+	{
+		LL_WARNS("Materials") << "Cannot unzip LLSD binary content" << LL_ENDL;
+		return;
+	}
+
+	get_queue_t::iterator itQueue = mGetQueue.find(region_id);
+	material_map_t materials;
+
+	llassert(response_data.isArray());
+	LL_DEBUGS("Materials") << "response has "<< response_data.size() << " materials" << LL_ENDL;
+	for (LLSD::array_const_iterator itMaterial = response_data.beginArray(); itMaterial != response_data.endArray(); ++itMaterial)
+	{
+		const LLSD& material_data = *itMaterial;
+		llassert(material_data.isMap());
+
+		llassert(material_data.has(MATERIALS_CAP_OBJECT_ID_FIELD));
+		llassert(material_data[MATERIALS_CAP_OBJECT_ID_FIELD].isBinary());
+		LLMaterialID material_id(material_data[MATERIALS_CAP_OBJECT_ID_FIELD].asBinary());
+		if (mGetQueue.end() != itQueue)
+		{
+			itQueue->second.erase(material_id);
+		}
+
+		llassert(material_data.has(MATERIALS_CAP_MATERIAL_FIELD));
+		llassert(material_data[MATERIALS_CAP_MATERIAL_FIELD].isMap());
+		LLMaterialPtr material = setMaterial(region_id, material_id, material_data[MATERIALS_CAP_MATERIAL_FIELD]);
+		
+		materials[material_id] = material;
+	}
+
+	getall_callback_map_t::iterator itCallback = mGetAllCallbacks.find(region_id);
+	if (itCallback != mGetAllCallbacks.end())
+	{
+		(*itCallback->second)(region_id, materials);
+
+		delete itCallback->second;
+		mGetAllCallbacks.erase(itCallback);
+	}
+
+	if ( (mGetQueue.end() != itQueue) && (itQueue->second.empty()) )
+	{
+		mGetQueue.erase(itQueue);
+	}
+
+	LL_DEBUGS("Materials")<< "recording that getAll has been done for region id " << region_id << LL_ENDL;	
+	mGetAllRequested.insert(region_id); // prevents subsequent getAll requests for this region
+	mGetAllPending.erase(region_id);	// Invalidates region_id
+}
+
+void LLMaterialMgr::onPutResponse(bool success, const LLSD& content)
+{
+	if (!success)
+	{
+		// *TODO: is there any kind of error handling we can do here?
+		LL_WARNS("Materials")<< "failed"<<LL_ENDL;
+		return;
+	}
+
+	llassert(content.isMap());
+	llassert(content.has(MATERIALS_CAP_ZIP_FIELD));
+	llassert(content[MATERIALS_CAP_ZIP_FIELD].isBinary());
+
+	LLSD::Binary content_binary = content[MATERIALS_CAP_ZIP_FIELD].asBinary();
+	std::string content_string(reinterpret_cast<const char*>(content_binary.data()), content_binary.size());
+	std::istringstream content_stream(content_string);
+
+	LLSD response_data;
+	if (!unzip_llsd(response_data, content_stream, content_binary.size()))
+	{
+		LL_WARNS("Materials") << "Cannot unzip LLSD binary content" << LL_ENDL;
+		return;
+	}
+	else
+	{
+		llassert(response_data.isArray());
+		LL_DEBUGS("Materials") << "response has "<< response_data.size() << " materials" << LL_ENDL;
+		for (LLSD::array_const_iterator faceIter = response_data.beginArray(); faceIter != response_data.endArray(); ++faceIter)
+		{
+#           ifndef LL_RELEASE_FOR_DOWNLOAD
+			const LLSD& face_data = *faceIter; // conditional to avoid unused variable warning
+#           endif
+			llassert(face_data.isMap());
+
+			llassert(face_data.has(MATERIALS_CAP_OBJECT_ID_FIELD));
+			llassert(face_data[MATERIALS_CAP_OBJECT_ID_FIELD].isInteger());
+			// U32 local_id = face_data[MATERIALS_CAP_OBJECT_ID_FIELD].asInteger();
+
+			llassert(face_data.has(MATERIALS_CAP_FACE_FIELD));
+			llassert(face_data[MATERIALS_CAP_FACE_FIELD].isInteger());
+			// S32 te = face_data[MATERIALS_CAP_FACE_FIELD].asInteger();
+
+			llassert(face_data.has(MATERIALS_CAP_MATERIAL_ID_FIELD));
+			llassert(face_data[MATERIALS_CAP_MATERIAL_ID_FIELD].isBinary());
+			// LLMaterialID material_id(face_data[MATERIALS_CAP_MATERIAL_ID_FIELD].asBinary());
+
+			// *TODO: do we really still need to process this?
+		}
+	}
+}
+
+static LLFastTimer::DeclareTimer FTM_MATERIALS_IDLE("Materials");
+
+void LLMaterialMgr::onIdle(void*)
+{
+	LLFastTimer t(FTM_MATERIALS_IDLE);
+
+	LLMaterialMgr* instancep = LLMaterialMgr::getInstance();
+
+	if (!instancep->mGetQueue.empty())
+	{
+		instancep->processGetQueue();
+	}
+
+	if (!instancep->mGetAllQueue.empty())
+	{
+		instancep->processGetAllQueue();
+	}
+
+	static LLFrameTimer mPutTimer;
+	if ( (!instancep->mPutQueue.empty()) && (mPutTimer.hasExpired()) )
+	{
+		instancep->processPutQueue();
+		mPutTimer.resetWithExpiry(MATERIALS_PUT_THROTTLE_SECS);
+	}
+}
+
+void LLMaterialMgr::processGetQueue()
+{
+	get_queue_t::iterator loopRegionQueue = mGetQueue.begin();
+	while (mGetQueue.end() != loopRegionQueue)
+	{
+		get_queue_t::iterator itRegionQueue = loopRegionQueue++;
+
+		const LLUUID& region_id = itRegionQueue->first;
+		if (isGetAllPending(region_id))
+		{
+			continue;
+		}
+
+		const LLViewerRegion* regionp = LLWorld::instance().getRegionFromID(region_id);
+		if (!regionp)
+		{
+			LL_WARNS("Materials") << "Unknown region with id " << region_id.asString() << LL_ENDL;
+			mGetQueue.erase(itRegionQueue);
+			continue;
+		}
+		else if (!regionp->capabilitiesReceived())
+		{
+			continue;
+		}
+		else if (mGetAllRequested.end() == mGetAllRequested.find(region_id))
+		{
+			LL_DEBUGS("Materials") << "calling getAll for " << regionp->getName() << LL_ENDL;
+			getAll(region_id);
+			continue;
+		}
+
+		const std::string capURL = regionp->getCapability(MATERIALS_CAPABILITY_NAME);
+		if (capURL.empty())
+		{
+			LL_WARNS("Materials") << "Capability '" << MATERIALS_CAPABILITY_NAME
+				<< "' is not defined on region '" << regionp->getName() << "'" << LL_ENDL;
+			mGetQueue.erase(itRegionQueue);
+			continue;
+		}
+
+		LLSD materialsData = LLSD::emptyArray();
+
+		material_queue_t& materials = itRegionQueue->second;
+		material_queue_t::iterator loopMaterial = materials.begin();
+		while ( (materials.end() != loopMaterial) && (materialsData.size() <= MATERIALS_GET_MAX_ENTRIES) )
+		{
+			material_queue_t::iterator itMaterial = loopMaterial++;
+			materialsData.append((*itMaterial).asLLSD());
+			materials.erase(itMaterial);
+			markGetPending(region_id, *itMaterial);
+		}
+		if (materials.empty())
+		{
+			mGetQueue.erase(itRegionQueue);
+		}
+		
+		std::string materialString = zip_llsd(materialsData);
+
+		S32 materialSize = materialString.size();
+		if (materialSize <= 0)
+		{
+			LL_ERRS("Materials") << "cannot zip LLSD binary content" << LL_ENDL;
+			return;
+		}
+
+		LLSD::Binary materialBinary;
+		materialBinary.resize(materialSize);
+		memcpy(materialBinary.data(), materialString.data(), materialSize);
+
+		LLSD postData = LLSD::emptyMap();
+		postData[MATERIALS_CAP_ZIP_FIELD] = materialBinary;
+
+		LLHTTPClient::ResponderPtr materialsResponder = new LLMaterialsResponder("POST", capURL, boost::bind(&LLMaterialMgr::onGetResponse, this, _1, _2, region_id));
+		LL_DEBUGS("Materials") << "POSTing to region '" << regionp->getName() << "' at '"<< capURL << " for " << materialsData.size() << " materials." 
+			<< "\ndata: " << ll_pretty_print_sd(materialsData) << LL_ENDL;
+		LLHTTPClient::post(capURL, postData, materialsResponder);
+	}
+}
+
+void LLMaterialMgr::processGetAllQueue()
+{
+	getall_queue_t::iterator loopRegion = mGetAllQueue.begin();
+	while (mGetAllQueue.end() != loopRegion)
+	{
+		getall_queue_t::iterator itRegion = loopRegion++;
+
+		const LLUUID& region_id = *itRegion;
+		LLViewerRegion* regionp = LLWorld::instance().getRegionFromID(region_id);
+		if (regionp == NULL)
+		{
+			LL_WARNS("Materials") << "Unknown region with id " << region_id.asString() << LL_ENDL;
+			clearGetQueues(region_id);		// Invalidates region_id
+			continue;
+		}
+		else if (!regionp->capabilitiesReceived())
+		{
+			continue;
+		}
+
+		std::string capURL = regionp->getCapability(MATERIALS_CAPABILITY_NAME);
+		if (capURL.empty())
+		{
+			LL_WARNS("Materials") << "Capability '" << MATERIALS_CAPABILITY_NAME
+				<< "' is not defined on the current region '" << regionp->getName() << "'" << LL_ENDL;
+			clearGetQueues(region_id);		// Invalidates region_id
+			continue;
+		}
+
+		LL_DEBUGS("Materials") << "GET all for region " << region_id << "url " << capURL << LL_ENDL;
+		LLHTTPClient::ResponderPtr materialsResponder = new LLMaterialsResponder("GET", capURL, boost::bind(&LLMaterialMgr::onGetAllResponse, this, _1, _2, *itRegion));
+		LLHTTPClient::get(capURL, materialsResponder);
+		mGetAllPending.insert(std::pair<LLUUID, F64>(region_id, LLFrameTimer::getTotalSeconds()));
+		mGetAllQueue.erase(itRegion);	// Invalidates region_id
+	}
+}
+
+void LLMaterialMgr::processPutQueue()
+{
+	typedef std::map<const LLViewerRegion*, LLSD> regionput_request_map;
+	regionput_request_map requests;
+
+	put_queue_t::iterator loopQueue = mPutQueue.begin();
+	while (mPutQueue.end() != loopQueue)
+	{
+		put_queue_t::iterator itQueue = loopQueue++;
+
+		const LLUUID& object_id = itQueue->first;
+		const LLViewerObject* objectp = gObjectList.findObject(object_id);
+		if ( (!objectp) || (!objectp->getRegion()) )
+		{
+			LL_WARNS("Materials") << "Object or object region is NULL" << LL_ENDL;
+
+			mPutQueue.erase(itQueue);
+			continue;
+		}
+
+		const LLViewerRegion* regionp = objectp->getRegion();
+		if (!regionp->capabilitiesReceived())
+		{
+			continue;
+		}
+
+		LLSD& facesData = requests[regionp];
+
+		facematerial_map_t& face_map = itQueue->second;
+		facematerial_map_t::iterator itFace = face_map.begin();
+		while ( (face_map.end() != itFace) && (facesData.size() < MATERIALS_GET_MAX_ENTRIES) )
+		{
+			LLSD faceData = LLSD::emptyMap();
+			faceData[MATERIALS_CAP_FACE_FIELD] = static_cast<LLSD::Integer>(itFace->first);
+			faceData[MATERIALS_CAP_OBJECT_ID_FIELD] = static_cast<LLSD::Integer>(objectp->getLocalID());
+			if (!itFace->second.isNull())
+			{
+				faceData[MATERIALS_CAP_MATERIAL_FIELD] = itFace->second.asLLSD();
+			}
+			facesData.append(faceData);
+			face_map.erase(itFace++);
+		}
+		if (face_map.empty())
+		{
+			mPutQueue.erase(itQueue);
+		}
+	}
+
+	for (regionput_request_map::const_iterator itRequest = requests.begin(); itRequest != requests.end(); ++itRequest)
+	{
+		std::string capURL = itRequest->first->getCapability(MATERIALS_CAPABILITY_NAME);
+		if (capURL.empty())
+		{
+			LL_WARNS("Materials") << "Capability '" << MATERIALS_CAPABILITY_NAME
+				<< "' is not defined on region '" << itRequest->first->getName() << "'" << LL_ENDL;
+			continue;
+		}
+
+		LLSD materialsData = LLSD::emptyMap();
+		materialsData[MATERIALS_CAP_FULL_PER_FACE_FIELD] = itRequest->second;
+
+		std::string materialString = zip_llsd(materialsData);
+
+		S32 materialSize = materialString.size();
+
+		if (materialSize > 0)
+		{
+			LLSD::Binary materialBinary;
+			materialBinary.resize(materialSize);
+			memcpy(materialBinary.data(), materialString.data(), materialSize);
+
+			LLSD putData = LLSD::emptyMap();
+			putData[MATERIALS_CAP_ZIP_FIELD] = materialBinary;
+
+			LL_DEBUGS("Materials") << "put for " << itRequest->second.size() << " faces to region " << itRequest->first->getName() << LL_ENDL;
+			LLHTTPClient::ResponderPtr materialsResponder = new LLMaterialsResponder("PUT", capURL, boost::bind(&LLMaterialMgr::onPutResponse, this, _1, _2));
+			LLHTTPClient::put(capURL, putData, materialsResponder);
+		}
+		else
+		{
+			LL_ERRS("debugMaterials") << "cannot zip LLSD binary content" << LL_ENDL;
+		}
+	}
+}
+
+void LLMaterialMgr::clearGetQueues(const LLUUID& region_id)
+{
+	mGetQueue.erase(region_id);
+	for (get_pending_map_t::iterator itPending = mGetPending.begin(); itPending != mGetPending.end();)
+	{
+		if (region_id == itPending->first.first)
+		{
+			mGetPending.erase(itPending++);
+		}
+		else
+		{
+			++itPending;
+		}
+	}
+
+	mGetAllQueue.erase(region_id);
+	mGetAllRequested.erase(region_id);
+	mGetAllPending.erase(region_id);
+	mGetAllCallbacks.erase(region_id);
+}
+
+void LLMaterialMgr::onRegionRemoved(LLViewerRegion* regionp)
+{
+	clearGetQueues(regionp->getRegionID());
+	// Put doesn't need clearing: objects that can't be found will clean up in processPutQueue()
+}
+
diff --git a/indra/newview/llmaterialmgr.h b/indra/newview/llmaterialmgr.h
new file mode 100644
index 0000000000000000000000000000000000000000..e317a791adfe1b2ae47af55e19b520f7ad04a977
--- /dev/null
+++ b/indra/newview/llmaterialmgr.h
@@ -0,0 +1,130 @@
+/**
+ * @file llmaterialmgr.h
+ * @brief Material manager
+ *
+ * $LicenseInfo:firstyear=2006&license=viewerlgpl$
+ * Second Life Viewer Source Code
+ * Copyright (C) 2010, Linden Research, Inc.
+ * 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License only.
+ * 
+ * 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
+ * Lesser General Public License for more details.
+ * 
+ * You should have received a copy of the GNU Lesser 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
+ * 
+ * Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
+ * $/LicenseInfo$
+ */
+
+#ifndef LL_LLMATERIALMGR_H
+#define LL_LLMATERIALMGR_H
+
+#include "llmaterial.h"
+#include "llmaterialid.h"
+#include "llsingleton.h"
+
+class LLViewerRegion;
+
+class LLMaterialMgr : public LLSingleton<LLMaterialMgr>
+{
+	friend class LLSingleton<LLMaterialMgr>;
+protected:
+	LLMaterialMgr();
+	virtual ~LLMaterialMgr();
+
+public:
+	typedef std::map<LLMaterialID, LLMaterialPtr> material_map_t;
+
+	typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr)> get_callback_t;
+	const LLMaterialPtr         get(const LLUUID& region_id, const LLMaterialID& material_id);
+	boost::signals2::connection get(const LLUUID& region_id, const LLMaterialID& material_id, get_callback_t::slot_type cb);
+
+	typedef boost::signals2::signal<void (const LLMaterialID&, const LLMaterialPtr, U32 te)> get_callback_te_t;
+	boost::signals2::connection getTE(const LLUUID& region_id, const LLMaterialID& material_id, U32 te, get_callback_te_t::slot_type cb);
+
+	typedef boost::signals2::signal<void (const LLUUID&, const material_map_t&)> getall_callback_t;
+	void                        getAll(const LLUUID& region_id);
+	boost::signals2::connection getAll(const LLUUID& region_id, getall_callback_t::slot_type cb);
+	void put(const LLUUID& object_id, const U8 te, const LLMaterial& material);
+	void remove(const LLUUID& object_id, const U8 te);
+
+protected:
+	void clearGetQueues(const LLUUID& region_id);
+	bool isGetPending(const LLUUID& region_id, const LLMaterialID& material_id) const;
+	bool isGetAllPending(const LLUUID& region_id) const;
+	void markGetPending(const LLUUID& region_id, const LLMaterialID& material_id);
+	const LLMaterialPtr setMaterial(const LLUUID& region_id, const LLMaterialID& material_id, const LLSD& material_data);
+
+	static void onIdle(void*);
+	void processGetQueue();
+	void onGetResponse(bool success, const LLSD& content, const LLUUID& region_id);
+	void processGetAllQueue();
+	void onGetAllResponse(bool success, const LLSD& content, const LLUUID& region_id);
+	void processPutQueue();
+	void onPutResponse(bool success, const LLSD& content);
+	void onRegionRemoved(LLViewerRegion* regionp);
+
+protected:
+	typedef std::set<LLMaterialID> material_queue_t;
+	typedef std::map<LLUUID, material_queue_t> get_queue_t;
+	get_queue_t        mGetQueue;
+	typedef std::pair<const LLUUID, LLMaterialID> pending_material_t;
+	typedef std::map<const pending_material_t, F64> get_pending_map_t;
+	get_pending_map_t  mGetPending;
+	typedef std::map<LLMaterialID, get_callback_t*> get_callback_map_t;
+	get_callback_map_t mGetCallbacks;
+
+	// struct for TE-specific material ID query
+	class TEMaterialPair
+	{
+	public:
+
+		U32 te;
+		LLMaterialID materialID;
+
+		bool operator==(const TEMaterialPair& b) const { return (materialID == b.materialID) && (te == b.te); }
+	};
+	
+	friend inline bool operator<(
+		const LLMaterialMgr::TEMaterialPair& lhs,
+		const LLMaterialMgr::TEMaterialPair& rhs)
+	{
+		return (lhs.te	< rhs.te) ? TRUE :
+			(lhs.materialID < rhs.materialID);
+	}
+
+	struct TEMaterialPairHasher
+	{
+		enum { bucket_size = 8 };
+		size_t operator()(const TEMaterialPair& key_value) const { return *((size_t*)key_value.materialID.get());  } // cheesy, but effective
+		bool   operator()(const TEMaterialPair& left, const TEMaterialPair& right) const { return left < right; }
+	};
+
+	typedef boost::unordered_map<TEMaterialPair, get_callback_te_t*, TEMaterialPairHasher> get_callback_te_map_t;
+	get_callback_te_map_t mGetTECallbacks;
+
+	typedef std::set<LLUUID> getall_queue_t;
+	getall_queue_t        mGetAllQueue;
+	getall_queue_t        mGetAllRequested;
+	typedef std::map<LLUUID, F64> getall_pending_map_t;
+	getall_pending_map_t  mGetAllPending;
+	typedef std::map<LLUUID, getall_callback_t*> getall_callback_map_t;
+	getall_callback_map_t mGetAllCallbacks;
+
+	typedef std::map<U8, LLMaterial> facematerial_map_t;
+	typedef std::map<LLUUID, facematerial_map_t> put_queue_t;
+	put_queue_t mPutQueue;
+
+	material_map_t mMaterials;
+};
+
+#endif // LL_LLMATERIALMGR_H
+
diff --git a/indra/newview/llmediactrl.cpp b/indra/newview/llmediactrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmediactrl.h b/indra/newview/llmediactrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmediadataclient.cpp b/indra/newview/llmediadataclient.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmediadataclient.h b/indra/newview/llmediadataclient.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp b/indra/newview/llmenuoptionpathfindingrebakenavmesh.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmenuoptionpathfindingrebakenavmesh.h b/indra/newview/llmenuoptionpathfindingrebakenavmesh.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmeshrepository.cpp b/indra/newview/llmeshrepository.cpp
index 17311dd75e5663efc98bf5f5b5ceaff5acb1eb89..8d3539d297e8d4b6b91d88c3bbcedd27a25de9db 100755
--- a/indra/newview/llmeshrepository.cpp
+++ b/indra/newview/llmeshrepository.cpp
@@ -1,3 +1,4 @@
+
 /** 
  * @file llmeshrepository.cpp
  * @brief Mesh repository implementation.
@@ -1215,8 +1216,8 @@ bool LLMeshRepoThread::headerReceived(const LLVolumeParams& mesh_params, U8* dat
 				mLODReqQ.push(req);
 				LLMeshRepository::sLODProcessing++;
 			}
+			mPendingLOD.erase(iter);
 		}
-		mPendingLOD.erase(iter);
 	}
 
 	return true;
diff --git a/indra/newview/llmeshrepository.h b/indra/newview/llmeshrepository.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmimetypes.cpp b/indra/newview/llmimetypes.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmimetypes.h b/indra/newview/llmimetypes.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmorphview.cpp b/indra/newview/llmorphview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmorphview.h b/indra/newview/llmorphview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmoveview.cpp b/indra/newview/llmoveview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmoveview.h b/indra/newview/llmoveview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llmutelist.cpp b/indra/newview/llmutelist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llmutelist.h b/indra/newview/llmutelist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnamebox.cpp b/indra/newview/llnamebox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnamebox.h b/indra/newview/llnamebox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnameeditor.cpp b/indra/newview/llnameeditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnameeditor.h b/indra/newview/llnameeditor.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnamelistctrl.cpp b/indra/newview/llnamelistctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnamelistctrl.h b/indra/newview/llnamelistctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnavigationbar.cpp b/indra/newview/llnavigationbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnavigationbar.h b/indra/newview/llnavigationbar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnetmap.cpp b/indra/newview/llnetmap.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnetmap.h b/indra/newview/llnetmap.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationalerthandler.cpp b/indra/newview/llnotificationalerthandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationgrouphandler.cpp b/indra/newview/llnotificationgrouphandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationhandler.h b/indra/newview/llnotificationhandler.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationhandlerutil.cpp b/indra/newview/llnotificationhandlerutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationhinthandler.cpp b/indra/newview/llnotificationhinthandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationmanager.cpp b/indra/newview/llnotificationmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationmanager.h b/indra/newview/llnotificationmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationofferhandler.cpp b/indra/newview/llnotificationofferhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationscripthandler.cpp b/indra/newview/llnotificationscripthandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationstorage.cpp b/indra/newview/llnotificationstorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationstorage.h b/indra/newview/llnotificationstorage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llnotificationtiphandler.cpp b/indra/newview/llnotificationtiphandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lloutfitobserver.cpp b/indra/newview/lloutfitobserver.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lloutfitobserver.h b/indra/newview/lloutfitobserver.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lloutfitslist.cpp b/indra/newview/lloutfitslist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lloutfitslist.h b/indra/newview/lloutfitslist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lloutputmonitorctrl.cpp b/indra/newview/lloutputmonitorctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lloutputmonitorctrl.h b/indra/newview/lloutputmonitorctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelappearancetab.cpp b/indra/newview/llpanelappearancetab.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelappearancetab.h b/indra/newview/llpanelappearancetab.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelavatar.cpp b/indra/newview/llpanelavatar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelavatar.h b/indra/newview/llpanelavatar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelavatartag.cpp b/indra/newview/llpanelavatartag.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelavatartag.h b/indra/newview/llpanelavatartag.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelblockedlist.cpp b/indra/newview/llpanelblockedlist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelblockedlist.h b/indra/newview/llpanelblockedlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelclassified.cpp b/indra/newview/llpanelclassified.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelclassified.h b/indra/newview/llpanelclassified.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelcontents.cpp b/indra/newview/llpanelcontents.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelcontents.h b/indra/newview/llpanelcontents.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneleditwearable.cpp b/indra/newview/llpaneleditwearable.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneleditwearable.h b/indra/newview/llpaneleditwearable.h
old mode 100644
new mode 100755
index 6533d55f2fc6e1ea9cc141d0023689fd9e7a92ef..81acc31863d42b356d1ba8f5942ab47e348baf28
--- a/indra/newview/llpaneleditwearable.h
+++ b/indra/newview/llpaneleditwearable.h
@@ -95,7 +95,7 @@ class LLPanelEditWearable : public LLPanel
 	void				toggleTypeSpecificControls(LLWearableType::EType type);
 	void				updateTypeSpecificControls(LLWearableType::EType type);
 
-	// alpha mask checkboxes
+	//alpha mask checkboxes
 	void configureAlphaCheckbox(LLAvatarAppearanceDefines::ETextureIndex te, const std::string& name);
 	void onInvisibilityCommit(LLCheckBoxCtrl* checkbox_ctrl, LLAvatarAppearanceDefines::ETextureIndex te);
 	void updateAlphaCheckboxes();
@@ -155,7 +155,7 @@ class LLPanelEditWearable : public LLPanel
 	LLPanel *mPanelEyes;
 	LLPanel *mPanelHair;
 
-	// clothes
+	//clothes
 	LLPanel *mPanelShirt;
 	LLPanel *mPanelPants;
 	LLPanel *mPanelShoes;
diff --git a/indra/newview/llpanelface.cpp b/indra/newview/llpanelface.cpp
old mode 100644
new mode 100755
index 445c0d811f202a76c7e701eb46e8440d84b6557d..911af9df049d4120e7a5ea74359bb0867fb9d189
--- a/indra/newview/llpanelface.cpp
+++ b/indra/newview/llpanelface.cpp
@@ -46,6 +46,7 @@
 #include "lldrawpoolbump.h"
 #include "llface.h"
 #include "lllineeditor.h"
+#include "llmaterialmgr.h"
 #include "llmediaentry.h"
 #include "llnotificationsutil.h"
 #include "llresmgr.h"
@@ -55,16 +56,60 @@
 #include "lltexturectrl.h"
 #include "lltextureentry.h"
 #include "lltooldraganddrop.h"
+#include "lltrans.h"
 #include "llui.h"
 #include "llviewercontrol.h"
 #include "llviewermedia.h"
 #include "llviewerobject.h"
+#include "llviewerregion.h"
 #include "llviewerstats.h"
 #include "llvovolume.h"
 #include "lluictrlfactory.h"
 #include "llpluginclassmedia.h"
 #include "llviewertexturelist.h"
 
+//
+// Constant definitions for comboboxes
+// Must match the commbobox definitions in panel_tools_texture.xml
+//
+const S32 MATMEDIA_MATERIAL = 0;	// Material
+const S32 MATMEDIA_MEDIA = 1;		// Media
+const S32 MATTYPE_DIFFUSE = 0;		// Diffuse material texture
+const S32 MATTYPE_NORMAL = 1;		// Normal map
+const S32 MATTYPE_SPECULAR = 2;		// Specular map
+const S32 ALPHAMODE_NONE = 0;		// No alpha mask applied
+const S32 ALPHAMODE_BLEND = 1;		// Alpha blending mode
+const S32 ALPHAMODE_MASK = 2;		// Alpha masking mode
+const S32 BUMPY_TEXTURE = 18;		// use supplied normal map
+const S32 SHINY_TEXTURE = 4;		// use supplied specular map
+
+//
+// "Use texture" label for normal/specular type comboboxes
+// Filled in at initialization from translated strings
+//
+std::string USE_TEXTURE;
+
+// Things the UI provides...
+//
+LLUUID	LLPanelFace::getCurrentNormalMap()			{ return getChild<LLTextureCtrl>("bumpytexture control")->getImageAssetID();	}
+LLUUID	LLPanelFace::getCurrentSpecularMap()		{ return getChild<LLTextureCtrl>("shinytexture control")->getImageAssetID();	}
+U32		LLPanelFace::getCurrentShininess()			{ return getChild<LLComboBox>("combobox shininess")->getCurrentIndex();			}
+U32		LLPanelFace::getCurrentBumpiness()			{ return getChild<LLComboBox>("combobox bumpiness")->getCurrentIndex();			}
+U8			LLPanelFace::getCurrentDiffuseAlphaMode()	{ return (U8)getChild<LLComboBox>("combobox alphamode")->getCurrentIndex();	}
+U8			LLPanelFace::getCurrentAlphaMaskCutoff()	{ return (U8)getChild<LLUICtrl>("maskcutoff")->getValue().asInteger();			}
+U8			LLPanelFace::getCurrentEnvIntensity()		{ return (U8)getChild<LLUICtrl>("environment")->getValue().asInteger();			}
+U8			LLPanelFace::getCurrentGlossiness()			{ return (U8)getChild<LLUICtrl>("glossiness")->getValue().asInteger();			}
+F32		LLPanelFace::getCurrentBumpyRot()			{ return getChild<LLUICtrl>("bumpyRot")->getValue().asReal();						}
+F32		LLPanelFace::getCurrentBumpyScaleU()		{ return getChild<LLUICtrl>("bumpyScaleU")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentBumpyScaleV()		{ return getChild<LLUICtrl>("bumpyScaleV")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentBumpyOffsetU()		{ return getChild<LLUICtrl>("bumpyOffsetU")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentBumpyOffsetV()		{ return getChild<LLUICtrl>("bumpyOffsetV")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentShinyRot()			{ return getChild<LLUICtrl>("shinyRot")->getValue().asReal();						}
+F32		LLPanelFace::getCurrentShinyScaleU()		{ return getChild<LLUICtrl>("shinyScaleU")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentShinyScaleV()		{ return getChild<LLUICtrl>("shinyScaleV")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentShinyOffsetU()		{ return getChild<LLUICtrl>("shinyOffsetU")->getValue().asReal();					}
+F32		LLPanelFace::getCurrentShinyOffsetV()		{ return getChild<LLUICtrl>("shinyOffsetV")->getValue().asReal();					}
+
 //
 // Methods
 //
@@ -73,21 +118,40 @@ BOOL	LLPanelFace::postBuild()
 {
 	childSetCommitCallback("combobox shininess",&LLPanelFace::onCommitShiny,this);
 	childSetCommitCallback("combobox bumpiness",&LLPanelFace::onCommitBump,this);
+	childSetCommitCallback("combobox alphamode",&LLPanelFace::onCommitAlphaMode,this);
 	childSetCommitCallback("TexScaleU",&LLPanelFace::onCommitTextureInfo, this);
-	childSetCommitCallback("checkbox flip s",&LLPanelFace::onCommitTextureInfo, this);
 	childSetCommitCallback("TexScaleV",&LLPanelFace::onCommitTextureInfo, this);
-	childSetCommitCallback("checkbox flip t",&LLPanelFace::onCommitTextureInfo, this);
 	childSetCommitCallback("TexRot",&LLPanelFace::onCommitTextureInfo, this);
-	childSetAction("button apply",&LLPanelFace::onClickApply,this);
+	childSetCommitCallback("rptctrl",&LLPanelFace::onCommitRepeatsPerMeter, this);
 	childSetCommitCallback("checkbox planar align",&LLPanelFace::onCommitPlanarAlign, this);
 	childSetCommitCallback("TexOffsetU",LLPanelFace::onCommitTextureInfo, this);
 	childSetCommitCallback("TexOffsetV",LLPanelFace::onCommitTextureInfo, this);
+
+	childSetCommitCallback("bumpyScaleU",&LLPanelFace::onCommitMaterialBumpyScaleX, this);
+	childSetCommitCallback("bumpyScaleV",&LLPanelFace::onCommitMaterialBumpyScaleY, this);
+	childSetCommitCallback("bumpyRot",&LLPanelFace::onCommitMaterialBumpyRot, this);
+	childSetCommitCallback("bumpyOffsetU",&LLPanelFace::onCommitMaterialBumpyOffsetX, this);
+	childSetCommitCallback("bumpyOffsetV",&LLPanelFace::onCommitMaterialBumpyOffsetY, this);
+	childSetCommitCallback("shinyScaleU",&LLPanelFace::onCommitMaterialShinyScaleX, this);
+	childSetCommitCallback("shinyScaleV",&LLPanelFace::onCommitMaterialShinyScaleY, this);
+	childSetCommitCallback("shinyRot",&LLPanelFace::onCommitMaterialShinyRot, this);
+	childSetCommitCallback("shinyOffsetU",&LLPanelFace::onCommitMaterialShinyOffsetX, this);
+	childSetCommitCallback("shinyOffsetV",&LLPanelFace::onCommitMaterialShinyOffsetY, this);
+	childSetCommitCallback("glossiness",&LLPanelFace::onCommitMaterialGloss, this);
+	childSetCommitCallback("environment",&LLPanelFace::onCommitMaterialEnv, this);
+	childSetCommitCallback("maskcutoff",&LLPanelFace::onCommitMaterialMaskCutoff, this);
+
 	childSetAction("button align",&LLPanelFace::onClickAutoFix,this);
 
 	LLTextureCtrl*	mTextureCtrl;
+	LLTextureCtrl*	mShinyTextureCtrl;
+	LLTextureCtrl*	mBumpyTextureCtrl;
 	LLColorSwatchCtrl*	mColorSwatch;
+	LLColorSwatchCtrl*	mShinyColorSwatch;
 
 	LLComboBox*		mComboTexGen;
+	LLComboBox*		mComboMatMedia;
+	LLComboBox*		mComboMatType;
 
 	LLCheckBoxCtrl	*mCheckFullbright;
 	
@@ -97,6 +161,7 @@ BOOL	LLPanelFace::postBuild()
 	LLSpinCtrl*     mCtrlGlow;
 
 	setMouseOpaque(FALSE);
+
 	mTextureCtrl = getChild<LLTextureCtrl>("texture control");
 	if(mTextureCtrl)
 	{
@@ -106,12 +171,49 @@ BOOL	LLPanelFace::postBuild()
 		mTextureCtrl->setOnSelectCallback( boost::bind(&LLPanelFace::onSelectTexture, this, _2) );
 		mTextureCtrl->setDragCallback(boost::bind(&LLPanelFace::onDragTexture, this, _2));
 		mTextureCtrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onTextureSelectionChanged, this, _1));
+		mTextureCtrl->setOnCloseCallback( boost::bind(&LLPanelFace::onCloseTexturePicker, this, _2) );
+
 		mTextureCtrl->setFollowsTop();
 		mTextureCtrl->setFollowsLeft();
 		mTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
 		mTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
 	}
 
+	mShinyTextureCtrl = getChild<LLTextureCtrl>("shinytexture control");
+	if(mShinyTextureCtrl)
+	{
+		mShinyTextureCtrl->setDefaultImageAssetID(LLUUID( gSavedSettings.getString( "DefaultObjectSpecularTexture" )));
+		mShinyTextureCtrl->setCommitCallback( boost::bind(&LLPanelFace::onCommitSpecularTexture, this, _2) );
+		mShinyTextureCtrl->setOnCancelCallback( boost::bind(&LLPanelFace::onCancelSpecularTexture, this, _2) );
+		mShinyTextureCtrl->setOnSelectCallback( boost::bind(&LLPanelFace::onSelectSpecularTexture, this, _2) );
+		mShinyTextureCtrl->setOnCloseCallback( boost::bind(&LLPanelFace::onCloseTexturePicker, this, _2) );
+		
+		mShinyTextureCtrl->setDragCallback(boost::bind(&LLPanelFace::onDragTexture, this, _2));
+		mShinyTextureCtrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onTextureSelectionChanged, this, _1));
+		mShinyTextureCtrl->setFollowsTop();
+		mShinyTextureCtrl->setFollowsLeft();
+		mShinyTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
+		mShinyTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
+	}
+
+	mBumpyTextureCtrl = getChild<LLTextureCtrl>("bumpytexture control");
+	if(mBumpyTextureCtrl)
+	{
+		mBumpyTextureCtrl->setDefaultImageAssetID(LLUUID( gSavedSettings.getString( "DefaultObjectNormalTexture" )));
+		mBumpyTextureCtrl->setBlankImageAssetID(LLUUID( gSavedSettings.getString( "DefaultBlankNormalTexture" )));
+		mBumpyTextureCtrl->setCommitCallback( boost::bind(&LLPanelFace::onCommitNormalTexture, this, _2) );
+		mBumpyTextureCtrl->setOnCancelCallback( boost::bind(&LLPanelFace::onCancelNormalTexture, this, _2) );
+		mBumpyTextureCtrl->setOnSelectCallback( boost::bind(&LLPanelFace::onSelectNormalTexture, this, _2) );
+		mBumpyTextureCtrl->setOnCloseCallback( boost::bind(&LLPanelFace::onCloseTexturePicker, this, _2) );
+
+		mBumpyTextureCtrl->setDragCallback(boost::bind(&LLPanelFace::onDragTexture, this, _2));
+		mBumpyTextureCtrl->setOnTextureSelectedCallback(boost::bind(&LLPanelFace::onTextureSelectionChanged, this, _1));
+		mBumpyTextureCtrl->setFollowsTop();
+		mBumpyTextureCtrl->setFollowsLeft();
+		mBumpyTextureCtrl->setImmediateFilterPermMask(PERM_NONE);
+		mBumpyTextureCtrl->setDnDFilterPermMask(PERM_COPY | PERM_TRANSFER);
+	}
+
 	mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
 	if(mColorSwatch)
 	{
@@ -123,6 +225,15 @@ BOOL	LLPanelFace::postBuild()
 		mColorSwatch->setCanApplyImmediately(TRUE);
 	}
 
+	mShinyColorSwatch = getChild<LLColorSwatchCtrl>("shinycolorswatch");
+	if(mShinyColorSwatch)
+	{
+		mShinyColorSwatch->setCommitCallback(boost::bind(&LLPanelFace::onCommitShinyColor, this, _2));
+		mShinyColorSwatch->setFollowsTop();
+		mShinyColorSwatch->setFollowsLeft();
+		mShinyColorSwatch->setCanApplyImmediately(TRUE);
+	}
+
 	mLabelColorTransp = getChild<LLTextBox>("color trans");
 	if(mLabelColorTransp)
 	{
@@ -152,6 +263,20 @@ BOOL	LLPanelFace::postBuild()
 		mComboTexGen->setFollows(FOLLOWS_LEFT | FOLLOWS_TOP);	
 	}
 
+	mComboMatMedia = getChild<LLComboBox>("combobox matmedia");
+	if(mComboMatMedia)
+	{
+		mComboMatMedia->setCommitCallback(LLPanelFace::onCommitMaterialsMedia,this);
+		mComboMatMedia->selectNthItem(MATMEDIA_MATERIAL);
+	}
+
+	mComboMatType = getChild<LLComboBox>("combobox mattype");
+	if(mComboMatType)
+	{
+		mComboMatType->setCommitCallback(LLPanelFace::onCommitMaterialType, this);
+		mComboMatType->selectNthItem(MATTYPE_DIFFUSE);
+	}
+
 	mCtrlGlow = getChild<LLSpinCtrl>("glow");
 	if(mCtrlGlow)
 	{
@@ -165,8 +290,10 @@ BOOL	LLPanelFace::postBuild()
 }
 
 LLPanelFace::LLPanelFace()
-:	LLPanel()
+:	LLPanel(),
+	mIsAlpha(false)
 {
+	USE_TEXTURE = LLTrans::getString("use_texture");
 }
 
 
@@ -193,12 +320,32 @@ void LLPanelFace::sendTexture()
 	}
 }
 
-void LLPanelFace::sendBump()
+void LLPanelFace::sendBump(U32 bumpiness)
 {	
-	LLComboBox*	mComboBumpiness = getChild<LLComboBox>("combobox bumpiness");
-	if(!mComboBumpiness)return;
-	U8 bump = (U8) mComboBumpiness->getCurrentIndex() & TEM_BUMP_MASK;
-	LLSelectMgr::getInstance()->selectionSetBumpmap( bump );
+	LLTextureCtrl* bumpytexture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
+	if (bumpiness < BUMPY_TEXTURE)
+	{
+		LL_DEBUGS("Materials") << "clearing bumptexture control" << LL_ENDL;	
+		bumpytexture_ctrl->clear();
+		bumpytexture_ctrl->setImageAssetID(LLUUID());		
+	}
+
+	updateBumpyControls(bumpiness == BUMPY_TEXTURE, true);
+
+	LLUUID current_normal_map = bumpytexture_ctrl->getImageAssetID();
+
+	U8 bump = (U8) bumpiness & TEM_BUMP_MASK;
+
+	// Clear legacy bump to None when using an actual normal map
+	//
+	if (!current_normal_map.isNull())
+		bump = 0;
+
+	// Set the normal map or reset it to null as appropriate
+	//
+	LLSelectedTEMaterial::setNormalID(this, current_normal_map);
+
+	LLSelectMgr::getInstance()->selectionSetBumpmap( bump );	
 }
 
 void LLPanelFace::sendTexGen()
@@ -209,12 +356,28 @@ void LLPanelFace::sendTexGen()
 	LLSelectMgr::getInstance()->selectionSetTexGen( tex_gen );
 }
 
-void LLPanelFace::sendShiny()
+void LLPanelFace::sendShiny(U32 shininess)
 {
-	LLComboBox*	mComboShininess = getChild<LLComboBox>("combobox shininess");
-	if(!mComboShininess)return;
-	U8 shiny = (U8) mComboShininess->getCurrentIndex() & TEM_SHINY_MASK;
+	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
+
+	if (shininess < SHINY_TEXTURE)
+	{		
+		texture_ctrl->clear();
+		texture_ctrl->setImageAssetID(LLUUID());		
+	}
+
+	LLUUID specmap = getCurrentSpecularMap();
+
+	U8 shiny = (U8) shininess & TEM_SHINY_MASK;
+	if (!specmap.isNull())
+		shiny = 0;
+
+	LLSelectedTEMaterial::setSpecularID(this, specmap);
+
 	LLSelectMgr::getInstance()->selectionSetShiny( shiny );
+
+	updateShinyControls(!specmap.isNull(), true);
+	
 }
 
 void LLPanelFace::sendFullbright()
@@ -268,22 +431,16 @@ struct LLPanelFaceSetTEFunctor : public LLSelectedTEFunctor
 		LLSpinCtrl*	ctrlTexOffsetS = mPanel->getChild<LLSpinCtrl>("TexOffsetU");
 		LLSpinCtrl*	ctrlTexOffsetT = mPanel->getChild<LLSpinCtrl>("TexOffsetV");
 		LLSpinCtrl*	ctrlTexRotation = mPanel->getChild<LLSpinCtrl>("TexRot");
-		LLCheckBoxCtrl*	checkFlipScaleS = mPanel->getChild<LLCheckBoxCtrl>("checkbox flip s");
-		LLCheckBoxCtrl*	checkFlipScaleT = mPanel->getChild<LLCheckBoxCtrl>("checkbox flip t");
 		LLComboBox*		comboTexGen = mPanel->getChild<LLComboBox>("combobox texgen");
 		llassert(comboTexGen);
 		llassert(object);
 
 		if (ctrlTexScaleS)
 		{
-			valid = !ctrlTexScaleS->getTentative() || !checkFlipScaleS->getTentative();
+			valid = !ctrlTexScaleS->getTentative(); // || !checkFlipScaleS->getTentative();
 			if (valid)
 			{
 				value = ctrlTexScaleS->get();
-				if( checkFlipScaleS->get() )
-				{
-					value = -value;
-				}
 				if (comboTexGen &&
 				    comboTexGen->getCurrentIndex() == 1)
 				{
@@ -295,14 +452,14 @@ struct LLPanelFaceSetTEFunctor : public LLSelectedTEFunctor
 
 		if (ctrlTexScaleT)
 		{
-			valid = !ctrlTexScaleT->getTentative() || !checkFlipScaleT->getTentative();
+			valid = !ctrlTexScaleT->getTentative(); // || !checkFlipScaleT->getTentative();
 			if (valid)
 			{
 				value = ctrlTexScaleT->get();
-				if( checkFlipScaleT->get() )
-				{
-					value = -value;
-				}
+				//if( checkFlipScaleT->get() )
+				//{
+				//	value = -value;
+				//}
 				if (comboTexGen &&
 				    comboTexGen->getCurrentIndex() == 1)
 				{
@@ -458,16 +615,9 @@ void LLPanelFace::sendTextureInfo()
 {
 	if ((bool)childGetValue("checkbox planar align").asBoolean())
 	{
-		struct f1 : public LLSelectedTEGetFunctor<LLFace *>
-		{
-			LLFace* get(LLViewerObject* object, S32 te)
-			{
-				return (object->mDrawable) ? object->mDrawable->getFace(te): NULL;
-			}
-		} get_last_face_func;
-		LLFace* last_face;
-		LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue(&get_last_face_func, last_face);
-
+		LLFace* last_face = NULL;
+		bool identical_face =false;
+		LLSelectedTE::getFace(last_face, identical_face);		
 		LLPanelFaceSetAlignedTEFunctor setfunc(this, last_face);
 		LLSelectMgr::getInstance()->getSelection()->applyToTEs(&setfunc);
 	}
@@ -483,6 +633,11 @@ void LLPanelFace::sendTextureInfo()
 
 void LLPanelFace::getState()
 {
+	updateUI();
+}
+
+void LLPanelFace::updateUI()
+{ //set state of UI to match state of texture entry(ies)  (calls setEnabled, setValue, etc, but NOT setVisible)
 	LLViewerObject* objectp = LLSelectMgr::getInstance()->getSelection()->getFirstObject();
 
 	if( objectp
@@ -492,409 +647,727 @@ void LLPanelFace::getState()
 		BOOL editable = objectp->permModify() && !objectp->isPermanentEnforced();
 
 		// only turn on auto-adjust button if there is a media renderer and the media is loaded
-		getChildView("textbox autofix")->setEnabled(editable);
 		getChildView("button align")->setEnabled(editable);
+
+		LLComboBox* combobox_matmedia = getChild<LLComboBox>("combobox matmedia");
+		if (combobox_matmedia)
+		{
+			if (combobox_matmedia->getCurrentIndex() < MATMEDIA_MATERIAL)
+			{
+				combobox_matmedia->selectNthItem(MATMEDIA_MATERIAL);
+			}
+		}
+		else
+		{
+			llwarns << "failed getChild for 'combobox matmedia'" << llendl;
+		}
+		getChildView("combobox matmedia")->setEnabled(editable);
+
+		LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
+		if (combobox_mattype)
+		{
+			if (combobox_mattype->getCurrentIndex() < MATTYPE_DIFFUSE)
+			{
+				combobox_mattype->selectNthItem(MATTYPE_DIFFUSE);
+			}
+		}
+		else
+		{
+			LL_WARNS("Materials") << "failed getChild for 'combobox mattype'" << LL_ENDL;
+		}
+		getChildView("combobox mattype")->setEnabled(editable);
+
+		updateVisibility();
+
+		bool identical				= true;	// true because it is anded below
+      bool identical_diffuse	= false;
+      bool identical_norm		= false;
+      bool identical_spec		= false;
+        
+		LLTextureCtrl*	texture_ctrl		= getChild<LLTextureCtrl>("texture control");
+		LLTextureCtrl*	shinytexture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
+		LLTextureCtrl*	bumpytexture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
 		
-		//if ( LLMediaEngine::getInstance()->getMediaRenderer () )
-		//	if ( LLMediaEngine::getInstance()->getMediaRenderer ()->isLoaded () )
-		//	{	
-		//		
-		//		//mLabelTexAutoFix->setEnabled ( editable );
-		//		
-		//		//mBtnAutoFix->setEnabled ( editable );
-		//	}
-		getChildView("button apply")->setEnabled(editable);
-
-		bool identical;
-		LLTextureCtrl*	texture_ctrl = getChild<LLTextureCtrl>("texture control");
+		LLUUID id;
+		LLUUID normmap_id;
+		LLUUID specmap_id;
+
+		// Color swatch
+		{
+			getChildView("color label")->setEnabled(editable);
+		}
+		LLColorSwatchCtrl*	mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
+
+		LLColor4 color					= LLColor4::white;
+		bool		identical_color	= false;
+
+		if(mColorSwatch)
+		{
+			LLSelectedTE::getColor(color, identical_color);
+
+			mColorSwatch->setOriginal(color);
+			mColorSwatch->set(color, TRUE);
+
+			mColorSwatch->setValid(editable);
+			mColorSwatch->setEnabled( editable );
+			mColorSwatch->setCanApplyImmediately( editable );
+		}
+
+		// Color transparency
+		getChildView("color trans")->setEnabled(editable);
+
+		F32 transparency = (1.f - color.mV[VALPHA]) * 100.f;
+		getChild<LLUICtrl>("ColorTrans")->setValue(editable ? transparency : 0);
+		getChildView("ColorTrans")->setEnabled(editable);
+
+		// Specular map
+		LLSelectedTEMaterial::getSpecularID(specmap_id, identical_spec);
 		
-		// Texture
+		U8 shiny = 0;
+		bool identical_shiny = false;
+
+		// Shiny
+		LLSelectedTE::getShiny(shiny, identical_shiny);
+		identical = identical && identical_shiny;
+
+		shiny = specmap_id.isNull() ? shiny : SHINY_TEXTURE;
+
+		LLCtrlSelectionInterface* combobox_shininess = childGetSelectionInterface("combobox shininess");
+		if (combobox_shininess)
 		{
-			LLUUID id;
-			struct f1 : public LLSelectedTEGetFunctor<LLUUID>
+			combobox_shininess->selectNthItem((S32)shiny);
+		}
+
+		getChildView("label shininess")->setEnabled(editable);
+		getChildView("combobox shininess")->setEnabled(editable);
+
+		getChildView("label glossiness")->setEnabled(editable);			
+		getChildView("glossiness")->setEnabled(editable);
+
+		getChildView("label environment")->setEnabled(editable);
+		getChildView("environment")->setEnabled(editable);
+		getChildView("label shinycolor")->setEnabled(editable);
+
+		getChild<LLUICtrl>("combobox shininess")->setTentative(!identical_spec);
+		getChild<LLUICtrl>("glossiness")->setTentative(!identical_spec);
+		getChild<LLUICtrl>("environment")->setTentative(!identical_spec);			
+		getChild<LLUICtrl>("shinycolorswatch")->setTentative(!identical_spec);
+
+		LLColorSwatchCtrl*	mShinyColorSwatch = getChild<LLColorSwatchCtrl>("shinycolorswatch");
+		if(mShinyColorSwatch)
+		{
+			mShinyColorSwatch->setValid(editable);
+			mShinyColorSwatch->setEnabled( editable );
+			mShinyColorSwatch->setCanApplyImmediately( editable );
+		}
+
+		U8 bumpy = 0;
+		// Bumpy
+		{		
+			bool identical_bumpy = false;
+			LLSelectedTE::getBumpmap(bumpy,identical_bumpy);
+
+			LLUUID norm_map_id = getCurrentNormalMap();
+			LLCtrlSelectionInterface* combobox_bumpiness = childGetSelectionInterface("combobox bumpiness");
+
+			bumpy = norm_map_id.isNull() ? bumpy : BUMPY_TEXTURE;
+
+			if (combobox_bumpiness)
 			{
-				LLUUID get(LLViewerObject* object, S32 te_index)
-				{
-					LLUUID id;
-					
-					LLViewerTexture* image = object->getTEImage(te_index);
-					if (image) id = image->getID();
-					
-					if (!id.isNull() && LLViewerMedia::textureHasMedia(id))
-					{
-						LLTextureEntry *te = object->getTE(te_index);
-						if (te)
-						{
-							LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID()) : NULL ;
-							if(!tex)
-							{
-								tex = LLViewerFetchedTexture::sDefaultImagep;
-							}
-							if (tex)
-							{
-								id = tex->getID();
-							}
-						}
-					}
-					return id;
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, id );
+				combobox_bumpiness->selectNthItem((S32)bumpy);
+			}
+			else
+			{
+				llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl;
+			}
+
+			getChildView("combobox bumpiness")->setEnabled(editable);
+			getChild<LLUICtrl>("combobox bumpiness")->setTentative(!identical_bumpy);
+			getChildView("label bumpiness")->setEnabled(editable);
+		}
+
+		// Texture
+		{
+			LLSelectedTE::getTexId(id,identical_diffuse);
+
+			// Normal map
+			LLSelectedTEMaterial::getNormalID(normmap_id, identical_norm);
+
+			mIsAlpha = FALSE;
+			LLGLenum image_format = GL_RGB;
+			bool identical_image_format = false;
+			LLSelectedTE::getImageFormat(image_format, identical_image_format);
+            
+         mIsAlpha = FALSE;
+         switch (image_format)
+         {
+               case GL_RGBA:
+               case GL_ALPHA:
+               {
+                  mIsAlpha = TRUE;
+               }
+               break;
+
+               case GL_RGB: break;
+               default:
+               {
+                  llwarns << "Unexpected tex format in LLPanelFace...resorting to no alpha" << llendl;
+               }
+               break;
+         }
 
 			if(LLViewerMedia::textureHasMedia(id))
 			{
-				getChildView("textbox autofix")->setEnabled(editable);
 				getChildView("button align")->setEnabled(editable);
 			}
 			
-			if (identical)
+			// Diffuse Alpha Mode
+
+			// Init to the default that is appropriate for the alpha content of the asset
+			//
+			U8 alpha_mode = mIsAlpha ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+
+			bool identical_alpha_mode = false;
+
+			// See if that's been overridden by a material setting for same...
+			//
+			LLSelectedTEMaterial::getCurrentDiffuseAlphaMode(alpha_mode, identical_alpha_mode, mIsAlpha);
+
+			LLCtrlSelectionInterface* combobox_alphamode = childGetSelectionInterface("combobox alphamode");
+			if (combobox_alphamode)
+			{
+				//it is invalid to have any alpha mode other than blend if transparency is greater than zero ... 
+				// Want masking? Want emissive? Tough! You get BLEND!
+				alpha_mode = (transparency > 0.f) ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : alpha_mode;
+
+				// ... unless there is no alpha channel in the texture, in which case alpha mode MUST be none
+				alpha_mode = mIsAlpha ? alpha_mode : LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+
+				combobox_alphamode->selectNthItem(alpha_mode);
+			}
+			else
+			{
+				llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl;
+			}
+
+			updateAlphaControls();
+			
+			if(texture_ctrl)
 			{
-				// All selected have the same texture
-				if(texture_ctrl)
+				if (identical_diffuse)
+				{
+					texture_ctrl->setTentative( FALSE );
+					texture_ctrl->setEnabled( editable );
+					texture_ctrl->setImageAssetID( id );
+					getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha && transparency <= 0.f);
+					getChildView("label alphamode")->setEnabled(editable && mIsAlpha);
+					getChildView("maskcutoff")->setEnabled(editable && mIsAlpha);
+					getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha);
+				}
+				else if (id.isNull())
 				{
+					// None selected
 					texture_ctrl->setTentative( FALSE );
+					texture_ctrl->setEnabled( FALSE );
+					texture_ctrl->setImageAssetID( LLUUID::null );
+					getChildView("combobox alphamode")->setEnabled( FALSE );
+					getChildView("label alphamode")->setEnabled( FALSE );
+					getChildView("maskcutoff")->setEnabled( FALSE);
+					getChildView("label maskcutoff")->setEnabled( FALSE );
+				}
+				else
+				{
+					// Tentative: multiple selected with different textures
+					texture_ctrl->setTentative( TRUE );
 					texture_ctrl->setEnabled( editable );
 					texture_ctrl->setImageAssetID( id );
+					getChildView("combobox alphamode")->setEnabled(editable && mIsAlpha && transparency <= 0.f);
+					getChildView("label alphamode")->setEnabled(editable && mIsAlpha);
+					getChildView("maskcutoff")->setEnabled(editable && mIsAlpha);
+					getChildView("label maskcutoff")->setEnabled(editable && mIsAlpha);
 				}
 			}
-			else
-			{
-				if(texture_ctrl)
+            
+         if (shinytexture_ctrl)
+         {
+				if (identical_spec && (shiny == SHINY_TEXTURE))
 				{
-					if( id.isNull() )
-					{
-						// None selected
-						texture_ctrl->setTentative( FALSE );
-						texture_ctrl->setEnabled( FALSE );
-						texture_ctrl->setImageAssetID( LLUUID::null );
-					}
-					else
-					{
-						// Tentative: multiple selected with different textures
-						texture_ctrl->setTentative( TRUE );
-						texture_ctrl->setEnabled( editable );
-						texture_ctrl->setImageAssetID( id );
-					}
+					shinytexture_ctrl->setTentative( FALSE );
+					shinytexture_ctrl->setEnabled( editable );
+					shinytexture_ctrl->setImageAssetID( specmap_id );
+            }
+            else if (specmap_id.isNull())
+				{
+               shinytexture_ctrl->setTentative( FALSE );
+               shinytexture_ctrl->setEnabled( editable );
+					shinytexture_ctrl->setImageAssetID( LLUUID::null );
+            }
+            else
+            {
+					shinytexture_ctrl->setTentative( TRUE );
+					shinytexture_ctrl->setEnabled( editable );
+					shinytexture_ctrl->setImageAssetID( specmap_id );
+				}
+         }
+
+         if (bumpytexture_ctrl)
+         {
+				if (identical_norm && (bumpy == BUMPY_TEXTURE))
+				{
+					bumpytexture_ctrl->setTentative( FALSE );
+					bumpytexture_ctrl->setEnabled( editable );
+					bumpytexture_ctrl->setImageAssetID( normmap_id );
+				}
+				else if (normmap_id.isNull())
+				{
+					bumpytexture_ctrl->setTentative( FALSE );
+					bumpytexture_ctrl->setEnabled( editable );
+					bumpytexture_ctrl->setImageAssetID( LLUUID::null );
+				}
+            else
+            {
+					bumpytexture_ctrl->setTentative( TRUE );
+					bumpytexture_ctrl->setEnabled( editable );
+					bumpytexture_ctrl->setImageAssetID( normmap_id );
 				}
 			}
 		}
-
 		
 		// planar align
 		bool align_planar = false;
 		bool identical_planar_aligned = false;
-		bool is_planar = false;
 		{
 			LLCheckBoxCtrl*	cb_planar_align = getChild<LLCheckBoxCtrl>("checkbox planar align");
 			align_planar = (cb_planar_align && cb_planar_align->get());
-			struct f1 : public LLSelectedTEGetFunctor<bool>
-			{
-				bool get(LLViewerObject* object, S32 face)
-				{
-					return (object->getTE(face)->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR);
-				}
-			} func;
-
-			bool texgens_identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, is_planar );
-			bool enabled = (editable && texgens_identical && is_planar);
+			
+			bool enabled = (editable && isIdenticalPlanarTexgen());
 			childSetValue("checkbox planar align", align_planar && enabled);
 			childSetEnabled("checkbox planar align", enabled);
 
 			if (align_planar && enabled)
 			{
-				struct f2 : public LLSelectedTEGetFunctor<LLFace *>
-				{
-					LLFace* get(LLViewerObject* object, S32 te)
-					{
-						return (object->mDrawable) ? object->mDrawable->getFace(te): NULL;
-					}
-				} get_te_face_func;
-				LLFace* last_face;
-				LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue(&get_te_face_func, last_face);
+				LLFace* last_face = NULL;
+				bool identical_face = false;
+				LLSelectedTE::getFace(last_face, identical_face);
+
 				LLPanelFaceGetIsAlignedTEFunctor get_is_aligend_func(last_face);
 				// this will determine if the texture param controls are tentative:
 				identical_planar_aligned = LLSelectMgr::getInstance()->getSelection()->applyToTEs(&get_is_aligend_func);
 			}
 		}
 		
+		// Needs to be public and before tex scale settings below to properly reflect
+		// behavior when in planar vs default texgen modes in the
+		// NORSPEC-84 et al
+		//
+		LLTextureEntry::e_texgen selected_texgen = LLTextureEntry::TEX_GEN_DEFAULT;
+		bool identical_texgen = true;		
+		bool identical_planar_texgen = false;
+
+		{	
+			LLSelectedTE::getTexGen(selected_texgen, identical_texgen);
+			identical_planar_texgen = (identical_texgen && (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR));
+		}
+
 		// Texture scale
 		{
-			F32 scale_s = 1.f;
-			struct f2 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->mScaleS;
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_s );
+			bool identical_diff_scale_s = false;
+			bool identical_spec_scale_s = false;
+			bool identical_norm_scale_s = false;
+
 			identical = align_planar ? identical_planar_aligned : identical;
-			getChild<LLUICtrl>("TexScaleU")->setValue(editable ? llabs(scale_s) : 0);
-			getChild<LLUICtrl>("TexScaleU")->setTentative(LLSD((BOOL)(!identical)));
+
+			F32 diff_scale_s = 1.f;			
+			F32 spec_scale_s = 1.f;
+			F32 norm_scale_s = 1.f;
+
+			LLSelectedTE::getScaleS(						diff_scale_s, identical_diff_scale_s);			
+			LLSelectedTEMaterial::getSpecularRepeatX( spec_scale_s, identical_spec_scale_s);
+			LLSelectedTEMaterial::getNormalRepeatX(	norm_scale_s, identical_norm_scale_s);
+
+			diff_scale_s = editable ? diff_scale_s : 1.0f;
+			diff_scale_s *= identical_planar_texgen ? 2.0f : 1.0f;
+			
+			norm_scale_s = editable ? norm_scale_s : 1.0f;
+			norm_scale_s *= identical_planar_texgen ? 2.0f : 1.0f;
+
+			spec_scale_s = editable ? spec_scale_s : 1.0f;
+			spec_scale_s *= identical_planar_texgen ? 2.0f : 1.0f;
+
+			getChild<LLUICtrl>("TexScaleU")->setValue(diff_scale_s);
+			getChild<LLUICtrl>("shinyScaleU")->setValue(spec_scale_s);
+			getChild<LLUICtrl>("bumpyScaleU")->setValue(norm_scale_s);
+
 			getChildView("TexScaleU")->setEnabled(editable);
-			getChild<LLUICtrl>("checkbox flip s")->setValue(LLSD((BOOL)(scale_s < 0 ? TRUE : FALSE )));
-			getChild<LLUICtrl>("checkbox flip s")->setTentative(LLSD((BOOL)((!identical) ? TRUE : FALSE )));
-			getChildView("checkbox flip s")->setEnabled(editable);
+			getChildView("shinyScaleU")->setEnabled(editable && specmap_id.notNull());
+			getChildView("bumpyScaleU")->setEnabled(editable && normmap_id.notNull());
+
+			BOOL diff_scale_tentative = !(identical && identical_diff_scale_s);
+			BOOL norm_scale_tentative = !(identical && identical_norm_scale_s);
+			BOOL spec_scale_tentative = !(identical && identical_spec_scale_s);
+
+			getChild<LLUICtrl>("TexScaleU")->setTentative(  LLSD(diff_scale_tentative));			
+			getChild<LLUICtrl>("shinyScaleU")->setTentative(LLSD(spec_scale_tentative));			
+			getChild<LLUICtrl>("bumpyScaleU")->setTentative(LLSD(norm_scale_tentative));
 		}
 
 		{
-			F32 scale_t = 1.f;
-			struct f3 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->mScaleT;
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, scale_t );
-			identical = align_planar ? identical_planar_aligned : identical;
+			bool identical_diff_scale_t = false;
+			bool identical_spec_scale_t = false;
+			bool identical_norm_scale_t = false;
+
+			F32 diff_scale_t = 1.f;			
+			F32 spec_scale_t = 1.f;
+			F32 norm_scale_t = 1.f;
+
+			LLSelectedTE::getScaleT(diff_scale_t, identical_diff_scale_t);
+			LLSelectedTEMaterial::getSpecularRepeatY(spec_scale_t, identical_spec_scale_t);
+			LLSelectedTEMaterial::getNormalRepeatY(norm_scale_t, identical_norm_scale_t);
+
+			diff_scale_t = editable ? diff_scale_t : 1.0f;
+			diff_scale_t *= identical_planar_texgen ? 2.0f : 1.0f;
+
+			norm_scale_t = editable ? norm_scale_t : 1.0f;
+			norm_scale_t *= identical_planar_texgen ? 2.0f : 1.0f;
+
+			spec_scale_t = editable ? spec_scale_t : 1.0f;
+			spec_scale_t *= identical_planar_texgen ? 2.0f : 1.0f;
+
+			BOOL diff_scale_tentative = !identical_diff_scale_t;
+			BOOL norm_scale_tentative = !identical_norm_scale_t;
+			BOOL spec_scale_tentative = !identical_spec_scale_t;
 
-			getChild<LLUICtrl>("TexScaleV")->setValue(llabs(editable ? llabs(scale_t) : 0));
-			getChild<LLUICtrl>("TexScaleV")->setTentative(LLSD((BOOL)(!identical)));
 			getChildView("TexScaleV")->setEnabled(editable);
-			getChild<LLUICtrl>("checkbox flip t")->setValue(LLSD((BOOL)(scale_t< 0 ? TRUE : FALSE )));
-			getChild<LLUICtrl>("checkbox flip t")->setTentative(LLSD((BOOL)((!identical) ? TRUE : FALSE )));
-			getChildView("checkbox flip t")->setEnabled(editable);
+			getChildView("shinyScaleV")->setEnabled(editable && specmap_id.notNull());
+			getChildView("bumpyScaleV")->setEnabled(editable && normmap_id.notNull());
+
+			getChild<LLUICtrl>("TexScaleV")->setValue(diff_scale_t);
+			getChild<LLUICtrl>("shinyScaleV")->setValue(norm_scale_t);
+			getChild<LLUICtrl>("bumpyScaleV")->setValue(spec_scale_t);
+
+			getChild<LLUICtrl>("TexScaleV")->setTentative(LLSD(diff_scale_tentative));
+			getChild<LLUICtrl>("shinyScaleV")->setTentative(LLSD(norm_scale_tentative));
+			getChild<LLUICtrl>("bumpyScaleV")->setTentative(LLSD(spec_scale_tentative));
 		}
 
 		// Texture offset
 		{
-			getChildView("tex offset")->setEnabled(editable);
-			F32 offset_s = 0.f;
-			struct f4 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->mOffsetS;
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_s );
-			identical = align_planar ? identical_planar_aligned : identical;
-			getChild<LLUICtrl>("TexOffsetU")->setValue(editable ? offset_s : 0);
-			getChild<LLUICtrl>("TexOffsetU")->setTentative(!identical);
+			bool identical_diff_offset_s = false;
+			bool identical_norm_offset_s = false;
+			bool identical_spec_offset_s = false;
+
+			F32 diff_offset_s = 0.0f;
+			F32 norm_offset_s = 0.0f;
+			F32 spec_offset_s = 0.0f;
+
+			LLSelectedTE::getOffsetS(diff_offset_s, identical_diff_offset_s);
+			LLSelectedTEMaterial::getNormalOffsetX(norm_offset_s, identical_norm_offset_s);
+			LLSelectedTEMaterial::getSpecularOffsetX(spec_offset_s, identical_spec_offset_s);
+
+			BOOL diff_offset_u_tentative = !(align_planar ? identical_planar_aligned : identical_diff_offset_s);
+			BOOL norm_offset_u_tentative = !(align_planar ? identical_planar_aligned : identical_norm_offset_s);
+			BOOL spec_offset_u_tentative = !(align_planar ? identical_planar_aligned : identical_spec_offset_s);
+
+			getChild<LLUICtrl>("TexOffsetU")->setValue(  editable ? diff_offset_s : 0.0f);
+			getChild<LLUICtrl>("bumpyOffsetU")->setValue(editable ? norm_offset_s : 0.0f);
+			getChild<LLUICtrl>("shinyOffsetU")->setValue(editable ? spec_offset_s : 0.0f);
+
+			getChild<LLUICtrl>("TexOffsetU")->setTentative(LLSD(diff_offset_u_tentative));
+			getChild<LLUICtrl>("shinyOffsetU")->setTentative(LLSD(norm_offset_u_tentative));
+			getChild<LLUICtrl>("bumpyOffsetU")->setTentative(LLSD(spec_offset_u_tentative));
+
 			getChildView("TexOffsetU")->setEnabled(editable);
+			getChildView("shinyOffsetU")->setEnabled(editable && specmap_id.notNull());
+			getChildView("bumpyOffsetU")->setEnabled(editable && normmap_id.notNull());
 		}
 
 		{
-			F32 offset_t = 0.f;
-			struct f5 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->mOffsetT;
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, offset_t );
-			identical = align_planar ? identical_planar_aligned : identical;
-			getChild<LLUICtrl>("TexOffsetV")->setValue(editable ? offset_t : 0);
-			getChild<LLUICtrl>("TexOffsetV")->setTentative(!identical);
+			bool identical_diff_offset_t = false;
+			bool identical_norm_offset_t = false;
+			bool identical_spec_offset_t = false;
+
+			F32 diff_offset_t = 0.0f;
+			F32 norm_offset_t = 0.0f;
+			F32 spec_offset_t = 0.0f;
+
+			LLSelectedTE::getOffsetT(diff_offset_t, identical_diff_offset_t);
+			LLSelectedTEMaterial::getNormalOffsetY(norm_offset_t, identical_norm_offset_t);
+			LLSelectedTEMaterial::getSpecularOffsetY(spec_offset_t, identical_spec_offset_t);
+			
+			BOOL diff_offset_v_tentative = !(align_planar ? identical_planar_aligned : identical_diff_offset_t);
+			BOOL norm_offset_v_tentative = !(align_planar ? identical_planar_aligned : identical_norm_offset_t);
+			BOOL spec_offset_v_tentative = !(align_planar ? identical_planar_aligned : identical_spec_offset_t);
+
+			getChild<LLUICtrl>("TexOffsetV")->setValue(  editable ? diff_offset_t : 0.0f);
+			getChild<LLUICtrl>("bumpyOffsetV")->setValue(editable ? norm_offset_t : 0.0f);
+			getChild<LLUICtrl>("shinyOffsetV")->setValue(editable ? spec_offset_t : 0.0f);
+
+			getChild<LLUICtrl>("TexOffsetV")->setTentative(LLSD(diff_offset_v_tentative));
+			getChild<LLUICtrl>("shinyOffsetV")->setTentative(LLSD(norm_offset_v_tentative));
+			getChild<LLUICtrl>("bumpyOffsetV")->setTentative(LLSD(spec_offset_v_tentative));
+
 			getChildView("TexOffsetV")->setEnabled(editable);
+			getChildView("shinyOffsetV")->setEnabled(editable && specmap_id.notNull());
+			getChildView("bumpyOffsetV")->setEnabled(editable && normmap_id.notNull());
 		}
 
 		// Texture rotation
 		{
-			F32 rotation = 0.f;
-			struct f6 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->mRotation;
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, rotation );
-			identical = align_planar ? identical_planar_aligned : identical;
-			getChild<LLUICtrl>("TexRot")->setValue(editable ? rotation * RAD_TO_DEG : 0);
-			getChild<LLUICtrl>("TexRot")->setTentative(!identical);
-			getChildView("TexRot")->setEnabled(editable);
-		}
+			bool identical_diff_rotation = false;
+			bool identical_norm_rotation = false;
+			bool identical_spec_rotation = false;
 
-		// Color swatch
-		LLColorSwatchCtrl*	mColorSwatch = getChild<LLColorSwatchCtrl>("colorswatch");
-		LLColor4 color = LLColor4::white;
-		if(mColorSwatch)
-		{
-			struct f7 : public LLSelectedTEGetFunctor<LLColor4>
-			{
-				LLColor4 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->getColor();
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, color );
-			
-			mColorSwatch->setOriginal(color);
-			mColorSwatch->set(color, TRUE);
+			F32 diff_rotation = 0.f;
+			F32 norm_rotation = 0.f;
+			F32 spec_rotation = 0.f;
 
-			mColorSwatch->setValid(editable);
-			mColorSwatch->setEnabled( editable );
-			mColorSwatch->setCanApplyImmediately( editable );
-		}
-		// Color transparency
-		{
-			getChildView("color trans")->setEnabled(editable);
-		}
+			LLSelectedTE::getRotation(diff_rotation,identical_diff_rotation);
+			LLSelectedTEMaterial::getSpecularRotation(spec_rotation,identical_spec_rotation);
+			LLSelectedTEMaterial::getNormalRotation(norm_rotation,identical_norm_rotation);
 
-		F32 transparency = (1.f - color.mV[VALPHA]) * 100.f;
-		{
-			getChild<LLUICtrl>("ColorTrans")->setValue(editable ? transparency : 0);
-			getChildView("ColorTrans")->setEnabled(editable);
+			BOOL diff_rot_tentative = !(align_planar ? identical_planar_aligned : identical_diff_rotation);
+			BOOL norm_rot_tentative = !(align_planar ? identical_planar_aligned : identical_norm_rotation);
+			BOOL spec_rot_tentative = !(align_planar ? identical_planar_aligned : identical_spec_rotation);
+
+			F32 diff_rot_deg = diff_rotation * RAD_TO_DEG;
+			F32 norm_rot_deg = norm_rotation * RAD_TO_DEG;
+			F32 spec_rot_deg = spec_rotation * RAD_TO_DEG;
+
+			getChildView("TexRot")->setEnabled(editable);
+			getChildView("shinyRot")->setEnabled(editable && specmap_id.notNull());
+			getChildView("bumpyRot")->setEnabled(editable && normmap_id.notNull());
+
+			getChild<LLUICtrl>("TexRot")->setTentative(diff_rot_tentative);
+			getChild<LLUICtrl>("shinyRot")->setTentative(LLSD(norm_rot_tentative));
+			getChild<LLUICtrl>("bumpyRot")->setTentative(LLSD(spec_rot_tentative));
+
+			getChild<LLUICtrl>("TexRot")->setValue(  editable ? diff_rot_deg : 0.0f);			
+			getChild<LLUICtrl>("shinyRot")->setValue(editable ? spec_rot_deg : 0.0f);
+			getChild<LLUICtrl>("bumpyRot")->setValue(editable ? norm_rot_deg : 0.0f);
 		}
 
 		{
 			F32 glow = 0.f;
-			struct f8 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return object->getTE(face)->getGlow();
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, glow );
-
+			bool identical_glow = false;
+			LLSelectedTE::getGlow(glow,identical_glow);
 			getChild<LLUICtrl>("glow")->setValue(glow);
+			getChild<LLUICtrl>("glow")->setTentative(!identical_glow);
 			getChildView("glow")->setEnabled(editable);
-			getChild<LLUICtrl>("glow")->setTentative(!identical);
-			getChildView("glow label")->setEnabled(editable);
-
+			getChildView("glow label")->setEnabled(editable);			
 		}
 
-		// Bump
-		{
-			F32 shinyf = 0.f;
-			struct f9 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return (F32)(object->getTE(face)->getShiny());
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, shinyf );
-			LLCtrlSelectionInterface* combobox_shininess =
-			      childGetSelectionInterface("combobox shininess");
-			if (combobox_shininess)
+		{			
+			LLCtrlSelectionInterface* combobox_texgen = childGetSelectionInterface("combobox texgen");
+			if (combobox_texgen)
 			{
-				combobox_shininess->selectNthItem((S32)shinyf);
+				// Maps from enum to combobox entry index
+				combobox_texgen->selectNthItem(((S32)selected_texgen) >> 1);
 			}
 			else
 			{
-				llwarns << "failed childGetSelectionInterface for 'combobox shininess'" << llendl;
+				llwarns << "failed childGetSelectionInterface for 'combobox texgen'" << llendl;
 			}
-			getChildView("combobox shininess")->setEnabled(editable);
-			getChild<LLUICtrl>("combobox shininess")->setTentative(!identical);
-			getChildView("label shininess")->setEnabled(editable);
-		}
 
-		{
-			F32 bumpf = 0.f;
-			struct f10 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return (F32)(object->getTE(face)->getBumpmap());
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, bumpf );
-			LLCtrlSelectionInterface* combobox_bumpiness =
-			      childGetSelectionInterface("combobox bumpiness");
-			if (combobox_bumpiness)
-			{
-				combobox_bumpiness->selectNthItem((S32)bumpf);
-			}
-			else
-			{
-				llwarns << "failed childGetSelectionInterface for 'combobox bumpiness'" << llendl;
-			}
-			getChildView("combobox bumpiness")->setEnabled(editable);
-			getChild<LLUICtrl>("combobox bumpiness")->setTentative(!identical);
-			getChildView("label bumpiness")->setEnabled(editable);
-		}
-
-		{
-			F32 genf = 0.f;
-			struct f11 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return (F32)(object->getTE(face)->getTexGen());
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, genf );
-			S32 selected_texgen = ((S32) genf) >> TEM_TEX_GEN_SHIFT;
-			LLCtrlSelectionInterface* combobox_texgen =
-			      childGetSelectionInterface("combobox texgen");
-			if (combobox_texgen)
-			{
-				combobox_texgen->selectNthItem(selected_texgen);
-			}
-			else
-			{
-				llwarns << "failed childGetSelectionInterface for 'combobox texgen'" << llendl;
-			}
 			getChildView("combobox texgen")->setEnabled(editable);
 			getChild<LLUICtrl>("combobox texgen")->setTentative(!identical);
 			getChildView("tex gen")->setEnabled(editable);
 
-			if (selected_texgen == 1)
+			if (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR)
 			{
-				getChild<LLUICtrl>("TexScaleU")->setValue(2.0f * getChild<LLUICtrl>("TexScaleU")->getValue().asReal() );
-				getChild<LLUICtrl>("TexScaleV")->setValue(2.0f * getChild<LLUICtrl>("TexScaleV")->getValue().asReal() );
-
 				// EXP-1507 (change label based on the mapping mode)
 				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per meter"));
 			}
 			else
-			if (selected_texgen == 0)  // FIXME: should not be magic numbers
+			if (selected_texgen == LLTextureEntry::TEX_GEN_DEFAULT)
 			{
 				getChild<LLUICtrl>("rpt")->setValue(getString("string repeats per face"));
 			}
 		}
 
 		{
-			F32 fullbrightf = 0.f;
-			struct f12 : public LLSelectedTEGetFunctor<F32>
-			{
-				F32 get(LLViewerObject* object, S32 face)
-				{
-					return (F32)(object->getTE(face)->getFullbright());
-				}
-			} func;
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, fullbrightf );
+			U8 fullbright_flag = 0;
+			bool identical_fullbright = false;
+			
+			LLSelectedTE::getFullbright(fullbright_flag,identical_fullbright);
 
-			getChild<LLUICtrl>("checkbox fullbright")->setValue((S32)fullbrightf);
+			getChild<LLUICtrl>("checkbox fullbright")->setValue((S32)(fullbright_flag != 0));
 			getChildView("checkbox fullbright")->setEnabled(editable);
-			getChild<LLUICtrl>("checkbox fullbright")->setTentative(!identical);
+			getChild<LLUICtrl>("checkbox fullbright")->setTentative(!identical_fullbright);
 		}
 		
-		// Repeats per meter label
+		// Repeats per meter
 		{
-			getChildView("rpt")->setEnabled(editable);
+			F32 repeats_diff = 1.f;
+			F32 repeats_norm = 1.f;
+			F32 repeats_spec = 1.f;
+
+			bool identical_diff_repeats = false;
+			bool identical_norm_repeats = false;
+			bool identical_spec_repeats = false;
+
+			LLSelectedTE::getMaxDiffuseRepeats(repeats_diff, identical_diff_repeats);
+			LLSelectedTEMaterial::getMaxNormalRepeats(repeats_norm, identical_norm_repeats);
+			LLSelectedTEMaterial::getMaxSpecularRepeats(repeats_spec, identical_spec_repeats);			
+
+			LLComboBox*	mComboTexGen = getChild<LLComboBox>("combobox texgen");
+			if (mComboTexGen)
+			{
+				S32 index = mComboTexGen ? mComboTexGen->getCurrentIndex() : 0;
+				BOOL enabled = editable && (index != 1);
+				BOOL identical_repeats = true;
+				F32  repeats = 1.0f;
+
+				U32 material_type = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? combobox_mattype->getCurrentIndex() : MATTYPE_DIFFUSE;
+				switch (material_type)
+				{
+					default:
+					case MATTYPE_DIFFUSE:
+					{
+						enabled = editable && !id.isNull();
+						identical_repeats = identical_diff_repeats;
+						repeats = repeats_diff;
+					}
+					break;
+
+					case MATTYPE_SPECULAR:
+					{
+						enabled = (editable && ((shiny == SHINY_TEXTURE) && !specmap_id.isNull()));
+						identical_repeats = identical_spec_repeats;
+						repeats = repeats_spec;
+					}
+					break;
+
+					case MATTYPE_NORMAL:
+					{
+						enabled = (editable && ((bumpy == BUMPY_TEXTURE) && !normmap_id.isNull()));
+						identical_repeats = identical_norm_repeats;
+						repeats = repeats_norm;
+					}
+					break;
+				}
+
+				BOOL repeats_tentative = !identical_repeats;
+
+				getChildView("rptctrl")->setEnabled(identical_planar_texgen ? FALSE : enabled);
+				getChild<LLUICtrl>("rptctrl")->setValue(editable ? repeats : 1.0f);
+				getChild<LLUICtrl>("rptctrl")->setTentative(LLSD(repeats_tentative));
+			}
 		}
 
-		// Repeats per meter
+		// Materials
 		{
-			F32 repeats = 1.f;
-			struct f13 : public LLSelectedTEGetFunctor<F32>
+			LLMaterialPtr material;
+			LLSelectedTEMaterial::getCurrent(material, identical);
+
+			if (material && editable)
 			{
-				F32 get(LLViewerObject* object, S32 face)
+				LL_DEBUGS("Materials: OnMatererialsLoaded:") << material->asLLSD() << LL_ENDL;
+
+				// Alpha
+				LLCtrlSelectionInterface* combobox_alphamode =
+					childGetSelectionInterface("combobox alphamode");
+				if (combobox_alphamode)
 				{
-					U32 s_axis = VX;
-					U32 t_axis = VY;
-					// BUG: Only repeats along S axis
-					// BUG: Only works for boxes.
-					LLPrimitive::getTESTAxes(face, &s_axis, &t_axis);
-					return object->getTE(face)->mScaleS / object->getScale().mV[s_axis];
+					U32 alpha_mode = material->getDiffuseAlphaMode();
+
+					if (transparency > 0.f)
+					{ //it is invalid to have any alpha mode other than blend if transparency is greater than zero ... 
+						alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_BLEND;
+					}
+
+					if (!mIsAlpha)
+					{ // ... unless there is no alpha channel in the texture, in which case alpha mode MUST ebe none
+						alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+					}
+
+					combobox_alphamode->selectNthItem(alpha_mode);
 				}
-			} func;			
-			identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, repeats );
-			
-			getChild<LLUICtrl>("rptctrl")->setValue(editable ? repeats : 0);
-			getChild<LLUICtrl>("rptctrl")->setTentative(!identical);
-			LLComboBox*	mComboTexGen = getChild<LLComboBox>("combobox texgen");
-			if (mComboTexGen)
+				else
+				{
+					llwarns << "failed childGetSelectionInterface for 'combobox alphamode'" << llendl;
+				}
+				getChild<LLUICtrl>("maskcutoff")->setValue(material->getAlphaMaskCutoff());
+				updateAlphaControls();
+
+				identical_planar_texgen = isIdenticalPlanarTexgen();
+
+				// Shiny (specular)
+				F32 offset_x, offset_y, repeat_x, repeat_y, rot;
+				LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
+				texture_ctrl->setImageAssetID(material->getSpecularID());
+
+				if (!material->getSpecularID().isNull() && (shiny == SHINY_TEXTURE))
+				{
+					material->getSpecularOffset(offset_x,offset_y);
+					material->getSpecularRepeat(repeat_x,repeat_y);
+
+					if (identical_planar_texgen)
+					{
+						repeat_x *= 2.0f;
+						repeat_y *= 2.0f;
+					}
+
+					rot = material->getSpecularRotation();
+					getChild<LLUICtrl>("shinyScaleU")->setValue(repeat_x);
+					getChild<LLUICtrl>("shinyScaleV")->setValue(repeat_y);
+					getChild<LLUICtrl>("shinyRot")->setValue(rot*RAD_TO_DEG);
+					getChild<LLUICtrl>("shinyOffsetU")->setValue(offset_x);
+					getChild<LLUICtrl>("shinyOffsetV")->setValue(offset_y);
+					getChild<LLUICtrl>("glossiness")->setValue(material->getSpecularLightExponent());
+					getChild<LLUICtrl>("environment")->setValue(material->getEnvironmentIntensity());
+
+					updateShinyControls(!material->getSpecularID().isNull(), true);
+				}
+
+				// Assert desired colorswatch color to match material AFTER updateShinyControls
+				// to avoid getting overwritten with the default on some UI state changes.
+				//
+				if (!material->getSpecularID().isNull())
+				{
+					getChild<LLColorSwatchCtrl>("shinycolorswatch")->setOriginal(material->getSpecularLightColor());
+					getChild<LLColorSwatchCtrl>("shinycolorswatch")->set(material->getSpecularLightColor(),TRUE);
+				}
+
+				// Update sel manager as to which channel we're editing so it can reflect the correct overlay UI
+				// NORSPEC-103
+				LLRender::eTexIndex channel_to_edit = (combobox_matmedia->getCurrentIndex() == MATMEDIA_MATERIAL) ? (LLRender::eTexIndex)combobox_mattype->getCurrentIndex() : LLRender::DIFFUSE_MAP;
+
+				if ( ((channel_to_edit == LLRender::NORMAL_MAP) && material->getNormalID().isNull())
+					||((channel_to_edit == LLRender::SPECULAR_MAP) && material->getSpecularID().isNull()))
+				{
+					channel_to_edit = LLRender::DIFFUSE_MAP;
+				}
+
+				LLSelectMgr::getInstance()->setTextureChannel(channel_to_edit);
+
+				// Bumpy (normal)
+				texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
+				texture_ctrl->setImageAssetID(material->getNormalID());
+
+				if (!material->getNormalID().isNull())
+				{
+					material->getNormalOffset(offset_x,offset_y);
+					material->getNormalRepeat(repeat_x,repeat_y);
+
+					if (identical_planar_texgen)
+					{
+						repeat_x *= 2.0f;
+						repeat_y *= 2.0f;
+					}
+
+					rot = material->getNormalRotation();
+					getChild<LLUICtrl>("bumpyScaleU")->setValue(repeat_x);
+					getChild<LLUICtrl>("bumpyScaleV")->setValue(repeat_y);
+					getChild<LLUICtrl>("bumpyRot")->setValue(rot*RAD_TO_DEG);
+					getChild<LLUICtrl>("bumpyOffsetU")->setValue(offset_x);
+					getChild<LLUICtrl>("bumpyOffsetV")->setValue(offset_y);
+
+					updateBumpyControls(!material->getNormalID().isNull(), true);
+				}
+			}
+			else
 			{
-				BOOL enabled = editable && (!mComboTexGen || mComboTexGen->getCurrentIndex() != 1);
-				getChildView("rptctrl")->setEnabled(enabled);
-				getChildView("button apply")->setEnabled(enabled);
+				LLSelectMgr::getInstance()->setTextureChannel(LLRender::DIFFUSE_MAP);
 			}
 		}
 
@@ -934,14 +1407,11 @@ void LLPanelFace::getState()
 		getChildView("tex gen")->setEnabled(FALSE);
 		getChildView("label shininess")->setEnabled(FALSE);
 		getChildView("label bumpiness")->setEnabled(FALSE);
-
-		getChildView("textbox autofix")->setEnabled(FALSE);
-
 		getChildView("button align")->setEnabled(FALSE);
-		getChildView("button apply")->setEnabled(FALSE);
 		//getChildView("has media")->setEnabled(FALSE);
 		//getChildView("media info set")->setEnabled(FALSE);
-		
+
+		updateVisibility();
 
 		// Set variable values for numeric expressions
 		LLCalc* calcp = LLCalc::getInstance();
@@ -958,6 +1428,7 @@ void LLPanelFace::getState()
 
 void LLPanelFace::refresh()
 {
+	LL_DEBUGS("Materials") << LL_ENDL;
 	getState();
 }
 
@@ -977,6 +1448,11 @@ void LLPanelFace::onCommitColor(const LLSD& data)
 	sendColor();
 }
 
+void LLPanelFace::onCommitShinyColor(const LLSD& data)
+{
+	LLSelectedTEMaterial::setSpecularLightColor(this, getChild<LLColorSwatchCtrl>("shinycolorswatch")->get());
+}
+
 void LLPanelFace::onCommitAlpha(const LLSD& data)
 {
 	sendAlpha();
@@ -993,11 +1469,122 @@ void LLPanelFace::onSelectColor(const LLSD& data)
 	sendColor();
 }
 
+// static
+void LLPanelFace::onCommitMaterialsMedia(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	// Force to default states to side-step problems with menu contents
+	// and generally reflecting old state when switching tabs or objects
+	//
+	self->updateShinyControls(false,true);
+	self->updateBumpyControls(false,true);
+	self->updateUI();
+}
+
+// static
+void LLPanelFace::updateVisibility()
+{	
+	LLComboBox* combo_matmedia = getChild<LLComboBox>("combobox matmedia");
+	LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
+	LLComboBox* combo_shininess = getChild<LLComboBox>("combobox shininess");
+	LLComboBox* combo_bumpiness = getChild<LLComboBox>("combobox bumpiness");
+	if (!combo_mattype || !combo_matmedia || !combo_shininess || !combo_bumpiness)
+	{
+		LL_WARNS("Materials") << "Combo box not found...exiting." << LL_ENDL;
+		return;
+	}
+	U32 materials_media = combo_matmedia->getCurrentIndex();
+	U32 material_type = combo_mattype->getCurrentIndex();
+	bool show_media = (materials_media == MATMEDIA_MEDIA) && combo_matmedia->getEnabled();
+	bool show_texture = (show_media || ((material_type == MATTYPE_DIFFUSE) && combo_matmedia->getEnabled()));
+	bool show_bumpiness = (!show_media) && (material_type == MATTYPE_NORMAL) && combo_matmedia->getEnabled();
+	bool show_shininess = (!show_media) && (material_type == MATTYPE_SPECULAR) && combo_matmedia->getEnabled();
+	getChildView("combobox mattype")->setVisible(!show_media);
+	getChildView("rptctrl")->setVisible(true);
+
+	// Media controls
+	getChildView("media_info")->setVisible(show_media);
+	getChildView("add_media")->setVisible(show_media);
+	getChildView("delete_media")->setVisible(show_media);
+	getChildView("button align")->setVisible(show_media);
+
+	// Diffuse texture controls
+	getChildView("texture control")->setVisible(show_texture && !show_media);
+	getChildView("label alphamode")->setVisible(show_texture && !show_media);
+	getChildView("combobox alphamode")->setVisible(show_texture && !show_media);
+	getChildView("label maskcutoff")->setVisible(false);
+	getChildView("maskcutoff")->setVisible(false);
+	if (show_texture && !show_media)
+	{
+		updateAlphaControls();
+	}
+	getChildView("TexScaleU")->setVisible(show_texture);
+	getChildView("TexScaleV")->setVisible(show_texture);
+	getChildView("TexRot")->setVisible(show_texture);
+	getChildView("TexOffsetU")->setVisible(show_texture);
+	getChildView("TexOffsetV")->setVisible(show_texture);
+
+	// Specular map controls
+	getChildView("shinytexture control")->setVisible(show_shininess);
+	getChildView("combobox shininess")->setVisible(show_shininess);
+	getChildView("label shininess")->setVisible(show_shininess);
+	getChildView("label glossiness")->setVisible(false);
+	getChildView("glossiness")->setVisible(false);
+	getChildView("label environment")->setVisible(false);
+	getChildView("environment")->setVisible(false);
+	getChildView("label shinycolor")->setVisible(false);
+	getChildView("shinycolorswatch")->setVisible(false);
+	if (show_shininess)
+	{
+		updateShinyControls();
+	}
+	getChildView("shinyScaleU")->setVisible(show_shininess);
+	getChildView("shinyScaleV")->setVisible(show_shininess);
+	getChildView("shinyRot")->setVisible(show_shininess);
+	getChildView("shinyOffsetU")->setVisible(show_shininess);
+	getChildView("shinyOffsetV")->setVisible(show_shininess);
+
+	// Normal map controls
+	if (show_bumpiness)
+	{
+		updateBumpyControls();
+	}
+	getChildView("bumpytexture control")->setVisible(show_bumpiness);
+	getChildView("combobox bumpiness")->setVisible(show_bumpiness);
+	getChildView("label bumpiness")->setVisible(show_bumpiness);
+	getChildView("bumpyScaleU")->setVisible(show_bumpiness);
+	getChildView("bumpyScaleV")->setVisible(show_bumpiness);
+	getChildView("bumpyRot")->setVisible(show_bumpiness);
+	getChildView("bumpyOffsetU")->setVisible(show_bumpiness);
+	getChildView("bumpyOffsetV")->setVisible(show_bumpiness);
+
+
+}
+
+// static
+void LLPanelFace::onCommitMaterialType(LLUICtrl* ctrl, void* userdata)
+{
+    LLPanelFace* self = (LLPanelFace*) userdata;
+	 // Force to default states to side-step problems with menu contents
+	 // and generally reflecting old state when switching tabs or objects
+	 //
+	 self->updateShinyControls(false,true);
+	 self->updateBumpyControls(false,true);
+    self->updateUI();
+}
+
 // static
 void LLPanelFace::onCommitBump(LLUICtrl* ctrl, void* userdata)
 {
 	LLPanelFace* self = (LLPanelFace*) userdata;
-	self->sendBump();
+
+	LLComboBox*	mComboBumpiness = self->getChild<LLComboBox>("combobox bumpiness");
+	if(!mComboBumpiness)
+		return;
+
+	U32 bumpiness = mComboBumpiness->getCurrentIndex();
+
+	self->sendBump(bumpiness);
 }
 
 // static
@@ -1007,11 +1594,144 @@ void LLPanelFace::onCommitTexGen(LLUICtrl* ctrl, void* userdata)
 	self->sendTexGen();
 }
 
+// static
+void LLPanelFace::updateShinyControls(bool is_setting_texture, bool mess_with_shiny_combobox)
+{
+	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("shinytexture control");
+	LLUUID shiny_texture_ID = texture_ctrl->getImageAssetID();
+	LL_DEBUGS("Materials") << "Shiny texture selected: " << shiny_texture_ID << LL_ENDL;
+	LLComboBox* comboShiny = getChild<LLComboBox>("combobox shininess");
+
+	if(mess_with_shiny_combobox)
+	{
+		if (!comboShiny)
+		{
+			return;
+		}
+		if (!shiny_texture_ID.isNull() && is_setting_texture)
+		{
+			if (!comboShiny->itemExists(USE_TEXTURE))
+			{
+				comboShiny->add(USE_TEXTURE);
+			}
+			comboShiny->setSimple(USE_TEXTURE);
+		}
+		else
+		{
+			if (comboShiny->itemExists(USE_TEXTURE))
+			{
+				comboShiny->remove(SHINY_TEXTURE);
+				comboShiny->selectFirstItem();
+			}
+		}
+	}
+
+	LLComboBox* combo_matmedia = getChild<LLComboBox>("combobox matmedia");
+	LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
+	U32 materials_media = combo_matmedia->getCurrentIndex();
+	U32 material_type = combo_mattype->getCurrentIndex();
+	bool show_media = (materials_media == MATMEDIA_MEDIA) && combo_matmedia->getEnabled();
+	bool show_shininess = (!show_media) && (material_type == MATTYPE_SPECULAR) && combo_matmedia->getEnabled();
+	U32 shiny_value = comboShiny->getCurrentIndex();
+	bool show_shinyctrls = (shiny_value == SHINY_TEXTURE) && show_shininess; // Use texture
+	getChildView("label glossiness")->setVisible(show_shinyctrls);
+	getChildView("glossiness")->setVisible(show_shinyctrls);
+	getChildView("label environment")->setVisible(show_shinyctrls);
+	getChildView("environment")->setVisible(show_shinyctrls);
+	getChildView("label shinycolor")->setVisible(show_shinyctrls);
+	getChildView("shinycolorswatch")->setVisible(show_shinyctrls);
+}
+
+// static
+void LLPanelFace::updateBumpyControls(bool is_setting_texture, bool mess_with_combobox)
+{
+	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
+	LLUUID bumpy_texture_ID = texture_ctrl->getImageAssetID();
+	LL_DEBUGS("Materials") << "texture: " << bumpy_texture_ID << (mess_with_combobox ? "" : " do not") << " update combobox" << LL_ENDL;
+	LLComboBox* comboBumpy = getChild<LLComboBox>("combobox bumpiness");
+	if (!comboBumpy)
+	{
+		return;
+	}
+
+	if (mess_with_combobox)
+	{
+		LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("bumpytexture control");
+		LLUUID bumpy_texture_ID = texture_ctrl->getImageAssetID();
+		LL_DEBUGS("Materials") << "texture: " << bumpy_texture_ID << (mess_with_combobox ? "" : " do not") << " update combobox" << LL_ENDL;
+
+		if (!bumpy_texture_ID.isNull() && is_setting_texture)
+		{
+			if (!comboBumpy->itemExists(USE_TEXTURE))
+			{
+				comboBumpy->add(USE_TEXTURE);
+			}
+			comboBumpy->setSimple(USE_TEXTURE);
+		}
+		else
+		{
+			if (comboBumpy->itemExists(USE_TEXTURE))
+			{
+				comboBumpy->remove(BUMPY_TEXTURE);
+				comboBumpy->selectFirstItem();
+			}
+		}
+	}
+}
+
 // static
 void LLPanelFace::onCommitShiny(LLUICtrl* ctrl, void* userdata)
 {
 	LLPanelFace* self = (LLPanelFace*) userdata;
-	self->sendShiny();
+
+
+	LLComboBox*	mComboShininess = self->getChild<LLComboBox>("combobox shininess");
+	if(!mComboShininess)
+		return;
+	
+	U32 shininess = mComboShininess->getCurrentIndex();
+
+	self->sendShiny(shininess);
+}
+
+// static
+void LLPanelFace::updateAlphaControls()
+{
+	LLComboBox* comboAlphaMode = getChild<LLComboBox>("combobox alphamode");
+	if (!comboAlphaMode)
+	{
+		return;
+	}
+	U32 alpha_value = comboAlphaMode->getCurrentIndex();
+	bool show_alphactrls = (alpha_value == ALPHAMODE_MASK); // Alpha masking
+    
+    LLComboBox* combobox_matmedia = getChild<LLComboBox>("combobox matmedia");
+    U32 mat_media = MATMEDIA_MATERIAL;
+    if (combobox_matmedia)
+    {
+        mat_media = combobox_matmedia->getCurrentIndex();
+    }
+    
+    LLComboBox* combobox_mattype = getChild<LLComboBox>("combobox mattype");
+    U32 mat_type = MATTYPE_DIFFUSE;
+    if (combobox_mattype)
+    {
+        mat_type = combobox_mattype->getCurrentIndex();
+    }
+
+    show_alphactrls = show_alphactrls && (mat_media == MATMEDIA_MATERIAL);
+    show_alphactrls = show_alphactrls && (mat_type == MATTYPE_DIFFUSE);
+    
+	getChildView("label maskcutoff")->setVisible(show_alphactrls);
+	getChildView("maskcutoff")->setVisible(show_alphactrls);
+}
+
+// static
+void LLPanelFace::onCommitAlphaMode(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	self->updateAlphaControls();
+	LLSelectedTEMaterial::setDiffuseAlphaMode(self,self->getCurrentDiffuseAlphaMode());
 }
 
 // static
@@ -1061,8 +1781,211 @@ void LLPanelFace::onSelectTexture(const LLSD& data)
 {
 	LLSelectMgr::getInstance()->saveSelectedObjectTextures();
 	sendTexture();
+
+	LLGLenum image_format;
+	bool identical_image_format = false;
+	LLSelectedTE::getImageFormat(image_format, identical_image_format);
+    
+	LLCtrlSelectionInterface* combobox_alphamode =
+		childGetSelectionInterface("combobox alphamode");
+
+	U32 alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+	if (combobox_alphamode)
+	{
+		switch (image_format)
+		{
+		case GL_RGBA:
+		case GL_ALPHA:
+			{
+				alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_BLEND;
+			}
+			break;
+
+		case GL_RGB: break;
+		default:
+			{
+				llwarns << "Unexpected tex format in LLPanelFace...resorting to no alpha" << llendl;
+			}
+			break;
+		}
+
+		combobox_alphamode->selectNthItem(alpha_mode);
+	}
+	LLSelectedTEMaterial::setDiffuseAlphaMode(this, getCurrentDiffuseAlphaMode());
 }
 
+void LLPanelFace::onCloseTexturePicker(const LLSD& data)
+{
+	LL_DEBUGS("Materials") << data << LL_ENDL;
+	updateUI();
+}
+
+void LLPanelFace::onCommitSpecularTexture( const LLSD& data )
+{
+	LL_DEBUGS("Materials") << data << LL_ENDL;
+	sendShiny(SHINY_TEXTURE);
+}
+
+void LLPanelFace::onCommitNormalTexture( const LLSD& data )
+{
+	LL_DEBUGS("Materials") << data << LL_ENDL;
+	LLUUID nmap_id = getCurrentNormalMap();
+	sendBump(nmap_id.isNull() ? 0 : BUMPY_TEXTURE);
+}
+
+void LLPanelFace::onCancelSpecularTexture(const LLSD& data)
+{
+	U8 shiny = 0;
+	bool identical_shiny = false;
+	LLSelectedTE::getShiny(shiny, identical_shiny);
+	LLUUID spec_map_id = getChild<LLTextureCtrl>("shinytexture control")->getImageAssetID();
+	shiny = spec_map_id.isNull() ? shiny : SHINY_TEXTURE;
+	sendShiny(shiny);
+}
+
+void LLPanelFace::onCancelNormalTexture(const LLSD& data)
+{
+	U8 bumpy = 0;
+	bool identical_bumpy = false;
+	LLSelectedTE::getBumpmap(bumpy, identical_bumpy);
+	sendBump(bumpy);
+}
+
+void LLPanelFace::onSelectSpecularTexture(const LLSD& data)
+{
+	LL_DEBUGS("Materials") << data << LL_ENDL;
+	sendShiny(SHINY_TEXTURE);
+}
+
+void LLPanelFace::onSelectNormalTexture(const LLSD& data)
+{
+	LL_DEBUGS("Materials") << data << LL_ENDL;
+	LLUUID nmap_id = getCurrentNormalMap();
+	sendBump(nmap_id.isNull() ? 0 : BUMPY_TEXTURE);
+}
+
+//static
+void LLPanelFace::onCommitMaterialBumpyOffsetX(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setNormalOffsetX(self,self->getCurrentBumpyOffsetU());
+}
+
+//static
+void LLPanelFace::onCommitMaterialBumpyOffsetY(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setNormalOffsetY(self,self->getCurrentBumpyOffsetV());
+}
+
+//static
+void LLPanelFace::onCommitMaterialShinyOffsetX(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setSpecularOffsetX(self,self->getCurrentShinyOffsetU());
+}
+
+//static
+void LLPanelFace::onCommitMaterialShinyOffsetY(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setSpecularOffsetY(self,self->getCurrentShinyOffsetV());
+}
+
+//static
+void LLPanelFace::onCommitMaterialBumpyScaleX(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	F32 bumpy_scale_u = self->getCurrentBumpyScaleU();
+	if (self->isIdenticalPlanarTexgen())
+	{
+		bumpy_scale_u *= 0.5f;
+	}
+	LLSelectedTEMaterial::setNormalRepeatX(self,bumpy_scale_u);
+}
+
+//static
+void LLPanelFace::onCommitMaterialBumpyScaleY(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	F32 bumpy_scale_v = self->getCurrentBumpyScaleV();
+	if (self->isIdenticalPlanarTexgen())
+	{
+		bumpy_scale_v *= 0.5f;
+	}
+	LLSelectedTEMaterial::setNormalRepeatY(self,bumpy_scale_v);
+}
+
+//static
+void LLPanelFace::onCommitMaterialShinyScaleX(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	F32 shiny_scale_u = self->getCurrentShinyScaleU();
+	if (self->isIdenticalPlanarTexgen())
+	{
+		shiny_scale_u *= 0.5f;
+	}
+	LLSelectedTEMaterial::setSpecularRepeatX(self,shiny_scale_u);
+}
+
+//static
+void LLPanelFace::onCommitMaterialShinyScaleY(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	F32 shiny_scale_v = self->getCurrentShinyScaleV();
+	if (self->isIdenticalPlanarTexgen())
+	{
+		shiny_scale_v *= 0.5f;
+	}
+	LLSelectedTEMaterial::setSpecularRepeatY(self,shiny_scale_v);
+}
+
+//static
+void LLPanelFace::onCommitMaterialBumpyRot(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setNormalRotation(self,self->getCurrentBumpyRot() * DEG_TO_RAD);
+}
+
+//static
+void LLPanelFace::onCommitMaterialShinyRot(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setSpecularRotation(self,self->getCurrentShinyRot() * DEG_TO_RAD);
+}
+
+//static
+void LLPanelFace::onCommitMaterialGloss(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setSpecularLightExponent(self,self->getCurrentGlossiness());
+}
+
+//static
+void LLPanelFace::onCommitMaterialEnv(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	llassert_always(self);
+	LLSelectedTEMaterial::setEnvironmentIntensity(self,self->getCurrentEnvIntensity());
+}
+
+//static
+void LLPanelFace::onCommitMaterialMaskCutoff(LLUICtrl* ctrl, void* userdata)
+{
+	LLPanelFace* self = (LLPanelFace*) userdata;
+	LLSelectedTEMaterial::setAlphaMaskCutoff(self,self->getCurrentAlphaMaskCutoff());
+}
 
 // static
 void LLPanelFace::onCommitTextureInfo( LLUICtrl* ctrl, void* userdata )
@@ -1073,15 +1996,67 @@ void LLPanelFace::onCommitTextureInfo( LLUICtrl* ctrl, void* userdata )
 
 // Commit the number of repeats per meter
 // static
-void LLPanelFace::onClickApply(void* userdata)
+void LLPanelFace::onCommitRepeatsPerMeter(LLUICtrl* ctrl, void* userdata)
 {
 	LLPanelFace* self = (LLPanelFace*) userdata;
 	
-	gFocusMgr.setKeyboardFocus( NULL );
+	LLUICtrl*	repeats_ctrl	= self->getChild<LLUICtrl>("rptctrl");
+	LLComboBox* combo_matmedia = self->getChild<LLComboBox>("combobox matmedia");
+	LLComboBox* combo_mattype	= self->getChild<LLComboBox>("combobox mattype");
+	
+	U32 materials_media = combo_matmedia->getCurrentIndex();
+	
+
+	U32 material_type			= (materials_media == MATMEDIA_MATERIAL) ? combo_mattype->getCurrentIndex() : 0;
+	F32 repeats_per_meter	= repeats_ctrl->getValue().asReal();
+	
+   F32 obj_scale_s = 1.0f;
+   F32 obj_scale_t = 1.0f;
+
+	bool identical_scale_s = false;
+	bool identical_scale_t = false;
+
+	LLSelectedTE::getObjectScaleS(obj_scale_s, identical_scale_s);
+	LLSelectedTE::getObjectScaleS(obj_scale_t, identical_scale_t);
+ 
+	switch (material_type)
+	{
+		case MATTYPE_DIFFUSE:
+		{
+			LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
+		}
+		break;
+
+		case MATTYPE_NORMAL:
+		{
+			LLUICtrl* bumpy_scale_u = self->getChild<LLUICtrl>("bumpyScaleU");
+			LLUICtrl* bumpy_scale_v = self->getChild<LLUICtrl>("bumpyScaleV");
+			
+			bumpy_scale_u->setValue(obj_scale_s * repeats_per_meter);
+			bumpy_scale_v->setValue(obj_scale_t * repeats_per_meter);
+
+			LLSelectedTEMaterial::setNormalRepeatX(self,obj_scale_s * repeats_per_meter);
+			LLSelectedTEMaterial::setNormalRepeatY(self,obj_scale_t * repeats_per_meter);
+		}
+		break;
+
+		case MATTYPE_SPECULAR:
+		{
+			LLUICtrl* shiny_scale_u = self->getChild<LLUICtrl>("shinyScaleU");
+			LLUICtrl* shiny_scale_v = self->getChild<LLUICtrl>("shinyScaleV");
+			
+			shiny_scale_u->setValue(obj_scale_s * repeats_per_meter);
+			shiny_scale_v->setValue(obj_scale_t * repeats_per_meter);
 
-	//F32 repeats_per_meter = self->mCtrlRepeatsPerMeter->get();
-	F32 repeats_per_meter = (F32)self->getChild<LLUICtrl>("rptctrl")->getValue().asReal();//self->mCtrlRepeatsPerMeter->get();
-	LLSelectMgr::getInstance()->selectionTexScaleAutofit( repeats_per_meter );
+			LLSelectedTEMaterial::setSpecularRepeatX(self,obj_scale_s * repeats_per_meter);
+			LLSelectedTEMaterial::setSpecularRepeatY(self,obj_scale_t * repeats_per_meter);
+		}
+		break;
+
+		default:
+			llassert(false);
+		break;
+	}
 }
 
 struct LLPanelFaceSetMediaFunctor : public LLSelectedTEFunctor
@@ -1155,7 +2130,26 @@ void LLPanelFace::onCommitPlanarAlign(LLUICtrl* ctrl, void* userdata)
 
 void LLPanelFace::onTextureSelectionChanged(LLInventoryItem* itemp)
 {
-	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>("texture control");
+	LL_DEBUGS("Materials") << "item asset " << itemp->getAssetUUID() << LL_ENDL;
+	LLComboBox* combo_mattype = getChild<LLComboBox>("combobox mattype");
+	if (!combo_mattype)
+	{
+		return;
+	}
+	U32 mattype = combo_mattype->getCurrentIndex();
+	std::string which_control="texture control";
+	switch (mattype)
+	{
+		case MATTYPE_SPECULAR:
+			which_control = "shinytexture control";
+			break;
+		case MATTYPE_NORMAL:
+			which_control = "bumpytexture control";
+			break;
+		// no default needed
+	}
+	LL_DEBUGS("Materials") << "control " << which_control << LL_ENDL;
+	LLTextureCtrl* texture_ctrl = getChild<LLTextureCtrl>(which_control);
 	if (texture_ctrl)
 	{
 		LLUUID obj_owner_id;
@@ -1185,3 +2179,212 @@ void LLPanelFace::onTextureSelectionChanged(LLInventoryItem* itemp)
 		}
 	}
 }
+
+bool LLPanelFace::isIdenticalPlanarTexgen()
+{
+	LLTextureEntry::e_texgen selected_texgen = LLTextureEntry::TEX_GEN_DEFAULT;
+	bool identical_texgen = false;
+	LLSelectedTE::getTexGen(selected_texgen, identical_texgen);
+	return (identical_texgen && (selected_texgen == LLTextureEntry::TEX_GEN_PLANAR));
+}
+
+void LLPanelFace::LLSelectedTE::getFace(LLFace*& face_to_return, bool& identical_face)
+{		
+	struct LLSelectedTEGetFace : public LLSelectedTEGetFunctor<LLFace *>
+	{
+		LLFace* get(LLViewerObject* object, S32 te)
+		{
+			return (object->mDrawable) ? object->mDrawable->getFace(te): NULL;
+		}
+	} get_te_face_func;
+	identical_face = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue(&get_te_face_func, face_to_return);
+}
+
+void LLPanelFace::LLSelectedTE::getImageFormat(LLGLenum& image_format_to_return, bool& identical_face)
+{
+	LLGLenum image_format;
+	struct LLSelectedTEGetImageFormat : public LLSelectedTEGetFunctor<LLGLenum>
+	{
+		LLGLenum get(LLViewerObject* object, S32 te_index)
+		{
+			LLViewerTexture* image = object->getTEImage(te_index);
+			return image ? image->getPrimaryFormat() : GL_RGB;
+		}
+	} get_glenum;
+	identical_face = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue(&get_glenum, image_format);
+	image_format_to_return = image_format;
+}
+
+void LLPanelFace::LLSelectedTE::getTexId(LLUUID& id, bool& identical)
+{		
+	struct LLSelectedTEGetTexId : public LLSelectedTEGetFunctor<LLUUID>
+	{
+		LLUUID get(LLViewerObject* object, S32 te_index)
+		{
+			LLUUID id;
+			LLViewerTexture* image = object->getTEImage(te_index);
+			if (image)
+			{
+				id = image->getID();
+			}
+
+			if (!id.isNull() && LLViewerMedia::textureHasMedia(id))
+			{
+				LLTextureEntry *te = object->getTE(te_index);
+				if (te)
+				{
+					LLViewerTexture* tex = te->getID().notNull() ? gTextureList.findImage(te->getID()) : NULL;
+					if(!tex)
+					{
+						tex = LLViewerFetchedTexture::sDefaultImagep;
+					}
+					if (tex)
+					{
+						id = tex->getID();
+					}
+				}
+			}
+			return id;
+		}
+	} func;
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, id );
+}
+
+void LLPanelFace::LLSelectedTEMaterial::getCurrent(LLMaterialPtr& material_ptr, bool& identical_material)
+{
+	struct MaterialFunctor : public LLSelectedTEGetFunctor<LLMaterialPtr>
+	{
+		LLMaterialPtr get(LLViewerObject* object, S32 te_index)
+		{
+			return object->getTE(te_index)->getMaterialParams();
+		}
+	} func;
+	identical_material = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &func, material_ptr);
+}
+
+void LLPanelFace::LLSelectedTEMaterial::getMaxSpecularRepeats(F32& repeats, bool& identical)
+{
+	struct LLSelectedTEGetMaxSpecRepeats : public LLSelectedTEGetFunctor<F32>
+	{
+		F32 get(LLViewerObject* object, S32 face)
+		{
+			LLMaterial* mat = object->getTE(face)->getMaterialParams().get();
+			U32 s_axis = VX;
+			U32 t_axis = VY;
+			F32 repeats_s = 1.0f;
+			F32 repeats_t = 1.0f;
+			if (mat)
+			{
+				mat->getSpecularRepeat(repeats_s, repeats_t);
+				repeats_s /= object->getScale().mV[s_axis];
+				repeats_t /= object->getScale().mV[t_axis];
+			}					
+			return llmax(repeats_s, repeats_t);
+		}
+
+	} max_spec_repeats_func;
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &max_spec_repeats_func, repeats);
+}
+
+void LLPanelFace::LLSelectedTEMaterial::getMaxNormalRepeats(F32& repeats, bool& identical)
+{
+	struct LLSelectedTEGetMaxNormRepeats : public LLSelectedTEGetFunctor<F32>
+	{
+		F32 get(LLViewerObject* object, S32 face)
+		{
+			LLMaterial* mat = object->getTE(face)->getMaterialParams().get();
+			U32 s_axis = VX;
+			U32 t_axis = VY;
+			F32 repeats_s = 1.0f;
+			F32 repeats_t = 1.0f;
+			if (mat)
+			{
+				mat->getNormalRepeat(repeats_s, repeats_t);
+				repeats_s /= object->getScale().mV[s_axis];
+				repeats_t /= object->getScale().mV[t_axis];
+			}					
+			return llmax(repeats_s, repeats_t);
+		}
+
+	} max_norm_repeats_func;
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &max_norm_repeats_func, repeats);
+}
+
+void LLPanelFace::LLSelectedTEMaterial::getCurrentDiffuseAlphaMode(U8& diffuse_alpha_mode, bool& identical, bool diffuse_texture_has_alpha)
+{
+	struct LLSelectedTEGetDiffuseAlphaMode : public LLSelectedTEGetFunctor<U8>
+	{
+		LLSelectedTEGetDiffuseAlphaMode() : _isAlpha(false) {}
+		LLSelectedTEGetDiffuseAlphaMode(bool diffuse_texture_has_alpha) : _isAlpha(diffuse_texture_has_alpha) {}
+		virtual ~LLSelectedTEGetDiffuseAlphaMode() {}
+
+		U8 get(LLViewerObject* object, S32 face)
+		{
+			U8 diffuse_mode = _isAlpha ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE;
+
+			LLTextureEntry* tep = object->getTE(face);
+			if (tep)
+			{
+				LLMaterial* mat = tep->getMaterialParams().get();
+				if (mat)
+				{
+					diffuse_mode = mat->getDiffuseAlphaMode();
+				}
+			}
+			
+			return diffuse_mode;
+		}
+		bool _isAlpha; // whether or not the diffuse texture selected contains alpha information
+	} get_diff_mode(diffuse_texture_has_alpha);
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &get_diff_mode, diffuse_alpha_mode);
+}
+
+void LLPanelFace::LLSelectedTE::getObjectScaleS(F32& scale_s, bool& identical)
+{	
+	struct LLSelectedTEGetObjectScaleS : public LLSelectedTEGetFunctor<F32>
+	{
+		F32 get(LLViewerObject* object, S32 face)
+		{
+			U32 s_axis = VX;
+			U32 t_axis = VY;
+			LLPrimitive::getTESTAxes(face, &s_axis, &t_axis);
+			return object->getScale().mV[s_axis];
+		}
+
+	} scale_s_func;
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &scale_s_func, scale_s );
+}
+
+void LLPanelFace::LLSelectedTE::getObjectScaleT(F32& scale_t, bool& identical)
+{	
+	struct LLSelectedTEGetObjectScaleS : public LLSelectedTEGetFunctor<F32>
+	{
+		F32 get(LLViewerObject* object, S32 face)
+		{
+			U32 s_axis = VX;
+			U32 t_axis = VY;
+			LLPrimitive::getTESTAxes(face, &s_axis, &t_axis);
+			return object->getScale().mV[t_axis];
+		}
+
+	} scale_t_func;
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &scale_t_func, scale_t );
+}
+
+void LLPanelFace::LLSelectedTE::getMaxDiffuseRepeats(F32& repeats, bool& identical)
+{
+	struct LLSelectedTEGetMaxDiffuseRepeats : public LLSelectedTEGetFunctor<F32>
+	{
+		F32 get(LLViewerObject* object, S32 face)
+		{
+			U32 s_axis = VX;
+			U32 t_axis = VY;
+			LLPrimitive::getTESTAxes(face, &s_axis, &t_axis);
+			F32 repeats_s = object->getTE(face)->mScaleS / object->getScale().mV[s_axis];
+			F32 repeats_t = object->getTE(face)->mScaleT / object->getScale().mV[t_axis];
+			return llmax(repeats_s, repeats_t);
+		}
+
+	} max_diff_repeats_func;
+	identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &max_diff_repeats_func, repeats );
+}
diff --git a/indra/newview/llpanelface.h b/indra/newview/llpanelface.h
old mode 100644
new mode 100755
index 3b5a9b1398c8d0fb111abb67215f8664cf1735c8..42c1f6bd4820c086ec946426705ae3cb20bcc3dd
--- a/indra/newview/llpanelface.h
+++ b/indra/newview/llpanelface.h
@@ -29,6 +29,10 @@
 
 #include "v4color.h"
 #include "llpanel.h"
+#include "llmaterial.h"
+#include "llmaterialmgr.h"
+#include "lltextureentry.h"
+#include "llselectmgr.h"
 
 class LLButton;
 class LLCheckBoxCtrl;
@@ -42,6 +46,48 @@ class LLTextureCtrl;
 class LLUICtrl;
 class LLViewerObject;
 class LLFloater;
+class LLMaterialID;
+
+// Represents an edit for use in replicating the op across one or more materials in the selection set.
+//
+// The apply function optionally performs the edit which it implements
+// as a functor taking Data that calls member func MaterialFunc taking SetValueType
+// on an instance of the LLMaterial class.
+//
+// boost who?
+//
+template<
+	typename DataType,
+	typename SetValueType,
+	void (LLMaterial::*MaterialEditFunc)(SetValueType data) >
+class LLMaterialEditFunctor
+{
+public:
+	LLMaterialEditFunctor(const DataType& data) : _data(data) {}
+	virtual ~LLMaterialEditFunctor() {}
+	virtual void apply(LLMaterialPtr& material) { (material->*(MaterialEditFunc))(_data); }
+	DataType _data;
+};
+
+template<
+	typename DataType,
+	DataType (LLMaterial::*MaterialGetFunc)() >
+class LLMaterialGetFunctor
+{
+public:
+	LLMaterialGetFunctor() {}
+	virtual DataType get(LLMaterialPtr& material) { return (material->*(MaterialGetFunc)); }
+};
+
+template<
+	typename DataType,
+	DataType (LLTextureEntry::*TEGetFunc)() >
+class LLTEGetFunctor
+{
+public:
+	LLTEGetFunctor() {}
+	virtual DataType get(LLTextureEntry* entry) { return (entry*(TEGetFunc)); }
+};
 
 class LLPanelFace : public LLPanel
 {
@@ -61,11 +107,11 @@ class LLPanelFace : public LLPanel
 	void			sendTextureInfo();		// applies and sends texture scale, offset, etc.
 	void			sendColor();			// applies and sends color
 	void			sendAlpha();			// applies and sends transparency
-	void			sendBump();				// applies and sends bump map
+	void			sendBump(U32 bumpiness);				// applies and sends bump map
 	void			sendTexGen();				// applies and sends bump map
-	void			sendShiny();			// applies and sends shininess
+	void			sendShiny(U32 shininess);			// applies and sends shininess
 	void			sendFullbright();		// applies and sends full bright
-	void            sendGlow();
+	void        sendGlow();
 	void			sendMedia();
 
 	// this function is to return TRUE if the drag should succeed.
@@ -74,25 +120,228 @@ class LLPanelFace : public LLPanel
 	void 	onCommitTexture(const LLSD& data);
 	void 	onCancelTexture(const LLSD& data);
 	void 	onSelectTexture(const LLSD& data);
+	void 	onCommitSpecularTexture(const LLSD& data);
+	void 	onCancelSpecularTexture(const LLSD& data);
+	void 	onSelectSpecularTexture(const LLSD& data);
+	void 	onCommitNormalTexture(const LLSD& data);
+	void 	onCancelNormalTexture(const LLSD& data);
+	void 	onSelectNormalTexture(const LLSD& data);
 	void 	onCommitColor(const LLSD& data);
+	void 	onCommitShinyColor(const LLSD& data);
 	void 	onCommitAlpha(const LLSD& data);
 	void 	onCancelColor(const LLSD& data);
 	void 	onSelectColor(const LLSD& data);
-	
-	static 	void onCommitTextureInfo( 		LLUICtrl* ctrl, void* userdata);
-	static void		onCommitBump(			LLUICtrl* ctrl, void* userdata);
+
+	void 	onCloseTexturePicker(const LLSD& data);
+
+	// Make UI reflect state of currently selected material (refresh)
+	// and UI mode (e.g. editing normal map v diffuse map)
+	//
+	void updateUI();
+
+	// Convenience func to determine if all faces in selection have
+	// identical planar texgen settings during edits
+	// 
+	bool isIdenticalPlanarTexgen();
+
+	// Callback funcs for individual controls
+	//
+	static void		onCommitTextureInfo( 	LLUICtrl* ctrl, void* userdata);
+
+	static void		onCommitMaterialBumpyScaleX(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialBumpyScaleY(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialBumpyRot(		LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialBumpyOffsetX(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialBumpyOffsetY(	LLUICtrl* ctrl, void* userdata);
+
+	static void		onCommitMaterialShinyScaleX(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialShinyScaleY(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialShinyRot(		LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialShinyOffsetX(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialShinyOffsetY(	LLUICtrl* ctrl, void* userdata);
+
+	static void		onCommitMaterialGloss(			LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialEnv(				LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialMaskCutoff(	LLUICtrl* ctrl, void* userdata);
+
+	static void		onCommitMaterialsMedia(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitMaterialType(	LLUICtrl* ctrl, void* userdata);
+	static void		onCommitBump(				LLUICtrl* ctrl, void* userdata);
 	static void		onCommitTexGen(			LLUICtrl* ctrl, void* userdata);
-	static void		onCommitShiny(			LLUICtrl* ctrl, void* userdata);
+	static void		onCommitShiny(				LLUICtrl* ctrl, void* userdata);
+	static void		onCommitAlphaMode(		LLUICtrl* ctrl, void* userdata);
 	static void		onCommitFullbright(		LLUICtrl* ctrl, void* userdata);
-	static void     onCommitGlow(           LLUICtrl* ctrl, void *userdata);
-	static void		onCommitPlanarAlign(	LLUICtrl* ctrl, void* userdata);
-	
-	static void		onClickApply(void*);
+	static void    onCommitGlow(				LLUICtrl* ctrl, void *userdata);
+	static void		onCommitPlanarAlign(		LLUICtrl* ctrl, void* userdata);
+	static void		onCommitRepeatsPerMeter(	LLUICtrl* ctrl, void* userinfo);
 	static void		onClickAutoFix(void*);
-	static F32      valueGlow(LLViewerObject* object, S32 face);
+
+	static F32     valueGlow(LLViewerObject* object, S32 face);
 
 private:
 
+	bool		isAlpha() { return mIsAlpha; }
+
+	// Convenience funcs to keep the visual flack to a minimum
+	//
+	LLUUID	getCurrentNormalMap();
+	LLUUID	getCurrentSpecularMap();
+	U32		getCurrentShininess();
+	U32		getCurrentBumpiness();
+	U8			getCurrentDiffuseAlphaMode();
+	U8			getCurrentAlphaMaskCutoff();
+	U8			getCurrentEnvIntensity();
+	U8			getCurrentGlossiness();
+	F32		getCurrentBumpyRot();
+	F32		getCurrentBumpyScaleU();
+	F32		getCurrentBumpyScaleV();
+	F32		getCurrentBumpyOffsetU();
+	F32		getCurrentBumpyOffsetV();
+	F32		getCurrentShinyRot();
+	F32		getCurrentShinyScaleU();
+	F32		getCurrentShinyScaleV();
+	F32		getCurrentShinyOffsetU();
+	F32		getCurrentShinyOffsetV();
+
+	// Update visibility of controls to match current UI mode
+	// (e.g. materials vs media editing)
+	//
+	// Do NOT call updateUI from within this function.
+	//
+	void updateVisibility();
+
+	// Make material(s) reflect current state of UI (apply edit)
+	//
+	void updateMaterial();
+
+	// Hey look everyone, a type-safe alternative to copy and paste! :)
+	//
+
+	// Update material parameters by applying 'edit_func' to selected TEs
+	//
+	template<
+		typename DataType,
+		typename SetValueType,
+		void (LLMaterial::*MaterialEditFunc)(SetValueType data) >
+	static void edit(LLPanelFace* p, DataType data)
+	{
+		LLMaterialEditFunctor< DataType, SetValueType, MaterialEditFunc > edit(data);
+		struct LLSelectedTEEditMaterial : public LLSelectedTEMaterialFunctor
+		{
+			LLSelectedTEEditMaterial(LLPanelFace* panel, LLMaterialEditFunctor< DataType, SetValueType, MaterialEditFunc >* editp) : _panel(panel), _edit(editp) {}
+			virtual ~LLSelectedTEEditMaterial() {};
+			virtual LLMaterialPtr apply(LLViewerObject* object, S32 face, LLTextureEntry* tep, LLMaterialPtr& current_material)
+			{
+				if (_edit)
+				{
+					LLMaterialPtr new_material(!current_material.isNull() ? new LLMaterial(current_material->asLLSD()) : new LLMaterial());
+					llassert_always(new_material);
+
+					// Determine correct alpha mode for current diffuse texture
+					// (i.e. does it have an alpha channel that makes alpha mode useful)
+					//
+					U8 default_alpha_mode = (_panel->isAlpha() ? LLMaterial::DIFFUSE_ALPHA_MODE_BLEND : LLMaterial::DIFFUSE_ALPHA_MODE_NONE);
+
+					// Default to matching expected state of UI
+					//
+					new_material->setDiffuseAlphaMode(current_material.isNull() ? default_alpha_mode : current_material->getDiffuseAlphaMode());
+
+					// Do "It"!
+					//
+					_edit->apply(new_material);
+
+					U32		new_alpha_mode			= new_material->getDiffuseAlphaMode();
+					LLUUID	new_normal_map_id		= new_material->getNormalID();
+					LLUUID	new_spec_map_id		= new_material->getSpecularID();
+
+					bool is_default_blend_mode		= (new_alpha_mode == default_alpha_mode);
+					bool is_need_material			= !is_default_blend_mode || !new_normal_map_id.isNull() || !new_spec_map_id.isNull();
+
+					if (!is_need_material)
+					{
+						LL_DEBUGS("Materials") << "Removing material from object " << object->getID() << " face " << face << LL_ENDL;
+						LLMaterialMgr::getInstance()->remove(object->getID(),face);
+						new_material = NULL;
+					}
+					else
+					{
+						LL_DEBUGS("Materials") << "Putting material on object " << object->getID() << " face " << face << ", material: " << new_material->asLLSD() << LL_ENDL;
+						LLMaterialMgr::getInstance()->put(object->getID(),face,*new_material);
+					}
+
+					object->setTEMaterialParams(face, new_material);
+					return new_material;
+				}
+				return NULL;
+			}
+			LLMaterialEditFunctor< DataType, SetValueType, MaterialEditFunc >*	_edit;
+			LLPanelFace*																			_panel;
+		} editor(p, &edit);
+		LLSelectMgr::getInstance()->selectionSetMaterialParams(&editor);
+	}
+
+	template<
+		typename DataType,
+		typename ReturnType,
+		ReturnType (LLMaterial::* const MaterialGetFunc)() const  >
+	static void getTEMaterialValue(DataType& data_to_return, bool& identical,DataType default_value)
+	{
+		DataType data_value;
+		struct GetTEMaterialVal : public LLSelectedTEGetFunctor<DataType>
+		{
+			GetTEMaterialVal(DataType default_value) : _default(default_value) {}
+			virtual ~GetTEMaterialVal() {}
+
+			DataType get(LLViewerObject* object, S32 face)
+			{
+				DataType ret = _default;
+				LLMaterialPtr material_ptr;
+				LLTextureEntry* tep = object ? object->getTE(face) : NULL;
+				if (tep)
+				{
+					material_ptr = tep->getMaterialParams();
+					if (!material_ptr.isNull())
+					{
+						ret = (material_ptr->*(MaterialGetFunc))();
+					}
+				}
+				return ret;
+			}
+			DataType _default;
+		} GetFunc(default_value);
+		identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &GetFunc, data_value);
+		data_to_return = data_value;
+	}
+
+	template<
+		typename DataType,
+		typename ReturnType, // some kids just have to different...
+		ReturnType (LLTextureEntry::* const TEGetFunc)() const >
+	static void getTEValue(DataType& data_to_return, bool& identical, DataType default_value)
+	{
+		DataType data_value;
+		struct GetTEVal : public LLSelectedTEGetFunctor<DataType>
+		{
+			GetTEVal(DataType default_value) : _default(default_value) {}
+			virtual ~GetTEVal() {}
+
+			DataType get(LLViewerObject* object, S32 face) {
+				LLTextureEntry* tep = object ? object->getTE(face) : NULL;
+				return tep ? ((tep->*(TEGetFunc))()) : _default;
+			}
+			DataType _default;
+		} GetTEValFunc(default_value);
+		identical = LLSelectMgr::getInstance()->getSelection()->getSelectedTEValue( &GetTEValFunc, data_value );
+		data_to_return = data_value;
+	}
+
+	// Update vis and enabling of specific subsets of controls based on material params
+	// (e.g. hide the spec controls if no spec texture is applied)
+	//
+	void updateShinyControls(bool is_setting_texture = false, bool mess_with_combobox = false);
+	void updateBumpyControls(bool is_setting_texture = false, bool mess_with_combobox = false);
+	void updateAlphaControls();
+
 	/*
 	 * Checks whether the selected texture from the LLFloaterTexturePicker can be applied to the currently selected object.
 	 * If agent selects texture which is not allowed to be applied for the currently selected object,
@@ -100,6 +349,126 @@ class LLPanelFace : public LLPanel
 	 */
 	void onTextureSelectionChanged(LLInventoryItem* itemp);
 
+	bool mIsAlpha;
+	
+	/* These variables interlock processing of materials updates sent to
+	 * the sim.  mUpdateInFlight is set to flag that an update has been
+	 * sent to the sim and not acknowledged yet, and cleared when an
+	 * update is received from the sim.  mUpdatePending is set when
+	 * there's an update in flight and another UI change has been made
+	 * that needs to be sent as a materials update, and cleared when the
+	 * update is sent.  This prevents the sim from getting spammed with
+	 * update messages when, for example, the user holds down the
+	 * up-arrow on a spinner, and avoids running afoul of its throttle.
+	 */
+	bool mUpdateInFlight;
+	bool mUpdatePending;
+
+	#if defined(DEF_GET_MAT_STATE)
+		#undef DEF_GET_MAT_STATE
+	#endif
+
+	#if defined(DEF_GET_TE_STATE)
+		#undef DEF_GET_TE_STATE
+	#endif
+
+	#if defined(DEF_EDIT_MAT_STATE)
+		DEF_EDIT_MAT_STATE
+	#endif
+
+	// Accessors for selected TE material state
+	//
+	#define DEF_GET_MAT_STATE(DataType,ReturnType,MaterialMemberFunc,DefaultValue)												\
+		static void MaterialMemberFunc(DataType& data, bool& identical)																\
+		{																																					\
+			getTEMaterialValue< DataType, ReturnType, &LLMaterial::MaterialMemberFunc >(data, identical,DefaultValue);	\
+		}
+
+	// Mutators for selected TE material
+	//
+	#define DEF_EDIT_MAT_STATE(DataType,ReturnType,MaterialMemberFunc)																\
+		static void MaterialMemberFunc(LLPanelFace* p,DataType data)																	\
+		{																																					\
+			edit< DataType, ReturnType, &LLMaterial::MaterialMemberFunc >(p,data);													\
+		}
+
+	// Accessors for selected TE state proper (legacy settings etc)
+	//
+	#define DEF_GET_TE_STATE(DataType,ReturnType,TexEntryMemberFunc,DefaultValue)													\
+		static void TexEntryMemberFunc(DataType& data, bool& identical)																\
+		{																																					\
+			getTEValue< DataType, ReturnType, &LLTextureEntry::TexEntryMemberFunc >(data, identical,DefaultValue);		\
+		}
+
+	class LLSelectedTEMaterial
+	{
+	public:
+		static void getCurrent(LLMaterialPtr& material_ptr, bool& identical_material);
+		static void getMaxSpecularRepeats(F32& repeats, bool& identical);
+		static void getMaxNormalRepeats(F32& repeats, bool& identical);
+		static void getCurrentDiffuseAlphaMode(U8& diffuse_alpha_mode, bool& identical, bool diffuse_texture_has_alpha);
+
+		DEF_GET_MAT_STATE(LLUUID,const LLUUID&,getNormalID,LLUUID::null)
+		DEF_GET_MAT_STATE(LLUUID,const LLUUID&,getSpecularID,LLUUID::null)
+		DEF_GET_MAT_STATE(F32,F32,getSpecularRepeatX,1.0f)
+		DEF_GET_MAT_STATE(F32,F32,getSpecularRepeatY,1.0f)
+		DEF_GET_MAT_STATE(F32,F32,getSpecularOffsetX,0.0f)
+		DEF_GET_MAT_STATE(F32,F32,getSpecularOffsetY,0.0f)
+		DEF_GET_MAT_STATE(F32,F32,getSpecularRotation,0.0f)
+
+		DEF_GET_MAT_STATE(F32,F32,getNormalRepeatX,1.0f)
+		DEF_GET_MAT_STATE(F32,F32,getNormalRepeatY,1.0f)
+		DEF_GET_MAT_STATE(F32,F32,getNormalOffsetX,0.0f)
+		DEF_GET_MAT_STATE(F32,F32,getNormalOffsetY,0.0f)
+		DEF_GET_MAT_STATE(F32,F32,getNormalRotation,0.0f)
+
+		DEF_EDIT_MAT_STATE(U8,U8,setDiffuseAlphaMode);
+		DEF_EDIT_MAT_STATE(U8,U8,setAlphaMaskCutoff);
+
+		DEF_EDIT_MAT_STATE(F32,F32,setNormalOffsetX);
+		DEF_EDIT_MAT_STATE(F32,F32,setNormalOffsetY);
+		DEF_EDIT_MAT_STATE(F32,F32,setNormalRepeatX);
+		DEF_EDIT_MAT_STATE(F32,F32,setNormalRepeatY);
+		DEF_EDIT_MAT_STATE(F32,F32,setNormalRotation);
+
+		DEF_EDIT_MAT_STATE(F32,F32,setSpecularOffsetX);
+		DEF_EDIT_MAT_STATE(F32,F32,setSpecularOffsetY);
+		DEF_EDIT_MAT_STATE(F32,F32,setSpecularRepeatX);
+		DEF_EDIT_MAT_STATE(F32,F32,setSpecularRepeatY);
+		DEF_EDIT_MAT_STATE(F32,F32,setSpecularRotation);
+
+		DEF_EDIT_MAT_STATE(U8,U8,setEnvironmentIntensity);
+		DEF_EDIT_MAT_STATE(U8,U8,setSpecularLightExponent);
+
+		DEF_EDIT_MAT_STATE(LLUUID,const LLUUID&,setNormalID);
+		DEF_EDIT_MAT_STATE(LLUUID,const LLUUID&,setSpecularID);
+		DEF_EDIT_MAT_STATE(LLColor4U,	const LLColor4U&,setSpecularLightColor);
+	};
+
+	class LLSelectedTE
+	{
+	public:
+
+		static void getFace(LLFace*& face_to_return, bool& identical_face);
+		static void getImageFormat(LLGLenum& image_format_to_return, bool& identical_face);
+		static void getTexId(LLUUID& id, bool& identical);
+		static void getObjectScaleS(F32& scale_s, bool& identical);
+		static void getObjectScaleT(F32& scale_t, bool& identical);
+		static void getMaxDiffuseRepeats(F32& repeats, bool& identical);
+
+		DEF_GET_TE_STATE(U8,U8,getBumpmap,0)
+		DEF_GET_TE_STATE(U8,U8,getShiny,0)
+		DEF_GET_TE_STATE(U8,U8,getFullbright,0)
+		DEF_GET_TE_STATE(F32,F32,getRotation,0.0f)
+		DEF_GET_TE_STATE(F32,F32,getOffsetS,0.0f)
+		DEF_GET_TE_STATE(F32,F32,getOffsetT,0.0f)
+		DEF_GET_TE_STATE(F32,F32,getScaleS,1.0f)
+		DEF_GET_TE_STATE(F32,F32,getScaleT,1.0f)
+		DEF_GET_TE_STATE(F32,F32,getGlow,0.0f)
+		DEF_GET_TE_STATE(LLTextureEntry::e_texgen,LLTextureEntry::e_texgen,getTexGen,LLTextureEntry::TEX_GEN_DEFAULT)
+		DEF_GET_TE_STATE(LLColor4,const LLColor4&,getColor,LLColor4::white)		
+	};
 };
 
 #endif
+
diff --git a/indra/newview/llpanelgenerictip.cpp b/indra/newview/llpanelgenerictip.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgenerictip.h b/indra/newview/llpanelgenerictip.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroup.cpp b/indra/newview/llpanelgroup.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroup.h b/indra/newview/llpanelgroup.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroupgeneral.cpp b/indra/newview/llpanelgroupgeneral.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroupgeneral.h b/indra/newview/llpanelgroupgeneral.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroupinvite.cpp b/indra/newview/llpanelgroupinvite.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroupinvite.h b/indra/newview/llpanelgroupinvite.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgrouplandmoney.cpp b/indra/newview/llpanelgrouplandmoney.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgrouplandmoney.h b/indra/newview/llpanelgrouplandmoney.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroupnotices.cpp b/indra/newview/llpanelgroupnotices.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgroupnotices.h b/indra/newview/llpanelgroupnotices.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgrouproles.cpp b/indra/newview/llpanelgrouproles.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelgrouproles.h b/indra/newview/llpanelgrouproles.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelhome.cpp b/indra/newview/llpanelhome.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelhome.h b/indra/newview/llpanelhome.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelimcontrolpanel.cpp b/indra/newview/llpanelimcontrolpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelimcontrolpanel.h b/indra/newview/llpanelimcontrolpanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelland.cpp b/indra/newview/llpanelland.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelland.h b/indra/newview/llpanelland.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandaudio.cpp b/indra/newview/llpanellandaudio.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandaudio.h b/indra/newview/llpanellandaudio.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandmarkinfo.cpp b/indra/newview/llpanellandmarkinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandmarkinfo.h b/indra/newview/llpanellandmarkinfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandmarks.cpp b/indra/newview/llpanellandmarks.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandmarks.h b/indra/newview/llpanellandmarks.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandmedia.cpp b/indra/newview/llpanellandmedia.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellandmedia.h b/indra/newview/llpanellandmedia.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellogin.cpp b/indra/newview/llpanellogin.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanellogin.h b/indra/newview/llpanellogin.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelloginlistener.cpp b/indra/newview/llpanelloginlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelloginlistener.h b/indra/newview/llpanelloginlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmaininventory.cpp b/indra/newview/llpanelmaininventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmaininventory.h b/indra/newview/llpanelmaininventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmarketplaceinbox.cpp b/indra/newview/llpanelmarketplaceinbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmarketplaceinbox.h b/indra/newview/llpanelmarketplaceinbox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.cpp b/indra/newview/llpanelmarketplaceinboxinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmarketplaceinboxinventory.h b/indra/newview/llpanelmarketplaceinboxinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelme.cpp b/indra/newview/llpanelme.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelme.h b/indra/newview/llpanelme.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmediasettingsgeneral.cpp b/indra/newview/llpanelmediasettingsgeneral.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmediasettingsgeneral.h b/indra/newview/llpanelmediasettingsgeneral.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmediasettingspermissions.cpp b/indra/newview/llpanelmediasettingspermissions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmediasettingspermissions.h b/indra/newview/llpanelmediasettingspermissions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmediasettingssecurity.cpp b/indra/newview/llpanelmediasettingssecurity.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelmediasettingssecurity.h b/indra/newview/llpanelmediasettingssecurity.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelnearbymedia.cpp b/indra/newview/llpanelnearbymedia.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelnearbymedia.h b/indra/newview/llpanelnearbymedia.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelobject.cpp b/indra/newview/llpanelobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelobject.h b/indra/newview/llpanelobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelobjectinventory.cpp b/indra/newview/llpanelobjectinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelobjectinventory.h b/indra/newview/llpanelobjectinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelonlinestatus.cpp b/indra/newview/llpanelonlinestatus.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelonlinestatus.h b/indra/newview/llpanelonlinestatus.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneloutfitedit.cpp b/indra/newview/llpaneloutfitedit.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneloutfitedit.h b/indra/newview/llpaneloutfitedit.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneloutfitsinventory.cpp b/indra/newview/llpaneloutfitsinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneloutfitsinventory.h b/indra/newview/llpaneloutfitsinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpeople.cpp b/indra/newview/llpanelpeople.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpeople.h b/indra/newview/llpanelpeople.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpeoplemenus.cpp b/indra/newview/llpanelpeoplemenus.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpeoplemenus.h b/indra/newview/llpanelpeoplemenus.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpermissions.cpp b/indra/newview/llpanelpermissions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpermissions.h b/indra/newview/llpanelpermissions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpick.cpp b/indra/newview/llpanelpick.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelpick.h b/indra/newview/llpanelpick.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplaceinfo.cpp b/indra/newview/llpanelplaceinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplaceinfo.h b/indra/newview/llpanelplaceinfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplaceprofile.cpp b/indra/newview/llpanelplaceprofile.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplaceprofile.h b/indra/newview/llpanelplaceprofile.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplaces.cpp b/indra/newview/llpanelplaces.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplaces.h b/indra/newview/llpanelplaces.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplacestab.cpp b/indra/newview/llpanelplacestab.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelplacestab.h b/indra/newview/llpanelplacestab.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelprimmediacontrols.cpp b/indra/newview/llpanelprimmediacontrols.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelprimmediacontrols.h b/indra/newview/llpanelprimmediacontrols.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshot.cpp b/indra/newview/llpanelsnapshot.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshot.h b/indra/newview/llpanelsnapshot.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshotinventory.cpp b/indra/newview/llpanelsnapshotinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshotlocal.cpp b/indra/newview/llpanelsnapshotlocal.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshotoptions.cpp b/indra/newview/llpanelsnapshotoptions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshotpostcard.cpp b/indra/newview/llpanelsnapshotpostcard.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelsnapshotprofile.cpp b/indra/newview/llpanelsnapshotprofile.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelteleporthistory.cpp b/indra/newview/llpanelteleporthistory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelteleporthistory.h b/indra/newview/llpanelteleporthistory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneltiptoast.cpp b/indra/newview/llpaneltiptoast.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneltiptoast.h b/indra/newview/llpaneltiptoast.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneltopinfobar.cpp b/indra/newview/llpaneltopinfobar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpaneltopinfobar.h b/indra/newview/llpaneltopinfobar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvoicedevicesettings.cpp b/indra/newview/llpanelvoicedevicesettings.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvoicedevicesettings.h b/indra/newview/llpanelvoicedevicesettings.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvoiceeffect.cpp b/indra/newview/llpanelvoiceeffect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvoiceeffect.h b/indra/newview/llpanelvoiceeffect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvolume.cpp b/indra/newview/llpanelvolume.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvolume.h b/indra/newview/llpanelvolume.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvolumepulldown.cpp b/indra/newview/llpanelvolumepulldown.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelvolumepulldown.h b/indra/newview/llpanelvolumepulldown.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelwearing.cpp b/indra/newview/llpanelwearing.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpanelwearing.h b/indra/newview/llpanelwearing.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llparcelselection.cpp b/indra/newview/llparcelselection.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llparcelselection.h b/indra/newview/llparcelselection.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llparticipantlist.cpp b/indra/newview/llparticipantlist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llparticipantlist.h b/indra/newview/llparticipantlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpatchvertexarray.cpp b/indra/newview/llpatchvertexarray.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpatchvertexarray.h b/indra/newview/llpatchvertexarray.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingcharacter.cpp b/indra/newview/llpathfindingcharacter.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingcharacter.h b/indra/newview/llpathfindingcharacter.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingcharacterlist.cpp b/indra/newview/llpathfindingcharacterlist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingcharacterlist.h b/indra/newview/llpathfindingcharacterlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindinglinkset.cpp b/indra/newview/llpathfindinglinkset.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindinglinkset.h b/indra/newview/llpathfindinglinkset.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindinglinksetlist.cpp b/indra/newview/llpathfindinglinksetlist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindinglinksetlist.h b/indra/newview/llpathfindinglinksetlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingmanager.cpp b/indra/newview/llpathfindingmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingmanager.h b/indra/newview/llpathfindingmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingnavmesh.cpp b/indra/newview/llpathfindingnavmesh.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingnavmesh.h b/indra/newview/llpathfindingnavmesh.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingnavmeshstatus.cpp b/indra/newview/llpathfindingnavmeshstatus.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingnavmeshstatus.h b/indra/newview/llpathfindingnavmeshstatus.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingnavmeshzone.cpp b/indra/newview/llpathfindingnavmeshzone.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingnavmeshzone.h b/indra/newview/llpathfindingnavmeshzone.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingobject.cpp b/indra/newview/llpathfindingobject.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingobject.h b/indra/newview/llpathfindingobject.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingobjectlist.cpp b/indra/newview/llpathfindingobjectlist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingobjectlist.h b/indra/newview/llpathfindingobjectlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingpathtool.cpp b/indra/newview/llpathfindingpathtool.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpathfindingpathtool.h b/indra/newview/llpathfindingpathtool.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpersistentnotificationstorage.cpp b/indra/newview/llpersistentnotificationstorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpersistentnotificationstorage.h b/indra/newview/llpersistentnotificationstorage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llphysicsmotion.cpp b/indra/newview/llphysicsmotion.cpp
old mode 100644
new mode 100755
index 3ee0746412f826b37ac211cebc4237bdde72b5a7..18b85cc9c3bc4796bbddd69b4902c72a1be5741d
--- a/indra/newview/llphysicsmotion.cpp
+++ b/indra/newview/llphysicsmotion.cpp
@@ -428,13 +428,13 @@ F32 LLPhysicsMotion::toLocal(const LLVector3 &world)
 F32 LLPhysicsMotion::calculateVelocity_local()
 {
 	const F32 world_to_model_scale = 100.0f;
-	LLJoint *joint = mJointState->getJoint();
-	const LLVector3 position_world = joint->getWorldPosition();
-	const LLVector3 last_position_world = mPosition_world;
+        LLJoint *joint = mJointState->getJoint();
+        const LLVector3 position_world = joint->getWorldPosition();
+        const LLVector3 last_position_world = mPosition_world;
 	const LLVector3 positionchange_world = (position_world-last_position_world) * world_to_model_scale;
-	const LLVector3 velocity_world = positionchange_world;
-	const F32 velocity_local = toLocal(velocity_world);
-	return velocity_local;
+        const LLVector3 velocity_world = positionchange_world;
+        const F32 velocity_local = toLocal(velocity_world);
+        return velocity_local;
 }
 
 F32 LLPhysicsMotion::calculateAcceleration_local(const F32 velocity_local)
diff --git a/indra/newview/llphysicsmotion.h b/indra/newview/llphysicsmotion.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llphysicsshapebuilderutil.cpp b/indra/newview/llphysicsshapebuilderutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llphysicsshapebuilderutil.h b/indra/newview/llphysicsshapebuilderutil.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llplacesfolderview.cpp b/indra/newview/llplacesfolderview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llplacesfolderview.h b/indra/newview/llplacesfolderview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llplacesinventorybridge.cpp b/indra/newview/llplacesinventorybridge.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llplacesinventorybridge.h b/indra/newview/llplacesinventorybridge.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llplacesinventorypanel.cpp b/indra/newview/llplacesinventorypanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llplacesinventorypanel.h b/indra/newview/llplacesinventorypanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpopupview.cpp b/indra/newview/llpopupview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpopupview.h b/indra/newview/llpopupview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpostcard.cpp b/indra/newview/llpostcard.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpostcard.h b/indra/newview/llpostcard.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreview.cpp b/indra/newview/llpreview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreview.h b/indra/newview/llpreview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewanim.cpp b/indra/newview/llpreviewanim.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewanim.h b/indra/newview/llpreviewanim.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewgesture.cpp b/indra/newview/llpreviewgesture.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewgesture.h b/indra/newview/llpreviewgesture.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewnotecard.cpp b/indra/newview/llpreviewnotecard.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewnotecard.h b/indra/newview/llpreviewnotecard.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewscript.cpp b/indra/newview/llpreviewscript.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewscript.h b/indra/newview/llpreviewscript.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewsound.cpp b/indra/newview/llpreviewsound.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewsound.h b/indra/newview/llpreviewsound.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewtexture.cpp b/indra/newview/llpreviewtexture.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llpreviewtexture.h b/indra/newview/llpreviewtexture.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llproductinforequest.cpp b/indra/newview/llproductinforequest.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llproductinforequest.h b/indra/newview/llproductinforequest.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llprogressview.cpp b/indra/newview/llprogressview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llprogressview.h b/indra/newview/llprogressview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llrecentpeople.cpp b/indra/newview/llrecentpeople.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llrecentpeople.h b/indra/newview/llrecentpeople.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llregioninfomodel.cpp b/indra/newview/llregioninfomodel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llregioninfomodel.h b/indra/newview/llregioninfomodel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llregionposition.cpp b/indra/newview/llregionposition.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llregionposition.h b/indra/newview/llregionposition.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llremoteparcelrequest.cpp b/indra/newview/llremoteparcelrequest.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llremoteparcelrequest.h b/indra/newview/llremoteparcelrequest.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llresourcedata.h b/indra/newview/llresourcedata.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llrootview.h b/indra/newview/llrootview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsavedsettingsglue.cpp b/indra/newview/llsavedsettingsglue.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsavedsettingsglue.h b/indra/newview/llsavedsettingsglue.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsaveoutfitcombobtn.cpp b/indra/newview/llsaveoutfitcombobtn.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsaveoutfitcombobtn.h b/indra/newview/llsaveoutfitcombobtn.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsceneview.cpp b/indra/newview/llsceneview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsceneview.h b/indra/newview/llsceneview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llscreenchannel.cpp b/indra/newview/llscreenchannel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llscreenchannel.h b/indra/newview/llscreenchannel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llscriptfloater.cpp b/indra/newview/llscriptfloater.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llscriptfloater.h b/indra/newview/llscriptfloater.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llscrollingpanelparam.cpp b/indra/newview/llscrollingpanelparam.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llscrollingpanelparam.h b/indra/newview/llscrollingpanelparam.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llscrollingpanelparambase.cpp b/indra/newview/llscrollingpanelparambase.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llscrollingpanelparambase.h b/indra/newview/llscrollingpanelparambase.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsearchcombobox.cpp b/indra/newview/llsearchcombobox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsearchcombobox.h b/indra/newview/llsearchcombobox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsearchhistory.cpp b/indra/newview/llsearchhistory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsearchhistory.h b/indra/newview/llsearchhistory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsecapi.cpp b/indra/newview/llsecapi.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsecapi.h b/indra/newview/llsecapi.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsechandler_basic.cpp b/indra/newview/llsechandler_basic.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsechandler_basic.h b/indra/newview/llsechandler_basic.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llselectmgr.cpp b/indra/newview/llselectmgr.cpp
old mode 100644
new mode 100755
index 4681efd3e5901335ca04f36ce61ac7d1ef1b8d38..0cbdbe16a39342d21726d44e689536afdc9cce48
--- a/indra/newview/llselectmgr.cpp
+++ b/indra/newview/llselectmgr.cpp
@@ -29,6 +29,7 @@
 // file include
 #define LLSELECTMGR_CPP
 #include "llselectmgr.h"
+#include "llmaterialmgr.h"
 
 // library includes
 #include "llcachename.h"
@@ -103,7 +104,6 @@ const F32 SILHOUETTE_UPDATE_THRESHOLD_SQUARED = 0.02f;
 const S32 MAX_ACTION_QUEUE_SIZE = 20;
 const S32 MAX_SILS_PER_FRAME = 50;
 const S32 MAX_OBJECTS_PER_PACKET = 254;
-const S32 TE_SELECT_MASK_ALL = 0xFFFFFFFF;
 
 //
 // Globals
@@ -188,6 +188,7 @@ LLSelectMgr::LLSelectMgr()
    mDebugSelectMgr(LLCachedControl<bool>(gSavedSettings, "DebugSelectMgr", FALSE))
 {
 	mTEMode = FALSE;
+	mTextureChannel = LLRender::DIFFUSE_MAP;
 	mLastCameraPos.clearVec();
 
 	sHighlightThickness	= gSavedSettings.getF32("SelectionHighlightThickness");
@@ -236,6 +237,8 @@ void LLSelectMgr::clearSelections()
 	mHighlightedObjects->deleteAllNodes();
 	mRectSelectedObjects.clear();
 	mGridObjects.deleteAllNodes();
+
+	LLPipeline::setRenderHighlightTextureChannel(LLRender::DIFFUSE_MAP);
 }
 
 void LLSelectMgr::update()
@@ -815,6 +818,7 @@ void LLSelectMgr::addAsFamily(std::vector<LLViewerObject*>& objects, BOOL add_to
 			if (objectp->getNumTEs() > 0)
 			{
 				nodep->selectAllTEs(TRUE);
+				objectp->setAllTESelected(true);
 			}
 			else
 			{
@@ -843,6 +847,10 @@ void LLSelectMgr::addAsIndividual(LLViewerObject *objectp, S32 face, BOOL undoab
 	// check to see if object is already in list
 	LLSelectNode *nodep = mSelectedObjects->findNode(objectp);
 
+	// Reset (in anticipation of being set to an appropriate value by panel refresh, if they're up)
+	//
+	setTextureChannel(LLRender::DIFFUSE_MAP);
+
 	// if not in list, add it
 	if (!nodep)
 	{
@@ -872,10 +880,12 @@ void LLSelectMgr::addAsIndividual(LLViewerObject *objectp, S32 face, BOOL undoab
 	else if (face == SELECT_ALL_TES)
 	{
 		nodep->selectAllTEs(TRUE);
+		objectp->setAllTESelected(true);
 	}
 	else if (0 <= face && face < SELECT_MAX_TES)
 	{
 		nodep->selectTE(face, TRUE);
+		objectp->setTESelected(face, true);
 	}
 	else
 	{
@@ -1095,6 +1105,7 @@ LLObjectSelectionHandle LLSelectMgr::selectHighlightedObjects()
 
 		// flag this object as selected
 		objectp->setSelected(TRUE);
+		objectp->setAllTESelected(true);
 
 		mSelectedObjects->mSelectType = getSelectTypeForObject(objectp);
 
@@ -1318,6 +1329,7 @@ void LLSelectMgr::remove(LLViewerObject *objectp, S32 te, BOOL undoable)
 		if (nodep->isTESelected(te))
 		{
 			nodep->selectTE(te, FALSE);
+			objectp->setTESelected(te, false);
 		}
 		else
 		{
@@ -2004,6 +2016,76 @@ void LLSelectMgr::selectionSetGlow(F32 glow)
 	mSelectedObjects->applyToObjects( &func2 );
 }
 
+void LLSelectMgr::selectionSetMaterialParams(LLSelectedTEMaterialFunctor* material_func)
+{
+	struct f1 : public LLSelectedTEFunctor
+	{
+		LLMaterialPtr mMaterial;
+		f1(LLSelectedTEMaterialFunctor* material_func) : _material_func(material_func) {}
+
+		bool apply(LLViewerObject* object, S32 face)
+		{
+			if (object && object->permModify() && _material_func)
+			{
+				LLTextureEntry* tep = object->getTE(face);
+				if (tep)
+				{
+					LLMaterialPtr current_material = tep->getMaterialParams();
+					_material_func->apply(object, face, tep, current_material);
+				}
+			}
+			return true;
+		}
+
+		LLSelectedTEMaterialFunctor* _material_func;
+	} func1(material_func);
+	mSelectedObjects->applyToTEs( &func1 );
+
+	struct f2 : public LLSelectedObjectFunctor
+	{
+		virtual bool apply(LLViewerObject* object)
+		{
+			if (object->permModify())
+			{
+				object->sendTEUpdate();
+			}
+			return true;
+		}
+	} func2;
+	mSelectedObjects->applyToObjects( &func2 );
+}
+
+void LLSelectMgr::selectionRemoveMaterial()
+{
+	struct f1 : public LLSelectedTEFunctor
+	{
+		bool apply(LLViewerObject* object, S32 face)
+		{
+			if (object->permModify())
+			{
+			        LL_DEBUGS("Materials") << "Removing material from object " << object->getID() << " face " << face << LL_ENDL;
+				LLMaterialMgr::getInstance()->remove(object->getID(),face);
+				object->setTEMaterialParams(face, NULL);
+			}
+			return true;
+		}
+	} func1;
+	mSelectedObjects->applyToTEs( &func1 );
+
+	struct f2 : public LLSelectedObjectFunctor
+	{
+		virtual bool apply(LLViewerObject* object)
+		{
+			if (object->permModify())
+			{
+				object->sendTEUpdate();
+			}
+			return true;
+		}
+	} func2;
+	mSelectedObjects->applyToObjects( &func2 );
+}
+
 
 //-----------------------------------------------------------------------------
 // findObjectPermissions()
@@ -2425,19 +2507,66 @@ void LLSelectMgr::adjustTexturesByScale(BOOL send_to_sim, BOOL stretch)
 					continue;
 				}
 				
-				LLVector3 scale_ratio = selectNode->mTextureScaleRatios[te_num]; 
 				LLVector3 object_scale = object->getScale();
+				LLVector3 diffuse_scale_ratio  = selectNode->mTextureScaleRatios[te_num]; 
+
+				// We like these to track together. NORSPEC-96
+				//
+				LLVector3 normal_scale_ratio   = diffuse_scale_ratio; 
+				LLVector3 specular_scale_ratio = diffuse_scale_ratio; 
 				
 				// Apply new scale to face
 				if (planar)
 				{
-					object->setTEScale(te_num, 1.f/object_scale.mV[s_axis]*scale_ratio.mV[s_axis],
-										1.f/object_scale.mV[t_axis]*scale_ratio.mV[t_axis]);
+					F32 diffuse_scale_s = diffuse_scale_ratio.mV[s_axis]/object_scale.mV[s_axis];
+					F32 diffuse_scale_t = diffuse_scale_ratio.mV[t_axis]/object_scale.mV[t_axis];
+
+					F32 normal_scale_s = normal_scale_ratio.mV[s_axis]/object_scale.mV[s_axis];
+					F32 normal_scale_t = normal_scale_ratio.mV[t_axis]/object_scale.mV[t_axis];
+
+					F32 specular_scale_s = specular_scale_ratio.mV[s_axis]/object_scale.mV[s_axis];
+					F32 specular_scale_t = specular_scale_ratio.mV[t_axis]/object_scale.mV[t_axis];
+
+					object->setTEScale(te_num, diffuse_scale_s, diffuse_scale_t);
+
+					LLTextureEntry* tep = object->getTE(te_num);
+
+					if (tep && !tep->getMaterialParams().isNull())
+					{
+						LLMaterialPtr orig = tep->getMaterialParams();
+						LLMaterialPtr p = new LLMaterial(orig->asLLSD());
+						p->setNormalRepeat(normal_scale_s, normal_scale_t);
+						p->setSpecularRepeat(specular_scale_s, specular_scale_t);
+
+						LLMaterialMgr::getInstance()->put(object->getID(), te_num, *p);
+					}
 				}
 				else
 				{
-					object->setTEScale(te_num, scale_ratio.mV[s_axis]*object_scale.mV[s_axis],
-											scale_ratio.mV[t_axis]*object_scale.mV[t_axis]);
+
+					F32 diffuse_scale_s = diffuse_scale_ratio.mV[s_axis]*object_scale.mV[s_axis];
+					F32 diffuse_scale_t = diffuse_scale_ratio.mV[t_axis]*object_scale.mV[t_axis];
+
+					F32 normal_scale_s = normal_scale_ratio.mV[s_axis]*object_scale.mV[s_axis];
+					F32 normal_scale_t = normal_scale_ratio.mV[t_axis]*object_scale.mV[t_axis];
+
+					F32 specular_scale_s = specular_scale_ratio.mV[s_axis]*object_scale.mV[s_axis];
+					F32 specular_scale_t = specular_scale_ratio.mV[t_axis]*object_scale.mV[t_axis];
+
+					object->setTEScale(te_num, diffuse_scale_s,diffuse_scale_t);
+
+					LLTextureEntry* tep = object->getTE(te_num);
+
+					if (tep && !tep->getMaterialParams().isNull())
+					{
+						LLMaterialPtr orig = tep->getMaterialParams();
+
+						LLMaterialPtr p = new LLMaterial(orig->asLLSD());
+						p->setNormalRepeat(normal_scale_s, normal_scale_t);
+						p->setSpecularRepeat(specular_scale_s, specular_scale_t);
+
+						LLMaterialMgr::getInstance()->put(object->getID(), te_num, *p);
+					}
 				}
 				send = send_to_sim;
 			}
@@ -4398,7 +4527,8 @@ void LLSelectMgr::saveSelectedObjectTransform(EActionType action_type)
 	struct f : public LLSelectedNodeFunctor
 	{
 		EActionType mActionType;
-		f(EActionType a) : mActionType(a) {}
+		LLSelectMgr* mManager;
+		f(EActionType a, LLSelectMgr* p) : mActionType(a), mManager(p) {}
 		virtual bool apply(LLSelectNode* selectNode)
 		{
 			LLViewerObject*	object = selectNode->getObject();
@@ -4445,10 +4575,10 @@ void LLSelectMgr::saveSelectedObjectTransform(EActionType action_type)
 			}
 		
 			selectNode->mSavedScale = object->getScale();
-			selectNode->saveTextureScaleRatios();
+			selectNode->saveTextureScaleRatios(mManager->mTextureChannel);			
 			return true;
 		}
-	} func(action_type);
+	} func(action_type, this);
 	getSelection()->applyToNodes(&func);	
 	
 	mSavedSelectionBBox = getBBoxOfSelection();
@@ -5759,36 +5889,43 @@ void LLSelectNode::saveTextures(const uuid_vec_t& textures)
 	}
 }
 
-void LLSelectNode::saveTextureScaleRatios()
+void LLSelectNode::saveTextureScaleRatios(LLRender::eTexIndex index_to_query)
 {
 	mTextureScaleRatios.clear();
+
 	if (mObject.notNull())
 	{
+		
+		LLVector3 scale = mObject->getScale();
+
 		for (U8 i = 0; i < mObject->getNumTEs(); i++)
 		{
-			F32 s,t;
+			F32 diffuse_s = 1.0f;
+			F32 diffuse_t = 1.0f;
+			
+			LLVector3 v;
 			const LLTextureEntry* tep = mObject->getTE(i);
-			tep->getScale(&s,&t);
-			U32 s_axis = 0;
-			U32 t_axis = 0;
+			if (!tep)
+				continue;
 
+			U32 s_axis = VX;
+			U32 t_axis = VY;
 			LLPrimitive::getTESTAxes(i, &s_axis, &t_axis);
 
-			LLVector3 v;
-			LLVector3 scale = mObject->getScale();
-
+			tep->getScale(&diffuse_s,&diffuse_t);
+			
 			if (tep->getTexGen() == LLTextureEntry::TEX_GEN_PLANAR)
 			{
-				v.mV[s_axis] = s*scale.mV[s_axis];
-				v.mV[t_axis] = t*scale.mV[t_axis];
+				v.mV[s_axis] = diffuse_s*scale.mV[s_axis];
+				v.mV[t_axis] = diffuse_t*scale.mV[t_axis];
+				mTextureScaleRatios.push_back(v);
 			}
 			else
 			{
-				v.mV[s_axis] = s/scale.mV[s_axis];
-				v.mV[t_axis] = t/scale.mV[t_axis];
-			}
-
-			mTextureScaleRatios.push_back(v);
+				v.mV[s_axis] = diffuse_s/scale.mV[s_axis];
+				v.mV[t_axis] = diffuse_t/scale.mV[t_axis];
+				mTextureScaleRatios.push_back(v);
+			}			
 		}
 	}
 }
diff --git a/indra/newview/llselectmgr.h b/indra/newview/llselectmgr.h
old mode 100644
new mode 100755
index cc78e358691dcb5b6f6f3138d3874a4278c24fd5..d4b736640c0947cbb2125d60d584dbe8599d8e08
--- a/indra/newview/llselectmgr.h
+++ b/indra/newview/llselectmgr.h
@@ -43,10 +43,12 @@
 #include "llpermissions.h"
 #include "llcontrol.h"
 #include "llviewerobject.h"	// LLObjectSelection::getSelectedTEValue template
+#include "llmaterial.h"
 
 #include <deque>
 #include <boost/iterator/filter_iterator.hpp>
 #include <boost/signals2.hpp>
+#include <boost/make_shared.hpp>	// boost::make_shared
 
 class LLMessageSystem;
 class LLViewerTexture;
@@ -83,6 +85,12 @@ struct LLSelectedTEFunctor
 	virtual bool apply(LLViewerObject* object, S32 face) = 0;
 };
 
+struct LLSelectedTEMaterialFunctor
+{
+	virtual ~LLSelectedTEMaterialFunctor() {};
+	virtual LLMaterialPtr apply(LLViewerObject* object, S32 face, LLTextureEntry* tep, LLMaterialPtr& current_material) = 0;
+};
+
 template <typename T> struct LLSelectedTEGetFunctor
 {
 	virtual ~LLSelectedTEGetFunctor() {};
@@ -121,6 +129,8 @@ typedef enum e_selection_type
 	SELECT_TYPE_HUD
 }ESelectType;
 
+const S32 TE_SELECT_MASK_ALL = 0xFFFFFFFF;
+
 // Contains information about a selected object, particularly which TEs are selected.
 class LLSelectNode
 {
@@ -143,7 +153,7 @@ class LLSelectNode
 	// *NOTE: invalidate stored textures and colors when # faces change
 	void saveColors();
 	void saveTextures(const uuid_vec_t& textures);
-	void saveTextureScaleRatios();
+	void saveTextureScaleRatios(LLRender::eTexIndex index_to_query);
 
 	BOOL allowOperationOnNode(PermissionBit op, U64 group_proxy_power) const;
 
@@ -510,6 +520,11 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 	void saveSelectedObjectColors();
 	void saveSelectedObjectTextures();
 
+	// Sets which texture channel to query for scale and rot of display
+	// and depends on UI state of LLPanelFace when editing
+	void setTextureChannel(LLRender::eTexIndex texIndex) { mTextureChannel = texIndex; }
+	LLRender::eTexIndex getTextureChannel() { return mTextureChannel; }
+
 	void selectionUpdatePhysics(BOOL use_physics);
 	void selectionUpdateTemporary(BOOL is_temporary);
 	void selectionUpdatePhantom(BOOL is_ghost);
@@ -540,6 +555,8 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 	void selectionSetClickAction(U8 action);
 	void selectionSetIncludeInSearch(bool include_in_search);
 	void selectionSetGlow(const F32 glow);
+	void selectionSetMaterialParams(LLSelectedTEMaterialFunctor* material_func);
+	void selectionRemoveMaterial();
 
 	void selectionSetObjectPermissions(U8 perm_field, BOOL set, U32 perm_mask, BOOL override = FALSE);
 	void selectionSetObjectName(const std::string& name);
@@ -771,6 +788,7 @@ class LLSelectMgr : public LLEditMenuHandler, public LLSingleton<LLSelectMgr>
 	EGridMode				mGridMode;
 
 	BOOL					mTEMode;			// render te
+	LLRender::eTexIndex	mTextureChannel; // diff, norm, or spec, depending on UI editing mode
 	LLVector3d				mSelectionCenterGlobal;
 	LLBBox					mSelectionBBox;
 
diff --git a/indra/newview/llshareavatarhandler.cpp b/indra/newview/llshareavatarhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepanelappearance.cpp b/indra/newview/llsidepanelappearance.cpp
old mode 100644
new mode 100755
index 74fa5a87bba7b96cf49046ce58da33e501b2bf49..df413ab849aee3ebc3e3f713da1e3b51170ca3e6
--- a/indra/newview/llsidepanelappearance.cpp
+++ b/indra/newview/llsidepanelappearance.cpp
@@ -231,7 +231,7 @@ void LLSidepanelAppearance::updateToVisibility(const LLSD &new_visibility)
 		{
 			gAgentCamera.changeCameraToDefault();
 			gAgentCamera.resetView();
-		}	
+		}
 	}
 }
 
diff --git a/indra/newview/llsidepanelappearance.h b/indra/newview/llsidepanelappearance.h
old mode 100644
new mode 100755
index 762f557a8004e471b1a9f9b14a255e3f0817ff17..b0a6b9cf916da7107891a817d2132f965c4afc17
--- a/indra/newview/llsidepanelappearance.h
+++ b/indra/newview/llsidepanelappearance.h
@@ -47,7 +47,7 @@ class LLSidepanelAppearance : public LLPanel
 	virtual ~LLSidepanelAppearance();
 
 	/*virtual*/ BOOL postBuild();
-	/*virtual*/ void onOpen(const LLSD& key);	
+	/*virtual*/ void onOpen(const LLSD& key);
 
 	void refreshCurrentOutfitName(const std::string& name = "");
 
diff --git a/indra/newview/llsidepanelinventory.cpp b/indra/newview/llsidepanelinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepanelinventory.h b/indra/newview/llsidepanelinventory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepanelinventorysubpanel.cpp b/indra/newview/llsidepanelinventorysubpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepanelinventorysubpanel.h b/indra/newview/llsidepanelinventorysubpanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepaneliteminfo.cpp b/indra/newview/llsidepaneliteminfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepaneliteminfo.h b/indra/newview/llsidepaneliteminfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepaneltaskinfo.cpp b/indra/newview/llsidepaneltaskinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidepaneltaskinfo.h b/indra/newview/llsidepaneltaskinfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidetraypanelcontainer.cpp b/indra/newview/llsidetraypanelcontainer.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsidetraypanelcontainer.h b/indra/newview/llsidetraypanelcontainer.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsimplestat.h b/indra/newview/llsimplestat.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsky.cpp b/indra/newview/llsky.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsky.h b/indra/newview/llsky.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llslurl.cpp b/indra/newview/llslurl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llslurl.h b/indra/newview/llslurl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llspatialpartition.cpp b/indra/newview/llspatialpartition.cpp
old mode 100644
new mode 100755
index f85e855fd3a87549da2ee1faecc14906daf024f2..941c5787835c61a42d80a9ca2488a357e321423e
--- a/indra/newview/llspatialpartition.cpp
+++ b/indra/newview/llspatialpartition.cpp
@@ -1498,6 +1498,8 @@ BOOL LLSpatialGroup::rebound()
 	if (mOctreeNode->getChildCount() == 1 && mOctreeNode->getElementCount() == 0)
 	{
 		LLSpatialGroup* group = (LLSpatialGroup*) mOctreeNode->getChild(0)->getListener(0);
+
+		//rebound single child
 		group->rebound();
 		
 		//copy single child's bounding box
@@ -1506,10 +1508,11 @@ BOOL LLSpatialGroup::rebound()
 		mExtents[0] = group->mExtents[0];
 		mExtents[1] = group->mExtents[1];
 		
+		//treat this node as a "chute" to a deeper level of the tree
 		group->setState(SKIP_FRUSTUM_CHECK);
 	}
 	else if (mOctreeNode->isLeaf())
-	{ //copy object bounding box if this is a leaf
+	{ //copy object bounding box if this is a leaf 
 		boundObjects(TRUE, mExtents[0], mExtents[1]);
 		mBounds[0] = mObjectBounds[0];
 		mBounds[1] = mObjectBounds[1];
@@ -1518,14 +1521,17 @@ BOOL LLSpatialGroup::rebound()
 	{
 		LLVector4a& newMin = mExtents[0];
 		LLVector4a& newMax = mExtents[1];
+		
+		//get bounding box of first child
 		LLSpatialGroup* group = (LLSpatialGroup*) mOctreeNode->getChild(0)->getListener(0);
 		group->clearState(SKIP_FRUSTUM_CHECK);
 		group->rebound();
+
 		//initialize to first child
 		newMin = group->mExtents[0];
 		newMax = group->mExtents[1];
 
-		//first, rebound children
+		//rebound remaining children, expanding bounding box to encompass children
 		for (U32 i = 1; i < mOctreeNode->getChildCount(); i++)
 		{
 			group = (LLSpatialGroup*) mOctreeNode->getChild(i)->getListener(0);
@@ -2506,7 +2512,7 @@ void pushBufferVerts(LLVertexBuffer* buffer, U32 mask)
 	}
 }
 
-void pushBufferVerts(LLSpatialGroup* group, U32 mask)
+void pushBufferVerts(LLSpatialGroup* group, U32 mask, bool push_alpha = true)
 {
 	if (group->mSpatialPartition->mRenderByGroup)
 	{
@@ -2515,7 +2521,10 @@ void pushBufferVerts(LLSpatialGroup* group, U32 mask)
 			LLDrawInfo* params = *(group->mDrawMap.begin()->second.begin());
 			LLRenderPass::applyModelMatrix(*params);
 		
-			pushBufferVerts(group->mVertexBuffer, mask);
+			if (push_alpha)
+			{
+				pushBufferVerts(group->mVertexBuffer, mask);
+			}
 
 			for (LLSpatialGroup::buffer_map_t::iterator i = group->mBufferMap.begin(); i != group->mBufferMap.end(); ++i)
 			{
@@ -2529,10 +2538,10 @@ void pushBufferVerts(LLSpatialGroup* group, U32 mask)
 			}
 		}
 	}
-	else
+	/*else
 	{
-		drawBox(group->mBounds[0], group->mBounds[1]);
-	}
+		//drawBox(group->mBounds[0], group->mBounds[1]);
+	}*/
 }
 
 void pushVertsColorCoded(LLSpatialGroup* group, U32 mask)
@@ -2705,17 +2714,53 @@ void renderOctree(LLSpatialGroup* group)
 //	drawBoxOutline(LLVector3(node->getCenter()), LLVector3(node->getSize()));
 }
 
+std::set<LLSpatialGroup*> visible_selected_groups;
+
 void renderVisibility(LLSpatialGroup* group, LLCamera* camera)
 {
-	LLGLEnable blend(GL_BLEND);
+	/*LLGLEnable blend(GL_BLEND);
 	gGL.setSceneBlendType(LLRender::BT_ALPHA);
 	LLGLEnable cull(GL_CULL_FACE);
-	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+	glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);*/
 
-	BOOL render_objects = (!LLPipeline::sUseOcclusion || !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) && group->isVisible() &&
+	/*BOOL render_objects = (!LLPipeline::sUseOcclusion || !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) && group->isVisible() &&
 							!group->isEmpty();
 
+
 	if (render_objects)
+	{
+		LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+
+		LLGLDisable blend(GL_BLEND);
+		gGL.diffuseColor4f(0.f, 0.75f, 0.f,0.5f);
+		pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX, false);
+		
+		glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+		glLineWidth(4.f);
+		gGL.diffuseColor4f(0.f, 0.5f, 0.f, 1.f);
+		pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX, false);
+		glLineWidth(1.f);
+		glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+
+		bool selected = false;
+		
+		for (LLSpatialGroup::element_iter iter = group->getDataBegin(); iter != group->getDataEnd(); ++iter)
+		{
+			LLDrawable* drawable = *iter;
+			if (drawable->getVObj().notNull() && drawable->getVObj()->isSelected())
+			{
+				selected = true;
+				break;
+			}
+		}
+		
+		if (selected)
+		{ //store for rendering occlusion volume as overlay
+			visible_selected_groups.insert(group);
+		}
+	}*/		
+
+	/*if (render_objects)
 	{
 		LLGLDepthTest depth_under(GL_TRUE, GL_FALSE, GL_GREATER);
 		gGL.diffuseColor4f(0, 0.5f, 0, 0.5f);
@@ -2740,6 +2785,59 @@ void renderVisibility(LLSpatialGroup* group, LLCamera* camera)
 			gGL.diffuseColor4f(0.f, 0.75f, 0.f,0.5f);
 			gGL.diffuseColor4f(0.f, 0.75f, 0.f, 0.5f);
 			pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX);
+		
+			bool selected = false;
+		
+			for (LLSpatialGroup::element_iter iter = group->getDataBegin(); iter != group->getDataEnd(); ++iter)
+			{
+				LLDrawable* drawable = *iter;
+				if (drawable->getVObj().notNull() && drawable->getVObj()->isSelected())
+				{
+					selected = true;
+					break;
+				}
+			}
+		
+			if (selected)
+			{ //store for rendering occlusion volume as overlay
+				visible_selected_groups.insert(group);
+			}
+		}		
+	}*/
+}
+
+void renderXRay(LLSpatialGroup* group, LLCamera* camera)
+{
+	BOOL render_objects = (!LLPipeline::sUseOcclusion || !group->isOcclusionState(LLSpatialGroup::OCCLUDED)) && group->isVisible() &&
+							!group->isEmpty();
+	
+	if (render_objects)
+	{
+		pushBufferVerts(group, LLVertexBuffer::MAP_VERTEX, false);
+
+		bool selected = false;
+
+		for (LLSpatialGroup::element_iter iter = group->getDataBegin(); iter != group->getDataEnd(); ++iter)
+		{
+			LLDrawable* drawable = *iter;
+			if (drawable->getVObj().notNull() && drawable->getVObj()->isSelected())
+			{
+				selected = true;
+				break;
+			}
+		}
+
+		if (selected)
+		{ //store for rendering occlusion volume as overlay
+
+			if (!group->mSpatialPartition->isBridge())
+			{
+				visible_selected_groups.insert(group);
+			}
+			else
+			{
+				visible_selected_groups.insert(group->mSpatialPartition->asBridge()->getSpatialGroup());
+			}
 		}
 	}
 }
@@ -3039,9 +3137,9 @@ void renderNormals(LLDrawable* drawablep)
 				gGL.vertex3fv(face.mPositions[j].getF32ptr());
 				gGL.vertex3fv(p.getF32ptr());
 				
-				if (face.mBinormals)
+				if (face.mTangents)
 				{
-					n.setMul(face.mBinormals[j], scale);
+					n.setMul(face.mTangents[j], scale);
 					p.setAdd(face.mPositions[j], n);
 				
 					gGL.diffuseColor4f(0,1,1,1);
@@ -3888,11 +3986,17 @@ void renderRaycast(LLDrawable* drawablep)
 					gGL.translatef(trans.mV[0], trans.mV[1], trans.mV[2]);					
 					gGL.multMatrix((F32*) vobj->getRelativeXform().mMatrix);
 
-					LLVector3 start, end;
+					LLVector4a start, end;
 					if (transform)
 					{
-						start = vobj->agentPositionToVolume(gDebugRaycastStart);
-						end = vobj->agentPositionToVolume(gDebugRaycastEnd);
+						LLVector3 v_start(gDebugRaycastStart.getF32ptr());
+						LLVector3 v_end(gDebugRaycastEnd.getF32ptr());
+
+						v_start = vobj->agentPositionToVolume(v_start);
+						v_end = vobj->agentPositionToVolume(v_end);
+
+						start.load3(v_start.mV);
+						end.load3(v_end.mV);
 					}
 					else
 					{
@@ -3900,11 +4004,8 @@ void renderRaycast(LLDrawable* drawablep)
 						end = gDebugRaycastEnd;
 					}
 
-					LLVector4a starta, enda;
-					starta.load3(start.mV);
-					enda.load3(end.mV);
 					LLVector4a dir;
-					dir.setSub(enda, starta);
+					dir.setSub(end, start);
 
 					gGL.flush();
 					glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);				
@@ -3927,7 +4028,7 @@ void renderRaycast(LLDrawable* drawablep)
 							((LLVolumeFace*) &face)->createOctree(); 
 						}
 
-						LLRenderOctreeRaycast render(starta, dir, &t);
+						LLRenderOctreeRaycast render(start, dir, &t);
 					
 						render.traverse(face.mOctree);
 					}
@@ -3952,10 +4053,18 @@ void renderRaycast(LLDrawable* drawablep)
 			// draw intersection point
 			gGL.pushMatrix();
 			gGL.loadMatrix(gGLModelView);
-			LLVector3 translate = gDebugRaycastIntersection;
+			LLVector3 translate(gDebugRaycastIntersection.getF32ptr());
 			gGL.translatef(translate.mV[0], translate.mV[1], translate.mV[2]);
 			LLCoordFrame orient;
-			orient.lookDir(gDebugRaycastNormal, gDebugRaycastBinormal);
+			LLVector4a debug_binormal;
+			
+			debug_binormal.setCross3(gDebugRaycastNormal, gDebugRaycastTangent);
+			debug_binormal.mul(gDebugRaycastTangent.getF32ptr()[3]);
+
+			LLVector3 normal(gDebugRaycastNormal.getF32ptr());
+			LLVector3 binormal(debug_binormal.getF32ptr());
+						
+			orient.lookDir(normal, binormal);
 			LLMatrix4 rotation;
 			orient.getRotMatrixToParent(rotation);
 			gGL.multMatrix((float*)rotation.mMatrix);
@@ -4199,6 +4308,48 @@ class LLOctreeRenderNonOccluded : public LLOctreeTraveler<LLDrawable>
 	}
 };
 
+class LLOctreeRenderXRay : public LLOctreeTraveler<LLDrawable>
+{
+public:
+	LLCamera* mCamera;
+	LLOctreeRenderXRay(LLCamera* camera): mCamera(camera) {}
+	
+	virtual void traverse(const LLSpatialGroup::OctreeNode* node)
+	{
+		LLSpatialGroup* group = (LLSpatialGroup*) node->getListener(0);
+		
+		if (!mCamera || mCamera->AABBInFrustumNoFarClip(group->mBounds[0], group->mBounds[1]))
+		{
+			node->accept(this);
+			stop_glerror();
+
+			for (U32 i = 0; i < node->getChildCount(); i++)
+			{
+				traverse(node->getChild(i));
+				stop_glerror();
+			}
+			
+			//render visibility wireframe
+			if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
+			{
+				group->rebuildGeom();
+				group->rebuildMesh();
+
+				gGL.flush();
+				gGL.pushMatrix();
+				gGLLastMatrix = NULL;
+				gGL.loadMatrix(gGLModelView);
+				renderXRay(group, mCamera);
+				stop_glerror();
+				gGLLastMatrix = NULL;
+				gGL.popMatrix();
+			}
+		}
+	}
+
+	virtual void visit(const LLSpatialGroup::OctreeNode* node) {}
+
+};
 
 class LLOctreeRenderPhysicsShapes : public LLOctreeTraveler<LLDrawable>
 {
@@ -4426,6 +4577,26 @@ void LLSpatialPartition::renderDebug()
 	LLOctreeRenderNonOccluded render_debug(camera);
 	render_debug.traverse(mOctree);
 
+
+	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION))
+	{
+		{
+			LLGLEnable cull(GL_CULL_FACE);
+			
+			LLGLEnable blend(GL_BLEND);
+			LLGLDepthTest depth_under(GL_TRUE, GL_FALSE, GL_GREATER);
+			glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
+			gGL.diffuseColor4f(0.5f, 0.0f, 0, 0.25f);
+
+			LLGLEnable offset(GL_POLYGON_OFFSET_LINE);
+			glPolygonOffset(-1.f, -1.f);
+
+			LLOctreeRenderXRay xray(camera);
+			xray.traverse(mOctree);
+
+			glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
+		}
+	}
 	if (LLGLSLShader::sNoFixedFunction)
 	{
 		gDebugProgram.unbind();
@@ -4457,28 +4628,30 @@ BOOL LLSpatialPartition::isVisible(const LLVector3& v)
 	return TRUE;
 }
 
+LL_ALIGN_PREFIX(16)
 class LLOctreeIntersect : public LLSpatialGroup::OctreeTraveler
 {
 public:
-	LLVector3 mStart;
-	LLVector3 mEnd;
+	LL_ALIGN_16(LLVector4a mStart);
+	LL_ALIGN_16(LLVector4a mEnd);
+
 	S32       *mFaceHit;
-	LLVector3 *mIntersection;
+	LLVector4a *mIntersection;
 	LLVector2 *mTexCoord;
-	LLVector3 *mNormal;
-	LLVector3 *mBinormal;
+	LLVector4a *mNormal;
+	LLVector4a *mTangent;
 	LLDrawable* mHit;
 	BOOL mPickTransparent;
 
-	LLOctreeIntersect(LLVector3 start, LLVector3 end, BOOL pick_transparent,
-					  S32* face_hit, LLVector3* intersection, LLVector2* tex_coord, LLVector3* normal, LLVector3* binormal)
+	LLOctreeIntersect(const LLVector4a& start, const LLVector4a& end, BOOL pick_transparent,
+					  S32* face_hit, LLVector4a* intersection, LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
 		: mStart(start),
 		  mEnd(end),
 		  mFaceHit(face_hit),
 		  mIntersection(intersection),
 		  mTexCoord(tex_coord),
 		  mNormal(normal),
-		  mBinormal(binormal),
+		  mTangent(tangent),
 		  mHit(NULL),
 		  mPickTransparent(pick_transparent)
 	{
@@ -4509,23 +4682,22 @@ class LLOctreeIntersect : public LLSpatialGroup::OctreeTraveler
 			size = group->mBounds[1];
 			center = group->mBounds[0];
 			
-			LLVector3 local_start = mStart;
-			LLVector3 local_end   = mEnd;
+			LLVector4a local_start = mStart;
+			LLVector4a local_end   = mEnd;
 
 			if (group->mSpatialPartition->isBridge())
 			{
 				LLMatrix4 local_matrix = group->mSpatialPartition->asBridge()->mDrawable->getRenderMatrix();
 				local_matrix.invert();
-				
-				local_start = mStart * local_matrix;
-				local_end   = mEnd   * local_matrix;
-			}
 
-			LLVector4a start, end;
-			start.load3(local_start.mV);
-			end.load3(local_end.mV);
+				LLMatrix4a local_matrix4a;
+				local_matrix4a.loadu(local_matrix);
 
-			if (LLLineSegmentBoxIntersect(start, end, center, size))
+				local_matrix4a.affineTransform(mStart, local_start);
+				local_matrix4a.affineTransform(mEnd, local_end);
+			}
+
+			if (LLLineSegmentBoxIntersect(local_start, local_end, center, size))
 			{
 				check(child);
 			}
@@ -4556,14 +4728,14 @@ class LLOctreeIntersect : public LLSpatialGroup::OctreeTraveler
 
 			if (vobj)
 			{
-				LLVector3 intersection;
+				LLVector4a intersection;
 				bool skip_check = false;
 				if (vobj->isAvatar())
 				{
 					LLVOAvatar* avatar = (LLVOAvatar*) vobj;
 					if (avatar->isSelf() && LLFloater::isVisible(gFloaterTools))
 					{
-						LLViewerObject* hit = avatar->lineSegmentIntersectRiggedAttachments(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal);
+						LLViewerObject* hit = avatar->lineSegmentIntersectRiggedAttachments(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mTangent);
 						if (hit)
 						{
 							mEnd = intersection;
@@ -4579,7 +4751,7 @@ class LLOctreeIntersect : public LLSpatialGroup::OctreeTraveler
 					}
 				}
 
-				if (!skip_check && vobj->lineSegmentIntersect(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mBinormal))
+				if (!skip_check && vobj->lineSegmentIntersect(mStart, mEnd, -1, mPickTransparent, mFaceHit, &intersection, mTexCoord, mNormal, mTangent))
 				{
 					mEnd = intersection;  // shorten ray so we only find CLOSER hits
 					if (mIntersection)
@@ -4594,19 +4766,19 @@ class LLOctreeIntersect : public LLSpatialGroup::OctreeTraveler
 				
 		return false;
 	}
-};
+} LL_ALIGN_POSTFIX(16);
 
-LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+LLDrawable* LLSpatialPartition::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 													 BOOL pick_transparent,													
 													 S32* face_hit,                   // return the face hit
-													 LLVector3* intersection,         // return the intersection point
+													 LLVector4a* intersection,         // return the intersection point
 													 LLVector2* tex_coord,            // return the texture coordinates of the intersection point
-													 LLVector3* normal,               // return the surface normal at the intersection point
-													 LLVector3* bi_normal             // return the surface bi-normal at the intersection point
+													 LLVector4a* normal,               // return the surface normal at the intersection point
+													 LLVector4a* tangent			// return the surface tangent at the intersection point
 	)
 
 {
-	LLOctreeIntersect intersect(start, end, pick_transparent, face_hit, intersection, tex_coord, normal, bi_normal);
+	LLOctreeIntersect intersect(start, end, pick_transparent, face_hit, intersection, tex_coord, normal, tangent);
 	LLDrawable* drawable = intersect.check(mOctree);
 
 	return drawable;
@@ -4632,7 +4804,13 @@ LLDrawInfo::LLDrawInfo(U16 start, U16 end, U32 count, U32 offset,
 	mGroup(NULL),
 	mFace(NULL),
 	mDistance(0.f),
-	mDrawMode(LLRender::TRIANGLES)
+	mDrawMode(LLRender::TRIANGLES),
+	mMaterial(NULL),
+	mShaderMask(0),
+	mSpecColor(1.0f, 1.0f, 1.0f, 0.5f),
+	mEnvIntensity(0.0f),
+	mAlphaMaskCutoff(0.5f),
+	mDiffuseAlphaMode(0)
 {
 	mVertexBuffer->validateRange(mStart, mEnd, mCount, mOffset);
 	
diff --git a/indra/newview/llspatialpartition.h b/indra/newview/llspatialpartition.h
old mode 100644
new mode 100755
index b1706d9d35130dbb75970c09c64761d6688ae2dd..9732be90af7be9541e5ef0324d324742b638f06a
--- a/indra/newview/llspatialpartition.h
+++ b/indra/newview/llspatialpartition.h
@@ -112,6 +112,7 @@ class LLDrawInfo : public LLRefCount
 	U32 mOffset;
 	BOOL mFullbright;
 	U8 mBump;
+	U8 mShiny;
 	BOOL mParticle;
 	F32 mPartSize;
 	F32 mVSize;
@@ -119,6 +120,18 @@ class LLDrawInfo : public LLRefCount
 	LL_ALIGN_16(LLFace* mFace); //associated face
 	F32 mDistance;
 	U32 mDrawMode;
+	LLMaterialPtr mMaterial; // If this is null, the following parameters are unused.
+	LLMaterialID mMaterialID;
+	U32 mShaderMask;
+	LLPointer<LLViewerTexture> mSpecularMap;
+	const LLMatrix4* mSpecularMapMatrix;
+	LLPointer<LLViewerTexture> mNormalMap;
+	const LLMatrix4* mNormalMapMatrix;
+	LLVector4 mSpecColor; // XYZ = Specular RGB, W = Specular Exponent
+	F32  mEnvIntensity;
+	F32  mAlphaMaskCutoff;
+	U8   mDiffuseAlphaMode;
+
 
 	struct CompareTexture
 	{
@@ -169,7 +182,7 @@ class LLDrawInfo : public LLRefCount
 		}
 
 	};
-
+	
 	struct CompareBump
 	{
 		bool operator()(const LLPointer<LLDrawInfo>& lhs, const LLPointer<LLDrawInfo>& rhs) 
@@ -191,7 +204,7 @@ class LLDrawInfo : public LLRefCount
 	};
 };
 
-LL_ALIGN_PREFIX(16)
+LL_ALIGN_PREFIX(64)
 class LLSpatialGroup : public LLOctreeListener<LLDrawable>
 {
 	friend class LLSpatialPartition;
@@ -477,13 +490,13 @@ class LLSpatialPartition: public LLGeometryManager
 	LLSpatialGroup *put(LLDrawable *drawablep, BOOL was_visible = FALSE);
 	BOOL remove(LLDrawable *drawablep, LLSpatialGroup *curp);
 	
-	LLDrawable* lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+	LLDrawable* lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 									 BOOL pick_transparent, 
 									 S32* face_hit,                          // return the face hit
-									 LLVector3* intersection = NULL,         // return the intersection point
+									 LLVector4a* intersection = NULL,         // return the intersection point
 									 LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
-									 LLVector3* normal = NULL,               // return the surface normal at the intersection point
-									 LLVector3* bi_normal = NULL             // return the surface bi-normal at the intersection point
+									 LLVector4a* normal = NULL,               // return the surface normal at the intersection point
+									 LLVector4a* tangent = NULL             // return the surface tangent at the intersection point
 		);
 	
 	
@@ -739,7 +752,7 @@ class LLVolumeGeometryManager: public LLGeometryManager
 	virtual void rebuildGeom(LLSpatialGroup* group);
 	virtual void rebuildMesh(LLSpatialGroup* group);
 	virtual void getGeometry(LLSpatialGroup* group);
-	void genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort = FALSE, BOOL batch_textures = FALSE);
+	void genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort = FALSE, BOOL batch_textures = FALSE, BOOL no_materials = FALSE);
 	void registerFace(LLSpatialGroup* group, LLFace* facep, U32 type);
 };
 
diff --git a/indra/newview/llspeakers.cpp b/indra/newview/llspeakers.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llspeakers.h b/indra/newview/llspeakers.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llspeakingindicatormanager.cpp b/indra/newview/llspeakingindicatormanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llspeakingindicatormanager.h b/indra/newview/llspeakingindicatormanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsplitbutton.cpp b/indra/newview/llsplitbutton.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsplitbutton.h b/indra/newview/llsplitbutton.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsprite.cpp b/indra/newview/llsprite.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsprite.h b/indra/newview/llsprite.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsrv.cpp b/indra/newview/llsrv.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsrv.h b/indra/newview/llsrv.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llstartup.cpp b/indra/newview/llstartup.cpp
old mode 100644
new mode 100755
index 8b71f1067fe03be6013517b7457a5dce9b71dd1f..cff3a7e02ac2491d5fed9e21d7c6175f9a14f988
--- a/indra/newview/llstartup.cpp
+++ b/indra/newview/llstartup.cpp
@@ -26,6 +26,7 @@
 
 #include "llviewerprecompiledheaders.h"
 
+#include "llappviewer.h"
 #include "llstartup.h"
 
 #if LL_WINDOWS
@@ -37,8 +38,8 @@
 #include "llviewermedia_streamingaudio.h"
 #include "llaudioengine.h"
 
-#ifdef LL_FMOD
-# include "llaudioengine_fmod.h"
+#ifdef LL_FMODEX
+# include "llaudioengine_fmodex.h"
 #endif
 
 #ifdef LL_OPENAL
@@ -623,32 +624,32 @@ bool idle_startup()
 		{
 			gAudiop = NULL;
 
-#ifdef LL_OPENAL
+#ifdef LL_FMODEX		
 			if (!gAudiop
 #if !LL_WINDOWS
-			    && NULL == getenv("LL_BAD_OPENAL_DRIVER")
+			    && NULL == getenv("LL_BAD_FMODEX_DRIVER")
 #endif // !LL_WINDOWS
 			    )
 			{
-				gAudiop = (LLAudioEngine *) new LLAudioEngine_OpenAL();
+				gAudiop = (LLAudioEngine *) new LLAudioEngine_FMODEX(gSavedSettings.getBOOL("FMODExProfilerEnable"));
 			}
 #endif
 
-#ifdef LL_FMOD			
+#ifdef LL_OPENAL
 			if (!gAudiop
 #if !LL_WINDOWS
-			    && NULL == getenv("LL_BAD_FMOD_DRIVER")
+			    && NULL == getenv("LL_BAD_OPENAL_DRIVER")
 #endif // !LL_WINDOWS
 			    )
 			{
-				gAudiop = (LLAudioEngine *) new LLAudioEngine_FMOD();
+				gAudiop = (LLAudioEngine *) new LLAudioEngine_OpenAL();
 			}
 #endif
 
 			if (gAudiop)
 			{
 #if LL_WINDOWS
-				// FMOD on Windows needs the window handle to stop playing audio
+				// FMOD Ex on Windows needs the window handle to stop playing audio
 				// when window is minimized. JC
 				void* window_handle = (HWND)gViewerWindow->getPlatformWindow();
 #else
@@ -1032,6 +1033,7 @@ bool idle_startup()
 
 		login->setSerialNumber(LLAppViewer::instance()->getSerialNumber());
 		login->setLastExecEvent(gLastExecEvent);
+		login->setLastExecDuration(gLastExecDuration);
 		login->setUpdaterLauncher(boost::bind(&LLAppViewer::launchUpdater, LLAppViewer::instance()));
 
 		// This call to LLLoginInstance::connect() starts the 
diff --git a/indra/newview/llstartup.h b/indra/newview/llstartup.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llstartuplistener.cpp b/indra/newview/llstartuplistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llstartuplistener.h b/indra/newview/llstartuplistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llstatusbar.cpp b/indra/newview/llstatusbar.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llstatusbar.h b/indra/newview/llstatusbar.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llstylemap.cpp b/indra/newview/llstylemap.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llstylemap.h b/indra/newview/llstylemap.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsurface.cpp b/indra/newview/llsurface.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsurface.h b/indra/newview/llsurface.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsurfacepatch.cpp b/indra/newview/llsurfacepatch.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsurfacepatch.h b/indra/newview/llsurfacepatch.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsyswellitem.cpp b/indra/newview/llsyswellitem.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsyswellitem.h b/indra/newview/llsyswellitem.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llsyswellwindow.cpp b/indra/newview/llsyswellwindow.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llsyswellwindow.h b/indra/newview/llsyswellwindow.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltable.h b/indra/newview/lltable.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llteleporthistory.cpp b/indra/newview/llteleporthistory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llteleporthistory.h b/indra/newview/llteleporthistory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llteleporthistorystorage.cpp b/indra/newview/llteleporthistorystorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llteleporthistorystorage.h b/indra/newview/llteleporthistorystorage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureatlas.cpp b/indra/newview/lltextureatlas.cpp
old mode 100644
new mode 100755
index f8c1bca8aed1097696f9609a5ce6040487ad2683..dbbe331954e9d98378b27981d2cf8328ed2ebd22
--- a/indra/newview/lltextureatlas.cpp
+++ b/indra/newview/lltextureatlas.cpp
@@ -71,7 +71,7 @@ LLTextureAtlas::~LLTextureAtlas()
 //virtual 
 S8 LLTextureAtlas::getType() const
 {
-	return LLViewerTexture::ATLAS_TEXTURE ;
+	return 0; //LLViewerTexture::ATLAS_TEXTURE ;
 }
 
 void LLTextureAtlas::getTexCoordOffset(S16 col, S16 row, F32& xoffset, F32& yoffset)
diff --git a/indra/newview/lltextureatlas.h b/indra/newview/lltextureatlas.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureatlasmanager.cpp b/indra/newview/lltextureatlasmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureatlasmanager.h b/indra/newview/lltextureatlasmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltexturecache.cpp b/indra/newview/lltexturecache.cpp
old mode 100644
new mode 100755
index 305f6fca0f71a49487c9bc10a4a9c29a44d2887f..36a7aeb59024078a8fd7e74f5fb25e374a82c05b
--- a/indra/newview/lltexturecache.cpp
+++ b/indra/newview/lltexturecache.cpp
@@ -568,8 +568,11 @@ bool LLTextureCacheRemoteWorker::doWrite()
 			idx = mCache->setHeaderCacheEntry(mID, entry, mImageSize, mDataSize); // create the new entry.
 			if(idx >= 0)
 			{
-				//write to the fast cache.
-				llassert_always(mCache->writeToFastCache(idx, mRawImage, mRawDiscardLevel));
+				// (almost always) write to the fast cache.
+				if (mRawImage->getDataSize())
+				{
+					llassert_always(mCache->writeToFastCache(idx, mRawImage, mRawDiscardLevel));
+				}
 			}
 		}
 		else
@@ -1895,10 +1898,17 @@ LLPointer<LLImageRaw> LLTextureCache::readFromFastCache(const LLUUID& id, S32& d
 bool LLTextureCache::writeToFastCache(S32 id, LLPointer<LLImageRaw> raw, S32 discardlevel)
 {
 	//rescale image if needed
+	if (raw.isNull() || !raw->getData())
+	{
+		llerrs << "Attempted to write NULL raw image to fastcache" << llendl;
+		return false;
+	}
+
 	S32 w, h, c;
 	w = raw->getWidth();
 	h = raw->getHeight();
 	c = raw->getComponents();
+
 	S32 i = 0 ;
 	
 	while(((w >> i) * (h >> i) * c) > TEXTURE_FAST_CACHE_ENTRY_SIZE - TEXTURE_FAST_CACHE_ENTRY_OVERHEAD)
diff --git a/indra/newview/lltexturecache.h b/indra/newview/lltexturecache.h
old mode 100644
new mode 100755
index e3fc957fd264b65651c0ce0fbf9ba65b01b45d1a..deaacc49759552f30d9f5e6777b0f833148e1010
--- a/indra/newview/lltexturecache.h
+++ b/indra/newview/lltexturecache.h
@@ -24,7 +24,7 @@
  * $/LicenseInfo$
  */
 
-#ifndef LL_LLTEXTURECACHE_
+#ifndef LL_LLTEXTURECACHE_H
 #define LL_LLTEXTURECACHE_H
 
 #include "lldir.h"
diff --git a/indra/newview/lltexturectrl.cpp b/indra/newview/lltexturectrl.cpp
old mode 100644
new mode 100755
index e2d0fdf3576579558378b1d947ad45019ccd992f..4676f7b251327f250d4a38e73d259559637732d9
--- a/indra/newview/lltexturectrl.cpp
+++ b/indra/newview/lltexturectrl.cpp
@@ -144,7 +144,7 @@ class LLFloaterTexturePicker : public LLFloater
 	static void		onBtnCancel( void* userdata );
 		   void		onBtnPipette( );
 	//static void		onBtnRevert( void* userdata );
-	static void		onBtnWhite( void* userdata );
+	static void		onBtnBlank( void* userdata );
 	static void		onBtnNone( void* userdata );
 	static void		onBtnClear( void* userdata );
 		   void		onSelectionChange(const std::deque<LLFolderViewItem*> &items, BOOL user_action);
@@ -165,7 +165,6 @@ class LLFloaterTexturePicker : public LLFloater
 	LLUUID				mImageAssetID; // Currently selected texture
 	LLUIImagePtr		mFallbackImage; // What to show if currently selected texture is null.
 
-	LLUUID				mWhiteImageAssetID;
 	LLUUID				mSpecialCurrentImageAssetID;  // Used when the asset id has no corresponding texture in the user's inventory.
 	LLUUID				mOriginalImageAssetID;
 
@@ -208,8 +207,7 @@ LLFloaterTexturePicker::LLFloaterTexturePicker(
 :	LLFloater(LLSD()),
 	mOwner( owner ),
 	mImageAssetID( owner->getImageAssetID() ),
-	mFallbackImage( fallback_image ),
-	mWhiteImageAssetID( gSavedSettings.getString( "UIImgWhiteUUID" ) ),
+	mFallbackImage( fallback_image ),	
 	mOriginalImageAssetID(owner->getImageAssetID()),
 	mLabel(label),
 	mTentativeLabel(NULL),
@@ -426,7 +424,7 @@ BOOL LLFloaterTexturePicker::postBuild()
 
 	childSetAction("Default",LLFloaterTexturePicker::onBtnSetToDefault,this);
 	childSetAction("None", LLFloaterTexturePicker::onBtnNone,this);
-	childSetAction("Blank", LLFloaterTexturePicker::onBtnWhite,this);
+	childSetAction("Blank", LLFloaterTexturePicker::onBtnBlank,this);
 
 
 	childSetCommitCallback("show_folders_check", onShowFolders, this);
@@ -581,7 +579,7 @@ void LLFloaterTexturePicker::draw()
 		}
 
 		getChildView("Default")->setEnabled(mImageAssetID != mOwner->getDefaultImageAssetID());
-		getChildView("Blank")->setEnabled(mImageAssetID != mWhiteImageAssetID );
+		getChildView("Blank")->setEnabled(mImageAssetID != mOwner->getBlankImageAssetID());
 		getChildView("None")->setEnabled(mOwner->getAllowNoTexture() && !mImageAssetID.isNull() );
 
 		LLFloater::draw();
@@ -721,11 +719,11 @@ void LLFloaterTexturePicker::onBtnSetToDefault(void* userdata)
 }
 
 // static
-void LLFloaterTexturePicker::onBtnWhite(void* userdata)
+void LLFloaterTexturePicker::onBtnBlank(void* userdata)
 {
 	LLFloaterTexturePicker* self = (LLFloaterTexturePicker*) userdata;
 	self->setCanApply(true, true);
-	self->setImageID( self->mWhiteImageAssetID );
+	self->setImageID( self->mOwner->getBlankImageAssetID() );
 	self->commitIfImmediateSet();
 }
 
@@ -1042,6 +1040,7 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)
 	mDragCallback(NULL),
 	mDropCallback(NULL),
 	mOnCancelCallback(NULL),
+	mOnCloseCallback(NULL),
 	mOnSelectCallback(NULL),
 	mBorderColor( p.border_color() ),
 	mAllowNoTexture( FALSE ),
@@ -1056,6 +1055,12 @@ LLTextureCtrl::LLTextureCtrl(const LLTextureCtrl::Params& p)
 	mDefaultImageName(p.default_image_name),
 	mFallbackImage(p.fallback_image)
 {
+
+	// Default of defaults is white image for diff tex
+	//
+	LLUUID whiteImage( gSavedSettings.getString( "UIImgWhiteUUID" ) );
+	setBlankImageAssetID( whiteImage );
+
 	setAllowNoTexture(p.allow_no_texture);
 	setCanApplyImmediately(p.can_apply_immediately);
 	mCommitOnSelection = !p.no_commit_on_selection;
@@ -1292,6 +1297,10 @@ void LLTextureCtrl::onFloaterClose()
 
 	if (floaterp)
 	{
+		if (mOnCloseCallback)
+		{
+			mOnCloseCallback(this,LLSD());
+		}
 		floaterp->setOwner(NULL);
 	}
 
diff --git a/indra/newview/lltexturectrl.h b/indra/newview/lltexturectrl.h
old mode 100644
new mode 100755
index 599d9c70c521e656efabeb1ad12febb0b41094d1..ad79042ef161a86839c5ca83954f71b2301ea844
--- a/indra/newview/lltexturectrl.h
+++ b/indra/newview/lltexturectrl.h
@@ -126,6 +126,7 @@ class LLTextureCtrl
 
 	// LLTextureCtrl interface
 	void			showPicker(BOOL take_focus);
+	bool			isPickerShown() { return !mFloaterHandle.isDead(); }
 	void			setLabel(const std::string& label);
 	void			setLabelWidth(S32 label_width) {mLabelWidth =label_width;}	
 	const std::string&	getLabel() const							{ return mLabel; }
@@ -145,6 +146,9 @@ class LLTextureCtrl
 
 	const std::string&	getDefaultImageName() const					{ return mDefaultImageName; }
 
+	void			setBlankImageAssetID( const LLUUID& id )	{ mBlankImageAssetID = id; }
+	const LLUUID&	getBlankImageAssetID() const { return mBlankImageAssetID; }
+
 	void			setCaption(const std::string& caption);
 	void			setCanApplyImmediately(BOOL b);
 
@@ -174,7 +178,7 @@ class LLTextureCtrl
 	void setDropCallback(drag_n_drop_callback cb)	{ mDropCallback = cb; }
 	
 	void setOnCancelCallback(commit_callback_t cb)	{ mOnCancelCallback = cb; }
-	
+	void setOnCloseCallback(commit_callback_t cb)	{ mOnCloseCallback = cb; }
 	void setOnSelectCallback(commit_callback_t cb)	{ mOnSelectCallback = cb; }
 
 	/*
@@ -195,12 +199,14 @@ class LLTextureCtrl
 	drag_n_drop_callback	 	mDropCallback;
 	commit_callback_t		 	mOnCancelCallback;
 	commit_callback_t		 	mOnSelectCallback;
+	commit_callback_t		 	mOnCloseCallback;
 	texture_selected_callback	mOnTextureSelectedCallback;
 	LLPointer<LLViewerFetchedTexture> mTexturep;
 	LLUIColor				 	mBorderColor;
 	LLUUID					 	mImageItemID;
 	LLUUID					 	mImageAssetID;
 	LLUUID					 	mDefaultImageAssetID;
+	LLUUID					 	mBlankImageAssetID;
 	LLUIImagePtr				mFallbackImage;
 	std::string					mDefaultImageName;
 	LLHandle<LLFloater>			mFloaterHandle;
diff --git a/indra/newview/lltexturefetch.cpp b/indra/newview/lltexturefetch.cpp
index be5fde9e2b020b31b88e4bbabb0955552270f1fb..6173e76a35163ce13213ca3e4757f94fc12adc21 100755
--- a/indra/newview/lltexturefetch.cpp
+++ b/indra/newview/lltexturefetch.cpp
@@ -1896,9 +1896,9 @@ void LLTextureFetchWorker::onCompleted(LLCore::HttpHandle handle, LLCore::HttpRe
 	LLCore::HttpStatus status(response->getStatus());
 	
 	LL_DEBUGS("Texture") << "HTTP COMPLETE: " << mID
-						 << " status: " << status.toHex()
-						 << " '" << status.toString() << "'"
-						 << llendl;
+			 << " status: " << status.toHex()
+			 << " '" << status.toString() << "'"
+			 << llendl;
 //	unsigned int offset(0), length(0), full_length(0);
 //	response->getRange(&offset, &length, &full_length);
 // 	llwarns << "HTTP COMPLETE: " << mID << " handle: " << handle
diff --git a/indra/newview/lltexturefetch.h b/indra/newview/lltexturefetch.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureinfo.cpp b/indra/newview/lltextureinfo.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureinfo.h b/indra/newview/lltextureinfo.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureinfodetails.cpp b/indra/newview/lltextureinfodetails.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureinfodetails.h b/indra/newview/lltextureinfodetails.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltexturestats.cpp b/indra/newview/lltexturestats.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltexturestats.h b/indra/newview/lltexturestats.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltexturestatsuploader.cpp b/indra/newview/lltexturestatsuploader.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltexturestatsuploader.h b/indra/newview/lltexturestatsuploader.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureview.cpp b/indra/newview/lltextureview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltextureview.h b/indra/newview/lltextureview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoast.cpp b/indra/newview/lltoast.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoast.h b/indra/newview/lltoast.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastalertpanel.cpp b/indra/newview/lltoastalertpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastalertpanel.h b/indra/newview/lltoastalertpanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastgroupnotifypanel.cpp b/indra/newview/lltoastgroupnotifypanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastgroupnotifypanel.h b/indra/newview/lltoastgroupnotifypanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastimpanel.cpp b/indra/newview/lltoastimpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastimpanel.h b/indra/newview/lltoastimpanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastnotifypanel.cpp b/indra/newview/lltoastnotifypanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastnotifypanel.h b/indra/newview/lltoastnotifypanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastpanel.cpp b/indra/newview/lltoastpanel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastpanel.h b/indra/newview/lltoastpanel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastscriptquestion.cpp b/indra/newview/lltoastscriptquestion.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastscriptquestion.h b/indra/newview/lltoastscriptquestion.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastscripttextbox.cpp b/indra/newview/lltoastscripttextbox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoastscripttextbox.h b/indra/newview/lltoastscripttextbox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltool.cpp b/indra/newview/lltool.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltool.h b/indra/newview/lltool.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolbarview.cpp b/indra/newview/lltoolbarview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolbarview.h b/indra/newview/lltoolbarview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolbrush.cpp b/indra/newview/lltoolbrush.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolbrush.h b/indra/newview/lltoolbrush.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolcomp.cpp b/indra/newview/lltoolcomp.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolcomp.h b/indra/newview/lltoolcomp.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltooldraganddrop.cpp b/indra/newview/lltooldraganddrop.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltooldraganddrop.h b/indra/newview/lltooldraganddrop.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolface.cpp b/indra/newview/lltoolface.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolface.h b/indra/newview/lltoolface.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolfocus.cpp b/indra/newview/lltoolfocus.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolfocus.h b/indra/newview/lltoolfocus.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolgrab.cpp b/indra/newview/lltoolgrab.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolgrab.h b/indra/newview/lltoolgrab.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolgun.cpp b/indra/newview/lltoolgun.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolgun.h b/indra/newview/lltoolgun.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolindividual.cpp b/indra/newview/lltoolindividual.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolindividual.h b/indra/newview/lltoolindividual.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolmgr.cpp b/indra/newview/lltoolmgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolmgr.h b/indra/newview/lltoolmgr.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolmorph.cpp b/indra/newview/lltoolmorph.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolmorph.h b/indra/newview/lltoolmorph.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolobjpicker.cpp b/indra/newview/lltoolobjpicker.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolobjpicker.h b/indra/newview/lltoolobjpicker.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolpie.cpp b/indra/newview/lltoolpie.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolpie.h b/indra/newview/lltoolpie.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolpipette.cpp b/indra/newview/lltoolpipette.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolpipette.h b/indra/newview/lltoolpipette.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolplacer.cpp b/indra/newview/lltoolplacer.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolplacer.h b/indra/newview/lltoolplacer.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolselect.cpp b/indra/newview/lltoolselect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolselect.h b/indra/newview/lltoolselect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolselectland.cpp b/indra/newview/lltoolselectland.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolselectland.h b/indra/newview/lltoolselectland.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolselectrect.cpp b/indra/newview/lltoolselectrect.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolselectrect.h b/indra/newview/lltoolselectrect.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolview.cpp b/indra/newview/lltoolview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltoolview.h b/indra/newview/lltoolview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltracker.cpp b/indra/newview/lltracker.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltracker.h b/indra/newview/lltracker.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltransientdockablefloater.cpp b/indra/newview/lltransientdockablefloater.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltransientdockablefloater.h b/indra/newview/lltransientdockablefloater.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lltransientfloatermgr.cpp b/indra/newview/lltransientfloatermgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lltransientfloatermgr.h b/indra/newview/lltransientfloatermgr.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lluiconstants.h b/indra/newview/lluiconstants.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lluilistener.cpp b/indra/newview/lluilistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lluilistener.h b/indra/newview/lluilistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lluploaddialog.cpp b/indra/newview/lluploaddialog.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lluploaddialog.h b/indra/newview/lluploaddialog.h
old mode 100644
new mode 100755
diff --git a/indra/newview/lluploadfloaterobservers.cpp b/indra/newview/lluploadfloaterobservers.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/lluploadfloaterobservers.h b/indra/newview/lluploadfloaterobservers.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llurl.cpp b/indra/newview/llurl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llurl.h b/indra/newview/llurl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llurldispatcher.cpp b/indra/newview/llurldispatcher.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llurldispatcher.h b/indra/newview/llurldispatcher.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llurldispatcherlistener.cpp b/indra/newview/llurldispatcherlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llurldispatcherlistener.h b/indra/newview/llurldispatcherlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llurlhistory.cpp b/indra/newview/llurlhistory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llurlhistory.h b/indra/newview/llurlhistory.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llurllineeditorctrl.cpp b/indra/newview/llurllineeditorctrl.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llurllineeditorctrl.h b/indra/newview/llurllineeditorctrl.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llurlwhitelist.cpp b/indra/newview/llurlwhitelist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llurlwhitelist.h b/indra/newview/llurlwhitelist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvectorperfoptions.cpp b/indra/newview/llvectorperfoptions.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvectorperfoptions.h b/indra/newview/llvectorperfoptions.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llversioninfo.cpp b/indra/newview/llversioninfo.cpp
old mode 100644
new mode 100755
index 673d0c24cf33ebea80d0a5ad98cfa191254f1bff..6a8fad0134e9378de68ecda48e1c59d3ae85ccf3
--- a/indra/newview/llversioninfo.cpp
+++ b/indra/newview/llversioninfo.cpp
@@ -26,73 +26,76 @@
  */
 
 #include "llviewerprecompiledheaders.h"
+#include <iostream>
+#include <sstream>
 #include "llversioninfo.h"
 
-#include "llversionviewer.h"
+#if ! defined(LL_VIEWER_CHANNEL)       \
+ || ! defined(LL_VIEWER_VERSION_MAJOR) \
+ || ! defined(LL_VIEWER_VERSION_MINOR) \
+ || ! defined(LL_VIEWER_VERSION_PATCH) \
+ || ! defined(LL_VIEWER_VERSION_BUILD)
+ #error "Channel or Version information is undefined"
+#endif
+
+const char * const LL_CHANNEL = LL_VIEWER_CHANNEL;
 
 //
-// Set the version numbers in indra/llcommon/llversionviewer.h
+// Set the version numbers in indra/VIEWER_VERSION
 //
 
 //static
 S32 LLVersionInfo::getMajor()
 {
-	return LL_VERSION_MAJOR;
+	return LL_VIEWER_VERSION_MAJOR;
 }
 
 //static
 S32 LLVersionInfo::getMinor()
 {
-	return LL_VERSION_MINOR;
+	return LL_VIEWER_VERSION_MINOR;
 }
 
 //static
 S32 LLVersionInfo::getPatch()
 {
-	return LL_VERSION_PATCH;
+	return LL_VIEWER_VERSION_PATCH;
 }
 
 //static
 S32 LLVersionInfo::getBuild()
 {
-	return LL_VERSION_BUILD;
+	return LL_VIEWER_VERSION_BUILD;
 }
 
 //static
 const std::string &LLVersionInfo::getVersion()
 {
 	static std::string version("");
-
 	if (version.empty())
 	{
-		// cache the version string
 		std::ostringstream stream;
-		stream << LL_VERSION_MAJOR << "."
-		       << LL_VERSION_MINOR << "."
-		       << LL_VERSION_PATCH << "."
-		       << LL_VERSION_BUILD;
+		stream << LLVersionInfo::getShortVersion() << "." << LLVersionInfo::getBuild();
+		// cache the version string
 		version = stream.str();
 	}
-
 	return version;
 }
 
 //static
 const std::string &LLVersionInfo::getShortVersion()
 {
-	static std::string version("");
-
-	if (version.empty())
+	static std::string short_version("");
+	if(short_version.empty())
 	{
 		// cache the version string
 		std::ostringstream stream;
-		stream << LL_VERSION_MAJOR << "."
-		       << LL_VERSION_MINOR << "."
-		       << LL_VERSION_PATCH;
-		version = stream.str();
+		stream << LL_VIEWER_VERSION_MAJOR << "."
+		       << LL_VIEWER_VERSION_MINOR << "."
+		       << LL_VIEWER_VERSION_PATCH;
+		short_version = stream.str();
 	}
-
-	return version;
+	return short_version;
 }
 
 namespace
@@ -100,7 +103,7 @@ namespace
 	/// Storage of the channel name the viewer is using.
 	//  The channel name is set by hardcoded constant, 
 	//  or by calling LLVersionInfo::resetChannel()
-	std::string sWorkingChannelName(LL_CHANNEL);
+	std::string sWorkingChannelName(LL_VIEWER_CHANNEL);
 
 	// Storage for the "version and channel" string.
 	// This will get reset too.
@@ -113,11 +116,7 @@ const std::string &LLVersionInfo::getChannelAndVersion()
 	if (sVersionChannel.empty())
 	{
 		// cache the version string
-		std::ostringstream stream;
-		stream << LLVersionInfo::getChannel()
-			   << " "
-			   << LLVersionInfo::getVersion();
-		sVersionChannel = stream.str();
+		sVersionChannel = LLVersionInfo::getChannel() + " " + LLVersionInfo::getVersion();
 	}
 
 	return sVersionChannel;
diff --git a/indra/newview/llversioninfo.h b/indra/newview/llversioninfo.h
old mode 100644
new mode 100755
index 6f64544f3bedaf5f57bcc27cbf73dbcc7e82618d..077105cae8a944717577e7a31dd5399d3cf50af6
--- a/indra/newview/llversioninfo.h
+++ b/indra/newview/llversioninfo.h
@@ -29,6 +29,7 @@
 #define LL_LLVERSIONINFO_H
 
 #include <string>
+#include "stdtypes.h"
 
 ///
 /// This API provides version information for the viewer.  This
diff --git a/indra/newview/llviewchildren.cpp b/indra/newview/llviewchildren.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewchildren.h b/indra/newview/llviewchildren.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerassetstorage.cpp b/indra/newview/llviewerassetstorage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerassetstorage.h b/indra/newview/llviewerassetstorage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerassettype.cpp b/indra/newview/llviewerassettype.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerassettype.h b/indra/newview/llviewerassettype.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerattachmenu.cpp b/indra/newview/llviewerattachmenu.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerattachmenu.h b/indra/newview/llviewerattachmenu.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvieweraudio.cpp b/indra/newview/llvieweraudio.cpp
old mode 100644
new mode 100755
index 564bf7997af99bff88eb4736b613f4df273c3759..3da934b1486786b3a441473d95a700bf81b84fb8
--- a/indra/newview/llvieweraudio.cpp
+++ b/indra/newview/llvieweraudio.cpp
@@ -44,6 +44,8 @@
 #include "llparcel.h"
 #include "llviewermessage.h"
 
+#include "llstreamingaudio.h"
+
 /////////////////////////////////////////////////////////
 
 LLViewerAudio::LLViewerAudio() :
@@ -102,6 +104,11 @@ void LLViewerAudio::startInternetStreamWithAutoFade(std::string streamURI)
 		else
 		{
 			mFadeState = FADE_IN;
+
+			LLStreamingAudioInterface *stream = gAudiop->getStreamingAudioImpl();
+			if(stream && stream->supportsAdjustableBufferSizes())
+				stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"),gSavedSettings.getU32("FMODExDecodeBufferSize"));
+
 			gAudiop->startInternetStream(mNextStreamURI);
 			startFading();
 			registerIdleListener();
@@ -157,6 +164,11 @@ bool LLViewerAudio::onIdleUpdate()
 			if (!mNextStreamURI.empty())
 			{
 				mFadeState = FADE_IN;
+
+				LLStreamingAudioInterface *stream = gAudiop->getStreamingAudioImpl();
+				if(stream && stream->supportsAdjustableBufferSizes())
+					stream->setBufferSizes(gSavedSettings.getU32("FMODExStreamBufferSize"),gSavedSettings.getU32("FMODExDecodeBufferSize"));
+
 				gAudiop->startInternetStream(mNextStreamURI);
 				startFading();
 			}
@@ -386,7 +398,12 @@ void audio_update_volume(bool force_update)
 		gAudiop->setMasterGain ( master_volume );
 
 		gAudiop->setDopplerFactor(gSavedSettings.getF32("AudioLevelDoppler"));
+
+		if(!LLViewerCamera::getInstance()->cameraUnderWater())
 		gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelRolloff"));
+		else
+			gAudiop->setRolloffFactor(gSavedSettings.getF32("AudioLevelUnderwaterRolloff"));
+
 		gAudiop->setMuted(mute_audio || progress_view_visible);
 		
 		//Play any deferred sounds when unmuted
@@ -473,32 +490,10 @@ void audio_update_listener()
 void audio_update_wind(bool force_update)
 {
 #ifdef kAUDIO_ENABLE_WIND
-	//
-	//  Extract height above water to modulate filter by whether above/below water 
-	// 
+
 	LLViewerRegion* region = gAgent.getRegion();
 	if (region)
 	{
-		static F32 last_camera_water_height = -1000.f;
-		LLVector3 camera_pos = gAgentCamera.getCameraPositionAgent();
-		F32 camera_water_height = camera_pos.mV[VZ] - region->getWaterHeight();
-		
-		//
-		//  Don't update rolloff factor unless water surface has been crossed
-		//
-		if (force_update || (last_camera_water_height * camera_water_height) < 0.f)
-		{
-            static LLUICachedControl<F32> rolloff("AudioLevelRolloff", 1.0f);
-			if (camera_water_height < 0.f)
-			{
-				gAudiop->setRolloffFactor(rolloff * LL_ROLLOFF_MULTIPLIER_UNDER_WATER);
-			}
-			else 
-			{
-				gAudiop->setRolloffFactor(rolloff);
-			}
-		}
-        
         // Scale down the contribution of weather-simulation wind to the
         // ambient wind noise.  Wind velocity averages 3.5 m/s, with gusts to 7 m/s
         // whereas steady-state avatar walk velocity is only 3.2 m/s.
@@ -543,8 +538,7 @@ void audio_update_wind(bool force_update)
 			gAudiop->mMaxWindGain = llmax(gAudiop->mMaxWindGain - volume_delta, 0.f);
 		}
 		
-		last_camera_water_height = camera_water_height;
-		gAudiop->updateWind(gRelativeWindVec, camera_water_height);
+		gAudiop->updateWind(gRelativeWindVec, gAgentCamera.getCameraPositionAgent()[VZ] - gAgent.getRegion()->getWaterHeight());
 	}
 #endif
 }
diff --git a/indra/newview/llvieweraudio.h b/indra/newview/llvieweraudio.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewercamera.cpp b/indra/newview/llviewercamera.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewercamera.h b/indra/newview/llviewercamera.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerchat.cpp b/indra/newview/llviewerchat.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerchat.h b/indra/newview/llviewerchat.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp
old mode 100644
new mode 100755
index 051f5f44853240d6fd397b0eca9d83ea31e5452a..afbb59e72343e2ea05404adc93d9f097d432e790
--- a/indra/newview/llviewercontrol.cpp
+++ b/indra/newview/llviewercontrol.cpp
@@ -401,6 +401,25 @@ static bool handleRenderDeferredChanged(const LLSD& newvalue)
 	return true;
 }
 
+// This looks a great deal like handleRenderDeferredChanged because
+// Advanced Lighting (Materials) implies bumps and shiny so disabling
+// bumps should further disable that feature.
+//
+static bool handleRenderBumpChanged(const LLSD& newval)
+{
+	LLRenderTarget::sUseFBO = newval.asBoolean();
+	if (gPipeline.isInit())
+	{
+		gPipeline.updateRenderBump();
+		gPipeline.updateRenderDeferred();
+		gPipeline.releaseGLBuffers();
+		gPipeline.createGLBuffers();
+		gPipeline.resetVertexBuffers();
+		LLViewerShaderMgr::instance()->setShaders();
+	}
+	return true;
+}
+
 static bool handleRenderUseImpostorsChanged(const LLSD& newvalue)
 {
 	LLVOAvatar::sUseImpostors = newvalue.asBoolean();
@@ -629,7 +648,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("RenderDebugTextureBind")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderAutoMaskAlphaDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderAutoMaskAlphaNonDeferred")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
-	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
+	gSavedSettings.getControl("RenderObjectBump")->getSignal()->connect(boost::bind(&handleRenderBumpChanged, _2));
 	gSavedSettings.getControl("RenderMaxVBOSize")->getSignal()->connect(boost::bind(&handleResetVertexBuffersChanged, _2));
 	gSavedSettings.getControl("RenderDeferredNoise")->getSignal()->connect(boost::bind(&handleReleaseGLBufferChanged, _2));
 	gSavedSettings.getControl("RenderUseImpostors")->getSignal()->connect(boost::bind(&handleRenderUseImpostorsChanged, _2));
@@ -655,6 +674,7 @@ void settings_setup_listeners()
 	gSavedSettings.getControl("AudioLevelVoice")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
 	gSavedSettings.getControl("AudioLevelDoppler")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
 	gSavedSettings.getControl("AudioLevelRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
+	gSavedSettings.getControl("AudioLevelUnderwaterRolloff")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
 	gSavedSettings.getControl("MuteAudio")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
 	gSavedSettings.getControl("MuteMusic")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
 	gSavedSettings.getControl("MuteMedia")->getSignal()->connect(boost::bind(&handleAudioVolumeChanged, _2));
diff --git a/indra/newview/llviewercontrol.h b/indra/newview/llviewercontrol.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewercontrollistener.cpp b/indra/newview/llviewercontrollistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewercontrollistener.h b/indra/newview/llviewercontrollistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerdisplay.cpp b/indra/newview/llviewerdisplay.cpp
old mode 100644
new mode 100755
index cf59e679551fbfaa939697420b40190b0ed35b97..f90b35a7bddbf65cbe7897110678c795c1262c53
--- a/indra/newview/llviewerdisplay.cpp
+++ b/indra/newview/llviewerdisplay.cpp
@@ -98,6 +98,7 @@ BOOL gDepthDirty = FALSE;
 BOOL gResizeScreenTexture = FALSE;
 BOOL gWindowResized = FALSE;
 BOOL gSnapshot = FALSE;
+BOOL gShaderProfileFrame = FALSE;
 
 U32 gRecentFrameCount = 0; // number of 'recent' frames
 LLFrameTimer gRecentFPSTime;
@@ -114,7 +115,8 @@ void render_disconnected_background();
 
 void display_startup()
 {
-	if (   !gViewerWindow->getActive()
+	if (   !gViewerWindow
+		|| !gViewerWindow->getActive()
 		|| !gViewerWindow->getWindow()->getVisible() 
 		|| gViewerWindow->getWindow()->getMinimized() )
 	{
@@ -125,7 +127,14 @@ void display_startup()
 
 	// Update images?
 	//gImageList.updateImages(0.01f);
-	LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
+	
+	// Written as branch to appease GCC which doesn't like different
+	// pointer types across ternary ops
+	//
+	if (!LLViewerFetchedTexture::sWhiteImagep.isNull())
+	{
+		LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
+	}
 
 	LLGLSDefault gls_default;
 
@@ -147,10 +156,12 @@ void display_startup()
 	LLGLSUIDefault gls_ui;
 	gPipeline.disableLights();
 
+	if (gViewerWindow)
 	gViewerWindow->setup2DRender();
 	gGL.getTexUnit(0)->setTextureBlendType(LLTexUnit::TB_MULT);
 
 	gGL.color4f(1,1,1,1);
+	if (gViewerWindow)
 	gViewerWindow->draw();
 	gGL.flush();
 
@@ -159,7 +170,9 @@ void display_startup()
 	LLGLState::checkStates();
 	LLGLState::checkTextureChannels();
 
+	if (gViewerWindow && gViewerWindow->getWindow())
 	gViewerWindow->getWindow()->swapBuffers();
+
 	glClear(GL_DEPTH_BUFFER_BIT);
 }
 
@@ -340,6 +353,12 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		return;
 	}
 
+
+	if (gShaderProfileFrame)
+	{
+		LLGLSLShader::initProfile();
+	}
+
 	//LLGLState::verify(FALSE);
 
 	/////////////////////////////////////////////////
@@ -654,6 +673,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 
 		static LLCullResult result;
 		LLViewerCamera::sCurCameraID = LLViewerCamera::CAMERA_WORLD;
+		LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
 		gPipeline.updateCull(*LLViewerCamera::getInstance(), result, water_clip);
 		stop_glerror();
 
@@ -860,7 +880,7 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 		//}
 
 		LLPipeline::sUnderWaterRender = LLViewerCamera::getInstance()->cameraUnderWater() ? TRUE : FALSE;
-		
+
 		LLGLState::checkStates();
 		LLGLState::checkClientArrays();
 
@@ -1018,6 +1038,12 @@ void display(BOOL rebuild, F32 zoom_factor, int subfield, BOOL for_snapshot)
 	LLAppViewer::instance()->pingMainloopTimeout("Display:Done");
 
 	gShiftFrame = false;
+
+	if (gShaderProfileFrame)
+	{
+		gShaderProfileFrame = FALSE;
+		LLGLSLShader::finishProfile();
+	}
 }
 
 void render_hud_attachments()
@@ -1037,6 +1063,7 @@ void render_hud_attachments()
 
 	if (LLPipeline::sShowHUDAttachments && !gDisconnected && setup_hud_matrices())
 	{
+		LLPipeline::sRenderingHUDs = TRUE;
 		LLCamera hud_cam = *LLViewerCamera::getInstance();
 		hud_cam.setOrigin(-1.f,0,0);
 		hud_cam.setAxes(LLVector3(1,0,0), LLVector3(0,1,0), LLVector3(0,0,1));
@@ -1081,10 +1108,13 @@ void render_hud_attachments()
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_SIMPLE);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_VOLUME);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_ALPHA);
+		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_ALPHA_MASK);
+		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_FULLBRIGHT_ALPHA_MASK);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_FULLBRIGHT);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_ALPHA_MASK);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_BUMP);
+		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_MATERIAL);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK);
 		gPipeline.toggleRenderType(LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY);
@@ -1109,6 +1139,7 @@ void render_hud_attachments()
 			gPipeline.toggleRenderDebugFeature((void*) LLPipeline::RENDER_DEBUG_FEATURE_UI);
 		}
 		LLPipeline::sUseOcclusion = use_occlusion;
+		LLPipeline::sRenderingHUDs = FALSE;
 	}
 	gGL.matrixMode(LLRender::MM_PROJECTION);
 	gGL.popMatrix();
diff --git a/indra/newview/llviewerdisplay.h b/indra/newview/llviewerdisplay.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerdisplayname.cpp b/indra/newview/llviewerdisplayname.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerdisplayname.h b/indra/newview/llviewerdisplayname.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerfloaterreg.cpp b/indra/newview/llviewerfloaterreg.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerfloaterreg.h b/indra/newview/llviewerfloaterreg.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerfoldertype.h b/indra/newview/llviewerfoldertype.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewergenericmessage.cpp b/indra/newview/llviewergenericmessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewergenericmessage.h b/indra/newview/llviewergenericmessage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewergesture.cpp b/indra/newview/llviewergesture.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewergesture.h b/indra/newview/llviewergesture.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerhelp.cpp b/indra/newview/llviewerhelp.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerhelp.h b/indra/newview/llviewerhelp.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerhelputil.cpp b/indra/newview/llviewerhelputil.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerhelputil.h b/indra/newview/llviewerhelputil.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerhome.cpp b/indra/newview/llviewerhome.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerhome.h b/indra/newview/llviewerhome.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerinventory.cpp b/indra/newview/llviewerinventory.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerinventory.h b/indra/newview/llviewerinventory.h
old mode 100644
new mode 100755
index 61b1b8d84651ce46f6c54dbc722d0730c229e208..ab19a12014f7948484c0c5f298facc4f2e28352f
--- a/indra/newview/llviewerinventory.h
+++ b/indra/newview/llviewerinventory.h
@@ -256,7 +256,7 @@ class AddFavoriteLandmarkCallback : public LLInventoryCallback
 public:
 	AddFavoriteLandmarkCallback() : mTargetLandmarkId(LLUUID::null) {}
 	void setTargetLandmarkId(const LLUUID& target_uuid) { mTargetLandmarkId = target_uuid; }
-
+	
 private:
 	void fire(const LLUUID& inv_item);
 
@@ -283,13 +283,13 @@ class LLBoostFuncInventoryCallback: public LLInventoryCallback
 
 	// virtual
 	void fire(const LLUUID& item_id)
-	{
+{
 		mFireFunc(item_id);
 	}
 
 	// virtual
 	~LLBoostFuncInventoryCallback()
-	{
+{
 		mDestroyFunc();
 	}
 	
diff --git a/indra/newview/llviewerjoint.cpp b/indra/newview/llviewerjoint.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjoint.h b/indra/newview/llviewerjoint.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjointattachment.cpp b/indra/newview/llviewerjointattachment.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjointattachment.h b/indra/newview/llviewerjointattachment.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjointmesh.cpp b/indra/newview/llviewerjointmesh.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjointmesh.h b/indra/newview/llviewerjointmesh.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjoystick.cpp b/indra/newview/llviewerjoystick.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerjoystick.h b/indra/newview/llviewerjoystick.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerkeyboard.h b/indra/newview/llviewerkeyboard.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerlayer.cpp b/indra/newview/llviewerlayer.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerlayer.h b/indra/newview/llviewerlayer.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermedia.cpp b/indra/newview/llviewermedia.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermedia.h b/indra/newview/llviewermedia.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermedia_streamingaudio.cpp b/indra/newview/llviewermedia_streamingaudio.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermedia_streamingaudio.h b/indra/newview/llviewermedia_streamingaudio.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermediafocus.cpp b/indra/newview/llviewermediafocus.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermediafocus.h b/indra/newview/llviewermediafocus.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermediaobserver.h b/indra/newview/llviewermediaobserver.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp
old mode 100644
new mode 100755
index beca08203fdd5aa3b85f59c84ad50e27dfdc5fa4..5e2f05f4687297dabc2e9dd8156f1ae925d28fab
--- a/indra/newview/llviewermenu.cpp
+++ b/indra/newview/llviewermenu.cpp
@@ -147,6 +147,8 @@ void handle_test_load_url(void*);
 //extern BOOL gDebugAvatarRotation;
 extern BOOL gDebugClicks;
 extern BOOL gDebugWindowProc;
+extern BOOL gShaderProfileFrame;
+
 //extern BOOL gDebugTextEditorTips;
 //extern BOOL gDebugSelectMgr;
 
@@ -291,6 +293,7 @@ void request_friendship(const LLUUID& agent_id);
 
 // Tools menu
 void handle_selected_texture_info(void*);
+void handle_selected_material_info();
 
 void handle_dump_followcam(void*);
 void handle_viewer_enable_message_log(void*);
@@ -1189,28 +1192,6 @@ class LLAdvancedCheckWireframe : public view_listener_t
 	}
 };
 	
-//////////////////////
-// TEXTURE ATLAS //
-//////////////////////
-
-class LLAdvancedToggleTextureAtlas : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		LLViewerTexture::sUseTextureAtlas = !LLViewerTexture::sUseTextureAtlas;
-		gSavedSettings.setBOOL("EnableTextureAtlas", LLViewerTexture::sUseTextureAtlas) ;
-		return true;
-	}
-};
-
-class LLAdvancedCheckTextureAtlas : public view_listener_t
-{
-	bool handleEvent(const LLSD& userdata)
-	{
-		bool new_value = LLViewerTexture::sUseTextureAtlas; // <-- make this using LLCacheControl
-		return new_value;
-	}
-};
 
 //////////////////////////
 // DUMP SCRIPTED CAMERA //
@@ -6463,7 +6444,7 @@ class LLAttachmentDetachFromPoint : public view_listener_t
 				LLViewerObject *attached_object = (*iter);
 				ids_to_remove.push_back(attached_object->getAttachmentItemID());
 			}
-		}
+			}
 		if (!ids_to_remove.empty())
 		{
 			LLAppearanceMgr::instance().removeItemsFromAvatar(ids_to_remove);
@@ -6920,6 +6901,47 @@ void handle_selected_texture_info(void*)
 	}
 }
 
+void handle_selected_material_info()
+{
+	for (LLObjectSelection::valid_iterator iter = LLSelectMgr::getInstance()->getSelection()->valid_begin();
+		iter != LLSelectMgr::getInstance()->getSelection()->valid_end(); iter++)
+	{
+		LLSelectNode* node = *iter;
+		
+		std::string msg;
+		msg.assign("Material info for: \n");
+		msg.append(node->mName);
+		
+		U8 te_count = node->getObject()->getNumTEs();
+		// map from material ID to list of faces using it
+		typedef std::map<LLMaterialID, std::vector<U8> > map_t;
+		map_t faces_per_material;
+		for (U8 i = 0; i < te_count; i++)
+		{
+			if (!node->isTESelected(i)) continue;
+	
+			const LLMaterialID& material_id = node->getObject()->getTE(i)->getMaterialID();
+			faces_per_material[material_id].push_back(i);
+		}
+		// Per-material, dump which faces are using it.
+		map_t::iterator it;
+		for (it = faces_per_material.begin(); it != faces_per_material.end(); ++it)
+		{
+			const LLMaterialID& material_id = it->first;
+			msg += llformat("%s on face ", material_id.asString().c_str());
+			for (U8 i = 0; i < it->second.size(); ++i)
+			{
+				msg.append( llformat("%d ", (S32)(it->second[i])));
+			}
+			msg.append("\n");
+		}
+
+		LLSD args;
+		args["MESSAGE"] = msg;
+		LLNotificationsUtil::add("SystemMessage", args);
+	}
+}
+
 void handle_test_male(void*)
 {
 	LLAppearanceMgr::instance().wearOutfitByName("Male Shape & Outfit");
@@ -7022,6 +7044,15 @@ class LLAdvancedClickRenderShadowOption: public view_listener_t
 	}
 };
 
+class LLAdvancedClickRenderProfile: public view_listener_t
+{
+	bool handleEvent(const LLSD& userdata)
+	{
+		gShaderProfileFrame = TRUE;
+		return true;
+	}
+};
+
 void menu_toggle_attached_lights(void* user_data)
 {
 	LLPipeline::sRenderAttachedLights = gSavedSettings.getBOOL("RenderAttachedLights");
@@ -8442,11 +8473,10 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedToggleInfoDisplay(), "Advanced.ToggleInfoDisplay");
 	view_listener_t::addMenu(new LLAdvancedCheckInfoDisplay(), "Advanced.CheckInfoDisplay");
 	view_listener_t::addMenu(new LLAdvancedSelectedTextureInfo(), "Advanced.SelectedTextureInfo");
+	commit.add("Advanced.SelectedMaterialInfo", boost::bind(&handle_selected_material_info));
 	view_listener_t::addMenu(new LLAdvancedToggleWireframe(), "Advanced.ToggleWireframe");
 	view_listener_t::addMenu(new LLAdvancedCheckWireframe(), "Advanced.CheckWireframe");
 	// Develop > Render
-	view_listener_t::addMenu(new LLAdvancedToggleTextureAtlas(), "Advanced.ToggleTextureAtlas");
-	view_listener_t::addMenu(new LLAdvancedCheckTextureAtlas(), "Advanced.CheckTextureAtlas");
 	view_listener_t::addMenu(new LLAdvancedEnableObjectObjectOcclusion(), "Advanced.EnableObjectObjectOcclusion");
 	view_listener_t::addMenu(new LLAdvancedEnableRenderFBO(), "Advanced.EnableRenderFBO");
 	view_listener_t::addMenu(new LLAdvancedEnableRenderDeferred(), "Advanced.EnableRenderDeferred");
@@ -8460,7 +8490,7 @@ void initialize_menus()
 	view_listener_t::addMenu(new LLAdvancedHandleAttachedLightParticles(), "Advanced.HandleAttachedLightParticles");
 	view_listener_t::addMenu(new LLAdvancedCheckRenderShadowOption(), "Advanced.CheckRenderShadowOption");
 	view_listener_t::addMenu(new LLAdvancedClickRenderShadowOption(), "Advanced.ClickRenderShadowOption");
-	
+	view_listener_t::addMenu(new LLAdvancedClickRenderProfile(), "Advanced.ClickRenderProfile");
 
 	#ifdef TOGGLE_HACKED_GODLIKE_VIEWER
 	view_listener_t::addMenu(new LLAdvancedHandleToggleHackedGodmode(), "Advanced.HandleToggleHackedGodmode");
diff --git a/indra/newview/llviewermenu.h b/indra/newview/llviewermenu.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermenufile.cpp b/indra/newview/llviewermenufile.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermenufile.h b/indra/newview/llviewermenufile.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewermessage.cpp b/indra/newview/llviewermessage.cpp
index 3c0d6189ac170d30f46646a23ad3565a8023a0d7..ace16396dbe62f6a8e49ab53262645e4ae280b2e 100755
--- a/indra/newview/llviewermessage.cpp
+++ b/indra/newview/llviewermessage.cpp
@@ -163,7 +163,11 @@ const std::string SCRIPT_QUESTIONS[SCRIPT_PERMISSION_EOF] =
 		"ChangePermissions",
 		"TrackYourCamera",
 		"ControlYourCamera",
-		"TeleportYourAgent"
+		"TeleportYourAgent",
+		"JoinAnExperience",
+		"SilentlyManageEstateAccess",
+		"OverrideYourAnimations",
+		"ScriptReturnObjects"
 	};
 
 const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] = 
@@ -179,7 +183,11 @@ const BOOL SCRIPT_QUESTION_IS_CAUTION[SCRIPT_PERMISSION_EOF] =
 	FALSE,	// ChangePermissions
 	FALSE,	// TrackYourCamera,
 	FALSE,	// ControlYourCamera
-	FALSE	// TeleportYourAgent
+	FALSE,	// TeleportYourAgent
+	FALSE,	// JoinAnExperience
+	FALSE,	// SilentlyManageEstateAccess
+	FALSE,	// OverrideYourAnimations
+	FALSE,	// ScriptReturnObjects
 };
 
 bool friendship_offer_callback(const LLSD& notification, const LLSD& response)
@@ -6282,6 +6290,19 @@ void notify_cautioned_script_question(const LLSD& notification, const LLSD& resp
 	}
 }
 
+void script_question_mute(const LLUUID& item_id, const std::string& object_name);
+
+bool unknown_script_question_cb(const LLSD& notification, const LLSD& response)
+{
+	// Only care if they muted the object here.
+	if ( response["Mute"] ) // mute
+	{
+		LLUUID task_id = notification["payload"]["task_id"].asUUID();
+		script_question_mute(task_id,notification["payload"]["object_name"].asString());
+	}
+	return false;
+}
+
 bool script_question_cb(const LLSD& notification, const LLSD& response)
 {
 	S32 option = LLNotificationsUtil::getSelectedOption(notification, response);
@@ -6332,34 +6353,42 @@ bool script_question_cb(const LLSD& notification, const LLSD& response)
 
 	if ( response["Mute"] ) // mute
 	{
-		LLMuteList::getInstance()->add(LLMute(item_id, notification["payload"]["object_name"].asString(), LLMute::OBJECT));
-
-		// purge the message queue of any previously queued requests from the same source. DEV-4879
-		class OfferMatcher : public LLNotificationsUI::LLScreenChannel::Matcher
-		{
-		public:
-			OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
-			bool matches(const LLNotificationPtr notification) const
-			{
-				if (notification->getName() == "ScriptQuestionCaution"
-					|| notification->getName() == "ScriptQuestion")
-				{
-					return (notification->getPayload()["item_id"].asUUID() == blocked_id);
-				}
-				return false;
-			}
-		private:
-			const LLUUID& blocked_id;
-		};
-
-		LLNotificationsUI::LLChannelManager::getInstance()->killToastsFromChannel(LLUUID(
-				gSavedSettings.getString("NotificationChannelUUID")), OfferMatcher(item_id));
+		script_question_mute(task_id,notification["payload"]["object_name"].asString());
 	}
 
 	return false;
 }
+
+void script_question_mute(const LLUUID& task_id, const std::string& object_name)
+{
+	LLMuteList::getInstance()->add(LLMute(task_id, object_name, LLMute::OBJECT));
+
+    // purge the message queue of any previously queued requests from the same source. DEV-4879
+    class OfferMatcher : public LLNotificationsUI::LLScreenChannel::Matcher
+    {
+    public:
+    	OfferMatcher(const LLUUID& to_block) : blocked_id(to_block) {}
+      	bool matches(const LLNotificationPtr notification) const
+        {
+            if (notification->getName() == "ScriptQuestionCaution"
+                || notification->getName() == "ScriptQuestion"
+				|| notification->getName() == "UnknownScriptQuestion")
+            {
+                return (notification->getPayload()["task_id"].asUUID() == blocked_id);
+            }
+            return false;
+        }
+    private:
+        const LLUUID& blocked_id;
+    };
+
+    LLNotificationsUI::LLChannelManager::getInstance()->killToastsFromChannel(LLUUID(
+            gSavedSettings.getString("NotificationChannelUUID")), OfferMatcher(task_id));
+}
+
 static LLNotificationFunctorRegistration script_question_cb_reg_1("ScriptQuestion", script_question_cb);
 static LLNotificationFunctorRegistration script_question_cb_reg_2("ScriptQuestionCaution", script_question_cb);
+static LLNotificationFunctorRegistration unknown_script_question_cb_reg("UnknownScriptQuestion", unknown_script_question_cb);
 
 void process_script_question(LLMessageSystem *msg, void **user_data)
 {
@@ -6424,7 +6453,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
 		LLSD args;
 		args["OBJECTNAME"] = object_name;
 		args["NAME"] = LLCacheName::cleanFullName(owner_name);
-
+		S32 known_questions = 0;
 		BOOL has_not_only_debit = questions ^ LSCRIPTRunTimePermissionBits[SCRIPT_PERMISSION_DEBIT];
 		// check the received permission flags against each permission
 		for (S32 i = 0; i < SCRIPT_PERMISSION_EOF; i++)
@@ -6432,7 +6461,7 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
 			if (questions & LSCRIPTRunTimePermissionBits[i])
 			{
 				count++;
-
+				known_questions |= LSCRIPTRunTimePermissionBits[i];
 				// check whether permission question should cause special caution dialog
 				caution |= (SCRIPT_QUESTION_IS_CAUTION[i]);
 
@@ -6442,32 +6471,46 @@ void process_script_question(LLMessageSystem *msg, void **user_data)
 				script_question += "    " + LLTrans::getString(SCRIPT_QUESTIONS[i]) + "\n";
 			}
 		}
+	
 		args["QUESTIONS"] = script_question;
 
-		LLSD payload;
-		payload["task_id"] = taskid;
-		payload["item_id"] = itemid;
-		payload["sender"] = sender.getIPandPort();
-		payload["questions"] = questions;
-		payload["object_name"] = object_name;
-		payload["owner_name"] = owner_name;
-
-		// check whether cautions are even enabled or not
-		if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
+		if (known_questions != questions)
+		{	// This is in addition to the normal dialog.
+			LLSD payload;
+			payload["task_id"] = taskid;
+			payload["item_id"] = itemid;
+			payload["object_name"] = object_name;
+			
+			args["DOWNLOADURL"] = LLTrans::getString("ViewerDownloadURL");
+			LLNotificationsUtil::add("UnknownScriptQuestion",args,payload);
+		}
+		
+		if (known_questions)
 		{
-			if (caution)
+			LLSD payload;
+			payload["task_id"] = taskid;
+			payload["item_id"] = itemid;
+			payload["sender"] = sender.getIPandPort();
+			payload["questions"] = known_questions;
+			payload["object_name"] = object_name;
+			payload["owner_name"] = owner_name;
+
+			// check whether cautions are even enabled or not
+			if (gSavedSettings.getBOOL("PermissionsCautionEnabled"))
 			{
-				args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : "";
+				if (caution)
+				{
+					args["FOOTERTEXT"] = (count > 1) ? LLTrans::getString("AdditionalPermissionsRequestHeader") + "\n\n" + script_question : "";
+				}
+				// display the caution permissions prompt
+				LLNotificationsUtil::add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload);
+			}
+			else
+			{
+				// fall back to default behavior if cautions are entirely disabled
+				LLNotificationsUtil::add("ScriptQuestion", args, payload);
 			}
-			// display the caution permissions prompt
-			LLNotificationsUtil::add(caution ? "ScriptQuestionCaution" : "ScriptQuestion", args, payload);
-		}
-		else
-		{
-			// fall back to default behavior if cautions are entirely disabled
-			LLNotificationsUtil::add("ScriptQuestion", args, payload);
 		}
-
 	}
 }
 
diff --git a/indra/newview/llviewermessage.h b/indra/newview/llviewermessage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewernetwork.cpp b/indra/newview/llviewernetwork.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewernetwork.h b/indra/newview/llviewernetwork.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerobject.cpp b/indra/newview/llviewerobject.cpp
old mode 100644
new mode 100755
index 670272e7be54aeaf185a60a87fce64c662b94e2f..6f7b2f40e62d999240141820e4886f60ba45d3b4
--- a/indra/newview/llviewerobject.cpp
+++ b/indra/newview/llviewerobject.cpp
@@ -201,6 +201,8 @@ LLViewerObject::LLViewerObject(const LLUUID &id, const LLPCode pcode, LLViewerRe
 	mTotalCRC(0),
 	mListIndex(-1),
 	mTEImages(NULL),
+	mTENormalMaps(NULL),
+	mTESpecularMaps(NULL),
 	mGLName(0),
 	mbCanSelect(TRUE),
 	mFlags(0),
@@ -321,6 +323,18 @@ void LLViewerObject::deleteTEImages()
 {
 	delete[] mTEImages;
 	mTEImages = NULL;
+	
+	if (mTENormalMaps != NULL)
+	{
+		delete[] mTENormalMaps;
+		mTENormalMaps = NULL;
+	}
+	
+	if (mTESpecularMaps != NULL)
+	{
+		delete[] mTESpecularMaps;
+		mTESpecularMaps = NULL;
+	}	
 }
 
 void LLViewerObject::markDead()
@@ -516,6 +530,17 @@ void LLViewerObject::setNameValueList(const std::string& name_value_list)
 	}
 }
 
+void LLViewerObject::setSelected(BOOL sel)
+{
+	mUserSelected = sel;
+	resetRot();
+
+	if (!sel)
+	{
+		setAllTESelected(false);
+	}
+}
+
 // This method returns true if the object is over land owned by the
 // agent.
 bool LLViewerObject::isReturnable()
@@ -2135,7 +2160,8 @@ U32 LLViewerObject::processUpdateMessage(LLMessageSystem *mesgsys,
 		if (mDrawable->isState(LLDrawable::FORCE_INVISIBLE) && !mOrphaned)
 		{
 // 			lldebugs << "Clearing force invisible: " << mID << ":" << getPCodeString() << ":" << getPositionAgent() << llendl;
-			mDrawable->setState(LLDrawable::CLEAR_INVISIBLE);
+			mDrawable->clearState(LLDrawable::FORCE_INVISIBLE);
+			gPipeline.markRebuild( mDrawable, LLDrawable::REBUILD_ALL, TRUE );
 		}
 	}
 
@@ -3795,19 +3821,19 @@ LLViewerObject* LLViewerObject::getRootEdit() const
 }
 
 
-BOOL LLViewerObject::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+BOOL LLViewerObject::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 										  S32 face,
 										  BOOL pick_transparent,
 										  S32* face_hit,
-										  LLVector3* intersection,
+										  LLVector4a* intersection,
 										  LLVector2* tex_coord,
-										  LLVector3* normal,
-										  LLVector3* bi_normal)
+										  LLVector4a* normal,
+										  LLVector4a* tangent)
 {
 	return false;
 }
 
-BOOL LLViewerObject::lineSegmentBoundingBox(const LLVector3& start, const LLVector3& end)
+BOOL LLViewerObject::lineSegmentBoundingBox(const LLVector4a& start, const LLVector4a& end)
 {
 	if (mDrawable.isNull() || mDrawable->isDead())
 	{
@@ -3824,11 +3850,7 @@ BOOL LLViewerObject::lineSegmentBoundingBox(const LLVector3& start, const LLVect
 	size.setSub(ext[1], ext[0]);
 	size.mul(0.5f);
 
-	LLVector4a starta, enda;
-	starta.load3(start.mV);
-	enda.load3(end.mV);
-
-	return LLLineSegmentBoxIntersect(starta, enda, center, size);
+	return LLLineSegmentBoxIntersect(start, end, center, size);
 }
 
 U8 LLViewerObject::getMediaType() const
@@ -3927,25 +3949,39 @@ void LLViewerObject::setNumTEs(const U8 num_tes)
 		{
 			LLPointer<LLViewerTexture> *new_images;
 			new_images = new LLPointer<LLViewerTexture>[num_tes];
+			
+			LLPointer<LLViewerTexture> *new_normmaps;
+			new_normmaps = new LLPointer<LLViewerTexture>[num_tes];
+			
+			LLPointer<LLViewerTexture> *new_specmaps;
+			new_specmaps = new LLPointer<LLViewerTexture>[num_tes];
 			for (i = 0; i < num_tes; i++)
 			{
 				if (i < getNumTEs())
 				{
 					new_images[i] = mTEImages[i];
+					new_normmaps[i] = mTENormalMaps[i];
+					new_specmaps[i] = mTESpecularMaps[i];
 				}
 				else if (getNumTEs())
 				{
 					new_images[i] = mTEImages[getNumTEs()-1];
+					new_normmaps[i] = mTENormalMaps[getNumTEs()-1];
+					new_specmaps[i] = mTESpecularMaps[getNumTEs()-1];
 				}
 				else
 				{
 					new_images[i] = NULL;
+					new_normmaps[i] = NULL;
+					new_specmaps[i] = NULL;
 				}
 			}
 
 			deleteTEImages();
 			
 			mTEImages = new_images;
+			mTENormalMaps = new_normmaps;
+			mTESpecularMaps = new_specmaps;
 		}
 		else
 		{
@@ -4024,12 +4060,18 @@ void LLViewerObject::sendTEUpdate() const
 void LLViewerObject::setTE(const U8 te, const LLTextureEntry &texture_entry)
 {
 	LLPrimitive::setTE(te, texture_entry);
-//  This doesn't work, don't get any textures.
-//	if (mDrawable.notNull() && mDrawable->isVisible())
-//	{
-		const LLUUID& image_id = getTE(te)->getID();
+
+	const LLUUID& image_id = getTE(te)->getID();
 		mTEImages[te] = LLViewerTextureManager::getFetchedTexture(image_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
-//	}
+	
+	if (getTE(te)->getMaterialParams().notNull())
+	{
+		const LLUUID& norm_id = getTE(te)->getMaterialParams()->getNormalID();
+		mTENormalMaps[te] = LLViewerTextureManager::getFetchedTexture(norm_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
+		
+		const LLUUID& spec_id = getTE(te)->getMaterialParams()->getSpecularID();
+		mTESpecularMaps[te] = LLViewerTextureManager::getFetchedTexture(spec_id, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE);
+	}
 }
 
 void LLViewerObject::setTEImage(const U8 te, LLViewerTexture *imagep)
@@ -4064,6 +4106,52 @@ S32 LLViewerObject::setTETextureCore(const U8 te, LLViewerTexture *image)
 	return retval;
 }
 
+S32 LLViewerObject::setTENormalMapCore(const U8 te, LLViewerTexture *image)
+{
+	S32 retval = TEM_CHANGE_TEXTURE;
+	const LLUUID& uuid = image ? image->getID() : LLUUID::null;
+	if (uuid != getTE(te)->getID() ||
+		uuid == LLUUID::null)
+	{
+		LLTextureEntry* tep = getTE(te);
+		LLMaterial* mat = NULL;
+		if (tep)
+		{
+		   mat = tep->getMaterialParams();
+		}
+
+		if (mat)
+		{
+			mat->setNormalID(uuid);
+		}
+	}
+	changeTENormalMap(te,image);	
+	return retval;
+}
+
+S32 LLViewerObject::setTESpecularMapCore(const U8 te, LLViewerTexture *image)
+{
+	S32 retval = TEM_CHANGE_TEXTURE;
+	const LLUUID& uuid = image ? image->getID() : LLUUID::null;
+	if (uuid != getTE(te)->getID() ||
+		uuid == LLUUID::null)
+	{
+		LLTextureEntry* tep = getTE(te);
+		LLMaterial* mat = NULL;
+		if (tep)
+		{
+			mat = tep->getMaterialParams();
+		}
+
+		if (mat)
+		{
+			mat->setSpecularID(uuid);
+		}		
+	}
+	changeTESpecularMap(te, image);
+	return retval;
+}
+
 //virtual
 void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image) 
 {
@@ -4074,6 +4162,26 @@ void LLViewerObject::changeTEImage(S32 index, LLViewerTexture* new_image)
 	mTEImages[index] = new_image ;
 }
 
+void LLViewerObject::changeTENormalMap(S32 index, LLViewerTexture* new_image)
+{
+	if(index < 0 || index >= getNumTEs())
+	{
+		return ;
+	}
+	mTENormalMaps[index] = new_image ;
+	refreshMaterials();
+}
+
+void LLViewerObject::changeTESpecularMap(S32 index, LLViewerTexture* new_image)
+{
+	if(index < 0 || index >= getNumTEs())
+	{
+		return ;
+	}
+	mTESpecularMaps[index] = new_image ;
+	refreshMaterials();
+}
+
 S32 LLViewerObject::setTETexture(const U8 te, const LLUUID& uuid)
 {
 	// Invalid host == get from the agent's sim
@@ -4082,6 +4190,19 @@ S32 LLViewerObject::setTETexture(const U8 te, const LLUUID& uuid)
 	return setTETextureCore(te,image);
 }
 
+S32 LLViewerObject::setTENormalMap(const U8 te, const LLUUID& uuid)
+{
+	LLViewerFetchedTexture *image = (uuid == LLUUID::null) ? NULL : LLViewerTextureManager::getFetchedTexture(
+		uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
+	return setTENormalMapCore(te, image);
+}
+
+S32 LLViewerObject::setTESpecularMap(const U8 te, const LLUUID& uuid)
+{
+	LLViewerFetchedTexture *image = (uuid == LLUUID::null) ? NULL : LLViewerTextureManager::getFetchedTexture(
+		uuid, FTT_DEFAULT, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, LLHost::invalid);
+	return setTESpecularMapCore(te, image);
+}
 
 S32 LLViewerObject::setTEColor(const U8 te, const LLColor3& color)
 {
@@ -4242,6 +4363,61 @@ S32 LLViewerObject::setTEGlow(const U8 te, const F32 glow)
 	return retval;
 }
 
+S32 LLViewerObject::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
+{
+	S32 retval = 0;
+	const LLTextureEntry *tep = getTE(te);
+	if (!tep)
+	{
+		LL_WARNS("Material") << "No texture entry for te " << (S32)te
+							 << ", object " << mID
+							 << ", material " << pMaterialID
+							 << LL_ENDL;
+	}
+	//else if (pMaterialID != tep->getMaterialID())
+	{
+		LL_DEBUGS("Material") << "Changing texture entry for te " << (S32)te
+							 << ", object " << mID
+							 << ", material " << pMaterialID
+							 << LL_ENDL;
+		retval = LLPrimitive::setTEMaterialID(te, pMaterialID);
+		refreshMaterials();
+	}
+	return retval;
+}
+
+S32 LLViewerObject::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)
+{
+	S32 retval = 0;
+	const LLTextureEntry *tep = getTE(te);
+	if (!tep)
+	{
+		llwarns << "No texture entry for te " << (S32)te << ", object " << mID << llendl;
+		return 0;
+	}
+
+	retval = LLPrimitive::setTEMaterialParams(te, pMaterialParams);
+	LL_DEBUGS("Material") << "Changing material params for te " << (S32)te
+							<< ", object " << mID
+			               << " (" << retval << ")"
+							<< LL_ENDL;
+	setTENormalMap(te, (pMaterialParams) ? pMaterialParams->getNormalID() : LLUUID::null);
+	setTESpecularMap(te, (pMaterialParams) ? pMaterialParams->getSpecularID() : LLUUID::null);
+
+	refreshMaterials();
+	return retval;
+}
+
+void LLViewerObject::refreshMaterials()
+{
+	setChanged(ALL_CHANGED);
+	if (mDrawable.notNull())
+	{
+		gPipeline.markTextured(mDrawable);
+		gPipeline.markRebuild(mDrawable,LLDrawable::REBUILD_ALL);
+		dirtySpatialGroup(TRUE);
+	}
+}
 
 S32 LLViewerObject::setTEScale(const U8 te, const F32 s, const F32 t)
 {
@@ -4343,6 +4519,50 @@ LLViewerTexture *LLViewerObject::getTEImage(const U8 face) const
 }
 
 
+LLViewerTexture *LLViewerObject::getTENormalMap(const U8 face) const
+{
+	//	llassert(mTEImages);
+	
+	if (face < getNumTEs())
+	{
+		LLViewerTexture* image = mTENormalMaps[face];
+		if (image)
+		{
+			return image;
+		}
+		else
+		{
+			return (LLViewerTexture*)(LLViewerFetchedTexture::sDefaultImagep);
+		}
+	}
+	
+	llerrs << llformat("Requested Image from invalid face: %d/%d",face,getNumTEs()) << llendl;
+	
+	return NULL;
+}
+
+LLViewerTexture *LLViewerObject::getTESpecularMap(const U8 face) const
+{
+	//	llassert(mTEImages);
+	
+	if (face < getNumTEs())
+	{
+		LLViewerTexture* image = mTESpecularMaps[face];
+		if (image)
+		{
+			return image;
+		}
+		else
+		{
+			return (LLViewerTexture*)(LLViewerFetchedTexture::sDefaultImagep);
+		}
+	}
+	
+	llerrs << llformat("Requested Image from invalid face: %d/%d",face,getNumTEs()) << llendl;
+	
+	return NULL;
+}
+
 void LLViewerObject::fitFaceTexture(const U8 face)
 {
 	llinfos << "fitFaceTexture not implemented" << llendl;
diff --git a/indra/newview/llviewerobject.h b/indra/newview/llviewerobject.h
old mode 100644
new mode 100755
index 316dbce7d07eca427072af14d06ef39f67c52e55..ea0d55cda53828367bc969fc2912923be61e0a45
--- a/indra/newview/llviewerobject.h
+++ b/indra/newview/llviewerobject.h
@@ -211,7 +211,7 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	LLViewerRegion* getRegion() const				{ return mRegionp; }
 
 	BOOL isSelected() const							{ return mUserSelected; }
-	virtual void setSelected(BOOL sel)				{ mUserSelected = sel; resetRot();}
+	virtual void setSelected(BOOL sel);
 
 	const LLUUID &getID() const						{ return mID; }
 	U32 getLocalID() const							{ return mLocalID; }
@@ -258,17 +258,17 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 
 	//detect if given line segment (in agent space) intersects with this viewer object.
 	//returns TRUE if intersection detected and returns information about intersection
-	virtual BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+	virtual BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 									  S32 face = -1,                          // which face to check, -1 = ALL_SIDES
 									  BOOL pick_transparent = FALSE,
 									  S32* face_hit = NULL,                   // which face was hit
-									  LLVector3* intersection = NULL,         // return the intersection point
+									  LLVector4a* intersection = NULL,         // return the intersection point
 									  LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
-									  LLVector3* normal = NULL,               // return the surface normal at the intersection point
-									  LLVector3* bi_normal = NULL             // return the surface bi-normal at the intersection point
+									  LLVector4a* normal = NULL,               // return the surface normal at the intersection point
+									  LLVector4a* tangent = NULL             // return the surface tangent at the intersection point
 		);
 	
-	virtual BOOL lineSegmentBoundingBox(const LLVector3& start, const LLVector3& end);
+	virtual BOOL lineSegmentBoundingBox(const LLVector4a& start, const LLVector4a& end);
 
 	virtual const LLVector3d getPositionGlobal() const;
 	virtual const LLVector3 &getPositionRegion() const;
@@ -301,7 +301,11 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	/*virtual*/	void	setNumTEs(const U8 num_tes);
 	/*virtual*/	void	setTE(const U8 te, const LLTextureEntry &texture_entry);
 	/*virtual*/ S32		setTETexture(const U8 te, const LLUUID &uuid);
-	S32 				setTETextureCore(const U8 te, LLViewerTexture *image);
+	/*virtual*/ S32		setTENormalMap(const U8 te, const LLUUID &uuid);
+	/*virtual*/ S32		setTESpecularMap(const U8 te, const LLUUID &uuid);
+	S32 setTETextureCore(const U8 te, LLViewerTexture *image);
+	S32 setTENormalMapCore(const U8 te, LLViewerTexture *image);
+	S32 setTESpecularMapCore(const U8 te, LLViewerTexture *image);
 	/*virtual*/ S32		setTEColor(const U8 te, const LLColor3 &color);
 	/*virtual*/ S32		setTEColor(const U8 te, const LLColor4 &color);
 	/*virtual*/ S32		setTEScale(const U8 te, const F32 s, const F32 t);
@@ -318,10 +322,22 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	/*virtual*/	S32		setTEFullbright(const U8 te, const U8 fullbright );
 	/*virtual*/	S32		setTEMediaFlags(const U8 te, const U8 media_flags );
 	/*virtual*/ S32     setTEGlow(const U8 te, const F32 glow);
+	/*virtual*/ S32     setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
+	/*virtual*/ S32		setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams);
+
+	// Used by Materials update functions to properly kick off rebuilds
+	// of VBs etc when materials updates require changes.
+	//
+	void refreshMaterials();
+
 	/*virtual*/	BOOL	setMaterial(const U8 material);
 	virtual		void	setTEImage(const U8 te, LLViewerTexture *imagep); // Not derived from LLPrimitive
 	virtual     void    changeTEImage(S32 index, LLViewerTexture* new_image)  ;
+	virtual     void    changeTENormalMap(S32 index, LLViewerTexture* new_image)  ;
+	virtual     void    changeTESpecularMap(S32 index, LLViewerTexture* new_image)  ;
 	LLViewerTexture		*getTEImage(const U8 te) const;
+	LLViewerTexture		*getTENormalMap(const U8 te) const;
+	LLViewerTexture		*getTESpecularMap(const U8 te) const;
 	
 	void fitFaceTexture(const U8 face);
 	void sendTEUpdate() const;			// Sends packed representation of all texture entry information
@@ -596,6 +612,8 @@ class LLViewerObject : public LLPrimitive, public LLRefCount, public LLGLUpdate
 	S32				mListIndex;
 
 	LLPointer<LLViewerTexture> *mTEImages;
+	LLPointer<LLViewerTexture> *mTENormalMaps;
+	LLPointer<LLViewerTexture> *mTESpecularMaps;
 
 	// Selection, picking and rendering variables
 	U32				mGLName;			// GL "name" used by selection code
diff --git a/indra/newview/llviewerobjectlist.cpp b/indra/newview/llviewerobjectlist.cpp
old mode 100644
new mode 100755
index 11d34ad0841a4b48c32b66c1a7cb6b8d8fad6ccb..caacf26cb38ac23977b2bbee1b5f80c66230be42
--- a/indra/newview/llviewerobjectlist.cpp
+++ b/indra/newview/llviewerobjectlist.cpp
@@ -2065,8 +2065,9 @@ void LLViewerObjectList::findOrphans(LLViewerObject* objectp, U32 ip, U32 port)
 			if (childp->mDrawable.notNull())
 			{
 				// Make the drawable visible again and set the drawable parent
- 				childp->mDrawable->setState(LLDrawable::CLEAR_INVISIBLE);
+				childp->mDrawable->clearState(LLDrawable::FORCE_INVISIBLE);
 				childp->setDrawableParent(objectp->mDrawable); // LLViewerObjectList::findOrphans()
+				gPipeline.markRebuild( childp->mDrawable, LLDrawable::REBUILD_ALL, TRUE );
 			}
 
 			// Make certain particles, icon and HUD aren't hidden
diff --git a/indra/newview/llviewerobjectlist.h b/indra/newview/llviewerobjectlist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparcelmedia.cpp b/indra/newview/llviewerparcelmedia.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparcelmedia.h b/indra/newview/llviewerparcelmedia.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparcelmediaautoplay.cpp b/indra/newview/llviewerparcelmediaautoplay.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparcelmediaautoplay.h b/indra/newview/llviewerparcelmediaautoplay.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparcelmgr.cpp b/indra/newview/llviewerparcelmgr.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparcelmgr.h b/indra/newview/llviewerparcelmgr.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparceloverlay.cpp b/indra/newview/llviewerparceloverlay.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerparceloverlay.h b/indra/newview/llviewerparceloverlay.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerpartsim.cpp b/indra/newview/llviewerpartsim.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerpartsim.h b/indra/newview/llviewerpartsim.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerpartsource.cpp b/indra/newview/llviewerpartsource.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerpartsource.h b/indra/newview/llviewerpartsource.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerprecompiledheaders.cpp b/indra/newview/llviewerprecompiledheaders.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerprecompiledheaders.h b/indra/newview/llviewerprecompiledheaders.h
old mode 100644
new mode 100755
index 0316f7997345be5022544791910ad6ee13feae07..a565005f302c5368ee555c676f75429ecbaf49db
--- a/indra/newview/llviewerprecompiledheaders.h
+++ b/indra/newview/llviewerprecompiledheaders.h
@@ -33,8 +33,6 @@
 // in viewer.
 // It is used to precompile headers for improved build speed.
 
-#include <boost/coroutine/coroutine.hpp>
-
 #include "linden_common.h"
 
 // Work around stupid Microsoft STL warning
diff --git a/indra/newview/llviewerregion.cpp b/indra/newview/llviewerregion.cpp
old mode 100644
new mode 100755
index b8b53aa6e45f9cc83ea75b4d187313a0f170cb3a..8422708addde7bb4da7c27e09868704f1d877dd1
--- a/indra/newview/llviewerregion.cpp
+++ b/indra/newview/llviewerregion.cpp
@@ -143,7 +143,7 @@ class LLViewerRegionImpl {
 
 	CapabilityMap mCapabilities;
 	CapabilityMap mSecondCapabilitiesTracker; 
-
+	
 	LLEventPoll* mEventPoll;
 
 	S32 mSeedCapMaxAttempts;
@@ -220,7 +220,7 @@ class BaseCapabilitiesComplete : public LLHTTPClient::Responder
 		}
     }
 
-   void result(const LLSD& content)
+    void result(const LLSD& content)
     {
 		LLViewerRegion *regionp = LLWorld::getInstance()->getRegionFromHandle(mRegionHandle);
 		if(!regionp) //region was removed
@@ -1587,7 +1587,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 	capabilityNames.append("EventQueueGet");
 
 	if (gSavedSettings.getBOOL("UseHTTPInventory"))
-	{	
+	{
 		capabilityNames.append("FetchLib2");
 		capabilityNames.append("FetchLibDescendents2");
 		capabilityNames.append("FetchInventory2");
@@ -1606,7 +1606,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 	capabilityNames.append("LandResources");
 	capabilityNames.append("MapLayer");
 	capabilityNames.append("MapLayerGod");
-	capabilityNames.append("MeshUploadFlag");	
+	capabilityNames.append("MeshUploadFlag");
 	capabilityNames.append("NavMeshGenerationStatus");
 	capabilityNames.append("NewFileAgentInventory");
 	capabilityNames.append("ObjectMedia");
@@ -1617,6 +1617,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 	capabilityNames.append("ProductInfoRequest");
 	capabilityNames.append("ProvisionVoiceAccountRequest");
 	capabilityNames.append("RemoteParcelRequest");
+	capabilityNames.append("RenderMaterials");
 	capabilityNames.append("RequestTextureDownload");
 	capabilityNames.append("ResourceCostSelected");
 	capabilityNames.append("RetrieveNavMeshSrc");
@@ -1646,7 +1647,7 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 	capabilityNames.append("ViewerMetrics");
 	capabilityNames.append("ViewerStartAuction");
 	capabilityNames.append("ViewerStats");
-
+	
 	// Please add new capabilities alphabetically to reduce
 	// merge conflicts.
 }
@@ -1654,8 +1655,8 @@ void LLViewerRegionImpl::buildCapabilityNames(LLSD& capabilityNames)
 void LLViewerRegion::setSeedCapability(const std::string& url)
 {
 	if (getCapability("Seed") == url)
-    {	
-		//llwarns << "Ignoring duplicate seed capability" << llendl;
+    {
+		// llwarns << "Ignoring duplicate seed capability" << llendl;
 		//Instead of just returning we build up a second set of seed caps and compare them 
 		//to the "original" seed cap received and determine why there is problem!
 		LLSD capabilityNames = LLSD::emptyArray();
diff --git a/indra/newview/llviewerregion.h b/indra/newview/llviewerregion.h
old mode 100644
new mode 100755
index b5fe4677b76111471b3d870ad068e5ea88359e67..56cd0c9ea1a204bbb096ce4c12ec01435643eb17
--- a/indra/newview/llviewerregion.h
+++ b/indra/newview/llviewerregion.h
@@ -342,7 +342,7 @@ class LLViewerRegion: public LLCapabilityProvider // implements this interface
 	void getNeighboringRegionsStatus( std::vector<S32>& regions );
 	const LLViewerRegionImpl * getRegionImpl() const { return mImpl; }
 	LLViewerRegionImpl * getRegionImplNC() { return mImpl; }
-
+	
 public:
 	struct CompareDistance
 	{
diff --git a/indra/newview/llviewershadermgr.cpp b/indra/newview/llviewershadermgr.cpp
old mode 100644
new mode 100755
index ba9818946cbffdfa4157ff75b5932f1d4d261acb..e24237522a1adf4301325a79b56049ec8771a84e
--- a/indra/newview/llviewershadermgr.cpp
+++ b/indra/newview/llviewershadermgr.cpp
@@ -44,6 +44,18 @@
 
 #if LL_DARWIN
 #include "OpenGL/OpenGL.h"
+
+// include spec exp clamp to fix older mac rendering artifacts
+//
+#define SINGLE_FP_PERMUTATION(shader)					\
+	if (gGLManager.mIsMobileGF)							\
+	{																\
+		shader.addPermutation("SINGLE_FP_ONLY","1");		\
+	}
+
+
+#else
+#define SINGLE_FP_PERMUTATION(shader)
 #endif
 
 #ifdef LL_RELEASE_FOR_DOWNLOAD
@@ -68,7 +80,7 @@ LLGLSLShader			gTransformPositionProgram;
 LLGLSLShader			gTransformTexCoordProgram;
 LLGLSLShader			gTransformNormalProgram;
 LLGLSLShader			gTransformColorProgram;
-LLGLSLShader			gTransformBinormalProgram;
+LLGLSLShader			gTransformTangentProgram;
 
 //utility shaders
 LLGLSLShader	gOcclusionProgram;
@@ -81,6 +93,8 @@ LLGLSLShader	gTwoTextureAddProgram;
 LLGLSLShader	gOneTextureNoColorProgram;
 LLGLSLShader	gDebugProgram;
 LLGLSLShader	gClipProgram;
+LLGLSLShader	gDownsampleDepthProgram;
+LLGLSLShader	gDownsampleDepthRectProgram;
 LLGLSLShader	gAlphaMaskProgram;
 
 //object shaders
@@ -143,6 +157,9 @@ LLGLSLShader		gUnderWaterProgram;
 
 //interface shaders
 LLGLSLShader		gHighlightProgram;
+LLGLSLShader		gHighlightNormalProgram;
+LLGLSLShader		gHighlightSpecularProgram;
+
 LLGLSLShader		gPathfindingProgram;
 LLGLSLShader		gPathfindingNoNormalsProgram;
 
@@ -200,13 +217,20 @@ LLGLSLShader			gDeferredEmissiveProgram;
 LLGLSLShader			gDeferredPostProgram;
 LLGLSLShader			gDeferredCoFProgram;
 LLGLSLShader			gDeferredDoFCombineProgram;
+LLGLSLShader			gDeferredPostGammaCorrectProgram;
 LLGLSLShader			gFXAAProgram;
 LLGLSLShader			gDeferredPostNoDoFProgram;
 LLGLSLShader			gDeferredWLSkyProgram;
 LLGLSLShader			gDeferredWLCloudProgram;
 LLGLSLShader			gDeferredStarProgram;
+LLGLSLShader			gDeferredFullbrightShinyProgram;
+LLGLSLShader			gDeferredSkinnedFullbrightShinyProgram;
+LLGLSLShader			gDeferredSkinnedFullbrightProgram;
 LLGLSLShader			gNormalMapGenProgram;
 
+// Deferred materials shaders
+LLGLSLShader			gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
+
 LLViewerShaderMgr::LLViewerShaderMgr() :
 	mVertexShaderLevel(SHADER_COUNT, 0),
 	mMaxAvatarShaderLevel(0)
@@ -271,9 +295,20 @@ LLViewerShaderMgr::LLViewerShaderMgr() :
 	mShaderList.push_back(&gUnderWaterProgram);
 	mShaderList.push_back(&gDeferredSunProgram);
 	mShaderList.push_back(&gDeferredSoftenProgram);
+	mShaderList.push_back(&gDeferredMaterialProgram[1]);
+	mShaderList.push_back(&gDeferredMaterialProgram[5]);
+	mShaderList.push_back(&gDeferredMaterialProgram[9]);
+	mShaderList.push_back(&gDeferredMaterialProgram[13]);
+	mShaderList.push_back(&gDeferredMaterialProgram[1+LLMaterial::SHADER_COUNT]);
+	mShaderList.push_back(&gDeferredMaterialProgram[5+LLMaterial::SHADER_COUNT]);
+	mShaderList.push_back(&gDeferredMaterialProgram[9+LLMaterial::SHADER_COUNT]);
+	mShaderList.push_back(&gDeferredMaterialProgram[13+LLMaterial::SHADER_COUNT]);	
 	mShaderList.push_back(&gDeferredAlphaProgram);
 	mShaderList.push_back(&gDeferredSkinnedAlphaProgram);
 	mShaderList.push_back(&gDeferredFullbrightProgram);
+	mShaderList.push_back(&gDeferredFullbrightShinyProgram);
+	mShaderList.push_back(&gDeferredSkinnedFullbrightShinyProgram);
+	mShaderList.push_back(&gDeferredSkinnedFullbrightProgram);
 	mShaderList.push_back(&gDeferredEmissiveProgram);
 	mShaderList.push_back(&gDeferredAvatarEyesProgram);
 	mShaderList.push_back(&gDeferredWaterProgram);
@@ -451,6 +486,12 @@ void LLViewerShaderMgr::setShaders()
 		S32 deferred_class = 0;
 		S32 transform_class = gGLManager.mHasTransformFeedback ? 1 : 0;
 
+		static LLCachedControl<bool> use_transform_feedback(gSavedSettings, "RenderUseTransformFeedback");
+		if (!use_transform_feedback)
+		{
+			transform_class = 0;
+		}
+		
 		if (LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
 		    gSavedSettings.getBOOL("RenderDeferred") &&
 			gSavedSettings.getBOOL("RenderAvatarVP") &&
@@ -663,6 +704,8 @@ void LLViewerShaderMgr::unloadShaders()
 	gOcclusionCubeProgram.unload();
 	gDebugProgram.unload();
 	gClipProgram.unload();
+	gDownsampleDepthProgram.unload();
+	gDownsampleDepthRectProgram.unload();
 	gAlphaMaskProgram.unload();
 	gUIProgram.unload();
 	gPathfindingProgram.unload();
@@ -740,6 +783,8 @@ void LLViewerShaderMgr::unloadShaders()
 	gAvatarEyeballProgram.unload();
 	gAvatarPickProgram.unload();
 	gHighlightProgram.unload();
+	gHighlightNormalProgram.unload();
+	gHighlightSpecularProgram.unload();
 
 	gWLSkyProgram.unload();
 	gWLCloudProgram.unload();
@@ -760,7 +805,7 @@ void LLViewerShaderMgr::unloadShaders()
 	gTransformTexCoordProgram.unload();
 	gTransformNormalProgram.unload();
 	gTransformColorProgram.unload();
-	gTransformBinormalProgram.unload();
+	gTransformTangentProgram.unload();
 
 	mVertexShaderLevel[SHADER_LIGHTING] = 0;
 	mVertexShaderLevel[SHADER_OBJECT] = 0;
@@ -780,9 +825,6 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
 	// Load basic dependency shaders first
 	// All of these have to load for any shaders to function
 	
-#if LL_DARWIN // Mac can't currently handle all 8 lights, 
-	S32 sum_lights_class = 2;
-#else 
 	S32 sum_lights_class = 3;
 
 	// class one cards will get the lower sum lights
@@ -793,7 +835,6 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
 	{
 		sum_lights_class = 2;
 	}
-#endif
 
 	// If we have sun and moon only checked, then only sum those lights.
 	if (gPipeline.getLightingDetail() == 0)
@@ -801,6 +842,14 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
 		sum_lights_class = 1;
 	}
 
+#if LL_DARWIN
+	// Work around driver crashes on older Macs when using deferred rendering
+	// NORSPEC-59
+	//
+	if (gGLManager.mIsMobileGF)
+		sum_lights_class = 3;
+#endif
+	
 	// Use the feature table to mask out the max light level to use.  Also make sure it's at least 1.
 	S32 max_light_class = gSavedSettings.getS32("RenderShaderLightingMaxLevel");
 	sum_lights_class = llclamp(sum_lights_class, 1, max_light_class);
@@ -826,12 +875,14 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
 		shaders.push_back( make_pair( "objects/indexedTextureV.glsl",			1 ) );
 	}
 	shaders.push_back( make_pair( "objects/nonindexedTextureV.glsl",		1 ) );
-
+	
+	boost::unordered_map<std::string, std::string> attribs;
+	
 	// We no longer have to bind the shaders to global glhandles, they are automatically added to a map now.
 	for (U32 i = 0; i < shaders.size(); i++)
 	{
 		// Note usage of GL_VERTEX_SHADER_ARB
-		if (loadShaderFile(shaders[i].first, shaders[i].second, GL_VERTEX_SHADER_ARB) == 0)
+		if (loadShaderFile(shaders[i].first, shaders[i].second, GL_VERTEX_SHADER_ARB, &attribs) == 0)
 		{
 			return FALSE;
 		}
@@ -879,11 +930,11 @@ BOOL LLViewerShaderMgr::loadBasicShaders()
 	index_channels.push_back(ch);	 shaders.push_back( make_pair( "lighting/lightFullbrightShinyF.glsl",	mVertexShaderLevel[SHADER_LIGHTING] ) );
 	index_channels.push_back(ch);	 shaders.push_back( make_pair( "lighting/lightShinyWaterF.glsl",			mVertexShaderLevel[SHADER_LIGHTING] ) );
 	index_channels.push_back(ch);	 shaders.push_back( make_pair( "lighting/lightFullbrightShinyWaterF.glsl", mVertexShaderLevel[SHADER_LIGHTING] ) );
-	
+
 	for (U32 i = 0; i < shaders.size(); i++)
 	{
 		// Note usage of GL_FRAGMENT_SHADER_ARB
-		if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB, index_channels[i]) == 0)
+		if (loadShaderFile(shaders[i].first, shaders[i].second, GL_FRAGMENT_SHADER_ARB, &attribs, index_channels[i]) == 0)
 		{
 			return FALSE;
 		}
@@ -1097,12 +1148,21 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredPostProgram.unload();		
 		gDeferredCoFProgram.unload();		
 		gDeferredDoFCombineProgram.unload();
+		gDeferredPostGammaCorrectProgram.unload();
 		gFXAAProgram.unload();
 		gDeferredWaterProgram.unload();
 		gDeferredWLSkyProgram.unload();
 		gDeferredWLCloudProgram.unload();
 		gDeferredStarProgram.unload();
+		gDeferredFullbrightShinyProgram.unload();
+		gDeferredSkinnedFullbrightShinyProgram.unload();
+		gDeferredSkinnedFullbrightProgram.unload();
+
 		gNormalMapGenProgram.unload();
+		for (U32 i = 0; i < LLMaterial::SHADER_COUNT*2; ++i)
+		{
+			gDeferredMaterialProgram[i].unload();
+		}
 		return TRUE;
 	}
 
@@ -1196,10 +1256,13 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredSkinnedAlphaProgram.mFeatures.isAlphaLighting = true;
 		gDeferredSkinnedAlphaProgram.mFeatures.disableTextureIndex = true;
 		gDeferredSkinnedAlphaProgram.mShaderFiles.clear();
-		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
-		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
+		gDeferredSkinnedAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredSkinnedAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
-		
+		gDeferredSkinnedAlphaProgram.addPermutation("USE_DIFFUSE_TEX", "1");
+		gDeferredSkinnedAlphaProgram.addPermutation("USE_VERTEX_COLOR", "1");
+		gDeferredSkinnedAlphaProgram.addPermutation("HAS_SKIN", "1");
+		gDeferredSkinnedAlphaProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
 		success = gDeferredSkinnedAlphaProgram.createShader(NULL, NULL);
 		
 		// Hack to include uniforms for lighting without linking in lighting file
@@ -1216,7 +1279,57 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredBumpProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 		success = gDeferredBumpProgram.createShader(NULL, NULL);
 	}
+	
+	gDeferredMaterialProgram[1].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[5].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[9].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[13].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[1+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[5+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[9+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
+	gDeferredMaterialProgram[13+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = false;
 
+	for (U32 i = 0; i < LLMaterial::SHADER_COUNT*2; ++i)
+	{
+		if (success)
+		{
+			gDeferredMaterialProgram[i].mName = llformat("Deferred Material Shader %d", i);
+			
+			U32 alpha_mode = i & 0x3;
+
+			gDeferredMaterialProgram[i].mShaderFiles.clear();
+			gDeferredMaterialProgram[i].mShaderFiles.push_back(make_pair("deferred/materialV.glsl", GL_VERTEX_SHADER_ARB));
+			gDeferredMaterialProgram[i].mShaderFiles.push_back(make_pair("deferred/materialF.glsl", GL_FRAGMENT_SHADER_ARB));
+			gDeferredMaterialProgram[i].mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+			gDeferredMaterialProgram[i].addPermutation("HAS_NORMAL_MAP", i & 0x8? "1" : "0");
+			gDeferredMaterialProgram[i].addPermutation("HAS_SPECULAR_MAP", i & 0x4 ? "1" : "0");
+			gDeferredMaterialProgram[i].addPermutation("DIFFUSE_ALPHA_MODE", llformat("%d", alpha_mode));
+			gDeferredMaterialProgram[i].addPermutation("HAS_SUN_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
+			bool has_skin = i & 0x10;
+			gDeferredMaterialProgram[i].addPermutation("HAS_SKIN",has_skin ? "1" : "0");
+
+			SINGLE_FP_PERMUTATION(gDeferredMaterialProgram[i]);
+
+			if (has_skin)
+			{
+				gDeferredMaterialProgram[i].mFeatures.hasObjectSkinning = true;
+			}
+
+			success = gDeferredMaterialProgram[i].createShader(NULL, NULL);
+		}
+	}
+
+	gDeferredMaterialProgram[1].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[5].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[9].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[13].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[1+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[5+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[9+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+	gDeferredMaterialProgram[13+LLMaterial::SHADER_COUNT].mFeatures.hasLighting = true;
+
+
+	
 	if (success)
 	{
 		gDeferredTreeProgram.mName = "Deferred Tree Shader";
@@ -1254,6 +1367,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+		SINGLE_FP_PERMUTATION(gDeferredLightProgram);
+
 		success = gDeferredLightProgram.createShader(NULL, NULL);
 	}
 
@@ -1264,6 +1380,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredMultiLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredMultiLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+		SINGLE_FP_PERMUTATION(gDeferredMultiLightProgram);
+
 		success = gDeferredMultiLightProgram.createShader(NULL, NULL);
 	}
 
@@ -1274,6 +1393,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/pointLightV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/spotLightF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+		SINGLE_FP_PERMUTATION(gDeferredSpotLightProgram);
+
 		success = gDeferredSpotLightProgram.createShader(NULL, NULL);
 	}
 
@@ -1284,6 +1406,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiPointLightV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredMultiSpotLightProgram.mShaderFiles.push_back(make_pair("deferred/multiSpotLightF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredMultiSpotLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+		SINGLE_FP_PERMUTATION(gDeferredMultiSpotLightProgram);
+
 		success = gDeferredMultiSpotLightProgram.createShader(NULL, NULL);
 	}
 
@@ -1310,6 +1435,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredSunProgram.mShaderFiles.push_back(make_pair(vertex, GL_VERTEX_SHADER_ARB));
 		gDeferredSunProgram.mShaderFiles.push_back(make_pair(fragment, GL_FRAGMENT_SHADER_ARB));
 		gDeferredSunProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+		SINGLE_FP_PERMUTATION(gDeferredSunProgram);
+
 		success = gDeferredSunProgram.createShader(NULL, NULL);
 	}
 
@@ -1320,6 +1448,9 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredBlurLightProgram.mShaderFiles.push_back(make_pair("deferred/blurLightV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredBlurLightProgram.mShaderFiles.push_back(make_pair("deferred/blurLightF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredBlurLightProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+
+		SINGLE_FP_PERMUTATION(gDeferredBlurLightProgram);
+
 		success = gDeferredBlurLightProgram.createShader(NULL, NULL);
 	}
 
@@ -1346,8 +1477,13 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredAlphaProgram.mShaderFiles.clear();
 		gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredAlphaProgram.addPermutation("USE_INDEXED_TEX", "1");
+		gDeferredAlphaProgram.addPermutation("USE_VERTEX_COLOR", "1");
+		gDeferredAlphaProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
 		gDeferredAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 
+		SINGLE_FP_PERMUTATION(gDeferredAlphaProgram);
+
 		success = gDeferredAlphaProgram.createShader(NULL, NULL);
 
 		// Hack
@@ -1383,6 +1519,50 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		success = gDeferredFullbrightProgram.createShader(NULL, NULL);
 	}
 
+	if (success)
+	{
+		gDeferredFullbrightShinyProgram.mName = "Deferred FullbrightShiny Shader";
+		gDeferredFullbrightShinyProgram.mFeatures.calculatesAtmospherics = true;
+		gDeferredFullbrightShinyProgram.mFeatures.hasGamma = true;
+		gDeferredFullbrightShinyProgram.mFeatures.hasTransport = true;
+		gDeferredFullbrightShinyProgram.mFeatures.mIndexedTextureChannels = LLGLSLShader::sIndexedTextureChannels-1;
+		gDeferredFullbrightShinyProgram.mShaderFiles.clear();
+		gDeferredFullbrightShinyProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightShinyV.glsl", GL_VERTEX_SHADER_ARB));
+		gDeferredFullbrightShinyProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+		success = gDeferredFullbrightShinyProgram.createShader(NULL, &mShinyUniforms);
+	}
+
+	if (success)
+	{
+		gDeferredSkinnedFullbrightProgram.mName = "Skinned Fullbright Shader";
+		gDeferredSkinnedFullbrightProgram.mFeatures.calculatesAtmospherics = true;
+		gDeferredSkinnedFullbrightProgram.mFeatures.hasGamma = true;
+		gDeferredSkinnedFullbrightProgram.mFeatures.hasTransport = true;
+		gDeferredSkinnedFullbrightProgram.mFeatures.hasObjectSkinning = true;
+		gDeferredSkinnedFullbrightProgram.mFeatures.disableTextureIndex = true;
+		gDeferredSkinnedFullbrightProgram.mShaderFiles.clear();
+		gDeferredSkinnedFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
+		gDeferredSkinnedFullbrightProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredSkinnedFullbrightProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+		success = gDeferredSkinnedFullbrightProgram.createShader(NULL, NULL);
+	}
+
+	if (success)
+	{
+		gDeferredSkinnedFullbrightShinyProgram.mName = "Skinned Fullbright Shiny Shader";
+		gDeferredSkinnedFullbrightShinyProgram.mFeatures.calculatesAtmospherics = true;
+		gDeferredSkinnedFullbrightShinyProgram.mFeatures.hasGamma = true;
+		gDeferredSkinnedFullbrightShinyProgram.mFeatures.hasTransport = true;
+		gDeferredSkinnedFullbrightShinyProgram.mFeatures.hasObjectSkinning = true;
+		gDeferredSkinnedFullbrightShinyProgram.mFeatures.disableTextureIndex = true;
+		gDeferredSkinnedFullbrightShinyProgram.mShaderFiles.clear();
+		gDeferredSkinnedFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB));
+		gDeferredSkinnedFullbrightShinyProgram.mShaderFiles.push_back(make_pair("deferred/fullbrightShinyF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredSkinnedFullbrightShinyProgram.mShaderLevel = mVertexShaderLevel[SHADER_OBJECT];
+		success = gDeferredSkinnedFullbrightShinyProgram.createShader(NULL, &mShinyUniforms);
+	}
+
 	if (success)
 	{
 		gDeferredEmissiveProgram.mName = "Deferred Emissive Shader";
@@ -1420,6 +1600,8 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 
 		gDeferredSoftenProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 
+		SINGLE_FP_PERMUTATION(gDeferredSoftenProgram);
+
 		if (gSavedSettings.getBOOL("RenderDeferredSSAO"))
 		{ //if using SSAO, take screen space light map into account as if shadows are enabled
 			gDeferredSoftenProgram.mShaderLevel = llmax(gDeferredSoftenProgram.mShaderLevel, 2);
@@ -1435,6 +1617,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredShadowProgram.mShaderFiles.push_back(make_pair("deferred/shadowV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredShadowProgram.mShaderFiles.push_back(make_pair("deferred/shadowF.glsl", GL_FRAGMENT_SHADER_ARB));
 		gDeferredShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+		gDeferredShadowProgram.addPermutation("DEPTH_CLAMP", gGLManager.mHasDepthClamp ? "1" : "0");
 		success = gDeferredShadowProgram.createShader(NULL, NULL);
 	}
 
@@ -1444,6 +1627,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredShadowCubeProgram.mShaderFiles.clear();
 		gDeferredShadowCubeProgram.mShaderFiles.push_back(make_pair("deferred/shadowCubeV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredShadowCubeProgram.mShaderFiles.push_back(make_pair("deferred/shadowF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredShadowCubeProgram.addPermutation("DEPTH_CLAMP", gGLManager.mHasDepthClamp ? "1" : "0");
 		gDeferredShadowCubeProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 		success = gDeferredShadowCubeProgram.createShader(NULL, NULL);
 	}
@@ -1455,6 +1639,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredShadowAlphaMaskProgram.mShaderFiles.clear();
 		gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredShadowAlphaMaskProgram.mShaderFiles.push_back(make_pair("deferred/shadowAlphaMaskF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredShadowAlphaMaskProgram.addPermutation("DEPTH_CLAMP", gGLManager.mHasDepthClamp ? "1" : "0");
 		gDeferredShadowAlphaMaskProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 		success = gDeferredShadowAlphaMaskProgram.createShader(NULL, NULL);
 	}
@@ -1466,6 +1651,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredAvatarShadowProgram.mShaderFiles.clear();
 		gDeferredAvatarShadowProgram.mShaderFiles.push_back(make_pair("deferred/avatarShadowV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredAvatarShadowProgram.mShaderFiles.push_back(make_pair("deferred/avatarShadowF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredAvatarShadowProgram.addPermutation("DEPTH_CLAMP", gGLManager.mHasDepthClamp ? "1" : "0");
 		gDeferredAvatarShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 		success = gDeferredAvatarShadowProgram.createShader(NULL, &mAvatarUniforms);
 	}
@@ -1477,6 +1663,7 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredAttachmentShadowProgram.mShaderFiles.clear();
 		gDeferredAttachmentShadowProgram.mShaderFiles.push_back(make_pair("deferred/attachmentShadowV.glsl", GL_VERTEX_SHADER_ARB));
 		gDeferredAttachmentShadowProgram.mShaderFiles.push_back(make_pair("deferred/attachmentShadowF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredAttachmentShadowProgram.addPermutation("DEPTH_CLAMP", gGLManager.mHasDepthClamp ? "1" : "0");
 		gDeferredAttachmentShadowProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 		success = gDeferredAttachmentShadowProgram.createShader(NULL, NULL);
 	}
@@ -1515,8 +1702,11 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredAvatarAlphaProgram.mFeatures.isAlphaLighting = true;
 		gDeferredAvatarAlphaProgram.mFeatures.disableTextureIndex = true;
 		gDeferredAvatarAlphaProgram.mShaderFiles.clear();
-		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/avatarAlphaNoColorV.glsl", GL_VERTEX_SHADER_ARB));
-		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaNonIndexedNoColorF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaV.glsl", GL_VERTEX_SHADER_ARB));
+		gDeferredAvatarAlphaProgram.mShaderFiles.push_back(make_pair("deferred/alphaF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredAvatarAlphaProgram.addPermutation("USE_DIFFUSE_TEX", "1");
+		gDeferredAvatarAlphaProgram.addPermutation("IS_AVATAR_SKIN", "1");
+		gDeferredAvatarAlphaProgram.addPermutation("HAS_SHADOW", mVertexShaderLevel[SHADER_DEFERRED] > 1 ? "1" : "0");
 		gDeferredAvatarAlphaProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
 
 		success = gDeferredAvatarAlphaProgram.createShader(NULL, &mAvatarUniforms);
@@ -1524,6 +1714,16 @@ BOOL LLViewerShaderMgr::loadShadersDeferred()
 		gDeferredAvatarAlphaProgram.mFeatures.calculatesLighting = true;
 		gDeferredAvatarAlphaProgram.mFeatures.hasLighting = true;
 	}
+	
+	if (success)
+	{
+		gDeferredPostGammaCorrectProgram.mName = "Deferred Gamma Correction Post Process";
+		gDeferredPostGammaCorrectProgram.mShaderFiles.clear();
+		gDeferredPostGammaCorrectProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredNoTCV.glsl", GL_VERTEX_SHADER_ARB));
+		gDeferredPostGammaCorrectProgram.mShaderFiles.push_back(make_pair("deferred/postDeferredGammaCorrect.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDeferredPostGammaCorrectProgram.mShaderLevel = mVertexShaderLevel[SHADER_DEFERRED];
+		success = gDeferredPostGammaCorrectProgram.createShader(NULL, NULL);
+	}
 
 	if (success)
 	{
@@ -2306,6 +2506,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectSimpleProgram.mFeatures.hasAtmospherics = true;
 			gSkinnedObjectSimpleProgram.mFeatures.hasLighting = true;
 			gSkinnedObjectSimpleProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectSimpleProgram.mFeatures.hasAlphaMask = true;
 			gSkinnedObjectSimpleProgram.mFeatures.disableTextureIndex = true;
 			gSkinnedObjectSimpleProgram.mShaderFiles.clear();
 			gSkinnedObjectSimpleProgram.mShaderFiles.push_back(make_pair("objects/simpleSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2322,6 +2523,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectFullbrightProgram.mFeatures.hasTransport = true;
 			gSkinnedObjectFullbrightProgram.mFeatures.isFullbright = true;
 			gSkinnedObjectFullbrightProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectFullbrightProgram.mFeatures.hasAlphaMask = true;			
 			gSkinnedObjectFullbrightProgram.mFeatures.disableTextureIndex = true;
 			gSkinnedObjectFullbrightProgram.mShaderFiles.clear();
 			gSkinnedObjectFullbrightProgram.mShaderFiles.push_back(make_pair("objects/fullbrightSkinnedV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2372,6 +2574,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectFullbrightShinyProgram.mFeatures.isShiny = true;
 			gSkinnedObjectFullbrightShinyProgram.mFeatures.isFullbright = true;
 			gSkinnedObjectFullbrightShinyProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectFullbrightShinyProgram.mFeatures.hasAlphaMask = true;
 			gSkinnedObjectFullbrightShinyProgram.mFeatures.disableTextureIndex = true;
 			gSkinnedObjectFullbrightShinyProgram.mShaderFiles.clear();
 			gSkinnedObjectFullbrightShinyProgram.mShaderFiles.push_back(make_pair("objects/fullbrightShinySkinnedV.glsl", GL_VERTEX_SHADER_ARB));
@@ -2388,6 +2591,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectShinySimpleProgram.mFeatures.hasGamma = true;
 			gSkinnedObjectShinySimpleProgram.mFeatures.hasAtmospherics = true;
 			gSkinnedObjectShinySimpleProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectShinySimpleProgram.mFeatures.hasAlphaMask = true;
 			gSkinnedObjectShinySimpleProgram.mFeatures.isShiny = true;
 			gSkinnedObjectShinySimpleProgram.mFeatures.disableTextureIndex = true;
 			gSkinnedObjectShinySimpleProgram.mShaderFiles.clear();
@@ -2425,6 +2629,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasTransport = true;
 			gSkinnedObjectFullbrightWaterProgram.mFeatures.isFullbright = true;
 			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasAlphaMask = true;
 			gSkinnedObjectFullbrightWaterProgram.mFeatures.hasWaterFog = true;
 			gSkinnedObjectFullbrightWaterProgram.mFeatures.disableTextureIndex = true;
 			gSkinnedObjectFullbrightWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
@@ -2444,6 +2649,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isShiny = true;
 			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.isFullbright = true;
 			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasAlphaMask = true;
 			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.hasWaterFog = true;
 			gSkinnedObjectFullbrightShinyWaterProgram.mFeatures.disableTextureIndex = true;
 			gSkinnedObjectFullbrightShinyWaterProgram.mShaderGroup = LLGLSLShader::SG_WATER;
@@ -2462,6 +2668,7 @@ BOOL LLViewerShaderMgr::loadShadersObject()
 			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasGamma = true;
 			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasAtmospherics = true;
 			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasObjectSkinning = true;
+			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasAlphaMask = true;
 			gSkinnedObjectShinySimpleWaterProgram.mFeatures.isShiny = true;
 			gSkinnedObjectShinySimpleWaterProgram.mFeatures.hasWaterFog = true;
 			gSkinnedObjectShinySimpleWaterProgram.mFeatures.disableTextureIndex = true;
@@ -2600,6 +2807,26 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
 		success = gHighlightProgram.createShader(NULL, NULL);
 	}
 
+	if (success)
+	{
+		gHighlightNormalProgram.mName = "Highlight Normals Shader";
+		gHighlightNormalProgram.mShaderFiles.clear();
+		gHighlightNormalProgram.mShaderFiles.push_back(make_pair("interface/highlightNormV.glsl", GL_VERTEX_SHADER_ARB));
+		gHighlightNormalProgram.mShaderFiles.push_back(make_pair("interface/highlightF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gHighlightNormalProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];		
+		success = gHighlightNormalProgram.createShader(NULL, NULL);
+	}
+
+	if (success)
+	{
+		gHighlightSpecularProgram.mName = "Highlight Spec Shader";
+		gHighlightSpecularProgram.mShaderFiles.clear();
+		gHighlightSpecularProgram.mShaderFiles.push_back(make_pair("interface/highlightSpecV.glsl", GL_VERTEX_SHADER_ARB));
+		gHighlightSpecularProgram.mShaderFiles.push_back(make_pair("interface/highlightF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gHighlightSpecularProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];		
+		success = gHighlightSpecularProgram.createShader(NULL, NULL);
+	}
+
 	if (success)
 	{
 		gUIProgram.mName = "UI Shader";
@@ -2778,6 +3005,26 @@ BOOL LLViewerShaderMgr::loadShadersInterface()
 		success = gClipProgram.createShader(NULL, NULL);
 	}
 
+	if (success)
+	{
+		gDownsampleDepthProgram.mName = "DownsampleDepth Shader";
+		gDownsampleDepthProgram.mShaderFiles.clear();
+		gDownsampleDepthProgram.mShaderFiles.push_back(make_pair("interface/downsampleDepthV.glsl", GL_VERTEX_SHADER_ARB));
+		gDownsampleDepthProgram.mShaderFiles.push_back(make_pair("interface/downsampleDepthF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDownsampleDepthProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+		success = gDownsampleDepthProgram.createShader(NULL, NULL);
+	}
+
+	if (success)
+	{
+		gDownsampleDepthRectProgram.mName = "DownsampleDepthRect Shader";
+		gDownsampleDepthRectProgram.mShaderFiles.clear();
+		gDownsampleDepthRectProgram.mShaderFiles.push_back(make_pair("interface/downsampleDepthV.glsl", GL_VERTEX_SHADER_ARB));
+		gDownsampleDepthRectProgram.mShaderFiles.push_back(make_pair("interface/downsampleDepthRectF.glsl", GL_FRAGMENT_SHADER_ARB));
+		gDownsampleDepthRectProgram.mShaderLevel = mVertexShaderLevel[SHADER_INTERFACE];
+		success = gDownsampleDepthRectProgram.createShader(NULL, NULL);
+	}
+
 	if (success)
 	{
 		gAlphaMaskProgram.mName = "Alpha Mask Shader";
@@ -2845,7 +3092,7 @@ BOOL LLViewerShaderMgr::loadTransformShaders()
 		gTransformTexCoordProgram.unload();
 		gTransformNormalProgram.unload();
 		gTransformColorProgram.unload();
-		gTransformBinormalProgram.unload();
+		gTransformTangentProgram.unload();
 		return TRUE;
 	}
 
@@ -2908,16 +3155,16 @@ BOOL LLViewerShaderMgr::loadTransformShaders()
 
 	if (success)
 	{
-		gTransformBinormalProgram.mName = "Binormal Transform Shader";
-		gTransformBinormalProgram.mShaderFiles.clear();
-		gTransformBinormalProgram.mShaderFiles.push_back(make_pair("transform/binormalV.glsl", GL_VERTEX_SHADER_ARB));
-		gTransformBinormalProgram.mShaderLevel = mVertexShaderLevel[SHADER_TRANSFORM];
+		gTransformTangentProgram.mName = "Binormal Transform Shader";
+		gTransformTangentProgram.mShaderFiles.clear();
+		gTransformTangentProgram.mShaderFiles.push_back(make_pair("transform/binormalV.glsl", GL_VERTEX_SHADER_ARB));
+		gTransformTangentProgram.mShaderLevel = mVertexShaderLevel[SHADER_TRANSFORM];
 
 		const char* varyings[] = {
-			"binormal_out",
+			"tangent_out",
 		};
 	
-		success = gTransformBinormalProgram.createShader(NULL, NULL, 1, varyings);
+		success = gTransformTangentProgram.createShader(NULL, NULL, 1, varyings);
 	}
 
 	
diff --git a/indra/newview/llviewershadermgr.h b/indra/newview/llviewershadermgr.h
old mode 100644
new mode 100755
index e3d28f2f5c21f42d51f641274e62d211e96a624d..438853cd6f7ef46117c5014842945789958e924e
--- a/indra/newview/llviewershadermgr.h
+++ b/indra/newview/llviewershadermgr.h
@@ -28,6 +28,7 @@
 #define LL_VIEWER_SHADER_MGR_H
 
 #include "llshadermgr.h"
+#include "llmaterial.h"
 
 class LLViewerShaderMgr: public LLShaderMgr
 {
@@ -216,7 +217,7 @@ extern LLGLSLShader			gTransformPositionProgram;
 extern LLGLSLShader			gTransformTexCoordProgram;
 extern LLGLSLShader			gTransformNormalProgram;
 extern LLGLSLShader			gTransformColorProgram;
-extern LLGLSLShader			gTransformBinormalProgram;
+extern LLGLSLShader			gTransformTangentProgram;
 
 
 
@@ -229,6 +230,8 @@ extern LLGLSLShader			gSplatTextureRectProgram;
 extern LLGLSLShader			gGlowCombineFXAAProgram;
 extern LLGLSLShader			gDebugProgram;
 extern LLGLSLShader			gClipProgram;
+extern LLGLSLShader			gDownsampleDepthProgram;
+extern LLGLSLShader			gDownsampleDepthRectProgram;
 
 //output tex0[tc0] + tex1[tc1]
 extern LLGLSLShader			gTwoTextureAddProgram;
@@ -300,6 +303,9 @@ extern LLGLSLShader			gGlowExtractProgram;
 
 //interface shaders
 extern LLGLSLShader			gHighlightProgram;
+extern LLGLSLShader			gHighlightNormalProgram;
+extern LLGLSLShader			gHighlightSpecularProgram;
+
 extern LLGLSLShader			gPathfindingProgram;
 extern LLGLSLShader			gPathfindingNoNormalsProgram;
 
@@ -318,6 +324,7 @@ extern LLGLSLShader			gWLCloudProgram;
 extern LLGLSLShader			gPostColorFilterProgram;
 extern LLGLSLShader			gPostNightVisionProgram;
 
+
 // Deferred rendering shaders
 extern LLGLSLShader			gDeferredImpostorProgram;
 extern LLGLSLShader			gDeferredWaterProgram;
@@ -349,6 +356,7 @@ extern LLGLSLShader			gDeferredCoFProgram;
 extern LLGLSLShader			gDeferredDoFCombineProgram;
 extern LLGLSLShader			gFXAAProgram;
 extern LLGLSLShader			gDeferredPostNoDoFProgram;
+extern LLGLSLShader			gDeferredPostGammaCorrectProgram;
 extern LLGLSLShader			gDeferredAvatarShadowProgram;
 extern LLGLSLShader			gDeferredAttachmentShadowProgram;
 extern LLGLSLShader			gDeferredAlphaProgram;
@@ -359,6 +367,12 @@ extern LLGLSLShader			gDeferredAvatarAlphaProgram;
 extern LLGLSLShader			gDeferredWLSkyProgram;
 extern LLGLSLShader			gDeferredWLCloudProgram;
 extern LLGLSLShader			gDeferredStarProgram;
+extern LLGLSLShader			gDeferredFullbrightShinyProgram;
+extern LLGLSLShader			gDeferredSkinnedFullbrightShinyProgram;
+extern LLGLSLShader			gDeferredSkinnedFullbrightProgram;
 extern LLGLSLShader			gNormalMapGenProgram;
 
+// Deferred materials shaders
+extern LLGLSLShader			gDeferredMaterialProgram[LLMaterial::SHADER_COUNT*2];
+
 #endif
diff --git a/indra/newview/llviewerstats.cpp b/indra/newview/llviewerstats.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerstats.h b/indra/newview/llviewerstats.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerstatsrecorder.cpp b/indra/newview/llviewerstatsrecorder.cpp
old mode 100644
new mode 100755
index 91e485d01b7b6e19827f8c746e3c29ddd5b5bfaf..2b3e2932292f3b298fc54b37424e8566e9457e08
--- a/indra/newview/llviewerstatsrecorder.cpp
+++ b/indra/newview/llviewerstatsrecorder.cpp
@@ -166,6 +166,7 @@ void LLViewerStatsRecorder::recordRequestCacheMissesEvent(S32 count)
 
 void LLViewerStatsRecorder::writeToLog( F32 interval )
 {
+	size_t data_size = 0;
 	F64 delta_time = LLTimer::getTotalSeconds() - mLastSnapshotTime;
 	S32 total_objects = mObjectCacheHitCount + mObjectCacheMissCrcCount + mObjectCacheMissFullCount + mObjectFullUpdates + mObjectTerseUpdates + mObjectCacheMissRequests + mObjectCacheMissResponses + mObjectCacheUpdateDupes + mObjectCacheUpdateChanges + mObjectCacheUpdateAdds + mObjectCacheUpdateReplacements + mObjectUpdateFailures;
 
@@ -216,7 +217,11 @@ void LLViewerStatsRecorder::writeToLog( F32 interval )
 				<< "Texture Fetch bps\t"
 				<< "\n";
 
-			fwrite(data_msg.str().c_str(), 1, data_msg.str().size(), mObjectCacheFile );
+			data_size = data_msg.str().size();
+			if (fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ) != data_size)
+			{
+				llwarns << "failed to write full headers to " << STATS_FILE_NAME << llendl;
+			}
 		}
 		else
 		{
@@ -249,7 +254,12 @@ void LLViewerStatsRecorder::writeToLog( F32 interval )
 		<< "\t" << (mTextureFetchSize * 8 / delta_time)
 		<< "\n";
 
-	fwrite(data_msg.str().c_str(), 1, data_msg.str().size(), mObjectCacheFile );
+	data_size = data_msg.str().size();
+	if ( data_size != fwrite(data_msg.str().c_str(), 1, data_size, mObjectCacheFile ))
+	{
+				llwarns << "Unable to write complete column data to " << STATS_FILE_NAME << llendl;
+	}
+
 	clearStats();
 }
 
diff --git a/indra/newview/llviewerstatsrecorder.h b/indra/newview/llviewerstatsrecorder.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewertexteditor.cpp b/indra/newview/llviewertexteditor.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewertexteditor.h b/indra/newview/llviewertexteditor.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewertexture.cpp b/indra/newview/llviewertexture.cpp
old mode 100644
new mode 100755
index eb6c453e765d74bbcc984d12006fc5587be1aa10..6cc9f4ace178506abade0d17529b7892ab57b493
--- a/indra/newview/llviewertexture.cpp
+++ b/indra/newview/llviewertexture.cpp
@@ -55,8 +55,6 @@
 #include "llappviewer.h"
 #include "llface.h"
 #include "llviewercamera.h"
-#include "lltextureatlas.h"
-#include "lltextureatlasmanager.h"
 #include "lltextureentry.h"
 #include "lltexturemanagerbridge.h"
 #include "llmediaentry.h"
@@ -73,6 +71,7 @@ LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sMissingAssetImagep =
 LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sWhiteImagep = NULL;
 LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sDefaultImagep = NULL;
 LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sSmokeImagep = NULL;
+LLPointer<LLViewerFetchedTexture> LLViewerFetchedTexture::sFlatNormalImagep = NULL;
 LLViewerMediaTexture::media_map_t LLViewerMediaTexture::sMediaMap ;
 LLTexturePipelineTester* LLViewerTextureManager::sTesterp = NULL ;
 const std::string sTesterName("TextureTester");
@@ -98,7 +97,6 @@ S32 LLViewerTexture::sMinLargeImageSize = 65536 ; //256 * 256.
 S32 LLViewerTexture::sMaxSmallImageSize = MAX_CACHED_RAW_IMAGE_AREA ;
 BOOL LLViewerTexture::sFreezeImageScalingDown = FALSE ;
 F32 LLViewerTexture::sCurrentTime = 0.0f ;
-BOOL LLViewerTexture::sUseTextureAtlas        = FALSE ;
 F32  LLViewerTexture::sTexelPixelRatio = 1.0f;
 
 LLViewerTexture::EDebugTexels LLViewerTexture::sDebugTexelsMode = LLViewerTexture::DEBUG_TEXELS_OFF;
@@ -277,7 +275,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTexture(
 }
 	
 LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
-	                                               const std::string& filename,
+	                                               const std::string& filename,												   
 												   FTType f_type,
 												   BOOL usemipmaps,
 												   LLViewerTexture::EBoostLevel boost_priority,
@@ -290,7 +288,7 @@ LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromFile(
 }
 
 //static 
-LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url,
+LLViewerFetchedTexture* LLViewerTextureManager::getFetchedTextureFromUrl(const std::string& url,									 
 									 FTType f_type,
 									 BOOL usemipmaps,
 									 LLViewerTexture::EBoostLevel boost_priority,
@@ -397,7 +395,7 @@ void LLViewerTextureManager::init()
 	LLViewerTexture::sCheckerBoardImagep = LLViewerTextureManager::getLocalTexture(image_raw.get(), TRUE);
 
 	LLViewerTexture::initClass() ;
-	
+
 	// Create a texture manager bridge.
 	gTextureManagerBridgep = new LLViewerTextureManagerBridge;
 
@@ -425,6 +423,7 @@ void LLViewerTextureManager::cleanup()
 	LLViewerFetchedTexture::sSmokeImagep = NULL;
 	LLViewerFetchedTexture::sMissingAssetImagep = NULL;
 	LLViewerFetchedTexture::sWhiteImagep = NULL;
+	LLViewerFetchedTexture::sFlatNormalImagep = NULL;
 
 	LLViewerMediaTexture::cleanUpClass() ;	
 }
@@ -565,8 +564,7 @@ void LLViewerTexture::updateClass(const F32 velocity, const F32 angular_velocity
 		}
 	}
 	sDesiredDiscardBias = llclamp(sDesiredDiscardBias, desired_discard_bias_min, desired_discard_bias_max);
-	LLViewerTexture::sUseTextureAtlas = gSavedSettings.getBOOL("EnableTextureAtlas") ;
-	
+		
 	F32 camera_moving_speed = LLViewerCamera::getInstance()->getAverageSpeed() ;
 	F32 camera_angular_speed = LLViewerCamera::getInstance()->getAverageAngularSpeed();
 	sCameraMovingBias = llmax(0.2f * camera_moving_speed, 2.0f * camera_angular_speed - 1);
@@ -632,9 +630,14 @@ void LLViewerTexture::init(bool firstinit)
 	mMaxVirtualSizeResetCounter = mMaxVirtualSizeResetInterval ;
 	mAdditionalDecodePriority = 0.f ;	
 	mParcelMedia = NULL ;
-	mNumFaces = 0 ;
+	
 	mNumVolumes = 0;
-	mFaceList.clear() ;
+	mFaceList[LLRender::DIFFUSE_MAP].clear() ;
+	mFaceList[LLRender::NORMAL_MAP].clear() ;
+	mFaceList[LLRender::SPECULAR_MAP].clear() ;
+	mNumFaces[LLRender::DIFFUSE_MAP] = 
+	mNumFaces[LLRender::NORMAL_MAP] = 
+	mNumFaces[LLRender::SPECULAR_MAP] = 0 ;
 	mVolumeList.clear();
 }
 
@@ -646,7 +649,9 @@ S8 LLViewerTexture::getType() const
 
 void LLViewerTexture::cleanup()
 {
-	mFaceList.clear() ;
+	mFaceList[LLRender::DIFFUSE_MAP].clear() ;
+	mFaceList[LLRender::NORMAL_MAP].clear() ;
+	mFaceList[LLRender::SPECULAR_MAP].clear() ;
 	mVolumeList.clear();
 }
 
@@ -762,38 +767,57 @@ void LLViewerTexture::setKnownDrawSize(S32 width, S32 height)
 }
 
 //virtual
-void LLViewerTexture::addFace(LLFace* facep) 
+void LLViewerTexture::addFace(U32 ch, LLFace* facep) 
 {
-	if(mNumFaces >= mFaceList.size())
+	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
+
+	if(mNumFaces[ch] >= mFaceList[ch].size())
 	{
-		mFaceList.resize(2 * mNumFaces + 1) ;		
+		mFaceList[ch].resize(2 * mNumFaces[ch] + 1) ;		
 	}
-	mFaceList[mNumFaces] = facep ;
-	facep->setIndexInTex(mNumFaces) ;
-	mNumFaces++ ;
+	mFaceList[ch][mNumFaces[ch]] = facep ;
+	facep->setIndexInTex(ch, mNumFaces[ch]) ;
+	mNumFaces[ch]++ ;
 	mLastFaceListUpdateTimer.reset() ;
 }
 
 //virtual
-void LLViewerTexture::removeFace(LLFace* facep) 
+void LLViewerTexture::removeFace(U32 ch, LLFace* facep) 
 {
-	if(mNumFaces > 1)
+	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
+
+	if(mNumFaces[ch] > 1)
 	{
-		S32 index = facep->getIndexInTex() ; 
-		mFaceList[index] = mFaceList[--mNumFaces] ;
-		mFaceList[index]->setIndexInTex(index) ;
+		S32 index = facep->getIndexInTex(ch) ; 
+		llassert(index < mFaceList[ch].size());
+		llassert(index < mNumFaces[ch]);
+		mFaceList[ch][index] = mFaceList[ch][--mNumFaces[ch]] ;
+		mFaceList[ch][index]->setIndexInTex(ch, index) ;
 	}
 	else 
 	{
-		mFaceList.clear() ;
-		mNumFaces = 0 ;
+		mFaceList[ch].clear() ;
+		mNumFaces[ch] = 0 ;
 	}
 	mLastFaceListUpdateTimer.reset() ;
 }
 
-S32 LLViewerTexture::getNumFaces() const
+S32 LLViewerTexture::getTotalNumFaces() const
 {
-	return mNumFaces ;
+	S32 ret = 0;
+
+	for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
+	{
+		ret += mNumFaces[i];
+	}
+
+	return ret;
+}
+
+S32 LLViewerTexture::getNumFaces(U32 ch) const
+{
+	llassert(ch < LLRender::NUM_TEXTURE_CHANNELS);
+	return mNumFaces[ch];
 }
 
 
@@ -816,6 +840,8 @@ void LLViewerTexture::removeVolume(LLVOVolume* volumep)
 	if(mNumVolumes > 1)
 	{
 		S32 index = volumep->getIndexInTex() ; 
+		llassert(index < mVolumeList.size());
+		llassert(index < mNumVolumes);
 		mVolumeList[index] = mVolumeList[--mNumVolumes] ;
 		mVolumeList[index]->setIndexInTex(index) ;
 	}
@@ -837,18 +863,22 @@ void LLViewerTexture::reorganizeFaceList()
 	static const F32 MAX_WAIT_TIME = 20.f; // seconds
 	static const U32 MAX_EXTRA_BUFFER_SIZE = 4 ;
 
-	if(mNumFaces + MAX_EXTRA_BUFFER_SIZE > mFaceList.size())
+	if(mLastFaceListUpdateTimer.getElapsedTimeF32() < MAX_WAIT_TIME)
 	{
-		return ;
+		return;
 	}
 
-	if(mLastFaceListUpdateTimer.getElapsedTimeF32() < MAX_WAIT_TIME)
+	for (U32 i = 0; i < LLRender::NUM_TEXTURE_CHANNELS; ++i)
 	{
-		return ;
+		if(mNumFaces[i] + MAX_EXTRA_BUFFER_SIZE > mFaceList[i].size())
+		{
+			return ;
+		}
+			
+		mFaceList[i].erase(mFaceList[i].begin() + mNumFaces[i], mFaceList[i].end());
 	}
-
+	
 	mLastFaceListUpdateTimer.reset() ;
-	mFaceList.erase(mFaceList.begin() + mNumFaces, mFaceList.end());
 }
 
 void LLViewerTexture::reorganizeVolumeList()
@@ -1177,7 +1207,7 @@ void LLViewerFetchedTexture::destroyTexture()
 	{
 		return ;
 	}
-
+	
 	//LL_DEBUGS("Avatar") << mID << llendl;
 	destroyGLTexture() ;
 	mFullyLoaded = FALSE ;
@@ -1194,9 +1224,14 @@ void LLViewerFetchedTexture::addToCreateTexture()
 		mGLTexturep->setComponents(mComponents) ;
 		force_update = true ;
 
-		for(U32 i = 0 ; i < mNumFaces ; i++)
+		for (U32 j = 0; j < LLRender::NUM_TEXTURE_CHANNELS; ++j)
 		{
-			mFaceList[i]->dirtyTexture() ;
+			llassert(mNumFaces[j] <= mFaceList[j].size());
+
+			for(U32 i = 0 ; i < mNumFaces[j]; i++)
+			{
+				mFaceList[j][i]->dirtyTexture() ;
+			}
 		}
 
 		//discard the cached raw image and the saved raw image
@@ -1340,11 +1375,8 @@ BOOL LLViewerFetchedTexture::createTexture(S32 usename/*= 0*/)
 		return FALSE;
 	}
 	
-	if(!(res = insertToAtlas()))
-	{
-		res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
-		resetFaceAtlas() ;
-	}
+	res = mGLTexturep->createGLTexture(mRawDiscardLevel, mRawImage, usename, TRUE, mBoostLevel);
+	
 	setActive() ;
 
 	if (!needsToSaveRawImage())
@@ -1633,28 +1665,32 @@ void LLViewerFetchedTexture::updateVirtualSize()
 		addTextureStats(0.f, FALSE) ;//reset
 	}
 
-	for(U32 i = 0 ; i < mNumFaces ; i++)
-	{				
-		LLFace* facep = mFaceList[i] ;
-		if( facep )
-		{
-			LLDrawable* drawable = facep->getDrawable();
-			if (drawable)
+	for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)
+	{
+		llassert(mNumFaces[ch] <= mFaceList[ch].size());
+
+		for(U32 i = 0 ; i < mNumFaces[ch]; i++)
+		{				
+			LLFace* facep = mFaceList[ch][i] ;
+			if( facep )
 			{
-				if(drawable->isRecentlyVisible())
+				LLDrawable* drawable = facep->getDrawable();
+				if (drawable)
 				{
-					if (getBoostLevel() == LLViewerTexture::BOOST_NONE && 
-						drawable->getVObj() && drawable->getVObj()->isSelected())
+					if(drawable->isRecentlyVisible())
 					{
-						setBoostLevel(LLViewerTexture::BOOST_SELECTED);
+						if (getBoostLevel() == LLViewerTexture::BOOST_NONE && 
+							drawable->getVObj() && drawable->getVObj()->isSelected())
+						{
+							setBoostLevel(LLViewerTexture::BOOST_SELECTED);
+						}
+						addTextureStats(facep->getVirtualSize()) ;
+						setAdditionalDecodePriority(facep->getImportanceToCamera()) ;
 					}
-					addTextureStats(facep->getVirtualSize()) ;
-					setAdditionalDecodePriority(facep->getImportanceToCamera()) ;
 				}
 			}
 		}
 	}
-
 	//reset whether or not a face was selected after 10 seconds
 	const F32 SELECTION_RESET_TIME = 10.f;
 
@@ -2739,190 +2775,6 @@ F32 LLViewerFetchedTexture::getElapsedLastReferencedSavedRawImageTime() const
 { 
 	return sCurrentTime - mLastReferencedSavedRawImageTime ;
 }
-//----------------------------------------------------------------------------------------------
-//atlasing
-//----------------------------------------------------------------------------------------------
-void LLViewerFetchedTexture::resetFaceAtlas()
-{
-	//Nothing should be done here.
-}
-
-//invalidate all atlas slots for this image.
-void LLViewerFetchedTexture::invalidateAtlas(BOOL rebuild_geom)
-{
-	for(U32 i = 0 ; i < mNumFaces ; i++)
-	{
-		LLFace* facep = mFaceList[i] ;
-		facep->removeAtlas() ;
-		if(rebuild_geom && facep->getDrawable() && facep->getDrawable()->getSpatialGroup())
-		{
-			facep->getDrawable()->getSpatialGroup()->setState(LLSpatialGroup::GEOM_DIRTY);
-		}
-	}
-}
-
-BOOL LLViewerFetchedTexture::insertToAtlas()
-{
-	if(!LLViewerTexture::sUseTextureAtlas)
-	{
-		return FALSE ;
-	}
-	if(getNumFaces() < 1)
-	{
-		return FALSE ;
-	}						
-	if(mGLTexturep->getDiscardLevelInAtlas() > 0 && mRawDiscardLevel >= mGLTexturep->getDiscardLevelInAtlas())
-	{
-		return FALSE ;
-	}
-	if(!LLTextureAtlasManager::getInstance()->canAddToAtlas(mRawImage->getWidth(), mRawImage->getHeight(), mRawImage->getComponents(), mGLTexturep->getTexTarget()))
-	{
-		return FALSE ;
-	}
-
-	BOOL ret = TRUE ;//if ret is set to false, will generate a gl texture for this image.
-	S32 raw_w = mRawImage->getWidth() ;
-	S32 raw_h = mRawImage->getHeight() ;
-	F32 xscale = 1.0f, yscale = 1.0f ;
-	LLPointer<LLTextureAtlasSlot> slot_infop;
-	LLTextureAtlasSlot* cur_slotp ;//no need to be smart pointer.
-	LLSpatialGroup* groupp ;
-	LLFace* facep;
-
-	//if the atlas slot pointers for some faces are null, process them later.
-	ll_face_list_t waiting_list ;
-	for(U32 i = 0 ; i < mNumFaces ; i++)
-	{
-		{
-			facep = mFaceList[i] ;			
-			
-			//face can not use atlas.
-			if(!facep->canUseAtlas())
-			{
-				if(facep->getAtlasInfo())
-				{
-					facep->removeAtlas() ;	
-				}
-				ret = FALSE ;
-				continue ;
-			}
-
-			//the atlas slot is updated
-			slot_infop = facep->getAtlasInfo() ;
-			groupp = facep->getDrawable()->getSpatialGroup() ;	
-
-			if(slot_infop) 
-			{
-				if(slot_infop->getSpatialGroup() != groupp)
-				{
-					if((cur_slotp = groupp->getCurUpdatingSlot(this))) //switch slot
-					{
-						facep->setAtlasInfo(cur_slotp) ;
-						facep->setAtlasInUse(TRUE) ;
-						continue ;
-					}
-					else //do not forget to update slot_infop->getSpatialGroup().
-					{
-						LLSpatialGroup* gp = slot_infop->getSpatialGroup() ;
-						gp->setCurUpdatingTime(gFrameCount) ;
-						gp->setCurUpdatingTexture(this) ;
-						gp->setCurUpdatingSlot(slot_infop) ;
-					}
-				}
-				else //same group
-				{
-					if(gFrameCount && slot_infop->getUpdatedTime() == gFrameCount)//slot is just updated
-					{
-						facep->setAtlasInUse(TRUE) ;
-						continue ;
-					}
-				}
-			}				
-			else
-			{
-				//if the slot is null, wait to process them later.
-				waiting_list.push_back(facep) ;
-				continue ;
-			}
-						
-			//----------
-			//insert to atlas
-			if(!slot_infop->getAtlas()->insertSubTexture(mGLTexturep, mRawDiscardLevel, mRawImage, slot_infop->getSlotCol(), slot_infop->getSlotRow()))			
-			{
-				
-				//the texture does not qualify to add to atlas, do not bother to try for other faces.
-				//invalidateAtlas();
-				return FALSE ;
-			}
-			
-			//update texture scale		
-			slot_infop->getAtlas()->getTexCoordScale(raw_w, raw_h, xscale, yscale) ;
-			slot_infop->setTexCoordScale(xscale, yscale) ;
-			slot_infop->setValid() ;
-			slot_infop->setUpdatedTime(gFrameCount) ;
-			
-			//update spatial group atlas info
-			groupp->setCurUpdatingTime(gFrameCount) ;
-			groupp->setCurUpdatingTexture(this) ;
-			groupp->setCurUpdatingSlot(slot_infop) ;
-
-			//make the face to switch to the atlas.
-			facep->setAtlasInUse(TRUE) ;
-		}
-	}
-
-	//process the waiting_list
-	for(std::vector<LLFace*>::iterator iter = waiting_list.begin(); iter != waiting_list.end(); ++iter)
-	{
-		facep = (LLFace*)*iter ;	
-		groupp = facep->getDrawable()->getSpatialGroup() ;
-
-		//check if this texture already inserted to atlas for this group
-		if((cur_slotp = groupp->getCurUpdatingSlot(this)))
-		{
-			facep->setAtlasInfo(cur_slotp) ;
-			facep->setAtlasInUse(TRUE) ;		
-			continue ;
-		}
-
-		//need to reserve a slot from atlas
-		slot_infop = LLTextureAtlasManager::getInstance()->reserveAtlasSlot(llmax(mFullWidth, mFullHeight), getComponents(), groupp, this) ;	
-
-		facep->setAtlasInfo(slot_infop) ;
-		
-		groupp->setCurUpdatingTime(gFrameCount) ;
-		groupp->setCurUpdatingTexture(this) ;
-		groupp->setCurUpdatingSlot(slot_infop) ;
-
-		//slot allocation failed.
-		if(!slot_infop || !slot_infop->getAtlas())
-		{			
-			ret = FALSE ;
-			facep->setAtlasInUse(FALSE) ;
-			continue ;
-		}
-				
-		//insert to atlas
-		if(!slot_infop->getAtlas()->insertSubTexture(mGLTexturep, mRawDiscardLevel, mRawImage, slot_infop->getSlotCol(), slot_infop->getSlotRow()))
-		{
-			//the texture does not qualify to add to atlas, do not bother to try for other faces.
-			ret = FALSE ;
-			//invalidateAtlas();
-			break ; 
-		}
-		
-		//update texture scale		
-		slot_infop->getAtlas()->getTexCoordScale(raw_w, raw_h, xscale, yscale) ;
-		slot_infop->setTexCoordScale(xscale, yscale) ;
-		slot_infop->setValid() ;
-		slot_infop->setUpdatedTime(gFrameCount) ;
-
-		//make the face to switch to the atlas.
-		facep->setAtlasInUse(TRUE) ;
-	}
-	
-	return ret ;
-}
 
 //----------------------------------------------------------------------------------------------
 //end of LLViewerFetchedTexture
@@ -3269,11 +3121,14 @@ BOOL LLViewerMediaTexture::findFaces()
 	LLViewerTexture* tex = gTextureList.findImage(mID) ;
 	if(tex) //this media is a parcel media for tex.
 	{
-		const ll_face_list_t* face_list = tex->getFaceList() ;
-		U32 end = tex->getNumFaces() ;
-		for(U32 i = 0 ; i < end ; i++)
+		for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)
 		{
-			mMediaFaceList.push_back((*face_list)[i]) ;
+			const ll_face_list_t* face_list = tex->getFaceList(ch) ;
+			U32 end = tex->getNumFaces(ch) ;
+			for(U32 i = 0 ; i < end ; i++)
+			{
+				mMediaFaceList.push_back((*face_list)[i]) ;
+			}
 		}
 	}
 	
@@ -3338,7 +3193,7 @@ void LLViewerMediaTexture::addMediaToFace(LLFace* facep)
 		return ; //no need to add the face because the media is not in playing.
 	}
 
-	switchTexture(facep) ;
+	switchTexture(LLRender::DIFFUSE_MAP, facep) ;
 }
 	
 void LLViewerMediaTexture::removeMediaFromFace(LLFace* facep) 
@@ -3355,19 +3210,19 @@ void LLViewerMediaTexture::removeMediaFromFace(LLFace* facep)
 	}	
 
 	mIsPlaying = FALSE ; //set to remove the media from the face.
-	switchTexture(facep) ;
+	switchTexture(LLRender::DIFFUSE_MAP, facep) ;
 	mIsPlaying = TRUE ; //set the flag back.
 
-	if(getNumFaces() < 1) //no face referencing to this media
+	if(getTotalNumFaces() < 1) //no face referencing to this media
 	{
 		stopPlaying() ;
 	}
 }
 
 //virtual 
-void LLViewerMediaTexture::addFace(LLFace* facep) 
+void LLViewerMediaTexture::addFace(U32 ch, LLFace* facep) 
 {
-	LLViewerTexture::addFace(facep) ;
+	LLViewerTexture::addFace(ch, facep) ;
 
 	const LLTextureEntry* te = facep->getTextureEntry() ;
 	if(te && te->getID().notNull())
@@ -3394,9 +3249,9 @@ void LLViewerMediaTexture::addFace(LLFace* facep)
 }
 
 //virtual 
-void LLViewerMediaTexture::removeFace(LLFace* facep) 
+void LLViewerMediaTexture::removeFace(U32 ch, LLFace* facep) 
 {
-	LLViewerTexture::removeFace(facep) ;
+	LLViewerTexture::removeFace(ch, facep) ;
 
 	const LLTextureEntry* te = facep->getTextureEntry() ;
 	if(te && te->getID().notNull())
@@ -3414,24 +3269,35 @@ void LLViewerMediaTexture::removeFace(LLFace* facep)
 				}
 			}
 
-			//
-			//we have some trouble here: the texture of the face is changed.
-			//we need to find the former texture, and remove it from the list to avoid memory leaking.
-			if(!mNumFaces)
+			std::vector<const LLTextureEntry*> te_list;
+			
+			for (U32 ch = 0; ch < 3; ++ch)
 			{
-				mTextureList.clear() ;
-				return ;
+				//
+				//we have some trouble here: the texture of the face is changed.
+				//we need to find the former texture, and remove it from the list to avoid memory leaking.
+				
+				llassert(mNumFaces[ch] <= mFaceList[ch].size());
+
+				for(U32 j = 0 ; j < mNumFaces[ch] ; j++)
+				{
+					te_list.push_back(mFaceList[ch][j]->getTextureEntry());//all textures are in use.
+				}
 			}
-			S32 end = getNumFaces() ;
-			std::vector<const LLTextureEntry*> te_list(end) ;
-			S32 i = 0 ;			
-			for(U32 j = 0 ; j < mNumFaces ; j++)
+
+			if (te_list.empty())
 			{
-				te_list[i++] = mFaceList[j]->getTextureEntry() ;//all textures are in use.
+				mTextureList.clear() ;
+				return ;
 			}
+
+			S32 end = te_list.size();
+
 			for(std::list< LLPointer<LLViewerTexture> >::iterator iter = mTextureList.begin();
 				iter != mTextureList.end(); ++iter)
 			{
+				S32 i = 0;
+
 				for(i = 0 ; i < end ; i++)
 				{
 					if(te_list[i] && te_list[i]->getID() == (*iter)->getID())//the texture is in use.
@@ -3476,7 +3342,7 @@ void LLViewerMediaTexture::stopPlaying()
 	mIsPlaying = FALSE ;			
 }
 
-void LLViewerMediaTexture::switchTexture(LLFace* facep)
+void LLViewerMediaTexture::switchTexture(U32 ch, LLFace* facep)
 {
 	if(facep)
 	{
@@ -3492,7 +3358,7 @@ void LLViewerMediaTexture::switchTexture(LLFace* facep)
 
 		if(mIsPlaying) //old textures switch to the media texture
 		{
-			facep->switchTexture(this) ;
+			facep->switchTexture(ch, this) ;
 		}
 		else //switch to old textures.
 		{
@@ -3508,7 +3374,7 @@ void LLViewerMediaTexture::switchTexture(LLFace* facep)
 				{
 					tex = LLViewerFetchedTexture::sDefaultImagep ;
 				}
-				facep->switchTexture(tex) ;
+				facep->switchTexture(ch, tex) ;
 			}
 		}
 	}
@@ -3547,14 +3413,17 @@ void LLViewerMediaTexture::setPlaying(BOOL playing)
 
 		for(std::list< LLFace* >::iterator iter = mMediaFaceList.begin(); iter!= mMediaFaceList.end(); ++iter)
 		{
-			switchTexture(*iter) ;
+			switchTexture(LLRender::DIFFUSE_MAP, *iter) ;
 		}
 	}
 	else //stop playing this media
 	{
-		for(U32 i = mNumFaces ; i ; i--)
+		U32 ch = LLRender::DIFFUSE_MAP;
+		
+		llassert(mNumFaces[ch] <= mFaceList[ch].size());
+		for(U32 i = mNumFaces[ch] ; i ; i--)
 		{
-			switchTexture(mFaceList[i - 1]) ; //current face could be removed in this function.
+			switchTexture(ch, mFaceList[ch][i - 1]) ; //current face could be removed in this function.
 		}
 	}
 	return ;
@@ -3576,14 +3445,18 @@ F32 LLViewerMediaTexture::getMaxVirtualSize()
 
 	if(mIsPlaying) //media is playing
 	{
-		for(U32 i = 0 ; i < mNumFaces ; i++)
+		for (U32 ch = 0; ch < LLRender::NUM_TEXTURE_CHANNELS; ++ch)
 		{
-			LLFace* facep = mFaceList[i] ;
-			if(facep->getDrawable()->isRecentlyVisible())
+			llassert(mNumFaces[ch] <= mFaceList[ch].size());
+			for(U32 i = 0 ; i < mNumFaces[ch] ; i++)
 			{
-				addTextureStats(facep->getVirtualSize()) ;
-			}
-		}		
+				LLFace* facep = mFaceList[ch][i] ;
+				if(facep->getDrawable()->isRecentlyVisible())
+				{
+					addTextureStats(facep->getVirtualSize()) ;
+				}
+			}		
+		}
 	}
 	else //media is not in playing
 	{
diff --git a/indra/newview/llviewertexture.h b/indra/newview/llviewertexture.h
old mode 100644
new mode 100755
index f2e1a90713afade6a10f4ed4432648eac3c8395e..c96f89017fd75d96734faecbf20383326bcd7851
--- a/indra/newview/llviewertexture.h
+++ b/indra/newview/llviewertexture.h
@@ -34,6 +34,7 @@
 #include "llgltypes.h"
 #include "llrender.h"
 #include "llmetricperformancetester.h"
+#include "llface.h"
 
 #include <map>
 #include <list>
@@ -41,7 +42,6 @@
 #define MIN_VIDEO_RAM_IN_MEGA_BYTES    32
 #define MAX_VIDEO_RAM_IN_MEGA_BYTES    512 // 512MB max for performance reasons.
 
-class LLFace;
 class LLImageGL ;
 class LLImageRaw;
 class LLViewerObject;
@@ -98,7 +98,6 @@ class LLViewerTexture : public LLGLTexture
 		DYNAMIC_TEXTURE,
 		FETCHED_TEXTURE,
 		LOD_TEXTURE,
-		ATLAS_TEXTURE,
 		INVALID_TEXTURE_TYPE
 	};
 
@@ -140,12 +139,15 @@ class LLViewerTexture : public LLGLTexture
 
 	LLFrameTimer* getLastReferencedTimer() {return &mLastReferencedTimer ;}
 	
+	S32 getFullWidth() const { return mFullWidth; }
+	S32 getFullHeight() const { return mFullHeight; }	
 	/*virtual*/ void setKnownDrawSize(S32 width, S32 height);
 
-	virtual void addFace(LLFace* facep) ;
-	virtual void removeFace(LLFace* facep) ; 
-	S32 getNumFaces() const;
-	const ll_face_list_t* getFaceList() const {return &mFaceList;}
+	virtual void addFace(U32 channel, LLFace* facep) ;
+	virtual void removeFace(U32 channel, LLFace* facep) ; 
+	S32 getTotalNumFaces() const;
+	S32 getNumFaces(U32 ch) const;
+	const ll_face_list_t* getFaceList(U32 channel) const {llassert(channel < LLRender::NUM_TEXTURE_CHANNELS); return &mFaceList[channel];}
 
 	virtual void addVolume(LLVOVolume* volumep);
 	virtual void removeVolume(LLVOVolume* volumep);
@@ -182,8 +184,8 @@ class LLViewerTexture : public LLGLTexture
 	mutable F32 mAdditionalDecodePriority;  // priority add to mDecodePriority.
 	LLFrameTimer mLastReferencedTimer;	
 
-	ll_face_list_t    mFaceList ; //reverse pointer pointing to the faces using this image as texture
-	U32               mNumFaces ;
+	ll_face_list_t    mFaceList[LLRender::NUM_TEXTURE_CHANNELS]; //reverse pointer pointing to the faces using this image as texture
+	U32               mNumFaces[LLRender::NUM_TEXTURE_CHANNELS];
 	LLFrameTimer      mLastFaceListUpdateTimer ;
 
 	ll_volume_list_t  mVolumeList;
@@ -214,8 +216,7 @@ class LLViewerTexture : public LLGLTexture
 	static S32 sMaxSmallImageSize ;
 	static BOOL sFreezeImageScalingDown ;//do not scale down image res if set.
 	static F32  sCurrentTime ;
-	static BOOL sUseTextureAtlas ;
-
+	
 	enum EDebugTexels
 	{
 		DEBUG_TEXELS_OFF,
@@ -400,17 +401,12 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	S32 getCurrentDiscardLevelForFetching() ;
 
 private:
-	void init(bool firstinit) ;	
+	void init(bool firstinit) ;
 	void cleanup() ;
 
 	void saveRawImage() ;
 	void setCachedRawImage() ;
 
-	//for atlas
-	void resetFaceAtlas() ;
-	void invalidateAtlas(BOOL rebuild_geom) ;
-	BOOL insertToAtlas() ;
-
 private:
 	BOOL  mFullyLoaded;
 	BOOL  mInDebug;
@@ -447,7 +443,7 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	S8  mHasFetcher;				// We've made a fecth request
 	S8  mIsFetching;				// Fetch request is active
 	bool mCanUseHTTP ;              //This texture can be fetched through http if true.
-
+	
 	FTType mFTType; // What category of image is this - map tile, server bake, etc?
 	mutable S8 mIsMissingAsset;		// True if we know that there is no image asset with this image id in the database.		
 
@@ -496,6 +492,7 @@ class LLViewerFetchedTexture : public LLViewerTexture
 	static LLPointer<LLViewerFetchedTexture> sWhiteImagep;	// Texture to show NOTHING (whiteness)
 	static LLPointer<LLViewerFetchedTexture> sDefaultImagep; // "Default" texture for error cases, the only case of fetched texture which is generated in local.
 	static LLPointer<LLViewerFetchedTexture> sSmokeImagep; // Old "Default" translucent texture
+	static LLPointer<LLViewerFetchedTexture> sFlatNormalImagep; // Flat normal map denoting no bumpiness on a surface
 };
 
 //
@@ -553,12 +550,12 @@ class LLViewerMediaTexture : public LLViewerTexture
 	void addMediaToFace(LLFace* facep) ;
 	void removeMediaFromFace(LLFace* facep) ;
 
-	/*virtual*/ void addFace(LLFace* facep) ;
-	/*virtual*/ void removeFace(LLFace* facep) ; 
+	/*virtual*/ void addFace(U32 ch, LLFace* facep) ;
+	/*virtual*/ void removeFace(U32 ch, LLFace* facep) ; 
 
 	/*virtual*/ F32  getMaxVirtualSize() ;
 private:
-	void switchTexture(LLFace* facep) ;
+	void switchTexture(U32 ch, LLFace* facep) ;
 	BOOL findFaces() ;
 	void stopPlaying() ;
 
diff --git a/indra/newview/llviewertextureanim.cpp b/indra/newview/llviewertextureanim.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewertextureanim.h b/indra/newview/llviewertextureanim.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewertexturelist.cpp b/indra/newview/llviewertexturelist.cpp
old mode 100644
new mode 100755
index d2af48f5286d78a95ee1eb1bd18168cddc757883..d9f3548a29d0e6e5ec8abf77f9ae479aa6bd7326
--- a/indra/newview/llviewertexturelist.cpp
+++ b/indra/newview/llviewertexturelist.cpp
@@ -119,6 +119,9 @@ void LLViewerTextureList::doPreloadImages()
 	LLTexUnit::sWhiteTexture = LLViewerFetchedTexture::sWhiteImagep->getTexName();
 	LLUIImageList* image_list = LLUIImageList::getInstance();
 
+	// Set the default flat normal map
+	LLViewerFetchedTexture::sFlatNormalImagep = LLViewerTextureManager::getFetchedTextureFromFile("flatnormal.tga", FTT_LOCAL_FILE, MIPMAP_NO, LLViewerFetchedTexture::BOOST_BUMP);
+	
 	image_list->initFromFile();
 	
 	// turn off clamping and bilinear filtering for uv picking images
@@ -324,7 +327,7 @@ void LLViewerTextureList::restoreGL()
 
 ///////////////////////////////////////////////////////////////////////////////
 
-LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& filename,
+LLViewerFetchedTexture* LLViewerTextureList::getImageFromFile(const std::string& filename,												   
 												   FTType f_type,
 												   BOOL usemipmaps,
 												   LLViewerTexture::EBoostLevel boost_priority,
@@ -376,7 +379,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
 	}
 
 	LLPointer<LLViewerFetchedTexture> imagep = findImage(new_id);
-
+	
 	if (!imagep.isNull())
 	{
 		LLViewerFetchedTexture *texture = imagep.get();
@@ -432,7 +435,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImageFromUrl(const std::string&
 }
 
 
-LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
+LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,											       
 												   FTType f_type,
 												   BOOL usemipmaps,
 												   LLViewerTexture::EBoostLevel boost_priority,
@@ -475,7 +478,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 		{
 			llwarns << "FTType mismatch: requested " << f_type << " image has " << imagep->getFTType() << llendl;
 		}
-		
+	
 	}
 	if (imagep.isNull())
 	{
@@ -488,7 +491,7 @@ LLViewerFetchedTexture* LLViewerTextureList::getImage(const LLUUID &image_id,
 }
 
 //when this function is called, there is no such texture in the gTextureList with image_id.
-LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,
+LLViewerFetchedTexture* LLViewerTextureList::createImage(const LLUUID &image_id,											       
 												   FTType f_type,
 												   BOOL usemipmaps,
 												   LLViewerTexture::EBoostLevel boost_priority,
diff --git a/indra/newview/llviewertexturelist.h b/indra/newview/llviewertexturelist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerthrottle.cpp b/indra/newview/llviewerthrottle.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerthrottle.h b/indra/newview/llviewerthrottle.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 0910b7536d40698e60d652c8d4aa38161b05f76a..65a906d3c0bd2a5f39a5da3bb273d591379863c3 100755
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -34,6 +34,7 @@
 #include <fstream>
 #include <algorithm>
 #include <boost/lambda/core.hpp>
+#include <boost/regex.hpp>
 
 #include "llagent.h"
 #include "llagentcamera.h"
@@ -228,13 +229,13 @@ LLFrameTimer	gAwayTriggerTimer;
 BOOL			gShowOverlayTitle = FALSE;
 
 LLViewerObject*  gDebugRaycastObject = NULL;
-LLVector3       gDebugRaycastIntersection;
-LLVector2       gDebugRaycastTexCoord;
-LLVector3       gDebugRaycastNormal;
-LLVector3       gDebugRaycastBinormal;
-S32				gDebugRaycastFaceHit;
-LLVector3		gDebugRaycastStart;
-LLVector3		gDebugRaycastEnd;
+LLVector4a       gDebugRaycastIntersection;
+LLVector2        gDebugRaycastTexCoord;
+LLVector4a       gDebugRaycastNormal;
+LLVector4a       gDebugRaycastTangent;
+S32				 gDebugRaycastFaceHit;
+LLVector4a		 gDebugRaycastStart;
+LLVector4a		 gDebugRaycastEnd;
 
 // HUD display lines in lower right
 BOOL				gDisplayWindInfo = FALSE;
@@ -2249,29 +2250,42 @@ void LLViewerWindow::setMenuBackgroundColor(bool god_mode, bool dev_grid)
 
 	// no l10n problem because channel is always an english string
 	std::string channel = LLVersionInfo::getChannel();
-	bool isProject = (channel.find("Project") != std::string::npos);
+	static const boost::regex is_beta_channel("\\bBeta\\b");
+	static const boost::regex is_project_channel("\\bProject\\b");
+	static const boost::regex is_test_channel("\\bTest$");
 	
 	// god more important than project, proj more important than grid
-    if(god_mode && LLGridManager::getInstance()->isInProductionGrid())
+    if ( god_mode ) 
     {
-        new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" );
-    }
-    else if(god_mode && !LLGridManager::getInstance()->isInProductionGrid())
-    {
-        new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" );
+		if ( LLGridManager::getInstance()->isInProductionGrid() )
+		{
+			new_bg_color = LLUIColorTable::instance().getColor( "MenuBarGodBgColor" );
+		}
+		else
+		{
+			new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionGodBgColor" );
+		}
     }
-	else if (!god_mode && isProject)
+	else if (boost::regex_search(channel, is_beta_channel))
+	{
+		new_bg_color = LLUIColorTable::instance().getColor( "MenuBarBetaBgColor" );
+	}
+	else if (boost::regex_search(channel, is_project_channel))
 	{
 		new_bg_color = LLUIColorTable::instance().getColor( "MenuBarProjectBgColor" );
-    }
-    else if(!god_mode && !LLGridManager::getInstance()->isInProductionGrid())
-    {
-        new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
-    }
-    else 
-    {
-        new_bg_color = LLUIColorTable::instance().getColor( "MenuBarBgColor" );
-    }
+	}
+	else if (boost::regex_search(channel, is_test_channel))
+	{
+		new_bg_color = LLUIColorTable::instance().getColor( "MenuBarTestBgColor" );
+	}
+	else if(!LLGridManager::getInstance()->isInProductionGrid())
+	{
+		new_bg_color = LLUIColorTable::instance().getColor( "MenuNonProductionBgColor" );
+	}
+	else 
+	{
+		new_bg_color = LLUIColorTable::instance().getColor( "MenuBarBgColor" );
+	}
 
     if(gMenuBarView)
     {
@@ -2827,7 +2841,7 @@ void LLViewerWindow::updateUI()
 											  &gDebugRaycastIntersection,
 											  &gDebugRaycastTexCoord,
 											  &gDebugRaycastNormal,
-											  &gDebugRaycastBinormal,
+											  &gDebugRaycastTangent,
 											  &gDebugRaycastStart,
 											  &gDebugRaycastEnd);
 	}
@@ -3725,7 +3739,7 @@ LLPickInfo LLViewerWindow::pickImmediate(S32 x, S32 y_from_bot,  BOOL pick_trans
 }
 
 LLHUDIcon* LLViewerWindow::cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
-										   LLVector3* intersection)
+										   LLVector4a* intersection)
 {
 	S32 x = mouse_x;
 	S32 y = mouse_y;
@@ -3737,14 +3751,17 @@ LLHUDIcon* LLViewerWindow::cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 dep
 	}
 
 	// world coordinates of mouse
+	// VECTORIZE THIS
 	LLVector3 mouse_direction_global = mouseDirectionGlobal(x,y);
 	LLVector3 mouse_point_global = LLViewerCamera::getInstance()->getOrigin();
 	LLVector3 mouse_world_start = mouse_point_global;
 	LLVector3 mouse_world_end   = mouse_point_global + mouse_direction_global * depth;
 
-	return LLHUDIcon::lineSegmentIntersectAll(mouse_world_start, mouse_world_end, intersection);
-
+	LLVector4a start, end;
+	start.load3(mouse_world_start.mV);
+	end.load3(mouse_world_end.mV);
 	
+	return LLHUDIcon::lineSegmentIntersectAll(start, end, intersection);
 }
 
 LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 depth,
@@ -3752,12 +3769,12 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 												S32 this_face,
 												BOOL pick_transparent,
 												S32* face_hit,
-												LLVector3 *intersection,
+												LLVector4a *intersection,
 												LLVector2 *uv,
-												LLVector3 *normal,
-												LLVector3 *binormal,
-												LLVector3* start,
-												LLVector3* end)
+												LLVector4a *normal,
+												LLVector4a *tangent,
+												LLVector4a* start,
+												LLVector4a* end)
 {
 	S32 x = mouse_x;
 	S32 y = mouse_y;
@@ -3792,17 +3809,27 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 	if (!LLViewerJoystick::getInstance()->getOverrideCamera())
 	{ //always set raycast intersection to mouse_world_end unless
 		//flycam is on (for DoF effect)
-		gDebugRaycastIntersection = mouse_world_end;
+		gDebugRaycastIntersection.load3(mouse_world_end.mV);
 	}
 
+	LLVector4a mw_start;
+	mw_start.load3(mouse_world_start.mV);
+	LLVector4a mw_end;
+	mw_end.load3(mouse_world_end.mV);
+
+	LLVector4a mh_start;
+	mh_start.load3(mouse_hud_start.mV);
+	LLVector4a mh_end;
+	mh_end.load3(mouse_hud_end.mV);
+
 	if (start)
 	{
-		*start = mouse_world_start;
+		*start = mw_start;
 	}
 
 	if (end)
 	{
-		*end = mouse_world_end;
+		*end = mw_end;
 	}
 
 	LLViewerObject* found = NULL;
@@ -3811,16 +3838,16 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 	{
 		if (this_object->isHUDAttachment()) // is a HUD object?
 		{
-			if (this_object->lineSegmentIntersect(mouse_hud_start, mouse_hud_end, this_face, pick_transparent,
-												  face_hit, intersection, uv, normal, binormal))
+			if (this_object->lineSegmentIntersect(mh_start, mh_end, this_face, pick_transparent,
+												  face_hit, intersection, uv, normal, tangent))
 			{
 				found = this_object;
 			}
 		}
 		else // is a world object
 		{
-			if (this_object->lineSegmentIntersect(mouse_world_start, mouse_world_end, this_face, pick_transparent,
-												  face_hit, intersection, uv, normal, binormal))
+			if (this_object->lineSegmentIntersect(mw_start, mw_end, this_face, pick_transparent,
+												  face_hit, intersection, uv, normal, tangent))
 			{
 				found = this_object;
 			}
@@ -3828,20 +3855,20 @@ LLViewerObject* LLViewerWindow::cursorIntersect(S32 mouse_x, S32 mouse_y, F32 de
 	}
 	else // check ALL objects
 	{
-		found = gPipeline.lineSegmentIntersectInHUD(mouse_hud_start, mouse_hud_end, pick_transparent,
-													face_hit, intersection, uv, normal, binormal);
+		found = gPipeline.lineSegmentIntersectInHUD(mh_start, mh_end, pick_transparent,
+													face_hit, intersection, uv, normal, tangent);
 
 		if (!found) // if not found in HUD, look in world:
 		{
-			found = gPipeline.lineSegmentIntersectInWorld(mouse_world_start, mouse_world_end, pick_transparent,
-														  face_hit, intersection, uv, normal, binormal);
+			found = gPipeline.lineSegmentIntersectInWorld(mw_start, mw_end, pick_transparent,
+														  face_hit, intersection, uv, normal, tangent);
 			if (found && !pick_transparent)
 			{
 				gDebugRaycastIntersection = *intersection;
 			}
 		}
 	}
-
+		
 	return found;
 }
 
@@ -5098,6 +5125,7 @@ LLPickInfo::LLPickInfo()
 	  mXYCoords(-1, -1),
 	  mIntersection(),
 	  mNormal(),
+	  mTangent(),
 	  mBinormal(),
 	  mHUDIcon(NULL),
 	  mPickTransparent(FALSE)
@@ -5119,6 +5147,7 @@ LLPickInfo::LLPickInfo(const LLCoordGL& mouse_pos,
 	  mSTCoords(-1.f, -1.f),
 	  mXYCoords(-1, -1),
 	  mNormal(),
+	  mTangent(),
 	  mBinormal(),
 	  mHUDIcon(NULL),
 	  mPickTransparent(pick_transparent)
@@ -5129,19 +5158,26 @@ void LLPickInfo::fetchResults()
 {
 
 	S32 face_hit = -1;
-	LLVector3 intersection, normal, binormal;
+	LLVector4a intersection, normal;
+	LLVector4a tangent;
+
 	LLVector2 uv;
 
 	LLHUDIcon* hit_icon = gViewerWindow->cursorIntersectIcon(mMousePt.mX, mMousePt.mY, 512.f, &intersection);
 	
+	LLVector4a origin;
+	origin.load3(LLViewerCamera::getInstance()->getOrigin().mV);
 	F32 icon_dist = 0.f;
 	if (hit_icon)
 	{
-		icon_dist = (LLViewerCamera::getInstance()->getOrigin()-intersection).magVec();
+		LLVector4a delta;
+		delta.setSub(intersection, origin);
+		icon_dist = delta.getLength3().getF32();
 	}
+
 	LLViewerObject* hit_object = gViewerWindow->cursorIntersect(mMousePt.mX, mMousePt.mY, 512.f,
 									NULL, -1, mPickTransparent, &face_hit,
-									&intersection, &uv, &normal, &binormal);
+									&intersection, &uv, &normal, &tangent);
 	
 	mPickPt = mMousePt;
 
@@ -5151,9 +5187,13 @@ void LLPickInfo::fetchResults()
 	
 	LLViewerObject* objectp = hit_object;
 
+
+	LLVector4a delta;
+	delta.setSub(origin, intersection);
+
 	if (hit_icon && 
 		(!objectp || 
-		icon_dist < (LLViewerCamera::getInstance()->getOrigin()-intersection).magVec()))
+		icon_dist < delta.getLength3().getF32()))
 	{
 		// was this name referring to a hud icon?
 		mHUDIcon = hit_icon;
@@ -5190,11 +5230,16 @@ void LLPickInfo::fetchResults()
 			{
 				mPickType = PICK_OBJECT;
 			}
-			mObjectOffset = gAgentCamera.calcFocusOffset(objectp, intersection, mPickPt.mX, mPickPt.mY);
+
+			LLVector3 v_intersection(intersection.getF32ptr());
+
+			mObjectOffset = gAgentCamera.calcFocusOffset(objectp, v_intersection, mPickPt.mX, mPickPt.mY);
 			mObjectID = objectp->mID;
 			mObjectFace = (te_offset == NO_FACE) ? -1 : (S32)te_offset;
 
-			mPosGlobal = gAgent.getPosGlobalFromAgent(intersection);
+			
+
+			mPosGlobal = gAgent.getPosGlobalFromAgent(v_intersection);
 			
 			if (mWantSurfaceInfo)
 			{
@@ -5238,7 +5283,16 @@ void LLPickInfo::getSurfaceInfo()
 	mIntersection = LLVector3(0,0,0);
 	mNormal       = LLVector3(0,0,0);
 	mBinormal     = LLVector3(0,0,0);
+	mTangent	  = LLVector4(0,0,0,0);
 	
+	LLVector4a tangent;
+	LLVector4a intersection;
+	LLVector4a normal;
+
+	tangent.clear();
+	normal.clear();
+	intersection.clear();
+
 	LLViewerObject* objectp = getObject();
 
 	if (objectp)
@@ -5246,10 +5300,10 @@ void LLPickInfo::getSurfaceInfo()
 		if (gViewerWindow->cursorIntersect(llround((F32)mMousePt.mX), llround((F32)mMousePt.mY), 1024.f,
 										   objectp, -1, mPickTransparent,
 										   &mObjectFace,
-										   &mIntersection,
+										   &intersection,
 										   &mSTCoords,
-										   &mNormal,
-										   &mBinormal))
+										   &normal,
+										   &tangent))
 		{
 			// if we succeeded with the intersect above, compute the texture coordinates:
 
@@ -5258,10 +5312,26 @@ void LLPickInfo::getSurfaceInfo()
 				LLFace* facep = objectp->mDrawable->getFace(mObjectFace);
 				if (facep)
 				{
-				mUVCoords = facep->surfaceToTexture(mSTCoords, mIntersection, mNormal);
-			}
+					mUVCoords = facep->surfaceToTexture(mSTCoords, intersection, normal);
+				}
 			}
 
+			mIntersection.set(intersection.getF32ptr());
+			mNormal.set(normal.getF32ptr());
+			mTangent.set(tangent.getF32ptr());
+
+			//extrapoloate binormal from normal and tangent
+			
+			LLVector4a binormal;
+			binormal.setCross3(normal, tangent);
+			binormal.mul(tangent.getF32ptr()[3]);
+
+			mBinormal.set(binormal.getF32ptr());
+
+			mBinormal.normalize();
+			mNormal.normalize();
+			mTangent.normalize();
+
 			// and XY coords:
 			updateXYCoords();
 			
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
old mode 100644
new mode 100755
index b33488fd785568195eef95dc5c3192c6225aaea0..89f6e3bc26e7194b7de436342ad8204146b9b3f2
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -115,6 +115,7 @@ class LLPickInfo
 	LLVector2       mSTCoords;
 	LLCoordScreen	mXYCoords;
 	LLVector3		mNormal;
+	LLVector4		mTangent;
 	LLVector3		mBinormal;
 	BOOL			mPickTransparent;
 	void		    getSurfaceInfo();
@@ -357,19 +358,19 @@ class LLViewerWindow : public LLWindowCallbacks
 	void			pickAsync(S32 x, S32 y_from_bot, MASK mask, void (*callback)(const LLPickInfo& pick_info), BOOL pick_transparent = FALSE);
 	LLPickInfo		pickImmediate(S32 x, S32 y, BOOL pick_transparent);
 	LLHUDIcon* cursorIntersectIcon(S32 mouse_x, S32 mouse_y, F32 depth,
-										   LLVector3* intersection);
+										   LLVector4a* intersection);
 
 	LLViewerObject* cursorIntersect(S32 mouse_x = -1, S32 mouse_y = -1, F32 depth = 512.f,
 									LLViewerObject *this_object = NULL,
 									S32 this_face = -1,
 									BOOL pick_transparent = FALSE,
 									S32* face_hit = NULL,
-									LLVector3 *intersection = NULL,
+									LLVector4a *intersection = NULL,
 									LLVector2 *uv = NULL,
-									LLVector3 *normal = NULL,
-									LLVector3 *binormal = NULL,
-									LLVector3* start = NULL,
-									LLVector3* end = NULL);
+									LLVector4a *normal = NULL,
+									LLVector4a *tangent = NULL,
+									LLVector4a* start = NULL,
+									LLVector4a* end = NULL);
 	
 	
 	// Returns a pointer to the last object hit
@@ -499,13 +500,13 @@ extern LLFrameTimer		gAwayTimer;				// tracks time before setting the avatar awa
 extern LLFrameTimer		gAwayTriggerTimer;		// how long the avatar has been away
 
 extern LLViewerObject*  gDebugRaycastObject;
-extern LLVector3        gDebugRaycastIntersection;
+extern LLVector4a       gDebugRaycastIntersection;
 extern LLVector2        gDebugRaycastTexCoord;
-extern LLVector3        gDebugRaycastNormal;
-extern LLVector3        gDebugRaycastBinormal;
+extern LLVector4a       gDebugRaycastNormal;
+extern LLVector4a       gDebugRaycastTangent;
 extern S32				gDebugRaycastFaceHit;
-extern LLVector3		gDebugRaycastStart;
-extern LLVector3		gDebugRaycastEnd;
+extern LLVector4a		gDebugRaycastStart;
+extern LLVector4a		gDebugRaycastEnd;
 
 extern BOOL			gDisplayCameraPos;
 extern BOOL			gDisplayWindInfo;
diff --git a/indra/newview/llviewerwindowlistener.cpp b/indra/newview/llviewerwindowlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llviewerwindowlistener.h b/indra/newview/llviewerwindowlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvlcomposition.cpp b/indra/newview/llvlcomposition.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvlcomposition.h b/indra/newview/llvlcomposition.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvlmanager.cpp b/indra/newview/llvlmanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvlmanager.h b/indra/newview/llvlmanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoavatar.cpp b/indra/newview/llvoavatar.cpp
index 06fb23b84b3a5fdc16d7220e3924108273a282d7..1a050800b4c61168ea20c8cebce4a289abb06b77 100755
--- a/indra/newview/llvoavatar.cpp
+++ b/indra/newview/llvoavatar.cpp
@@ -802,17 +802,17 @@ void LLVOAvatar::debugAvatarRezTime(std::string notification_name, std::string c
 //------------------------------------------------------------------------
 LLVOAvatar::~LLVOAvatar()
 {
-	if (!mFullyLoaded)
-	{
+		if (!mFullyLoaded)
+		{
 		debugAvatarRezTime("AvatarRezLeftCloudNotification","left after ruth seconds as cloud");
-	}
-	else
-	{
+		}
+		else
+		{
 		debugAvatarRezTime("AvatarRezLeftNotification","left sometime after declouding");
-	}
+		}
 
 	logPendingPhases();
-	
+
 	lldebugs << "LLVOAvatar Destructor (0x" << this << ") id:" << mID << llendl;
 
 	std::for_each(mAttachmentPoints.begin(), mAttachmentPoints.end(), DeletePairedPointer());
@@ -1196,7 +1196,7 @@ void LLVOAvatar::initInstance(void)
 		registerMotion( ANIM_AGENT_TARGET,					LLTargetingMotion::create );
 		registerMotion( ANIM_AGENT_WALK_ADJUST,				LLWalkAdjustMotion::create );
 	}
-
+	
 	LLAvatarAppearance::initInstance();
 	
 	// preload specific motions here
@@ -1388,19 +1388,20 @@ void LLVOAvatar::renderCollisionVolumes()
 
 	if (mNameText.notNull())
 	{
-		LLVector3 unused;
-		mNameText->lineSegmentIntersect(LLVector3(0,0,0), LLVector3(0,0,1), unused, TRUE);
+		LLVector4a unused;
+	
+		mNameText->lineSegmentIntersect(unused, unused, unused, TRUE);
 	}
 }
 
-BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+BOOL LLVOAvatar::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 									  S32 face,
 									  BOOL pick_transparent,
 									  S32* face_hit,
-									  LLVector3* intersection,
+									  LLVector4a* intersection,
 									  LLVector2* tex_coord,
-									  LLVector3* normal,
-									  LLVector3* bi_normal)
+									  LLVector4a* normal,
+									  LLVector4a* tangent)
 {
 	if ((isSelf() && !gAgent.needsRenderAvatar()) || !LLPipeline::sPickAvatar)
 	{
@@ -1417,8 +1418,8 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 			glh::matrix4f inverse = mat.inverse();
 			glh::matrix4f norm_mat = inverse.transpose();
 
-			glh::vec3f p1(start.mV);
-			glh::vec3f p2(end.mV);
+			glh::vec3f p1(start.getF32ptr());
+			glh::vec3f p2(end.getF32ptr());
 
 			inverse.mult_matrix_vec(p1);
 			inverse.mult_matrix_vec(p2);
@@ -1437,12 +1438,12 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 
 				if (intersection)
 				{
-					*intersection = LLVector3(res_pos.v);
+					intersection->load3(res_pos.v);
 				}
 
 				if (normal)
 				{
-					*normal = LLVector3(res_norm.v);
+					normal->load3(res_norm.v);
 				}
 
 				return TRUE;
@@ -1478,7 +1479,7 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 
 	
 	
-	LLVector3 position;
+	LLVector4a position;
 	if (mNameText.notNull() && mNameText->lineSegmentIntersect(start, end, position))
 	{
 		if (intersection)
@@ -1492,14 +1493,14 @@ BOOL LLVOAvatar::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 	return FALSE;
 }
 
-LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector3& start, const LLVector3& end,
+LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector4a& start, const LLVector4a& end,
 									  S32 face,
 									  BOOL pick_transparent,
 									  S32* face_hit,
-									  LLVector3* intersection,
+									  LLVector4a* intersection,
 									  LLVector2* tex_coord,
-									  LLVector3* normal,
-									  LLVector3* bi_normal)
+									  LLVector4a* normal,
+									  LLVector4a* tangent)
 {
 	if (isSelf() && !gAgent.needsRenderAvatar())
 	{
@@ -1510,8 +1511,8 @@ LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector
 
 	if (lineSegmentBoundingBox(start, end))
 	{
-		LLVector3 local_end = end;
-		LLVector3 local_intersection;
+		LLVector4a local_end = end;
+		LLVector4a local_intersection;
 
 		for (attachment_map_t::iterator iter = mAttachmentPoints.begin(); 
 			iter != mAttachmentPoints.end();
@@ -1525,7 +1526,7 @@ LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector
 			{
 				LLViewerObject* attached_object = (*attachment_iter);
 					
-				if (attached_object->lineSegmentIntersect(start, local_end, face, pick_transparent, face_hit, &local_intersection, tex_coord, normal, bi_normal))
+				if (attached_object->lineSegmentIntersect(start, local_end, face, pick_transparent, face_hit, &local_intersection, tex_coord, normal, tangent))
 				{
 					local_end = local_intersection;
 					if (intersection)
@@ -1542,7 +1543,7 @@ LLViewerObject* LLVOAvatar::lineSegmentIntersectRiggedAttachments(const LLVector
 	return hit;
 }
 
-	
+
 LLVOAvatar* LLVOAvatar::asAvatar()
 {
 	return this;
@@ -1877,22 +1878,22 @@ LLViewerFetchedTexture *LLVOAvatar::getBakedTextureImage(const U8 te, const LLUU
 	}
 
 	if (!result)
-	{
+{
 		const std::string url = getImageURL(te,uuid);
 		if (!url.empty())
-		{
+	{
 			LL_DEBUGS("Avatar") << avString() << "from URL " << url << llendl;
 			result = LLViewerTextureManager::getFetchedTextureFromUrl(
 				url, FTT_SERVER_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, uuid);
-		}
-		else
-		{
+	}
+	else
+	{
 			LL_DEBUGS("Avatar") << avString() << "from host " << uuid << llendl;
 			LLHost host = getObjectHost();
 			result = LLViewerTextureManager::getFetchedTexture(
 				uuid, FTT_HOST_BAKE, TRUE, LLGLTexture::BOOST_NONE, LLViewerTexture::LOD_TEXTURE, 0, 0, host);
-		}
 	}
+}
 	return result;
 }
 
@@ -3979,7 +3980,7 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)
 		{
 			LLViewerJoint* hair_mesh = getViewerJoint(MESH_ID_HAIR);
 			if (hair_mesh)
-			{
+		{
 				num_indices += hair_mesh->render(mAdjustedPixelArea, first_pass, mIsDummy);
 			}
 			first_pass = FALSE;
@@ -3989,7 +3990,7 @@ U32 LLVOAvatar::renderTransparent(BOOL first_pass)
 			gGL.setAlphaRejectSettings(LLRender::CF_DEFAULT);
 		}
 	}
-
+	
 	return num_indices;
 }
 
@@ -5106,9 +5107,9 @@ BOOL LLVOAvatar::loadSkeletonNode ()
 {
 	if (!LLAvatarAppearance::loadSkeletonNode())
 	{
-		return FALSE;
-	}
-
+				return FALSE;
+			}
+	
 	// ATTACHMENTS
 	{
 		LLAvatarXmlInfo::attachment_info_list_t::iterator iter;
@@ -5825,24 +5826,26 @@ BOOL LLVOAvatar::isWearingWearableType(LLWearableType::EType type) const
 	{
 		const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = tex_iter->second;
 		if (texture_dict->mWearableType == type)
-		{
+	{
 			// Thus, you must check to see if the corresponding baked texture is defined.
 			// NOTE: this is a poor substitute if you actually want to know about individual pieces of clothing
 			// this works for detecting a skirt (most important), but is ineffective at any piece of clothing that
 			// gets baked into a texture that always exists (upper or lower).
 			if (texture_dict->mIsUsedByBakedTexture)
-			{
+	{
 				const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
 				return isTextureDefined(LLAvatarAppearanceDictionary::getInstance()->getBakedTexture(baked_index)->mTextureIndex);
-			}
+	}
 			return FALSE;
-		}
+	}
 	}
 	return FALSE;
 }
 
 
 
+
+
 // virtual
 void LLVOAvatar::invalidateComposite( LLTexLayerSet* layerset, BOOL upload_result )
 {
@@ -5877,7 +5880,7 @@ void LLVOAvatar::onGlobalColorChanged(const LLTexGlobalColor* global_color, BOOL
 			{
 				LLAvatarJointMesh* mesh = (*iter);
 				if (mesh)
-				{
+			{
 					mesh->setColor( color );
 				}
 			}
@@ -5945,9 +5948,9 @@ void LLVOAvatar::updateRezzedStatusTimers()
 		{
 			// load level has decreased. start phase timers for higher load levels.
 			for (S32 i = rez_status+1; i <= mLastRezzedStatus; i++)
-			{
+		{
 				startPhase("load_" + LLVOAvatar::rezStatusToString(i));
-			}
+		}
 		}
 		else if (rez_status > mLastRezzedStatus)
 		{
@@ -5956,16 +5959,16 @@ void LLVOAvatar::updateRezzedStatusTimers()
 			{
 				stopPhase("load_" + LLVOAvatar::rezStatusToString(i));
 				stopPhase("first_load_" + LLVOAvatar::rezStatusToString(i), false);
-			}
+		}
 			if (rez_status == 3)
-			{
+		{
 				// "fully loaded", mark any pending appearance change complete.
 				selfStopPhase("update_appearance_from_cof");
 				selfStopPhase("wear_inventory_category", false);
 				selfStopPhase("process_initial_wearables_update", false);
 			}
 		}
-
+		
 		mLastRezzedStatus = rez_status;
 	}
 }
@@ -5992,7 +5995,7 @@ void LLVOAvatar::startPhase(const std::string& phase_name)
 }
 
 void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check)
-{
+		{
 	F32 elapsed;
 	bool completed;
 	if (getPhases().getPhaseValues(phase_name, elapsed, completed))
@@ -6024,7 +6027,7 @@ void LLVOAvatar::stopPhase(const std::string& phase_name, bool err_check)
 void LLVOAvatar::logPendingPhases()
 {
 	if (!isAgentAvatarValid())
-	{
+		{
 		return;
 	}
 	
@@ -6040,14 +6043,14 @@ void LLVOAvatar::logPendingPhases()
 			if (!completed)
 			{
 				logMetricsTimerRecord(phase_name, elapsed, completed);
-			}
+		}
 		}
 	}
-}
+		}
 
 //static
 void LLVOAvatar::logPendingPhasesAllAvatars()
-{
+		{
 	for (std::vector<LLCharacter*>::iterator iter = LLCharacter::sInstances.begin();
 		 iter != LLCharacter::sInstances.end(); ++iter)
 	{
@@ -6058,14 +6061,14 @@ void LLVOAvatar::logPendingPhasesAllAvatars()
 		}
 		inst->logPendingPhases();
 	}
-}
+		}
 
 void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapsed, bool completed)
-{
+		{
 	if (!isAgentAvatarValid())
-	{
+		{
 		return;
-	}
+		}
 	
 	LLSD record;
 	record["timer_name"] = phase_name;
@@ -6074,15 +6077,15 @@ void LLVOAvatar::logMetricsTimerRecord(const std::string& phase_name, F32 elapse
 	record["completed"] = completed;
 	U32 grid_x(0), grid_y(0);
 	if (getRegion())
-	{
+		{
 		record["central_bake_version"] = LLSD::Integer(getRegion()->getCentralBakeVersion());
 		grid_from_region_handle(getRegion()->getHandle(), &grid_x, &grid_y);
-	}
+		}
 	record["grid_x"] = LLSD::Integer(grid_x);
 	record["grid_y"] = LLSD::Integer(grid_y);
 	record["is_using_server_bakes"] = ((bool) isUsingServerBakes());
 	record["is_self"] = isSelf();
-	
+		
 	if (isAgentAvatarValid())
 	{
 		gAgentAvatarp->addMetricsTimerRecord(record);
@@ -6290,28 +6293,28 @@ void LLVOAvatar::updateMeshTextures()
 										   use_lkg_baked_layer[i],
 										   last_id_string.c_str());
 	}
-	
+
 	for (U32 i=0; i < mBakedTextureDatas.size(); i++)
 	{
 		debugColorizeSubMeshes(i, LLColor4::white);
 
 		LLViewerTexLayerSet* layerset = getTexLayerSet(i);
 		if (use_lkg_baked_layer[i] && !isUsingLocalAppearance() )
-		{
+	{
 			LLViewerFetchedTexture* baked_img = LLViewerTextureManager::getFetchedTexture(mBakedTextureDatas[i].mLastTextureID);
 			mBakedTextureDatas[i].mIsUsed = TRUE;
 
 			debugColorizeSubMeshes(i,LLColor4::red);
-
+	
 			avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin();
 			avatar_joint_mesh_list_t::iterator end  = mBakedTextureDatas[i].mJointMeshes.end();
 			for (; iter != end; ++iter)
-			{
+	{
 				LLAvatarJointMesh* mesh = (*iter);
 				if (mesh)
-				{
+		{
 					mesh->setTexture( baked_img );
-				}
+			}
 			}
 		}
 		else if (!isUsingLocalAppearance() && is_layer_baked[i])
@@ -6355,7 +6358,7 @@ void LLVOAvatar::updateMeshTextures()
 				if (mesh)
 				{
 					mesh->setLayerSet( layerset );
-				}
+			}
 			}
 		}
 		else
@@ -6377,7 +6380,7 @@ void LLVOAvatar::updateMeshTextures()
 		{
 			LLAvatarJointMesh* mesh = (*iter);
 			if (mesh)
-			{
+		{
 				mesh->setColor( color );
 				mesh->setTexture( hair_img );
 			}
@@ -6465,17 +6468,18 @@ void LLVOAvatar::applyMorphMask(U8* tex_data, S32 width, S32 height, S32 num_com
 
 	for (morph_list_t::const_iterator iter = mBakedTextureDatas[index].mMaskedMorphs.begin();
 		 iter != mBakedTextureDatas[index].mMaskedMorphs.end(); ++iter)
-	{
+{
 		const LLMaskedMorph* maskedMorph = (*iter);
 		LLPolyMorphTarget* morph_target = dynamic_cast<LLPolyMorphTarget*>(maskedMorph->mMorphTarget);
 		if (morph_target)
-		{
+	{
 			morph_target->applyMask(tex_data, width, height, num_components, maskedMorph->mInvert);
-		}
+}
 	}
 }
 
 
+
 // returns TRUE if morph masks are present and not valid for a given baked texture, FALSE otherwise
 BOOL LLVOAvatar::morphMaskNeedsUpdate(LLAvatarAppearanceDefines::EBakedTextureIndex index)
 {
@@ -6753,12 +6757,12 @@ void dump_visual_param(apr_file_t* file, LLVisualParam* viewer_param, F32 value)
 					LLWearableType::getTypeName(LLWearableType::EType(wtype)).c_str()
 //					param_location_name(vparam->getParamLocation()).c_str()
 		);
-}
-
+	}
+	
 
 void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,
 	const LLAppearanceMessageContents& contents)
-{
+	{
 	std::string outfilename = get_sequential_numbered_file_name(dump_prefix,".xml");
 	const std::vector<F32>& params_for_dump = contents.mParamWeights;
 	const LLTEContents& tec = contents.mTEContents;
@@ -6768,9 +6772,9 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,
 	outfile.open(fullpath, LL_APR_WB );
 	apr_file_t* file = outfile.getFileHandle();
 	if (!file)
-	{
-		return;
-	}
+		{
+			return;
+		}
 	else
 	{
 		LL_DEBUGS("Avatar") << "dumping appearance message to " << fullpath << llendl;
@@ -6804,7 +6808,7 @@ void LLVOAvatar::dumpAppearanceMsgParams( const std::string& dump_prefix,
 		apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", i, uuid_str.c_str());
 	}
 	apr_file_printf(file, "</textures>\n");
-}
+	}
 
 void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMessageContents& contents)
 {
@@ -6821,7 +6825,7 @@ void LLVOAvatar::parseAppearanceMessage(LLMessageSystem* mesgsys, LLAppearanceMe
 		// For future use:
 		//mesgsys->getU32Fast(_PREHASH_AppearanceData, _PREHASH_Flags, appearance_flags, 0);
 	}
-
+	
 	// Parse visual params, if any.
 	S32 num_blocks = mesgsys->getNumberOfBlocksFast(_PREHASH_VisualParam);
 	bool drop_visual_params_debug = gSavedSettings.getBOOL("BlockSomeAvatarAppearanceVisualParams") && (ll_rand(2) == 0); // pretend that ~12% of AvatarAppearance messages arrived without a VisualParam block, for testing
@@ -7049,19 +7053,19 @@ void LLVOAvatar::processAvatarAppearance( LLMessageSystem* mesgsys )
 			LLVisualParam* param = contents.mParams[i];
 			F32 newWeight = contents.mParamWeights[i];
 
-			if (is_first_appearance_message || (param->getWeight() != newWeight))
-			{
-				params_changed = TRUE;
-				if(is_first_appearance_message)
+				if (is_first_appearance_message || (param->getWeight() != newWeight))
 				{
-					param->setWeight(newWeight, FALSE);
-				}
-				else
-				{
-					interp_params = TRUE;
-					param->setAnimationTarget(newWeight, FALSE);
+					params_changed = TRUE;
+					if(is_first_appearance_message)
+					{
+						param->setWeight(newWeight, FALSE);
+					}
+					else
+					{
+						interp_params = TRUE;
+						param->setAnimationTarget(newWeight, FALSE);
+					}
 				}
-			}
 		}
 		const S32 expected_tweakable_count = getVisualParamCountInGroup(VISUAL_PARAM_GROUP_TWEAKABLE); // don't worry about VISUAL_PARAM_GROUP_TWEAKABLE_NO_TRANSMIT
 		if (num_params != expected_tweakable_count)
@@ -7317,12 +7321,12 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
 				avatar_joint_mesh_list_t::iterator iter = mBakedTextureDatas[i].mJointMeshes.begin();
 				avatar_joint_mesh_list_t::iterator end  = mBakedTextureDatas[i].mJointMeshes.end();
 				for (; iter != end; ++iter)
-				{
+			{
 					LLAvatarJointMesh* mesh = (*iter);
 					if (mesh)
-					{
+			{
 						mesh->setTexture( image_baked );
-					}
+			}
 				}
 			}
 			
@@ -7346,7 +7350,7 @@ void LLVOAvatar::useBakedTexture( const LLUUID& id )
 				{
 					LLAvatarJointMesh* mesh = (*iter);
 					if (mesh)
-					{
+				{
 						mesh->setColor( LLColor4::white );
 					}
 				}
@@ -7365,7 +7369,7 @@ std::string get_sequential_numbered_file_name(const std::string& prefix,
 	file_num_type::iterator it = file_nums.find(prefix);
 	S32 num = 0;
 	if (it != file_nums.end())
-	{
+{
 		num = it->second;
 	}
 	file_nums[prefix] = num+1;
@@ -7382,6 +7386,10 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
 		outprefix = getFullname() + (isSelf()?"_s":"_o");
 	}
 	if (outprefix.empty())
+{
+		outprefix = getFullname() + (isSelf()?"_s":"_o");
+	}
+	if (outprefix.empty())
 	{
 		outprefix = std::string("new_archetype");
 	}
@@ -7407,36 +7415,36 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
 	if (group_by_wearables)
 	{
 		for (S32 type = LLWearableType::WT_SHAPE; type < LLWearableType::WT_COUNT; type++)
-		{
-			const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type);
-			apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() );
+	{
+		const std::string& wearable_name = LLWearableType::getTypeName((LLWearableType::EType)type);
+		apr_file_printf( file, "\n\t\t<!-- wearable: %s -->\n", wearable_name.c_str() );
 
 			for (LLVisualParam* param = getFirstVisualParam(); param; param = getNextVisualParam())
+		{
+			LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
+			if( (viewer_param->getWearableType() == type) && 
+				(viewer_param->isTweakable() ) )
 			{
-				LLViewerVisualParam* viewer_param = (LLViewerVisualParam*)param;
-				if( (viewer_param->getWearableType() == type) && 
-					(viewer_param->isTweakable() ) )
-				{
 					dump_visual_param(file, viewer_param, viewer_param->getWeight());
-				}
 			}
+		}
 
-			for (U8 te = 0; te < TEX_NUM_INDICES; te++)
-			{
+		for (U8 te = 0; te < TEX_NUM_INDICES; te++)
+		{
 				if (LLAvatarAppearanceDictionary::getTEWearableType((ETextureIndex)te) == type)
-				{
-					// MULTIPLE_WEARABLES: extend to multiple wearables?
+			{
+				// MULTIPLE_WEARABLES: extend to multiple wearables?
 					LLViewerTexture* te_image = getImage((ETextureIndex)te, 0);
-					if( te_image )
-					{
-						std::string uuid_str;
-						te_image->getID().toString( uuid_str );
-						apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", te, uuid_str.c_str());
-					}
+				if( te_image )
+				{
+					std::string uuid_str;
+					te_image->getID().toString( uuid_str );
+					apr_file_printf( file, "\t\t<texture te=\"%i\" uuid=\"%s\"/>\n", te, uuid_str.c_str());
 				}
 			}
 		}
 	}
+		}
 	else 
 	{
 		// Just dump all params sequentially.
@@ -7448,7 +7456,6 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
 
 		for (U8 te = 0; te < TEX_NUM_INDICES; te++)
 		{
-			{
 				// MULTIPLE_WEARABLES: extend to multiple wearables?
 				LLViewerTexture* te_image = getImage((ETextureIndex)te, 0);
 				if( te_image )
@@ -7460,7 +7467,6 @@ void LLVOAvatar::dumpArchetypeXML(const std::string& prefix, bool group_by_weara
 			}
 		}
 
-	}
 	apr_file_printf( file, "\t</archetype>\n" );
 	apr_file_printf( file, "\n</linden_genepool>\n" );
 
@@ -7582,14 +7588,14 @@ void LLVOAvatar::startAppearanceAnimation()
 	}
 }
 
-//virtual
+// virtual
 void LLVOAvatar::bodySizeChanged()
-{
+{	
 	if (isSelf() && !LLAppearanceMgr::instance().isInUpdateAppearanceFromCOF())
 	{	// notify simulator of change in size
 		// but not if we are in the middle of updating appearance
 		gAgent.sendAgentSetAppearance();
-	}
+}
 }
 
 BOOL LLVOAvatar::isUsingServerBakes() const
@@ -7601,25 +7607,25 @@ BOOL LLVOAvatar::isUsingServerBakes() const
 	F32 wt = appearance_version_param->getWeight();
 	F32 expect_wt = mUseServerBakes ? 1.0 : 0.0;
 	if (!is_approx_equal(wt,expect_wt))
-	{
+{
 		llwarns << "wt " << wt << " differs from expected " << expect_wt << llendl;
 	}
 #endif
 
 	return mUseServerBakes;
-}
-
+		}
+		
 void LLVOAvatar::setIsUsingServerBakes(BOOL newval)
-{
+		{
 	mUseServerBakes = newval;
 	LLVisualParam* appearance_version_param = getVisualParam(11000);
 	llassert(appearance_version_param);
 	appearance_version_param->setWeight(newval ? 1.0 : 0.0, false);
-}
+		}
 
 // virtual
 void LLVOAvatar::removeMissingBakedTextures()
-{	
+			{
 }
 
 //virtual
diff --git a/indra/newview/llvoavatar.h b/indra/newview/llvoavatar.h
index 85f6f25009644fd924decf48af9f1fcdc279dcfe..b05eed344b60ef3877de0f6719f4240bfc349e33 100755
--- a/indra/newview/llvoavatar.h
+++ b/indra/newview/llvoavatar.h
@@ -128,15 +128,15 @@ class LLVOAvatar :
 public:
 	/*virtual*/ void			updateGL();
 	/*virtual*/ LLVOAvatar*		asAvatar();
-	virtual U32    	 	 		processUpdateMessage(LLMessageSystem *mesgsys,
+	virtual U32    	 	 	processUpdateMessage(LLMessageSystem *mesgsys,
 													 void **user_data,
 													 U32 block_num,
 													 const EObjectUpdateType update_type,
 													 LLDataPacker *dp);
-	virtual void   	 	 		idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
+	virtual void   	 	 	idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
 	/*virtual*/ BOOL   	 	 	updateLOD();
-	BOOL  	 	 	 	 		updateJointLODs();
-	void						updateLODRiggedAttachments( void );
+	BOOL  	 	 	 	 	updateJointLODs();
+	void					updateLODRiggedAttachments( void );
 	/*virtual*/ BOOL   	 	 	isActive() const; // Whether this object needs to do an idleUpdate.
 	S32 						totalTextureMemForUUIDS(std::set<LLUUID>& ids);
 	bool 						allTexturesCompletelyDownloaded(std::set<LLUUID>& ids) const;
@@ -162,22 +162,22 @@ class LLVOAvatar :
 	/*virtual*/ void   	 	 	updateRegion(LLViewerRegion *regionp);
 	/*virtual*/ void   	 	 	updateSpatialExtents(LLVector4a& newMin, LLVector4a &newMax);
 	/*virtual*/ void   	 	 	getSpatialExtents(LLVector4a& newMin, LLVector4a& newMax);
-	/*virtual*/ BOOL   	 	 	lineSegmentIntersect(const LLVector3& start, const LLVector3& end,
+	/*virtual*/ BOOL   	 	 	lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end,
 												 S32 face = -1,                    // which face to check, -1 = ALL_SIDES
 												 BOOL pick_transparent = FALSE,
 												 S32* face_hit = NULL,             // which face was hit
-												 LLVector3* intersection = NULL,   // return the intersection point
+												 LLVector4a* intersection = NULL,   // return the intersection point
 												 LLVector2* tex_coord = NULL,      // return the texture coordinates of the intersection point
-												 LLVector3* normal = NULL,         // return the surface normal at the intersection point
-												 LLVector3* bi_normal = NULL);     // return the surface bi-normal at the intersection point
-	LLViewerObject*	lineSegmentIntersectRiggedAttachments(const LLVector3& start, const LLVector3& end,
+												 LLVector4a* normal = NULL,         // return the surface normal at the intersection point
+												 LLVector4a* tangent = NULL);     // return the surface tangent at the intersection point
+	LLViewerObject*	lineSegmentIntersectRiggedAttachments(const LLVector4a& start, const LLVector4a& end,
 												 S32 face = -1,                    // which face to check, -1 = ALL_SIDES
 												 BOOL pick_transparent = FALSE,
 												 S32* face_hit = NULL,             // which face was hit
-												 LLVector3* intersection = NULL,   // return the intersection point
+												 LLVector4a* intersection = NULL,   // return the intersection point
 												 LLVector2* tex_coord = NULL,      // return the texture coordinates of the intersection point
-												 LLVector3* normal = NULL,         // return the surface normal at the intersection point
-												 LLVector3* bi_normal = NULL);     // return the surface bi-normal at the intersection point
+												 LLVector4a* normal = NULL,         // return the surface normal at the intersection point
+												 LLVector4a* tangent = NULL);     // return the surface tangent at the intersection point
 
 	//--------------------------------------------------------------------
 	// LLCharacter interface and related
diff --git a/indra/newview/llvoavatarself.cpp b/indra/newview/llvoavatarself.cpp
index d54eb5f0400c6f812f23cb1f484e1051de25cdc4..15628d5ab2a85e66e06b6002a3edfe6a0d61639f 100755
--- a/indra/newview/llvoavatarself.cpp
+++ b/indra/newview/llvoavatarself.cpp
@@ -602,7 +602,7 @@ LLVOAvatarSelf::~LLVOAvatarSelf()
  **                                                                             **
  *********************************************************************************/
 
-// virtual
+//virtual
 BOOL LLVOAvatarSelf::updateCharacter(LLAgent &agent)
 {
 	// update screen joint size
@@ -866,10 +866,10 @@ void LLVOAvatarSelf::removeMissingBakedTextures()
 		updateMeshTextures();
 		if (getRegion() && !getRegion()->getCentralBakeVersion())
 		{
-			requestLayerSetUploads();
-		}
+		requestLayerSetUploads();
 	}
 }
+}
 
 //virtual
 void LLVOAvatarSelf::updateRegion(LLViewerRegion *regionp)
@@ -1310,7 +1310,7 @@ void LLVOAvatarSelf::localTextureLoaded(BOOL success, LLViewerFetchedTexture *sr
 			discard_level < local_tex_obj->getDiscard())
 		{
 			local_tex_obj->setDiscard(discard_level);
-			requestLayerSetUpdate(index);
+				requestLayerSetUpdate(index);
 			if (isEditingAppearance())
 			{
 				LLVisualParamHint::requestHintUpdates();
@@ -1799,11 +1799,11 @@ void LLVOAvatarSelf::setLocalTexture(ETextureIndex type, LLViewerTexture* src_te
 					{
 						requestLayerSetUpdate(type);
 						if (isEditingAppearance())
-						{
-							LLVisualParamHint::requestHintUpdates();
-						}
+					{
+						LLVisualParamHint::requestHintUpdates();
 					}
 				}
+				}
 				else
 				{					
 					tex->setLoadedCallback(onLocalTextureLoaded, desired_discard, TRUE, FALSE, new LLAvatarTexData(getID(), type), NULL);
@@ -2580,25 +2580,25 @@ void LLVOAvatarSelf::addLocalTextureStats( ETextureIndex type, LLViewerFetchedTe
 	//if (!covered_by_baked)
 	{
 		if (imagep->getID() != IMG_DEFAULT_AVATAR)
-		{
+	{
 			imagep->setNoDelete();
 			if (imagep->getDiscardLevel() != 0)
-			{
-				F32 desired_pixels;
-				desired_pixels = llmin(mPixelArea, (F32)getTexImageArea());
-				
-				imagep->setBoostLevel(getAvatarBoostLevel());
+		{
+			F32 desired_pixels;
+			desired_pixels = llmin(mPixelArea, (F32)getTexImageArea());
+
+			imagep->setBoostLevel(getAvatarBoostLevel());
 				imagep->setAdditionalDecodePriority(SELF_ADDITIONAL_PRI) ;
-				imagep->resetTextureStats();
-				imagep->setMaxVirtualSizeResetInterval(MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL);
-				imagep->addTextureStats( desired_pixels / texel_area_ratio );
-				imagep->forceUpdateBindStats() ;
-				if (imagep->getDiscardLevel() < 0)
-				{
-					mHasGrey = TRUE; // for statistics gathering
-				}
+			imagep->resetTextureStats();
+			imagep->setMaxVirtualSizeResetInterval(MAX_TEXTURE_VIRTURE_SIZE_RESET_INTERVAL);
+			imagep->addTextureStats( desired_pixels / texel_area_ratio );
+			imagep->forceUpdateBindStats() ;
+			if (imagep->getDiscardLevel() < 0)
+			{
+				mHasGrey = TRUE; // for statistics gathering
 			}
 		}
+		}
 		else
 		{
 			// texture asset is missing
@@ -2921,17 +2921,17 @@ void LLVOAvatarSelf::requestLayerSetUpdate(ETextureIndex index )
 
 LLViewerTexLayerSet* LLVOAvatarSelf::getLayerSet(ETextureIndex index) const
 {
-       /* switch(index)
-               case TEX_HEAD_BAKED:
-               case TEX_HEAD_BODYPAINT:
-                       return mHeadLayerSet; */
+	/* switch(index)
+		case TEX_HEAD_BAKED:
+		case TEX_HEAD_BODYPAINT:
+			return mHeadLayerSet; */
        const LLAvatarAppearanceDictionary::TextureEntry *texture_dict = LLAvatarAppearanceDictionary::getInstance()->getTexture(index);
-       if (texture_dict->mIsUsedByBakedTexture)
-       {
-               const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
+	if (texture_dict->mIsUsedByBakedTexture)
+	{
+		const EBakedTextureIndex baked_index = texture_dict->mBakedTextureIndex;
                return getLayerSet(baked_index);
-       }
-       return NULL;
+	}
+	return NULL;
 }
 
 LLViewerTexLayerSet* LLVOAvatarSelf::getLayerSet(EBakedTextureIndex baked_index) const
@@ -2959,7 +2959,7 @@ void LLVOAvatarSelf::onCustomizeStart(bool disable_camera_switch)
 		gAgentAvatarp->mUseLocalAppearance = true;
 
 		if (gSavedSettings.getBOOL("AppearanceCameraMovement") && !disable_camera_switch)
-		{
+{
 			gAgentCamera.changeCameraToCustomizeAvatar();
 		}
 
diff --git a/indra/newview/llvoavatarself.h b/indra/newview/llvoavatarself.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvocache.cpp b/indra/newview/llvocache.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvocache.h b/indra/newview/llvocache.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvograss.cpp b/indra/newview/llvograss.cpp
old mode 100644
new mode 100755
index 6a25b765cf86a4c43492a086481a1d817040aea0..cab5c4bc1dfb05512b0e1e21ed2154f437e686ca
--- a/indra/newview/llvograss.cpp
+++ b/indra/newview/llvograss.cpp
@@ -764,8 +764,8 @@ void LLVOGrass::updateDrawable(BOOL force_damped)
 }
 
 // virtual 
-BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
-									  LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+BOOL LLVOGrass::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+									  LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
 	
 {
 	BOOL ret = FALSE;
@@ -776,7 +776,8 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en
 		return FALSE;
 	}
 
-	LLVector3 dir = end-start;
+	LLVector4a dir;
+	dir.setSub(end, start);
 
 	mPatch = mRegionp->getLand().resolvePatchRegion(getPositionRegion());
 	
@@ -844,23 +845,31 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en
 
 		U32 idx0 = 0,idx1 = 0,idx2 = 0;
 
-		if (LLTriangleRayIntersect(v[0], v[1], v[2], start, dir, a, b, t, FALSE))
+		LLVector4a v0a,v1a,v2a,v3a;
+
+		v0a.load3(v[0].mV);
+		v1a.load3(v[1].mV);
+		v2a.load3(v[2].mV);
+		v3a.load3(v[3].mV);
+
+		
+		if (LLTriangleRayIntersect(v0a, v1a, v2a, start, dir, a, b, t))
 		{
 			hit = TRUE;
 			idx0 = 0; idx1 = 1; idx2 = 2;
 		}
-		else if (LLTriangleRayIntersect(v[1], v[3], v[2], start, dir, a, b, t, FALSE))
+		else if (LLTriangleRayIntersect(v1a, v3a, v2a, start, dir, a, b, t))
 		{
 			hit = TRUE;
 			idx0 = 1; idx1 = 3; idx2 = 2;
 		}
-		else if (LLTriangleRayIntersect(v[2], v[1], v[0], start, dir, a, b, t, FALSE))
+		else if (LLTriangleRayIntersect(v2a, v1a, v0a, start, dir, a, b, t))
 		{
 			normal1 = -normal1;
 			hit = TRUE;
 			idx0 = 2; idx1 = 1; idx2 = 0;
 		}
-		else if (LLTriangleRayIntersect(v[2], v[3], v[1], start, dir, a, b, t, FALSE))
+		else if (LLTriangleRayIntersect(v2a, v3a, v1a, start, dir, a, b, t))
 		{
 			normal1 = -normal1;
 			hit = TRUE;
@@ -883,7 +892,8 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en
 					closest_t = t;
 					if (intersection != NULL)
 					{
-						*intersection = start+dir*closest_t;
+						dir.mul(closest_t);
+						intersection->setAdd(start, dir);
 					}
 
 					if (tex_coord != NULL)
@@ -893,7 +903,7 @@ BOOL LLVOGrass::lineSegmentIntersect(const LLVector3& start, const LLVector3& en
 
 					if (normal != NULL)
 					{
-						*normal    = normal1;
+						normal->load3(normal1.mV);
 					}
 					ret = TRUE;
 				}
diff --git a/indra/newview/llvograss.h b/indra/newview/llvograss.h
old mode 100644
new mode 100755
index b9835b8802a77f5ff8420e8ddb5452e57a8553bd..122806766de78505e5164f00446dd3fb6118bc08
--- a/indra/newview/llvograss.h
+++ b/indra/newview/llvograss.h
@@ -75,14 +75,14 @@ class LLVOGrass : public LLAlphaObject
 	/*virtual*/ BOOL    isActive() const; // Whether this object needs to do an idleUpdate.
 	/*virtual*/ void idleUpdate(LLAgent &agent, LLWorld &world, const F64 &time);
 
-	/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
+	/*virtual*/ BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, 
 										  S32 face = -1,                        // which face to check, -1 = ALL_SIDES
 										  BOOL pick_transparent = FALSE,
 										  S32* face_hit = NULL,                 // which face was hit
-										  LLVector3* intersection = NULL,       // return the intersection point
+										  LLVector4a* intersection = NULL,       // return the intersection point
 										  LLVector2* tex_coord = NULL,          // return the texture coordinates of the intersection point
-										  LLVector3* normal = NULL,             // return the surface normal at the intersection point
-										  LLVector3* bi_normal = NULL           // return the surface bi-normal at the intersection point
+										  LLVector4a* normal = NULL,             // return the surface normal at the intersection point
+										  LLVector4a* tangent = NULL           // return the surface tangent at the intersection point
 		);
 
 	static S32 sMaxGrassSpecies;
diff --git a/indra/newview/llvoground.cpp b/indra/newview/llvoground.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoground.h b/indra/newview/llvoground.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicecallhandler.cpp b/indra/newview/llvoicecallhandler.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicechannel.cpp b/indra/newview/llvoicechannel.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicechannel.h b/indra/newview/llvoicechannel.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoiceclient.cpp b/indra/newview/llvoiceclient.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoiceclient.h b/indra/newview/llvoiceclient.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicevisualizer.cpp b/indra/newview/llvoicevisualizer.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicevisualizer.h b/indra/newview/llvoicevisualizer.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicevivox.cpp b/indra/newview/llvoicevivox.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoicevivox.h b/indra/newview/llvoicevivox.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoinventorylistener.cpp b/indra/newview/llvoinventorylistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvoinventorylistener.h b/indra/newview/llvoinventorylistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvopartgroup.cpp b/indra/newview/llvopartgroup.cpp
old mode 100644
new mode 100755
index 0b34bbb90f6cb44429a6cc727490c388c5de1799..43a5ddba425c70bbdee7eb2182576888e3c15a71
--- a/indra/newview/llvopartgroup.cpp
+++ b/indra/newview/llvopartgroup.cpp
@@ -65,7 +65,9 @@ void LLVOPartGroup::initClass()
 //static
 void LLVOPartGroup::restoreGL()
 {
-	sVB = new LLVertexBuffer(VERTEX_DATA_MASK, GL_STREAM_DRAW_ARB);
+
+	//TODO: optimize out binormal mask here.  Specular and normal coords as well.
+	sVB = new LLVertexBuffer(VERTEX_DATA_MASK | LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2, GL_STREAM_DRAW_ARB);
 	U32 count = LL_MAX_PARTICLE_COUNT;
 	sVB->allocateBuffer(count*4, count*6, true);
 
@@ -410,6 +412,7 @@ void LLVOPartGroup::getGeometry(S32 idx,
 
 	right.setCross3(at, up);
 	right.normalize3fast();
+
 	up.setCross3(right, at);
 	up.normalize3fast();
 
diff --git a/indra/newview/llvopartgroup.h b/indra/newview/llvopartgroup.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvosky.cpp b/indra/newview/llvosky.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvosky.h b/indra/newview/llvosky.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvosurfacepatch.cpp b/indra/newview/llvosurfacepatch.cpp
old mode 100644
new mode 100755
index de15f0ef43f68cfeabc30996e9a4ac14f689bd77..9a5c5831ca9d1e1358c709ea89fcdf71f3ec14ef
--- a/indra/newview/llvosurfacepatch.cpp
+++ b/indra/newview/llvosurfacepatch.cpp
@@ -97,10 +97,10 @@ class LLVertexBufferTerrain : public LLVertexBuffer
 			glTexCoordPointer(2,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TEXCOORD1], (void*)(base + mOffsets[TYPE_TEXCOORD1]));
 			glClientActiveTextureARB(GL_TEXTURE0_ARB);
 		}
-		if (data_mask & MAP_BINORMAL)
+		if (data_mask & MAP_TANGENT)
 		{
 			glClientActiveTextureARB(GL_TEXTURE2_ARB);
-			glTexCoordPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_BINORMAL], (void*)(base + mOffsets[TYPE_BINORMAL]));
+			glTexCoordPointer(3,GL_FLOAT, LLVertexBuffer::sTypeSize[TYPE_TANGENT], (void*)(base + mOffsets[TYPE_TANGENT]));
 			glClientActiveTextureARB(GL_TEXTURE0_ARB);
 		}
 		if (data_mask & MAP_TEXCOORD0)
@@ -936,8 +936,8 @@ void LLVOSurfacePatch::getGeomSizesEast(const S32 stride, const S32 east_stride,
 	}
 }
 
-BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
-									  LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+									  LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
 	
 {
 
@@ -946,7 +946,9 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect
 		return FALSE;
 	}
 
-	LLVector3 delta = end-start;
+	LLVector4a da;
+	da.setSub(end, start);
+	LLVector3 delta(da.getF32ptr());
 		
 	LLVector3 pdelta = delta;
 	pdelta.mV[2] = 0;
@@ -955,7 +957,9 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect
 	
 	F32 tdelta = 1.f/plength;
 
-	LLVector3 origin = start - mRegionp->getOriginAgent();
+	LLVector3 v_start(start.getF32ptr());
+
+	LLVector3 origin = v_start - mRegionp->getOriginAgent();
 
 	if (mRegionp->getLandHeightRegion(origin) > origin.mV[2])
 	{
@@ -1010,12 +1014,12 @@ BOOL LLVOSurfacePatch::lineSegmentIntersect(const LLVector3& start, const LLVect
 					{
 						sample.mV[2] = mRegionp->getLandHeightRegion(sample);
 					}
-					*intersection = sample + mRegionp->getOriginAgent();
+					intersection->load3((sample + mRegionp->getOriginAgent()).mV);
 				}
 
 				if (normal)
 				{
-					*normal = mRegionp->getLand().resolveNormalGlobal(mRegionp->getPosGlobalFromRegion(sample));
+					normal->load3((mRegionp->getLand().resolveNormalGlobal(mRegionp->getPosGlobalFromRegion(sample))).mV);
 				}
 
 				return TRUE;
diff --git a/indra/newview/llvosurfacepatch.h b/indra/newview/llvosurfacepatch.h
old mode 100644
new mode 100755
index a15878368e4c515ede7f3ed1c90f9a1c3b2680cd..7b53219be85f085e353611524ccec7c04a9a18cb
--- a/indra/newview/llvosurfacepatch.h
+++ b/indra/newview/llvosurfacepatch.h
@@ -79,14 +79,14 @@ class LLVOSurfacePatch : public LLStaticViewerObject
 	void dirtyPatch();
 	void dirtyGeom();
 
-	/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
+	/*virtual*/ BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, 
 										  S32 face = -1,                        // which face to check, -1 = ALL_SIDES
 										  BOOL pick_transparent = FALSE,
 										  S32* face_hit = NULL,                 // which face was hit
-										  LLVector3* intersection = NULL,       // return the intersection point
+										  LLVector4a* intersection = NULL,       // return the intersection point
 										  LLVector2* tex_coord = NULL,          // return the texture coordinates of the intersection point
-										  LLVector3* normal = NULL,             // return the surface normal at the intersection point
-										  LLVector3* bi_normal = NULL           // return the surface bi-normal at the intersection point
+										  LLVector4a* normal = NULL,             // return the surface normal at the intersection point
+										  LLVector4a* tangent = NULL           // return the surface tangent at the intersection point
 		);
 
 	BOOL			mDirtiedPatch;
diff --git a/indra/newview/llvotree.cpp b/indra/newview/llvotree.cpp
old mode 100644
new mode 100755
index 145a0380d6891d611e7e3494251a627fce71c76d..cd12cd95520e70a1e3443bdffeaae2a1bfbc7217
--- a/indra/newview/llvotree.cpp
+++ b/indra/newview/llvotree.cpp
@@ -1085,132 +1085,6 @@ void LLVOTree::calcNumVerts(U32& vert_count, U32& index_count, S32 trunk_LOD, S3
 	}
 }
 
-U32 LLVOTree::drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD, S32 stop_level, U16 depth, U16 trunk_depth,  F32 scale, F32 twist, F32 droop,  F32 branches, F32 alpha)
-{
-	U32 ret = 0;
-	//
-	//  Draws a tree by recursing, drawing branches and then a 'leaf' texture.
-	//  If stop_level = -1, simply draws the whole tree as a billboarded texture
-	//
-	
-	static F32 constant_twist;
-	static F32 width = 0;
-
-	//F32 length = ((scale == 1.f)? mTrunkLength:mBranchLength);
-	//F32 aspect = ((scale == 1.f)? mTrunkAspect:mBranchAspect);
-	F32 length = ((trunk_depth || (scale == 1.f))? mTrunkLength:mBranchLength);
-	F32 aspect = ((trunk_depth || (scale == 1.f))? mTrunkAspect:mBranchAspect);
-	
-	constant_twist = 360.f/branches;
-
-	if (!LLPipeline::sReflectionRender && stop_level >= 0)
-	{
-		//
-		//  Draw the tree using recursion
-		//
-		if (depth > stop_level)
-		{
-			{
-				llassert(sLODIndexCount[trunk_LOD] > 0);
-				width = scale * length * aspect;
-				LLMatrix4 scale_mat;
-				scale_mat.mMatrix[0][0] = width;
-				scale_mat.mMatrix[1][1] = width;
-				scale_mat.mMatrix[2][2] = scale*length;
-				scale_mat *= matrix;
-
-				gGL.loadMatrix((F32*) scale_mat.mMatrix);
-				gGL.syncMatrices();
- 				glDrawElements(GL_TRIANGLES, sLODIndexCount[trunk_LOD], GL_UNSIGNED_SHORT, indicesp + sLODIndexOffset[trunk_LOD]);
-				gPipeline.addTrianglesDrawn(LEAF_INDICES);
-				stop_glerror();
-				ret += sLODIndexCount[trunk_LOD];
-			}
-			
-			// Recurse to create more branches
-			for (S32 i=0; i < (S32)branches; i++) 
-			{
-				LLMatrix4 trans_mat;
-				trans_mat.setTranslation(0,0,scale*length);
-				trans_mat *= matrix;
-
-				LLQuaternion rot = 
-					LLQuaternion(20.f*DEG_TO_RAD, LLVector4(0.f, 0.f, 1.f)) *
-					LLQuaternion(droop*DEG_TO_RAD, LLVector4(0.f, 1.f, 0.f)) *
-					LLQuaternion(((constant_twist + ((i%2==0)?twist:-twist))*i)*DEG_TO_RAD, LLVector4(0.f, 0.f, 1.f));
-				
-				LLMatrix4 rot_mat(rot);
-				rot_mat *= trans_mat;
-
-				ret += drawBranchPipeline(rot_mat, indicesp, trunk_LOD, stop_level, depth - 1, 0, scale*mScaleStep, twist, droop, branches, alpha);
-			}
-			//  Recurse to continue trunk
-			if (trunk_depth)
-			{
-				LLMatrix4 trans_mat;
-				trans_mat.setTranslation(0,0,scale*length);
-				trans_mat *= matrix;
-
-				LLMatrix4 rot_mat(70.5f*DEG_TO_RAD, LLVector4(0,0,1));
-				rot_mat *= trans_mat; // rotate a bit around Z when ascending 
-				ret += drawBranchPipeline(rot_mat, indicesp, trunk_LOD, stop_level, depth, trunk_depth-1, scale*mScaleStep, twist, droop, branches, alpha);
-			}
-		}
-		else
-		{
-			//
-			//  Draw leaves as two 90 deg crossed quads with leaf textures
-			//
-			{
-				LLMatrix4 scale_mat;
-				scale_mat.mMatrix[0][0] = 
-					scale_mat.mMatrix[1][1] =
-					scale_mat.mMatrix[2][2] = scale*mLeafScale;
-
-				scale_mat *= matrix;
-
-			
-				gGL.loadMatrix((F32*) scale_mat.mMatrix);
-				gGL.syncMatrices();
-				glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp);
-				gPipeline.addTrianglesDrawn(LEAF_INDICES);							
-				stop_glerror();
-				ret += LEAF_INDICES;
-			}
-		}
-	}
-	else
-	{
-		//
-		//  Draw the tree as a single billboard texture 
-		//
-
-		LLMatrix4 scale_mat;
-		scale_mat.mMatrix[0][0] = 
-			scale_mat.mMatrix[1][1] =
-			scale_mat.mMatrix[2][2] = mBillboardScale*mBillboardRatio;
-
-		scale_mat *= matrix;
-	
-		gGL.matrixMode(LLRender::MM_TEXTURE);
-		gGL.translatef(0.0, -0.5, 0.0);
-		gGL.matrixMode(LLRender::MM_MODELVIEW);
-					
-		gGL.loadMatrix((F32*) scale_mat.mMatrix);
-		gGL.syncMatrices();
-		glDrawElements(GL_TRIANGLES, LEAF_INDICES, GL_UNSIGNED_SHORT, indicesp);
-		gPipeline.addTrianglesDrawn(LEAF_INDICES);
-		stop_glerror();
-		ret += LEAF_INDICES;
-
-		gGL.matrixMode(LLRender::MM_TEXTURE);
-		gGL.loadIdentity();
-		gGL.matrixMode(LLRender::MM_MODELVIEW);
-	}
-
-	return ret;
-}
-
 void LLVOTree::updateRadius()
 {
 	if (mDrawable.isNull())
@@ -1238,8 +1112,8 @@ void LLVOTree::updateSpatialExtents(LLVector4a& newMin, LLVector4a& newMax)
 	mDrawable->setPositionGroup(pos);
 }
 
-BOOL LLVOTree::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
-									  LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+BOOL LLVOTree::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+									  LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
 	
 {
 
@@ -1268,16 +1142,19 @@ BOOL LLVOTree::lineSegmentIntersect(const LLVector3& start, const LLVector3& end
 
 	LLVector3 pos, norm;
 		
-	if (linesegment_tetrahedron(start, end, center, size, quat, pos, norm))
+	LLVector3 start3(start.getF32ptr());
+	LLVector3 end3(end.getF32ptr());
+
+	if (linesegment_tetrahedron(start3, end3, center, size, quat, pos, norm))
 	{
 		if (intersection)
 		{
-			*intersection = pos;
+			intersection->load3(pos.mV);
 		}
 
 		if (normal)
 		{
-			*normal = norm;
+			normal->load3(norm.mV);
 		}
 		return TRUE;
 	}
diff --git a/indra/newview/llvotree.h b/indra/newview/llvotree.h
old mode 100644
new mode 100755
index 52debc85abcc6ce86317df93e3f12b8ed62d188b..2ecb0303a1bbd082f6df716abfe1dc3d64301877
--- a/indra/newview/llvotree.h
+++ b/indra/newview/llvotree.h
@@ -104,19 +104,16 @@ class LLVOTree : public LLViewerObject
 								 F32 twist, 
 								 F32 droop,  
 								 F32 branches, 
-								 F32 alpha);
+								 F32 alpha); 
 
-	U32 drawBranchPipeline(LLMatrix4& matrix, U16* indicesp, S32 trunk_LOD, S32 stop_level, U16 depth, U16 trunk_depth,  F32 scale, F32 twist, F32 droop,  F32 branches, F32 alpha);
- 
-
-	 /*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
+	 /*virtual*/ BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, 
 										  S32 face = -1,                        // which face to check, -1 = ALL_SIDES
 										  BOOL pick_transparent = FALSE,
 										  S32* face_hit = NULL,                 // which face was hit
-										  LLVector3* intersection = NULL,       // return the intersection point
+										  LLVector4a* intersection = NULL,       // return the intersection point
 										  LLVector2* tex_coord = NULL,          // return the texture coordinates of the intersection point
-										  LLVector3* normal = NULL,             // return the surface normal at the intersection point
-										  LLVector3* bi_normal = NULL           // return the surface bi-normal at the intersection point
+										  LLVector4a* normal = NULL,             // return the surface normal at the intersection point
+										  LLVector4a* tangent = NULL           // return the surface tangent at the intersection point
 		);
 
 	static S32 sMaxTreeSpecies;
diff --git a/indra/newview/llvotreenew.h b/indra/newview/llvotreenew.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvovolume.cpp b/indra/newview/llvovolume.cpp
old mode 100644
new mode 100755
index 8730ef66bbaa503fcbbc7ed00efac0bf5edbed03..3be1f523529c78adbe6f42692a8a044fe53e4c93
--- a/indra/newview/llvovolume.cpp
+++ b/indra/newview/llvovolume.cpp
@@ -36,6 +36,7 @@
 #include "lldir.h"
 #include "llflexibleobject.h"
 #include "llfloatertools.h"
+#include "llmaterialid.h"
 #include "llmaterialtable.h"
 #include "llprimitive.h"
 #include "llvolume.h"
@@ -76,6 +77,7 @@
 #include "llviewershadermgr.h"
 #include "llvoavatar.h"
 #include "llvocache.h"
+#include "llmaterialmgr.h"
 
 const S32 MIN_QUIET_FRAMES_COALESCE = 30;
 const F32 FORCE_SIMPLE_RENDER_AREA = 512.f;
@@ -554,37 +556,9 @@ void LLVOVolume::animateTextures()
 				tex_mat.setIdentity();
 				LLVector3 trans ;
 
-				if(facep->isAtlasInUse())
-				{
-					//
-					//if use atlas for animated texture
-					//apply the following transform to the animation matrix.
-					//
-
-					F32 tcoord_xoffset = 0.f ;
-					F32 tcoord_yoffset = 0.f ;
-					F32 tcoord_xscale = 1.f ;
-					F32 tcoord_yscale = 1.f ;			
-					if(facep->isAtlasInUse())
-					{
-						const LLVector2* tmp = facep->getTexCoordOffset() ;
-						tcoord_xoffset = tmp->mV[0] ; 
-						tcoord_yoffset = tmp->mV[1] ;
-
-						tmp = facep->getTexCoordScale() ;
-						tcoord_xscale = tmp->mV[0] ; 
-						tcoord_yscale = tmp->mV[1] ;	
-					}
-					trans.set(LLVector3(tcoord_xoffset + tcoord_xscale * (off_s+0.5f), tcoord_yoffset + tcoord_yscale * (off_t+0.5f), 0.f));
-
-					tex_mat.translate(LLVector3(-(tcoord_xoffset + tcoord_xscale * 0.5f), -(tcoord_yoffset + tcoord_yscale * 0.5f), 0.f));
-				}
-				else	//non atlas
-				{
-					trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f));			
-					tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f));
-				}
-
+				trans.set(LLVector3(off_s+0.5f, off_t+0.5f, 0.f));			
+				tex_mat.translate(LLVector3(-0.5f, -0.5f, 0.f));
+				
 				LLVector3 scale(scale_s, scale_t, 1.f);			
 				LLQuaternion quat;
 				quat.setQuat(rot, 0, 0, -1.f);
@@ -918,6 +892,12 @@ LLFace* LLVOVolume::addFace(S32 f)
 {
 	const LLTextureEntry* te = getTE(f);
 	LLViewerTexture* imagep = getTEImage(f);
+	if (te->getMaterialParams().notNull())
+	{
+		LLViewerTexture* normalp = getTENormalMap(f);
+		LLViewerTexture* specularp = getTESpecularMap(f);
+		return mDrawable->addFace(te, imagep, normalp, specularp);
+	}
 	return mDrawable->addFace(te, imagep);
 }
 
@@ -1066,7 +1046,7 @@ BOOL LLVOVolume::setVolume(const LLVolumeParams &params_in, const S32 detail, bo
 				{ //already cached
 					break;
 				}
-				volume->genBinormals(i);
+				volume->genTangents(i);
 				LLFace::cacheFaceInVRAM(face);
 			}
 		}
@@ -1415,6 +1395,11 @@ void LLVOVolume::regenFaces()
 
 		facep->setTEOffset(i);
 		facep->setTexture(getTEImage(i));
+		if (facep->getTextureEntry()->getMaterialParams().notNull())
+		{
+			facep->setNormalMap(getTENormalMap(i));
+			facep->setSpecularMap(getTESpecularMap(i));
+		}
 		facep->setViewerObject(this);
 		
 		// If the face had media on it, this will have broken the link between the LLViewerMediaTexture and the face.
@@ -1876,7 +1861,7 @@ S32 LLVOVolume::setTEColor(const U8 te, const LLColor4& color)
 	const LLTextureEntry *tep = getTE(te);
 	if (!tep)
 	{
-		llwarns << "No texture entry for te " << (S32)te << ", object " << mID << llendl;
+		LL_WARNS("MaterialTEs") << "No texture entry for te " << (S32)te << ", object " << mID << LL_ENDL;
 	}
 	else if (color != tep->getColor())
 	{
@@ -1988,6 +1973,62 @@ S32 LLVOVolume::setTEGlow(const U8 te, const F32 glow)
 	return  res;
 }
 
+void LLVOVolume::setTEMaterialParamsCallbackTE(const LLUUID& objectID, const LLMaterialID &pMaterialID, const LLMaterialPtr pMaterialParams, U32 te)
+{
+	LLVOVolume* pVol = (LLVOVolume*)gObjectList.findObject(objectID);
+	if (pVol)
+	{
+		LL_DEBUGS("MaterialTEs") << "materialid " << pMaterialID.asString() << " to TE " << te << LL_ENDL;
+		if (te >= pVol->getNumTEs())
+			return;
+
+		LLTextureEntry* texture_entry = pVol->getTE(te);
+		if (texture_entry && (texture_entry->getMaterialID() == pMaterialID))
+		{
+			pVol->setTEMaterialParams(te, pMaterialParams);
+		}
+	}
+}
+
+S32 LLVOVolume::setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID)
+{
+	S32 res = LLViewerObject::setTEMaterialID(te, pMaterialID);
+	LL_DEBUGS("MaterialTEs") << "te "<< (S32)te << " materialid " << pMaterialID.asString() << " res " << res
+								<< ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" )
+								<< LL_ENDL;
+		
+	LL_DEBUGS("MaterialTEs") << " " << pMaterialID.asString() << LL_ENDL;
+	if (res)
+	{
+		LLMaterialMgr::instance().getTE(getRegion()->getRegionID(), pMaterialID, te, boost::bind(&LLVOVolume::setTEMaterialParamsCallbackTE, getID(), _1, _2, _3));
+
+		setChanged(ALL_CHANGED);
+		if (!mDrawable.isNull())
+		{
+			gPipeline.markTextured(mDrawable);
+			gPipeline.markRebuild(mDrawable,LLDrawable::REBUILD_ALL);
+		}
+		mFaceMappingChanged = TRUE;
+	}
+	return res;
+}
+
+S32 LLVOVolume::setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams)
+{
+	S32 res = LLViewerObject::setTEMaterialParams(te, pMaterialParams);
+	LL_DEBUGS("MaterialTEs") << "te " << (S32)te << " material " << ((pMaterialParams) ? pMaterialParams->asLLSD() : LLSD("null")) << " res " << res
+							 << ( LLSelectMgr::getInstance()->getSelection()->contains(const_cast<LLVOVolume*>(this), te) ? " selected" : " not selected" )
+							 << LL_ENDL;
+	setChanged(ALL_CHANGED);
+	if (!mDrawable.isNull())
+	{
+		gPipeline.markTextured(mDrawable);
+		gPipeline.markRebuild(mDrawable,LLDrawable::REBUILD_ALL);
+	}
+	mFaceMappingChanged = TRUE;
+	return TEM_CHANGE_TEXTURE;
+}
+
 S32 LLVOVolume::setTEScale(const U8 te, const F32 s, const F32 t)
 {
 	S32 res = LLViewerObject::setTEScale(te, s, t);
@@ -3476,7 +3517,12 @@ F32 LLVOVolume::getBinRadius()
 	}
 	else if (mDrawable->isStatic())
 	{
-		radius = llmax((S32) mDrawable->getRadius(), 1)*size_factor;
+		F32 szf = size_factor;
+
+		radius = llmax(mDrawable->getRadius(), szf);
+		
+		radius = powf(radius, 1.f+szf/radius);
+
 		radius *= 1.f + mDrawable->mDistanceWRTCamera * distance_factor[1];
 		radius += mDrawable->mDistanceWRTCamera * distance_factor[0];
 	}
@@ -3573,8 +3619,8 @@ LLVector3 LLVOVolume::volumeDirectionToAgent(const LLVector3& dir) const
 }
 
 
-BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
-									  LLVector3* intersection,LLVector2* tex_coord, LLVector3* normal, LLVector3* bi_normal)
+BOOL LLVOVolume::lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, S32 face, BOOL pick_transparent, S32 *face_hitp,
+									  LLVector4a* intersection,LLVector2* tex_coord, LLVector4a* normal, LLVector4a* tangent)
 	
 {
 	if (!mbCanSelect 
@@ -3606,23 +3652,25 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 	
 	if (volume)
 	{	
-		LLVector3 v_start, v_end, v_dir;
-	
+		LLVector4a local_start = start;
+		LLVector4a local_end = end;
+		
 		if (transform)
 		{
-			v_start = agentPositionToVolume(start);
-			v_end = agentPositionToVolume(end);
-		}
-		else
-		{
-			v_start = start;
-			v_end = end;
-		}
+			LLVector3 v_start(start.getF32ptr());
+			LLVector3 v_end(end.getF32ptr());
 		
-		LLVector3 p;
-		LLVector3 n;
+			v_start = agentPositionToVolume(v_start);
+			v_end = agentPositionToVolume(v_end);
+
+			local_start.load3(v_start.mV);
+			local_end.load3(v_end.mV);
+		}
+				
+		LLVector4a p;
+		LLVector4a n;
 		LLVector2 tc;
-		LLVector3 bn;
+		LLVector4a tn;
 
 		if (intersection != NULL)
 		{
@@ -3639,9 +3687,9 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 			n = *normal;
 		}
 
-		if (bi_normal != NULL)
+		if (tangent != NULL)
 		{
-			bn = *bi_normal;
+			tn = *tangent;
 		}
 
 		S32 face_hit = -1;
@@ -3667,8 +3715,8 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 				continue;
 			}
 
-			face_hit = volume->lineSegmentIntersect(v_start, v_end, i,
-													&p, &tc, &n, &bn);
+			face_hit = volume->lineSegmentIntersect(local_start, local_end, i,
+													&p, &tc, &n, &tn);
 			
 			if (face_hit >= 0 && mDrawable->getNumFaces() > face_hit)
 			{
@@ -3677,7 +3725,7 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 				if (face &&
 					(pick_transparent || !face->getTexture() || !face->getTexture()->hasGLTexture() || face->getTexture()->getMask(face->surfaceToTexture(tc, p, n))))
 				{
-					v_end = p;
+					local_end = p;
 					if (face_hitp != NULL)
 					{
 						*face_hitp = face_hit;
@@ -3687,7 +3735,9 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 					{
 						if (transform)
 						{
-							*intersection = volumePositionToAgent(p);  // must map back to agent space
+							LLVector3 v_p(p.getF32ptr());
+
+							intersection->load3(volumePositionToAgent(v_p).mV);  // must map back to agent space
 						}
 						else
 						{
@@ -3699,27 +3749,36 @@ BOOL LLVOVolume::lineSegmentIntersect(const LLVector3& start, const LLVector3& e
 					{
 						if (transform)
 						{
-							*normal = volumeDirectionToAgent(n);
+							LLVector3 v_n(n.getF32ptr());
+							normal->load3(volumeDirectionToAgent(v_n).mV);
 						}
 						else
 						{
 							*normal = n;
 						}
-
-						(*normal).normVec();
+						(*normal).normalize3fast();
 					}
 
-					if (bi_normal != NULL)
+					if (tangent != NULL)
 					{
 						if (transform)
 						{
-							*bi_normal = volumeDirectionToAgent(bn);
+							LLVector3 v_tn(tn.getF32ptr());
+
+							LLVector4a trans_tangent;
+							trans_tangent.load3(volumeDirectionToAgent(v_tn).mV);
+
+							LLVector4Logical mask;
+							mask.clear();
+							mask.setElement<3>();
+
+							tangent->setSelectWithMask(mask, tn, trans_tangent);
 						}
 						else
 						{
-							*bi_normal = bn;
+							*tangent = tn;
 						}
-						(*bi_normal).normVec();
+						(*tangent).normalize3fast();
 					}
 
 					if (tex_coord != NULL)
@@ -3976,6 +4035,11 @@ bool can_batch_texture(LLFace* facep)
 		return false;
 	}
 
+	if (facep->getTextureEntry()->getMaterialParams().notNull())
+	{ //materials don't work with texture batching yet
+		return false;
+	}
+
 	if (facep->getTexture() && facep->getTexture()->getPrimaryFormat() == GL_ALPHA)
 	{ //can't batch invisiprims
 		return false;
@@ -3994,7 +4058,11 @@ static LLFastTimer::DeclareTimer FTM_REGISTER_FACE("Register Face");
 void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep, U32 type)
 {
 	LLFastTimer t(FTM_REGISTER_FACE);
-
+	if (type == LLRenderPass::PASS_ALPHA && facep->getTextureEntry()->getMaterialParams().notNull() && !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_TANGENT))
+	{
+		LL_WARNS("RenderMaterials") << "Oh no! No binormals for this alpha blended face!" << LL_ENDL;
+	}
+	
 	if (facep->getViewerObject()->isSelected() && LLSelectMgr::getInstance()->mHideSelectedObjects)
 	{
 		return;
@@ -4007,7 +4075,9 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 
 	BOOL fullbright = (type == LLRenderPass::PASS_FULLBRIGHT) ||
 		(type == LLRenderPass::PASS_INVISIBLE) ||
-		(type == LLRenderPass::PASS_ALPHA && facep->isState(LLFace::FULLBRIGHT));
+		(type == LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK) ||
+		(type == LLRenderPass::PASS_ALPHA && facep->isState(LLFace::FULLBRIGHT)) ||
+		(facep->getTextureEntry()->getFullbright());
 	
 	if (!fullbright && type != LLRenderPass::PASS_GLOW && !facep->getVertexBuffer()->hasDataType(LLVertexBuffer::TYPE_NORMAL))
 	{
@@ -4041,16 +4111,39 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 	//drawable->getVObj()->setDebugText(llformat("%d", drawable->isState(LLDrawable::ANIMATED_CHILD)));
 
 	U8 bump = (type == LLRenderPass::PASS_BUMP || type == LLRenderPass::PASS_POST_BUMP) ? facep->getTextureEntry()->getBumpmap() : 0;
-	
+	U8 shiny = facep->getTextureEntry()->getShiny();
+
 	LLViewerTexture* tex = facep->getTexture();
 
 	U8 index = facep->getTextureIndex();
+	
+	LLMaterial* mat = facep->getTextureEntry()->getMaterialParams().get(); 
+	LLMaterialID mat_id = facep->getTextureEntry()->getMaterialID();
 
 	bool batchable = false;
 
+	U32 shader_mask = 0xFFFFFFFF; //no shader
+
+	if (mat)
+	{
+		if (type == LLRenderPass::PASS_ALPHA)
+		{
+			shader_mask = mat->getShaderMask(LLMaterial::DIFFUSE_ALPHA_MODE_BLEND);
+		}
+		else
+		{
+			shader_mask = mat->getShaderMask();
+		}
+	}
+
+
 	if (index < 255 && idx >= 0)
 	{
-		if (index < draw_vec[idx]->mTextureList.size())
+		if (mat || draw_vec[idx]->mMaterial)
+		{ //can't batch textures when materials are present (yet)
+			batchable = false;
+		}
+		else if (index < draw_vec[idx]->mTextureList.size())
 		{
 			if (draw_vec[idx]->mTextureList[index].isNull())
 			{
@@ -4076,16 +4169,20 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 		draw_vec[idx]->mEnd - draw_vec[idx]->mStart + facep->getGeomCount() <= (U32) gGLManager.mGLMaxVertexRange &&
 		draw_vec[idx]->mCount + facep->getIndicesCount() <= (U32) gGLManager.mGLMaxIndexRange &&
 #endif
+		draw_vec[idx]->mMaterial == mat &&
+		draw_vec[idx]->mMaterialID == mat_id &&
 		draw_vec[idx]->mFullbright == fullbright &&
-		draw_vec[idx]->mBump == bump &&
+		draw_vec[idx]->mBump  == bump  &&
+		(!mat || (draw_vec[idx]->mShiny == shiny)) && // need to break batches when a material is shared, but legacy settings are different
 		draw_vec[idx]->mTextureMatrix == tex_mat &&
-		draw_vec[idx]->mModelMatrix == model_mat)
+		draw_vec[idx]->mModelMatrix == model_mat &&
+		draw_vec[idx]->mShaderMask == shader_mask)
 	{
 		draw_vec[idx]->mCount += facep->getIndicesCount();
 		draw_vec[idx]->mEnd += facep->getGeomCount();
 		draw_vec[idx]->mVSize = llmax(draw_vec[idx]->mVSize, facep->getVirtualSize());
 
-		if (index >= draw_vec[idx]->mTextureList.size())
+		if (index < 255 && index >= draw_vec[idx]->mTextureList.size())
 		{
 			draw_vec[idx]->mTextureList.resize(index+1);
 			draw_vec[idx]->mTextureList[index] = tex;
@@ -4101,12 +4198,66 @@ void LLVolumeGeometryManager::registerFace(LLSpatialGroup* group, LLFace* facep,
 		U32 offset = facep->getIndicesStart();
 		U32 count = facep->getIndicesCount();
 		LLPointer<LLDrawInfo> draw_info = new LLDrawInfo(start,end,count,offset, tex, 
-			facep->getVertexBuffer(), fullbright, bump); 
+			facep->getVertexBuffer(), fullbright, bump);
 		draw_info->mGroup = group;
 		draw_info->mVSize = facep->getVirtualSize();
 		draw_vec.push_back(draw_info);
 		draw_info->mTextureMatrix = tex_mat;
 		draw_info->mModelMatrix = model_mat;
+		
+		draw_info->mBump  = bump;
+		draw_info->mShiny = shiny;
+
+		float alpha[4] =
+		{
+			0.00f,
+			0.25f,
+			0.5f,
+			0.75f
+		};
+		float spec = alpha[shiny & TEM_SHINY_MASK];
+		LLVector4 specColor(spec, spec, spec, spec);
+		draw_info->mSpecColor = specColor;
+		draw_info->mEnvIntensity = spec;
+		draw_info->mSpecularMap = NULL;
+		draw_info->mMaterial = mat;
+		draw_info->mShaderMask = shader_mask;
+
+		if (mat)
+		{
+				draw_info->mMaterialID = mat_id;
+
+				// We have a material.  Update our draw info accordingly.
+				
+				if (!mat->getSpecularID().isNull())
+				{
+					LLVector4 specColor;
+					specColor.mV[0] = mat->getSpecularLightColor().mV[0] * (1.f / 255.f);
+					specColor.mV[1] = mat->getSpecularLightColor().mV[1] * (1.f / 255.f);
+					specColor.mV[2] = mat->getSpecularLightColor().mV[2] * (1.f / 255.f);
+					specColor.mV[3] = mat->getSpecularLightExponent() * (1.f / 255.f);
+					draw_info->mSpecColor = specColor;
+					draw_info->mEnvIntensity = mat->getEnvironmentIntensity() * (1.f / 255.f);
+					draw_info->mSpecularMap = facep->getViewerObject()->getTESpecularMap(facep->getTEOffset());
+				}
+
+				draw_info->mAlphaMaskCutoff = mat->getAlphaMaskCutoff() * (1.f / 255.f);
+				draw_info->mDiffuseAlphaMode = mat->getDiffuseAlphaMode();
+				draw_info->mNormalMap = facep->getViewerObject()->getTENormalMap(facep->getTEOffset());
+				
+		}
+		else 
+		{
+			if (type == LLRenderPass::PASS_GRASS)
+			{
+				draw_info->mAlphaMaskCutoff = 0.5f;
+			}
+			else
+			{
+				draw_info->mAlphaMaskCutoff = 0.33f;
+			}
+		}
+		
 		if (type == LLRenderPass::PASS_ALPHA)
 		{ //for alpha sorting
 			facep->setDrawInfo(draw_info);
@@ -4223,6 +4374,9 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 
 	std::vector<LLFace*> fullbright_faces;
 	std::vector<LLFace*> bump_faces;
+	std::vector<LLFace*> norm_faces;
+	std::vector<LLFace*> spec_faces;
+	std::vector<LLFace*> normspec_faces;
 	std::vector<LLFace*> simple_faces;
 
 	std::vector<LLFace*> alpha_faces;
@@ -4262,7 +4416,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 			}
 
 			if (vobj->isMesh() &&
-				(vobj->getVolume() && !vobj->getVolume()->isMeshAssetLoaded() || !gMeshRepo.meshRezEnabled()))
+				((vobj->getVolume() && !vobj->getVolume()->isMeshAssetLoaded()) || !gMeshRepo.meshRezEnabled()))
 			{
 				continue;
 			}
@@ -4389,66 +4543,123 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 						LLViewerTexture* tex = facep->getTexture();
 						U32 type = gPipeline.getPoolTypeFromTE(te, tex);
 
-						if (type == LLDrawPool::POOL_ALPHA)
+
+						if (te->getGlow())
 						{
-							if (te->getColor().mV[3] > 0.f)
-							{
-								if (te->getFullbright())
-								{
-									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT_ALPHA);
-								}
-								else
-								{
-									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_ALPHA);
-								}
+							pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_GLOW);
+						}
+
+						LLMaterial* mat = te->getMaterialParams().get();
+
+						if (mat && LLPipeline::sRenderDeferred)
+						{
+							U8 alpha_mode = mat->getDiffuseAlphaMode();
+
+							bool is_alpha = type == LLDrawPool::POOL_ALPHA &&
+								(alpha_mode == LLMaterial::DIFFUSE_ALPHA_MODE_BLEND ||
+								te->getColor().mV[3] < 0.999f);
+
+							if (is_alpha)
+							{ //this face needs alpha blending, override alpha mode
+								alpha_mode = LLMaterial::DIFFUSE_ALPHA_MODE_BLEND;
+							}
+
+							if (!is_alpha || te->getColor().mV[3] > 0.f)  // //only add the face if it will actually be visible
+							{ 
+								U32 mask = mat->getShaderMask(alpha_mode);
+								pool->addRiggedFace(facep, mask);
 							}
 						}
-						else if (te->getShiny())
+						else if (mat)
 						{
-							if (te->getFullbright())
+							bool fullbright = te->getFullbright();
+							bool is_alpha = type == LLDrawPool::POOL_ALPHA;
+							U8 mode = mat->getDiffuseAlphaMode();
+							bool can_be_shiny = mode == LLMaterial::DIFFUSE_ALPHA_MODE_NONE ||
+												mode == LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE;
+							
+							if (mode == LLMaterial::DIFFUSE_ALPHA_MODE_MASK && te->getColor().mV[3] >= 0.999f)
 							{
-								pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT_SHINY);
+								pool->addRiggedFace(facep, fullbright ? LLDrawPoolAvatar::RIGGED_FULLBRIGHT : LLDrawPoolAvatar::RIGGED_SIMPLE);
 							}
-							else
+							else if (is_alpha || (te->getColor().mV[3] < 0.999f))
 							{
-								if (LLPipeline::sRenderDeferred)
-								{
-									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_SIMPLE);
-								}
-								else
+								if (te->getColor().mV[3] > 0.f)
 								{
-									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_SHINY);
+									pool->addRiggedFace(facep, fullbright ? LLDrawPoolAvatar::RIGGED_FULLBRIGHT_ALPHA : LLDrawPoolAvatar::RIGGED_ALPHA);
 								}
 							}
-						}
-						else
-						{
-							if (te->getFullbright())
+							else if (gPipeline.canUseVertexShaders()
+								&& LLPipeline::sRenderBump 
+								&& te->getShiny() 
+								&& can_be_shiny)
 							{
-								pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT);
+								pool->addRiggedFace(facep, fullbright ? LLDrawPoolAvatar::RIGGED_FULLBRIGHT_SHINY : LLDrawPoolAvatar::RIGGED_SHINY);
 							}
 							else
 							{
-								pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_SIMPLE);
+								pool->addRiggedFace(facep, fullbright ? LLDrawPoolAvatar::RIGGED_FULLBRIGHT : LLDrawPoolAvatar::RIGGED_SIMPLE);
 							}
 						}
-
-						if (te->getGlow())
-						{
-							pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_GLOW);
-						}
-
-						if (LLPipeline::sRenderDeferred)
+						else
 						{
-							if (type != LLDrawPool::POOL_ALPHA && !te->getFullbright())
+							if (type == LLDrawPool::POOL_ALPHA)
 							{
-								if (te->getBumpmap())
+								if (te->getColor().mV[3] > 0.f)
 								{
-									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP);
+									if (te->getFullbright())
+									{
+										pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT_ALPHA);
+									}
+									else
+									{
+										pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_ALPHA);
+									}
+								}
+							}
+							else if (te->getShiny())
+							{
+								if (te->getFullbright())
+								{
+									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT_SHINY);
 								}
 								else
 								{
-									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_DEFERRED_SIMPLE);
+									if (LLPipeline::sRenderDeferred)
+									{
+										pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_SIMPLE);
+									}
+									else
+									{
+										pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_SHINY);
+									}
+								}
+							}
+							else
+							{
+								if (te->getFullbright())
+								{
+									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_FULLBRIGHT);
+								}
+								else
+								{
+									pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_SIMPLE);
+								}
+							}
+
+						
+							if (LLPipeline::sRenderDeferred)
+							{
+								if (type != LLDrawPool::POOL_ALPHA && !te->getFullbright())
+								{
+									if (te->getBumpmap())
+									{
+										pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_DEFERRED_BUMP);
+									}
+									else
+									{
+										pool->addRiggedFace(facep, LLDrawPoolAvatar::RIGGED_DEFERRED_SIMPLE);
+									}
 								}
 							}
 						}
@@ -4558,8 +4769,31 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 						if (gPipeline.canUseWindLightShadersOnObjects()
 							&& LLPipeline::sRenderBump)
 						{
-							if (te->getBumpmap())
-							{ //needs normal + binormal
+							if (LLPipeline::sRenderDeferred && te->getMaterialParams().notNull()  && !te->getMaterialID().isNull())
+							{
+								LLMaterial* mat = te->getMaterialParams().get();
+								if (mat->getNormalID().notNull())
+								{
+									if (mat->getSpecularID().notNull())
+									{ //has normal and specular maps (needs texcoord1, texcoord2, and tangent)
+										normspec_faces.push_back(facep);
+									}
+									else
+									{ //has normal map (needs texcoord1 and tangent)
+										norm_faces.push_back(facep);
+									}
+								}
+								else if (mat->getSpecularID().notNull())
+								{ //has specular map but no normal map, needs texcoord2
+									spec_faces.push_back(facep);
+								}
+								else
+								{ //has neither specular map nor normal map, only needs texcoord0
+									simple_faces.push_back(facep);
+								}									
+							}
+							else if (te->getBumpmap())
+							{ //needs normal + tangent
 								bump_faces.push_back(facep);
 							}
 							else if (te->getShiny() || !te->getFullbright())
@@ -4575,7 +4809,7 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 						else
 						{
 							if (te->getBumpmap() && LLPipeline::sRenderBump)
-							{ //needs normal + binormal
+							{ //needs normal + tangent
 								bump_faces.push_back(facep);
 							}
 							else if ((te->getShiny() && LLPipeline::sRenderBump) ||
@@ -4616,32 +4850,38 @@ void LLVolumeGeometryManager::rebuildGeom(LLSpatialGroup* group)
 	U32 bump_mask = LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_NORMAL | LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR;
 	U32 fullbright_mask = LLVertexBuffer::MAP_TEXCOORD0 | LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_COLOR;
 
+	U32 norm_mask = simple_mask | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TANGENT;
+	U32 normspec_mask = norm_mask | LLVertexBuffer::MAP_TEXCOORD2;
+	U32 spec_mask = simple_mask | LLVertexBuffer::MAP_TEXCOORD2;
+
 	if (emissive)
 	{ //emissive faces are present, include emissive byte to preserve batching
 		simple_mask = simple_mask | LLVertexBuffer::MAP_EMISSIVE;
 		alpha_mask = alpha_mask | LLVertexBuffer::MAP_EMISSIVE;
 		bump_mask = bump_mask | LLVertexBuffer::MAP_EMISSIVE;
 		fullbright_mask = fullbright_mask | LLVertexBuffer::MAP_EMISSIVE;
+		norm_mask = norm_mask | LLVertexBuffer::MAP_EMISSIVE;
+		normspec_mask = normspec_mask | LLVertexBuffer::MAP_EMISSIVE;
+		spec_mask = spec_mask | LLVertexBuffer::MAP_EMISSIVE;
 	}
 
-	bool batch_textures = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1;
+	BOOL batch_textures = LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_OBJECT) > 1;
 
 	if (batch_textures)
 	{
-		bump_mask |= LLVertexBuffer::MAP_BINORMAL;
-		genDrawInfo(group, simple_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, simple_faces, FALSE, TRUE);
-		genDrawInfo(group, fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, fullbright_faces, FALSE, TRUE);
-		genDrawInfo(group, bump_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, bump_faces, FALSE, TRUE);
-		genDrawInfo(group, alpha_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, alpha_faces, TRUE, TRUE);
+		bump_mask = bump_mask | LLVertexBuffer::MAP_TANGENT;
+		simple_mask = simple_mask | LLVertexBuffer::MAP_TEXTURE_INDEX;
+		alpha_mask = alpha_mask | LLVertexBuffer::MAP_TEXTURE_INDEX | LLVertexBuffer::MAP_TANGENT | LLVertexBuffer::MAP_TEXCOORD1 | LLVertexBuffer::MAP_TEXCOORD2;
+		fullbright_mask = fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX;
 	}
-	else
-	{
-		genDrawInfo(group, simple_mask, simple_faces);
-		genDrawInfo(group, fullbright_mask, fullbright_faces);
-		genDrawInfo(group, bump_mask, bump_faces, FALSE, TRUE);
-		genDrawInfo(group, alpha_mask, alpha_faces, TRUE);
-	}
-	
+
+	genDrawInfo(group, simple_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, simple_faces, FALSE, batch_textures, FALSE);
+	genDrawInfo(group, fullbright_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, fullbright_faces, FALSE, batch_textures);
+	genDrawInfo(group, alpha_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, alpha_faces, TRUE, batch_textures);
+	genDrawInfo(group, bump_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, bump_faces, FALSE, FALSE);
+	genDrawInfo(group, norm_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, norm_faces, FALSE, FALSE);
+	genDrawInfo(group, spec_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, spec_faces, FALSE, FALSE);
+	genDrawInfo(group, normspec_mask | LLVertexBuffer::MAP_TEXTURE_INDEX, normspec_faces, FALSE, FALSE);
 
 	if (!LLPipeline::sDelayVBUpdate)
 	{
@@ -4793,11 +5033,18 @@ struct CompareBatchBreakerModified
 		{
 			return lte->getFullbright() < rte->getFullbright();
 		}
+		else if (LLPipeline::sRenderDeferred && lte->getMaterialParams() != rte->getMaterialParams())
+		{
+			return lte->getMaterialParams() < rte->getMaterialParams();
+		}
+		else if (LLPipeline::sRenderDeferred && (lte->getMaterialParams() == rte->getMaterialParams()) && (lte->getShiny() != rte->getShiny()))
+		{
+			return lte->getShiny() < rte->getShiny();
+		}
 		else
 		{
 			return lhs->getTexture() < rhs->getTexture();
 		}
-		
 	}
 };
 
@@ -4811,7 +5058,7 @@ static LLFastTimer::DeclareTimer FTM_GEN_DRAW_INFO_RESIZE_VB("Resize VB");
 
 
 
-void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures)
+void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::vector<LLFace*>& faces, BOOL distance_sort, BOOL batch_textures, BOOL no_materials)
 {
 	LLFastTimer t(FTM_REBUILD_VOLUME_GEN_DRAW_INFO);
 
@@ -4881,6 +5128,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 		//pull off next face
 		LLFace* facep = *face_iter;
 		LLViewerTexture* tex = facep->getTexture();
+		LLMaterialPtr mat = facep->getTextureEntry()->getMaterialParams();
 
 		if (distance_sort)
 		{
@@ -4926,6 +5174,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 						if (!can_batch_texture(facep))
 						{ //face is bump mapped or has an animated texture matrix -- can't 
 							//batch more than 1 texture at a time
+							facep->setTextureIndex(0);
 							break;
 						}
 
@@ -4976,13 +5225,20 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 						facep->setTextureIndex(cur_tex);
 					}
 				}
+				else
+				{
+					facep->setTextureIndex(0);
+				}
 
 				tex = texture_list[0];
 			}
 			else
 			{
 				while (i != faces.end() && 
-					(LLPipeline::sTextureBindTest || (distance_sort || (*i)->getTexture() == tex)))
+					(LLPipeline::sTextureBindTest || 
+						(distance_sort || 
+							((*i)->getTexture() == tex &&
+							((*i)->getTextureEntry()->getMaterialParams() == mat)))))
 				{
 					facep = *i;
 			
@@ -5068,8 +5324,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 
 			index_offset += facep->getGeomCount();
 			indices_index += facep->getIndicesCount();
-
-
+			
 			//append face to appropriate render batch
 
 			BOOL force_simple = facep->getPixelArea() < FORCE_SIMPLE_RENDER_AREA;
@@ -5089,7 +5344,130 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 
 			BOOL is_alpha = (facep->getPoolType() == LLDrawPool::POOL_ALPHA) ? TRUE : FALSE;
 		
-			if (is_alpha)
+			LLMaterial* mat = te->getMaterialParams().get();
+
+			bool can_be_shiny = true;
+			if (mat)
+			{
+				U8 mode = mat->getDiffuseAlphaMode();
+				can_be_shiny = mode == LLMaterial::DIFFUSE_ALPHA_MODE_NONE ||
+								mode == LLMaterial::DIFFUSE_ALPHA_MODE_EMISSIVE;
+			}
+
+			bool use_legacy_bump = te->getBumpmap() && (!mat || mat->getNormalID().isNull());
+
+			if (mat && LLPipeline::sRenderDeferred && !hud_group)
+			{
+				bool material_pass = false;
+
+				if (fullbright)
+				{
+					if (mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
+					{
+						if (te->getColor().mV[3] >= 0.999f)
+						{
+							material_pass = true;
+						}
+						else
+						{
+							registerFace(group, facep, LLRenderPass::PASS_ALPHA);
+						}
+					}
+					else if (is_alpha)
+					{
+						registerFace(group, facep, LLRenderPass::PASS_ALPHA);
+					}
+					else
+					{
+						if (mat->getEnvironmentIntensity() > 0 ||
+							te->getShiny() > 0)
+						{
+							material_pass = true;
+						}
+						else
+						{
+							registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT);
+						}
+					}
+				}
+				else if (no_materials)
+				{
+					registerFace(group, facep, LLRenderPass::PASS_SIMPLE);
+				}
+				else if (te->getColor().mV[3] < 0.999f)
+				{
+					registerFace(group, facep, LLRenderPass::PASS_ALPHA);
+				}
+				else if (use_legacy_bump)
+				{
+					// we have a material AND legacy bump settings, but no normal map
+					registerFace(group, facep, LLRenderPass::PASS_BUMP);
+				}
+				else
+				{
+					material_pass = true;
+				}
+
+				if (material_pass)
+				{
+					U32 pass[] = 
+					{
+						LLRenderPass::PASS_MATERIAL,
+						LLRenderPass::PASS_ALPHA, //LLRenderPass::PASS_MATERIAL_ALPHA,
+						LLRenderPass::PASS_MATERIAL_ALPHA_MASK,
+						LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE,
+						LLRenderPass::PASS_SPECMAP,
+						LLRenderPass::PASS_ALPHA, //LLRenderPass::PASS_SPECMAP_BLEND,
+						LLRenderPass::PASS_SPECMAP_MASK,
+						LLRenderPass::PASS_SPECMAP_EMISSIVE,
+						LLRenderPass::PASS_NORMMAP,
+						LLRenderPass::PASS_ALPHA, //LLRenderPass::PASS_NORMMAP_BLEND,
+						LLRenderPass::PASS_NORMMAP_MASK,
+						LLRenderPass::PASS_NORMMAP_EMISSIVE,
+						LLRenderPass::PASS_NORMSPEC,
+						LLRenderPass::PASS_ALPHA, //LLRenderPass::PASS_NORMSPEC_BLEND,
+						LLRenderPass::PASS_NORMSPEC_MASK,
+						LLRenderPass::PASS_NORMSPEC_EMISSIVE,
+					};
+
+					U32 mask = mat->getShaderMask();
+
+					llassert(mask < sizeof(pass)/sizeof(U32));
+
+					mask = llmin(mask, (U32)(sizeof(pass)/sizeof(U32)-1));
+
+					registerFace(group, facep, pass[mask]);
+				}
+			}
+			else if (mat)
+			{
+				U8 mode = mat->getDiffuseAlphaMode();
+				if (te->getColor().mV[3] < 0.999f)
+				{
+					mode = LLMaterial::DIFFUSE_ALPHA_MODE_BLEND;
+				}
+
+				if (mode == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
+				{
+					registerFace(group, facep, fullbright ? LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK : LLRenderPass::PASS_ALPHA_MASK);
+				}
+				else if (is_alpha || (te->getColor().mV[3] < 0.999f))
+				{
+					registerFace(group, facep, LLRenderPass::PASS_ALPHA);
+				}
+				else if (gPipeline.canUseVertexShaders()
+					&& LLPipeline::sRenderBump 
+					&& te->getShiny() 
+					&& can_be_shiny)
+				{
+					registerFace(group, facep, fullbright ? LLRenderPass::PASS_FULLBRIGHT_SHINY : LLRenderPass::PASS_SHINY);
+				}
+				else
+				{
+					registerFace(group, facep, fullbright ? LLRenderPass::PASS_FULLBRIGHT : LLRenderPass::PASS_SIMPLE);
+				}
+			}
+			else if (is_alpha)
 			{
 				// can we safely treat this as an alpha mask?
 				if (facep->getFaceColor().mV[3] <= 0.f)
@@ -5114,7 +5492,8 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 			}
 			else if (gPipeline.canUseVertexShaders()
 				&& LLPipeline::sRenderBump 
-				&& te->getShiny())
+				&& te->getShiny() 
+				&& can_be_shiny)
 			{ //shiny
 				if (tex->getPrimaryFormat() == GL_ALPHA)
 				{ //invisiprim+shiny
@@ -5131,7 +5510,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 							registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
 						}
 					}
-					else if (te->getBumpmap())
+					else if (use_legacy_bump)
 					{ //register in deferred bump pass
 						registerFace(group, facep, LLRenderPass::PASS_BUMP);
 					}
@@ -5158,22 +5537,36 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 				}
 				else if (fullbright || bake_sunlight)
 				{ //fullbright
-					registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT);
-					if (LLPipeline::sRenderDeferred && !hud_group && LLPipeline::sRenderBump && te->getBumpmap())
+					if (mat && mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
+					{
+						registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK);
+					}
+					else
+					{
+						registerFace(group, facep, LLRenderPass::PASS_FULLBRIGHT);
+					}
+					if (LLPipeline::sRenderDeferred && !hud_group && LLPipeline::sRenderBump && use_legacy_bump)
 					{ //if this is the deferred render and a bump map is present, register in post deferred bump
 						registerFace(group, facep, LLRenderPass::PASS_POST_BUMP);
 					}
 				}
 				else
 				{
-					if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && te->getBumpmap())
+					if (LLPipeline::sRenderDeferred && LLPipeline::sRenderBump && use_legacy_bump)
 					{ //non-shiny or fullbright deferred bump
 						registerFace(group, facep, LLRenderPass::PASS_BUMP);
 					}
 					else
 					{ //all around simple
 						llassert(mask & LLVertexBuffer::MAP_NORMAL);
-						registerFace(group, facep, LLRenderPass::PASS_SIMPLE);
+						if (mat && mat->getDiffuseAlphaMode() == LLMaterial::DIFFUSE_ALPHA_MODE_MASK)
+						{ //material alpha mask can be respected in non-deferred
+							registerFace(group, facep, LLRenderPass::PASS_ALPHA_MASK);
+						}
+						else
+						{
+							registerFace(group, facep, LLRenderPass::PASS_SIMPLE);
+						}
 					}
 				}
 				
@@ -5193,7 +5586,7 @@ void LLVolumeGeometryManager::genDrawInfo(LLSpatialGroup* group, U32 mask, std::
 				llassert((mask & LLVertexBuffer::MAP_NORMAL) || fullbright);
 				facep->setPoolType((fullbright) ? LLDrawPool::POOL_FULLBRIGHT : LLDrawPool::POOL_SIMPLE);
 				
-				if (!force_simple && te->getBumpmap() && LLPipeline::sRenderBump)
+				if (!force_simple && LLPipeline::sRenderBump && use_legacy_bump)
 				{
 					registerFace(group, facep, LLRenderPass::PASS_BUMP);
 				}
@@ -5282,4 +5675,3 @@ void LLHUDPartition::shift(const LLVector4a &offset)
 	//HUD objects don't shift with region crossing.  That would be silly.
 }
 
-
diff --git a/indra/newview/llvovolume.h b/indra/newview/llvovolume.h
old mode 100644
new mode 100755
index 5482c80f2b1ad146a72019f1e00ec64649330e52..7503f8c5aa8548a434c4ac32c25b1fa5c6fc90c6
--- a/indra/newview/llvovolume.h
+++ b/indra/newview/llvovolume.h
@@ -31,12 +31,14 @@
 #include "llviewertexture.h"
 #include "llviewermedia.h"
 #include "llframetimer.h"
+#include "lllocalbitmaps.h"
 #include "m3math.h"		// LLMatrix3
 #include "m4math.h"		// LLMatrix4
 #include <map>
 
 class LLViewerTextureAnim;
 class LLDrawPool;
+class LLMaterialID;
 class LLSelectNode;
 class LLObjectMediaDataClient;
 class LLObjectMediaNavigateClient;
@@ -135,14 +137,14 @@ class LLVOVolume : public LLViewerObject
 
 	/*virtual*/ U32		getTriangleCount(S32* vcount = NULL) const;
 	/*virtual*/ U32		getHighLODTriangleCount();
-	/*virtual*/ BOOL lineSegmentIntersect(const LLVector3& start, const LLVector3& end, 
+	/*virtual*/ BOOL lineSegmentIntersect(const LLVector4a& start, const LLVector4a& end, 
 										  S32 face = -1,                        // which face to check, -1 = ALL_SIDES
 										  BOOL pick_transparent = FALSE,
 										  S32* face_hit = NULL,                 // which face was hit
-										  LLVector3* intersection = NULL,       // return the intersection point
+										  LLVector4a* intersection = NULL,       // return the intersection point
 										  LLVector2* tex_coord = NULL,          // return the texture coordinates of the intersection point
-										  LLVector3* normal = NULL,             // return the surface normal at the intersection point
-										  LLVector3* bi_normal = NULL           // return the surface bi-normal at the intersection point
+										  LLVector4a* normal = NULL,             // return the surface normal at the intersection point
+										  LLVector4a* tangent = NULL           // return the surface tangent at the intersection point
 		);
 	
 				LLVector3 agentPositionToVolume(const LLVector3& pos) const;
@@ -157,6 +159,7 @@ class LLVOVolume : public LLViewerObject
 				const LLMatrix4& getWorldMatrix(LLXformMatrix* xform) const;
 
 				void	markForUpdate(BOOL priority)			{ LLViewerObject::markForUpdate(priority); mVolumeChanged = TRUE; }
+				void    faceMappingChanged()                    { mFaceMappingChanged=TRUE; };
 
 	/*virtual*/ void	onShift(const LLVector4a &shift_vector); // Called when the drawable shifts
 
@@ -185,6 +188,11 @@ class LLVOVolume : public LLViewerObject
 	/*virtual*/ S32		setTEBumpShinyFullbright(const U8 te, const U8 bump);
 	/*virtual*/ S32		setTEMediaFlags(const U8 te, const U8 media_flags);
 	/*virtual*/ S32		setTEGlow(const U8 te, const F32 glow);
+	/*virtual*/ S32		setTEMaterialID(const U8 te, const LLMaterialID& pMaterialID);
+	
+	static void	setTEMaterialParamsCallbackTE(const LLUUID& objectID, const LLMaterialID& pMaterialID, const LLMaterialPtr pMaterialParams, U32 te);
+
+	/*virtual*/ S32		setTEMaterialParams(const U8 te, const LLMaterialPtr pMaterialParams);
 	/*virtual*/ S32		setTEScale(const U8 te, const F32 s, const F32 t);
 	/*virtual*/ S32		setTEScaleS(const U8 te, const F32 s);
 	/*virtual*/ S32		setTEScaleT(const U8 te, const F32 t);
@@ -378,3 +386,4 @@ class LLVOVolume : public LLViewerObject
 };
 
 #endif // LL_LLVOVOLUME_H
+
diff --git a/indra/newview/llvowater.cpp b/indra/newview/llvowater.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvowater.h b/indra/newview/llvowater.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llvowlsky.cpp b/indra/newview/llvowlsky.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llvowlsky.h b/indra/newview/llvowlsky.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwatchdog.cpp b/indra/newview/llwatchdog.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwatchdog.h b/indra/newview/llwatchdog.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwaterparammanager.cpp b/indra/newview/llwaterparammanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwaterparammanager.h b/indra/newview/llwaterparammanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwaterparamset.cpp b/indra/newview/llwaterparamset.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwaterparamset.h b/indra/newview/llwaterparamset.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwearableitemslist.cpp b/indra/newview/llwearableitemslist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwearableitemslist.h b/indra/newview/llwearableitemslist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwearablelist.cpp b/indra/newview/llwearablelist.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwearablelist.h b/indra/newview/llwearablelist.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llweb.cpp b/indra/newview/llweb.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llweb.h b/indra/newview/llweb.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwebprofile.cpp b/indra/newview/llwebprofile.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwebprofile.h b/indra/newview/llwebprofile.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwebsharing.cpp b/indra/newview/llwebsharing.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwebsharing.h b/indra/newview/llwebsharing.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwind.cpp b/indra/newview/llwind.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwind.h b/indra/newview/llwind.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwindebug.cpp b/indra/newview/llwindebug.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwindebug.h b/indra/newview/llwindebug.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwindowlistener.cpp b/indra/newview/llwindowlistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwindowlistener.h b/indra/newview/llwindowlistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlanimator.cpp b/indra/newview/llwlanimator.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlanimator.h b/indra/newview/llwlanimator.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwldaycycle.cpp b/indra/newview/llwldaycycle.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwldaycycle.h b/indra/newview/llwldaycycle.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlhandlers.cpp b/indra/newview/llwlhandlers.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlhandlers.h b/indra/newview/llwlhandlers.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlparammanager.cpp b/indra/newview/llwlparammanager.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlparammanager.h b/indra/newview/llwlparammanager.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llwlparamset.cpp b/indra/newview/llwlparamset.cpp
old mode 100644
new mode 100755
index b04d30db5522a43071b84eafedc35c94fb2a8165..dba397063572aba709f25901fef95951e9ffe4a1
--- a/indra/newview/llwlparamset.cpp
+++ b/indra/newview/llwlparamset.cpp
@@ -33,6 +33,7 @@
 #include "llglslshader.h"
 #include "lluictrlfactory.h"
 #include "llsliderctrl.h"
+#include "pipeline.h"
 
 #include <llgl.h>
 
@@ -127,6 +128,13 @@ void LLWLParamSet::update(LLGLSLShader * shader) const
 			}
 		}
 	}
+	
+	if (LLPipeline::sRenderDeferred && !LLPipeline::sReflectionRender && !LLPipeline::sUnderWaterRender)
+	{
+		shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 2.2);
+	} else {
+		shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 1.0);
+	}
 }
 
 void LLWLParamSet::set(const std::string& paramName, float x) 
diff --git a/indra/newview/llwlparamset.h b/indra/newview/llwlparamset.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llworld.cpp b/indra/newview/llworld.cpp
old mode 100644
new mode 100755
index 793becf0c82e14397692d9838e7d0ccb4926129b..7996f8a64005b31f6e1b3f58f93877639b46c7c5
--- a/indra/newview/llworld.cpp
+++ b/indra/newview/llworld.cpp
@@ -274,7 +274,9 @@ void LLWorld::removeRegion(const LLHost &host)
 	mActiveRegionList.remove(regionp);
 	mCulledRegionList.remove(regionp);
 	mVisibleRegionList.remove(regionp);
-	
+
+	mRegionRemovedSignal(regionp);
+
 	delete regionp;
 
 	updateWaterObjects();
@@ -402,6 +404,19 @@ LLViewerRegion* LLWorld::getRegionFromHandle(const U64 &handle)
 	return NULL;
 }
 
+LLViewerRegion* LLWorld::getRegionFromID(const LLUUID& region_id)
+{
+	for (region_list_t::iterator iter = mRegionList.begin();
+		 iter != mRegionList.end(); ++iter)
+	{
+		LLViewerRegion* regionp = *iter;
+		if (regionp->getRegionID() == region_id)
+		{
+			return regionp;
+		}
+	}
+	return NULL;
+}
 
 void LLWorld::updateAgentOffset(const LLVector3d &offset_global)
 {
@@ -1244,6 +1259,11 @@ bool LLWorld::isRegionListed(const LLViewerRegion* region) const
 	return it != mRegionList.end();
 }
 
+boost::signals2::connection LLWorld::setRegionRemovedCallback(const region_remove_signal_t::slot_type& cb)
+{
+	return mRegionRemovedSignal.connect(cb);
+}
+
 LLHTTPRegistration<LLEstablishAgentCommunication>
 	gHTTPRegistrationEstablishAgentCommunication(
 							"/message/EstablishAgentCommunication");
diff --git a/indra/newview/llworld.h b/indra/newview/llworld.h
old mode 100644
new mode 100755
index f350009d100c09f6d10f4b0cc4f1014716f88995..d0b001ba443fef1022ae957ace3144d2923e7c5e
--- a/indra/newview/llworld.h
+++ b/indra/newview/llworld.h
@@ -76,6 +76,7 @@ class LLWorld : public LLSingleton<LLWorld>
 	LLViewerRegion*			getRegionFromPosGlobal(const LLVector3d &pos);
 	LLViewerRegion*			getRegionFromPosAgent(const LLVector3 &pos);
 	LLViewerRegion*			getRegionFromHandle(const U64 &handle);
+	LLViewerRegion*			getRegionFromID(const LLUUID& region_id);
 	BOOL					positionRegionValidGlobal(const LLVector3d& pos);			// true if position is in valid region
 	LLVector3d				clipToVisibleRegions(const LLVector3d &start_pos, const LLVector3d &end_pos);
 
@@ -149,6 +150,9 @@ class LLWorld : public LLSingleton<LLWorld>
 	typedef std::list<LLViewerRegion*> region_list_t;
 	const region_list_t& getRegionList() const { return mActiveRegionList; }
 
+	typedef boost::signals2::signal<void(LLViewerRegion*)> region_remove_signal_t;
+	boost::signals2::connection setRegionRemovedCallback(const region_remove_signal_t::slot_type& cb);
+
 	// Returns lists of avatar IDs and their world-space positions within a given distance of a point.
 	// All arguments are optional. Given containers will be emptied and then filled.
 	// Not supplying origin or radius input returns data on all avatars in the known regions.
@@ -168,6 +172,8 @@ class LLWorld : public LLSingleton<LLWorld>
 	region_list_t	mVisibleRegionList;
 	region_list_t	mCulledRegionList;
 
+	region_remove_signal_t mRegionRemovedSignal;
+
 	// Number of points on edge
 	static const U32 mWidth;
 
diff --git a/indra/newview/llworldmap.cpp b/indra/newview/llworldmap.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmap.h b/indra/newview/llworldmap.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmapmessage.cpp b/indra/newview/llworldmapmessage.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmapmessage.h b/indra/newview/llworldmapmessage.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmapview.cpp b/indra/newview/llworldmapview.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmapview.h b/indra/newview/llworldmapview.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmipmap.cpp b/indra/newview/llworldmipmap.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llworldmipmap.h b/indra/newview/llworldmipmap.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llxmlrpclistener.cpp b/indra/newview/llxmlrpclistener.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llxmlrpclistener.h b/indra/newview/llxmlrpclistener.h
old mode 100644
new mode 100755
diff --git a/indra/newview/llxmlrpctransaction.cpp b/indra/newview/llxmlrpctransaction.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/llxmlrpctransaction.h b/indra/newview/llxmlrpctransaction.h
old mode 100644
new mode 100755
diff --git a/indra/newview/macmain.h b/indra/newview/macmain.h
old mode 100644
new mode 100755
diff --git a/indra/newview/macutil_Prefix.h b/indra/newview/macutil_Prefix.h
old mode 100644
new mode 100755
diff --git a/indra/newview/macview.r b/indra/newview/macview.r
old mode 100644
new mode 100755
diff --git a/indra/newview/macview_Prefix.h b/indra/newview/macview_Prefix.h
old mode 100644
new mode 100755
diff --git a/indra/newview/nl.lproj/language.txt b/indra/newview/nl.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/noise.cpp b/indra/newview/noise.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/noise.h b/indra/newview/noise.h
old mode 100644
new mode 100755
diff --git a/indra/newview/pipeline.cpp b/indra/newview/pipeline.cpp
old mode 100644
new mode 100755
index f320f34f6eadb364399c931c9692573111c29f55..c25d22bbdf77f0b77072eecd5c88df9de6bb2981
--- a/indra/newview/pipeline.cpp
+++ b/indra/newview/pipeline.cpp
@@ -233,6 +233,7 @@ LLFastTimer::DeclareTimer FTM_RENDER_WL_SKY("Windlight Sky");
 LLFastTimer::DeclareTimer FTM_RENDER_ALPHA("Alpha Objects");
 LLFastTimer::DeclareTimer FTM_RENDER_CHARACTERS("Avatars");
 LLFastTimer::DeclareTimer FTM_RENDER_BUMP("Bump");
+LLFastTimer::DeclareTimer FTM_RENDER_MATERIALS("Materials");
 LLFastTimer::DeclareTimer FTM_RENDER_FULLBRIGHT("Fullbright");
 LLFastTimer::DeclareTimer FTM_RENDER_GLOW("Glow");
 LLFastTimer::DeclareTimer FTM_GEO_UPDATE("Geo Update");
@@ -262,10 +263,13 @@ std::string gPoolNames[] =
 	"POOL_GROUND",
 	"POOL_FULLBRIGHT",
 	"POOL_BUMP",
+	"POOL_MATERIALS",
 	"POOL_TERRAIN,"	
 	"POOL_SKY",
 	"POOL_WL_SKY",
 	"POOL_TREE",
+	"POOL_ALPHA_MASK",
+	"POOL_FULLBRIGHT_ALPHA_MASK",
 	"POOL_GRASS",
 	"POOL_INVISIBLE",
 	"POOL_AVATAR",
@@ -275,7 +279,7 @@ std::string gPoolNames[] =
 	"POOL_ALPHA"
 };
 
-void drawBox(const LLVector3& c, const LLVector3& r);
+void drawBox(const LLVector4a& c, const LLVector4a& r);
 void drawBoxOutline(const LLVector3& pos, const LLVector3& size);
 U32 nhpo2(U32 v);
 LLVertexBuffer* ll_create_cube_vb(U32 type_mask, U32 usage);
@@ -352,6 +356,7 @@ BOOL	LLPipeline::sRenderParticleBeacons = FALSE;
 BOOL	LLPipeline::sRenderSoundBeacons = FALSE;
 BOOL	LLPipeline::sRenderBeacons = FALSE;
 BOOL	LLPipeline::sRenderHighlight = TRUE;
+LLRender::eTexIndex LLPipeline::sRenderHighlightTextureChannel = LLRender::DIFFUSE_MAP;
 BOOL	LLPipeline::sForceOldBakedUpload = FALSE;
 S32		LLPipeline::sUseOcclusion = 0;
 BOOL	LLPipeline::sDelayVBUpdate = TRUE;
@@ -377,6 +382,7 @@ BOOL	LLPipeline::sRenderDeferred = FALSE;
 BOOL    LLPipeline::sMemAllocationThrottled = FALSE;
 S32		LLPipeline::sVisibleLightCount = 0;
 F32		LLPipeline::sMinRenderSize = 0.f;
+BOOL	LLPipeline::sRenderingHUDs;
 
 // EventHost API LLPipeline listener.
 static LLPipelineListener sPipelineListener;
@@ -398,8 +404,8 @@ void validate_framebuffer_object();
 
 bool addDeferredAttachments(LLRenderTarget& target)
 {
-	return target.addColorAttachment(GL_RGBA) && //specular
-			target.addColorAttachment(GL_RGBA); //normal+z	
+	return target.addColorAttachment(GL_SRGB8_ALPHA8) && //specular
+			target.addColorAttachment(GL_RGB10_A2); //normal+z
 }
 
 LLPipeline::LLPipeline() :
@@ -435,10 +441,14 @@ LLPipeline::LLPipeline() :
 	mWaterPool(NULL),
 	mGroundPool(NULL),
 	mSimplePool(NULL),
+	mGrassPool(NULL),
+	mAlphaMaskPool(NULL),
+	mFullbrightAlphaMaskPool(NULL),
 	mFullbrightPool(NULL),
 	mInvisiblePool(NULL),
 	mGlowPool(NULL),
 	mBumpPool(NULL),
+	mMaterialsPool(NULL),
 	mWLSkyPool(NULL),
 	mLightMask(0),
 	mLightMovingMask(0),
@@ -485,10 +495,13 @@ void LLPipeline::init()
 	//create render pass pools
 	getPool(LLDrawPool::POOL_ALPHA);
 	getPool(LLDrawPool::POOL_SIMPLE);
+	getPool(LLDrawPool::POOL_ALPHA_MASK);
+	getPool(LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK);
 	getPool(LLDrawPool::POOL_GRASS);
 	getPool(LLDrawPool::POOL_FULLBRIGHT);
 	getPool(LLDrawPool::POOL_INVISIBLE);
 	getPool(LLDrawPool::POOL_BUMP);
+	getPool(LLDrawPool::POOL_MATERIALS);
 	getPool(LLDrawPool::POOL_GLOW);
 
 	LLViewerStats::getInstance()->mTrianglesDrawnStat.reset();
@@ -916,12 +929,26 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 		S32 shadow_detail = RenderShadowDetail;
 		BOOL ssao = RenderDeferredSSAO;
 		
+		const U32 occlusion_divisor = 3;
+
 		//allocate deferred rendering color buffers
-		if (!mDeferredScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+		if (!mDeferredScreen.allocate(resX, resY, GL_SRGB8_ALPHA8, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
 		if (!mDeferredDepth.allocate(resX, resY, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+		if (!mOcclusionDepth.allocate(resX/occlusion_divisor, resY/occlusion_divisor, 0, TRUE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
 		if (!addDeferredAttachments(mDeferredScreen)) return false;
-	
-		if (!mScreen.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
+		
+		GLuint screenFormat = GL_RGBA16;
+		if (gGLManager.mIsATI)
+		{
+			screenFormat = GL_RGBA12;
+		}
+
+		if (gGLManager.mGLVersion < 4.f && gGLManager.mIsNVIDIA)
+		{
+			screenFormat = GL_RGBA16F_ARB;
+		}
+		
+		if (!mScreen.allocate(resX, resY, screenFormat, FALSE, FALSE, LLTexUnit::TT_RECT_TEXTURE, FALSE, samples)) return false;
 		if (samples > 0)
 		{
 			if (!mFXAABuffer.allocate(resX, resY, GL_RGBA, FALSE, FALSE, LLTexUnit::TT_TEXTURE, FALSE, samples)) return false;
@@ -948,6 +975,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 			for (U32 i = 0; i < 4; i++)
 			{
 				if (!mShadow[i].allocate(sun_shadow_map_width,U32(resY*scale), 0, TRUE, FALSE, LLTexUnit::TT_TEXTURE)) return false;
+				if (!mShadowOcclusion[i].allocate(mShadow[i].getWidth()/occlusion_divisor, mShadow[i].getHeight()/occlusion_divisor, 0, TRUE, FALSE, LLTexUnit::TT_TEXTURE)) return false;
 			}
 		}
 		else
@@ -955,6 +983,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 			for (U32 i = 0; i < 4; i++)
 			{
 				mShadow[i].release();
+				mShadowOcclusion[i].release();
 			}
 		}
 
@@ -967,6 +996,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 			for (U32 i = 4; i < 6; i++)
 			{
 				if (!mShadow[i].allocate(spot_shadow_map_width, height, 0, TRUE, FALSE)) return false;
+				if (!mShadowOcclusion[i].allocate(mShadow[i].getWidth()/occlusion_divisor, mShadow[i].getHeight()/occlusion_divisor, 0, TRUE, FALSE)) return false;
 			}
 		}
 		else
@@ -974,6 +1004,7 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 			for (U32 i = 4; i < 6; i++)
 			{
 				mShadow[i].release();
+				mShadowOcclusion[i].release();
 			}
 		}
 
@@ -990,11 +1021,13 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 		for (U32 i = 0; i < 6; i++)
 		{
 			mShadow[i].release();
+			mShadowOcclusion[i].release();
 		}
 		mFXAABuffer.release();
 		mScreen.release();
 		mDeferredScreen.release(); //make sure to release any render targets that share a depth buffer with mDeferredScreen first
 		mDeferredDepth.release();
+		mOcclusionDepth.release();
 						
 		if (!mScreen.allocate(resX, resY, GL_RGBA, TRUE, TRUE, LLTexUnit::TT_RECT_TEXTURE, FALSE)) return false;		
 	}
@@ -1011,12 +1044,19 @@ bool LLPipeline::allocateScreenBuffer(U32 resX, U32 resY, U32 samples)
 	return true;
 }
 
+//static
+void LLPipeline::updateRenderBump()
+{
+	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
+}
+
 //static
 void LLPipeline::updateRenderDeferred()
 {
 	BOOL deferred = ((RenderDeferred && 
 					 LLRenderTarget::sUseFBO &&
-					 LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&	 
+					 LLFeatureManager::getInstance()->isFeatureAvailable("RenderDeferred") &&
+					 LLPipeline::sRenderBump &&
 					 VertexShaderEnable && 
 					 RenderAvatarVP &&
 					 WindLightUseAtmosShaders) ? TRUE : FALSE) &&
@@ -1159,7 +1199,7 @@ void LLPipeline::releaseLUTBuffers()
 {
 	if (mLightFunc)
 	{
-		LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, GL_R8, 0, 1, &mLightFunc);
+		LLImageGL::deleteTextures(LLTexUnit::TT_TEXTURE, GL_R16F, 0, 1, &mLightFunc);
 		mLightFunc = 0;
 	}
 }
@@ -1213,7 +1253,7 @@ void LLPipeline::createGLBuffers()
 
 		for (U32 i = 0; i < 3; i++)
 		{
-			mGlow[i].allocate(512,glow_res,GL_RGBA,FALSE,FALSE);
+			mGlow[i].allocate(512,glow_res, GL_RGBA,FALSE,FALSE);
 		}
 
 		allocateScreenBuffer(resX,resY);
@@ -1264,13 +1304,18 @@ void LLPipeline::createGLBuffers()
 	gBumpImageList.restoreGL();
 }
 
+F32 lerpf(F32 a, F32 b, F32 w)
+{
+	return a + w * (b - a);
+}
+
 void LLPipeline::createLUTBuffers()
 {
 	if (sRenderDeferred)
 	{
 		if (!mLightFunc)
 		{
-			U32 lightResX = gSavedSettings.getU32("RenderSpecularResX");
+			/*U32 lightResX = gSavedSettings.getU32("RenderSpecularResX");
 			U32 lightResY = gSavedSettings.getU32("RenderSpecularResY");
 			U8* ls = new U8[lightResX*lightResY];
 			F32 specExp = gSavedSettings.getF32("RenderSpecularExponent");
@@ -1306,13 +1351,62 @@ void LLPipeline::createLUTBuffers()
 					// Combined with a bit of noise and trilinear filtering, the banding is hardly noticable.
 					ls[y*lightResX+x] = (U8)(llclamp(spec * (1.f / 6), 0.f, 1.f) * 255);
 				}
+			}*/
+		
+
+			U32 lightResX = gSavedSettings.getU32("RenderSpecularResX");
+			U32 lightResY = gSavedSettings.getU32("RenderSpecularResY");
+			F32* ls = new F32[lightResX*lightResY];
+			//F32 specExp = gSavedSettings.getF32("RenderSpecularExponent"); // Note: only use this when creating new specular lighting functions.
+            // Calculate the (normalized) blinn-phong specular lookup texture. (with a few tweaks)
+			for (U32 y = 0; y < lightResY; ++y)
+			{
+				for (U32 x = 0; x < lightResX; ++x)
+				{
+					ls[y*lightResX+x] = 0;
+					F32 sa = (F32) x/(lightResX-1);
+					F32 spec = (F32) y/(lightResY-1);
+					F32 n = spec * spec * 368;
+					
+					// Nothing special here.  Just your typical blinn-phong term.
+					spec = powf(sa, n);
+					
+					// Apply our normalization function.
+					// Note: This is the full equation that applies the full normalization curve, not an approximation.
+					// This is fine, given we only need to create our LUT once per buffer initialization.
+					spec *= (((n + 2) * (n + 4)) / (8 * F_PI * (powf(2, -n/2) + n)));
+
+					// Since we use R16F, we no longer have a dynamic range issue we need to work around here.
+					// Though some older drivers may not like this, newer drivers shouldn't have this problem.
+					ls[y*lightResX+x] = spec;
+
+					
+					//beckmann distribution
+					/*F32 alpha = acosf((F32) x/(lightResX-1));
+					F32 m = 1.f - (F32) y/(lightResY-1);
+
+					F32 cos4_alpha = cosf(alpha);
+					cos4_alpha *= cos4_alpha;
+					cos4_alpha *= cos4_alpha;
+
+					F32 tan_alpha = tanf(alpha);
+					F32 tan2_alpha = tan_alpha*tan_alpha;
+
+					F32 k = expf(-(tan2_alpha)/(m*m)) /
+						(3.14159f*m*m*cos4_alpha);
+
+					ls[y*lightResX+x] = k;*/
+				}
 			}
 			
-			LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_R8, 1, &mLightFunc);
+			LLImageGL::generateTextures(LLTexUnit::TT_TEXTURE, GL_R16F, 1, &mLightFunc);
 			gGL.getTexUnit(0)->bindManual(LLTexUnit::TT_TEXTURE, mLightFunc);
-			LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R8, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls, false);
+			LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_R16F, lightResX, lightResY, GL_RED, GL_FLOAT, ls, false);
+			//LLImageGL::setManualImage(LLTexUnit::getInternalType(LLTexUnit::TT_TEXTURE), 0, GL_UNSIGNED_BYTE, lightResX, lightResY, GL_RED, GL_UNSIGNED_BYTE, ls, false);
 			gGL.getTexUnit(0)->setTextureAddressMode(LLTexUnit::TAM_CLAMP);
 			gGL.getTexUnit(0)->setTextureFilteringOption(LLTexUnit::TFO_TRILINEAR);
+			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+			glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
 			
 			delete [] ls;
 		}
@@ -1516,6 +1610,14 @@ LLDrawPool *LLPipeline::findPool(const U32 type, LLViewerTexture *tex0)
 		poolp = mGrassPool;
 		break;
 
+	case LLDrawPool::POOL_ALPHA_MASK:
+		poolp = mAlphaMaskPool;
+		break;
+
+	case LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK:
+		poolp = mFullbrightAlphaMaskPool;
+		break;
+
 	case LLDrawPool::POOL_FULLBRIGHT:
 		poolp = mFullbrightPool;
 		break;
@@ -1539,7 +1641,9 @@ LLDrawPool *LLPipeline::findPool(const U32 type, LLViewerTexture *tex0)
 	case LLDrawPool::POOL_BUMP:
 		poolp = mBumpPool;
 		break;
-
+	case LLDrawPool::POOL_MATERIALS:
+		poolp = mMaterialsPool;
+		break;
 	case LLDrawPool::POOL_ALPHA:
 		poolp = mAlphaPool;
 		break;
@@ -1603,20 +1707,44 @@ U32 LLPipeline::getPoolTypeFromTE(const LLTextureEntry* te, LLViewerTexture* ima
 		return 0;
 	}
 		
-	bool alpha = te->getColor().mV[3] < 0.999f;
+	LLMaterial* mat = te->getMaterialParams().get();
+
+	bool color_alpha = te->getColor().mV[3] < 0.999f;
+	bool alpha = color_alpha;
 	if (imagep)
 	{
 		alpha = alpha || (imagep->getComponents() == 4 && imagep->getType() != LLViewerTexture::MEDIA_TEXTURE) || (imagep->getComponents() == 2);
 	}
-
+	
+	if (alpha && mat)
+	{
+		switch (mat->getDiffuseAlphaMode())
+		{
+			case 1:
+				alpha = true; // Material's alpha mode is set to blend.  Toss it into the alpha draw pool.
+				break;
+			case 0: //alpha mode set to none, never go to alpha pool
+			case 3: //alpha mode set to emissive, never go to alpha pool
+				alpha = color_alpha;
+				break;
+			default: //alpha mode set to "mask", go to alpha pool if fullbright
+				alpha = color_alpha; // Material's alpha mode is set to none, mask, or emissive.  Toss it into the opaque material draw pool.
+				break;
+		}
+	}
+	
 	if (alpha)
 	{
 		return LLDrawPool::POOL_ALPHA;
 	}
-	else if ((te->getBumpmap() || te->getShiny()))
+	else if ((te->getBumpmap() || te->getShiny()) && (!mat || mat->getNormalID().isNull()))
 	{
 		return LLDrawPool::POOL_BUMP;
 	}
+	else if (mat && !alpha)
+	{
+		return LLDrawPool::POOL_MATERIALS;
+	}
 	else
 	{
 		return LLDrawPool::POOL_SIMPLE;
@@ -2312,7 +2440,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
 
 	if (to_texture)
 	{
-		mScreen.bindTarget();
+		if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+		{
+			mOcclusionDepth.bindTarget();
+		}
+		else
+		{
+			mScreen.bindTarget();
+		}
 	}
 
 	if (sUseOcclusion > 1)
@@ -2450,7 +2585,14 @@ void LLPipeline::updateCull(LLCamera& camera, LLCullResult& result, S32 water_cl
 
 	if (to_texture)
 	{
-		mScreen.flush();
+		if (LLPipeline::sRenderDeferred && !LLPipeline::sUnderWaterRender)
+		{
+			mOcclusionDepth.flush();
+		}
+		else
+		{
+			mScreen.flush();
+		}
 	}
 }
 
@@ -2518,6 +2660,73 @@ void LLPipeline::markOccluder(LLSpatialGroup* group)
 	}
 }
 
+void LLPipeline::downsampleDepthBuffer(LLRenderTarget& source, LLRenderTarget& dest, LLRenderTarget* scratch_space)
+{
+	LLGLSLShader* last_shader = LLGLSLShader::sCurBoundShaderPtr;
+
+	LLGLSLShader* shader = NULL;
+
+	if (scratch_space)
+	{
+		scratch_space->copyContents(source, 
+									0, 0, source.getWidth(), source.getHeight(), 
+									0, 0, scratch_space->getWidth(), scratch_space->getHeight(), GL_DEPTH_BUFFER_BIT, GL_NEAREST);
+	}
+
+	dest.bindTarget();
+	dest.clear(GL_DEPTH_BUFFER_BIT);
+
+	LLStrider<LLVector3> vert; 
+	mDeferredVB->getVertexStrider(vert);
+	LLStrider<LLVector2> tc0;
+		
+	vert[0].set(-1,1,0);
+	vert[1].set(-1,-3,0);
+	vert[2].set(3,1,0);
+	
+	if (source.getUsage() == LLTexUnit::TT_RECT_TEXTURE)
+	{
+		shader = &gDownsampleDepthRectProgram;
+		shader->bind();
+		shader->uniform2f("delta", 1.f, 1.f);
+		shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, source.getWidth(), source.getHeight());
+	}
+	else
+	{
+		shader = &gDownsampleDepthProgram;
+		shader->bind();
+		shader->uniform2f("delta", 1.f/source.getWidth(), 1.f/source.getHeight());
+		shader->uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, 1.f, 1.f);
+	}
+
+	gGL.getTexUnit(0)->bind(scratch_space ? scratch_space : &source, TRUE);
+
+	{
+		LLGLDepthTest depth(GL_TRUE, GL_TRUE, GL_ALWAYS);
+		mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+		mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
+	}
+	
+	dest.flush();
+	
+	if (last_shader)
+	{
+		last_shader->bind();
+	}
+	else
+	{
+		shader->unbind();
+	}
+}
+
+void LLPipeline::doOcclusion(LLCamera& camera, LLRenderTarget& source, LLRenderTarget& dest, LLRenderTarget* scratch_space)
+{
+	downsampleDepthBuffer(source, dest, scratch_space);
+	dest.bindTarget();
+	doOcclusion(camera);
+	dest.flush();
+}
+
 void LLPipeline::doOcclusion(LLCamera& camera)
 {
 	if (LLPipeline::sUseOcclusion > 1 && sCull->hasOcclusionGroups())
@@ -3306,11 +3515,6 @@ void LLPipeline::stateSort(LLDrawable* drawablep, LLCamera& camera)
 		{
 			drawablep->setVisible(camera, NULL, FALSE);
 		}
-		else if (drawablep->isState(LLDrawable::CLEAR_INVISIBLE))
-		{
-			// clear invisible flag here to avoid single frame glitch
-			drawablep->clearState(LLDrawable::FORCE_INVISIBLE|LLDrawable::CLEAR_INVISIBLE);
-		}
 	}
 
 	if (LLViewerCamera::sCurCameraID == LLViewerCamera::CAMERA_WORLD)
@@ -3584,8 +3788,8 @@ void LLPipeline::postSort(LLCamera& camera)
 	for (LLCullResult::sg_iterator i = sCull->beginVisibleGroups(); i != sCull->endVisibleGroups(); ++i)
 	{
 		LLSpatialGroup* group = *i;
-		if (sUseOcclusion && 
-			group->isOcclusionState(LLSpatialGroup::OCCLUDED) ||
+		if ((sUseOcclusion && 
+			group->isOcclusionState(LLSpatialGroup::OCCLUDED)) ||
 			(RenderAutoHideSurfaceAreaLimit > 0.f && 
 			group->mSurfaceArea > RenderAutoHideSurfaceAreaLimit*llmax(group->mObjectBoxSize, 10.f)))
 		{
@@ -3751,7 +3955,9 @@ void LLPipeline::postSort(LLCamera& camera)
 	if (!sShadowRender)
 	{
 		mSelectedFaces.clear();
-		
+
+		LLPipeline::setRenderHighlightTextureChannel(LLSelectMgr::getInstance()->getTextureChannel());
+
 		// Draw face highlights for selected faces.
 		if (LLSelectMgr::getInstance()->getTEMode())
 		{
@@ -3974,13 +4180,14 @@ void LLPipeline::renderHighlights()
 		gGL.diffuseColor4f(1,1,1,0.5f);
 	}
 	
-	if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED))
+	if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && !mFaceSelectImagep)
+	{
+		mFaceSelectImagep = LLViewerTextureManager::getFetchedTexture(IMG_FACE_SELECT);
+	}
+
+	if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && (sRenderHighlightTextureChannel == LLRender::DIFFUSE_MAP))
 	{
 		// Make sure the selection image gets downloaded and decoded
-		if (!mFaceSelectImagep)
-		{
-			mFaceSelectImagep = LLViewerTextureManager::getFetchedTexture(IMG_FACE_SELECT);
-		}
 		mFaceSelectImagep->addTextureStats((F32)MAX_IMAGE_AREA);
 
 		U32 count = mSelectedFaces.size();
@@ -3996,7 +4203,7 @@ void LLPipeline::renderHighlights()
 			facep->renderSelected(mFaceSelectImagep, color);
 		}
 	}
-
+	
 	if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED))
 	{
 		// Paint 'em red!
@@ -4018,6 +4225,67 @@ void LLPipeline::renderHighlights()
 	{
 		gHighlightProgram.unbind();
 	}
+
+
+	if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && (sRenderHighlightTextureChannel == LLRender::NORMAL_MAP))
+	{
+		color.setVec(1.0f, 0.5f, 0.5f, 0.5f);
+		if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
+		{
+			gHighlightNormalProgram.bind();
+			gGL.diffuseColor4f(1,1,1,0.5f);
+		}
+
+		mFaceSelectImagep->addTextureStats((F32)MAX_IMAGE_AREA);
+
+		U32 count = mSelectedFaces.size();
+		for (U32 i = 0; i < count; i++)
+		{
+			LLFace *facep = mSelectedFaces[i];
+			if (!facep || facep->getDrawable()->isDead())
+			{
+				llerrs << "Bad face on selection" << llendl;
+				return;
+			}
+
+			facep->renderSelected(mFaceSelectImagep, color);
+		}
+
+		if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
+		{
+			gHighlightNormalProgram.unbind();
+		}
+	}
+
+	if (hasRenderDebugFeatureMask(RENDER_DEBUG_FEATURE_SELECTED) && (sRenderHighlightTextureChannel == LLRender::SPECULAR_MAP))
+	{
+		color.setVec(0.0f, 0.3f, 1.0f, 0.8f);
+		if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
+		{
+			gHighlightSpecularProgram.bind();
+			gGL.diffuseColor4f(1,1,1,0.5f);
+		}
+
+		mFaceSelectImagep->addTextureStats((F32)MAX_IMAGE_AREA);
+
+		U32 count = mSelectedFaces.size();
+		for (U32 i = 0; i < count; i++)
+		{
+			LLFace *facep = mSelectedFaces[i];
+			if (!facep || facep->getDrawable()->isDead())
+			{
+				llerrs << "Bad face on selection" << llendl;
+				return;
+			}
+
+			facep->renderSelected(mFaceSelectImagep, color);
+		}
+
+		if ((LLViewerShaderMgr::instance()->getVertexShaderLevel(LLViewerShaderMgr::SHADER_INTERFACE) > 0))
+		{
+			gHighlightSpecularProgram.unbind();
+		}
+	}
 }
 
 //debug use
@@ -4371,7 +4639,7 @@ void LLPipeline::renderGeomDeferred(LLCamera& camera)
 	gGL.setColorMask(true, false);
 }
 
-void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
+void LLPipeline::renderGeomPostDeferred(LLCamera& camera, bool do_occlusion)
 {
 	LLFastTimer t(FTM_POST_DEFERRED_POOLS);
 	U32 cur_type = 0;
@@ -4386,7 +4654,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
 	gGL.setColorMask(true, false);
 
 	pool_set_t::iterator iter1 = mPools.begin();
-	BOOL occlude = LLPipeline::sUseOcclusion > 1;
+	BOOL occlude = LLPipeline::sUseOcclusion > 1 && do_occlusion;
 
 	while ( iter1 != mPools.end() )
 	{
@@ -4400,7 +4668,7 @@ void LLPipeline::renderGeomPostDeferred(LLCamera& camera)
 			gGLLastMatrix = NULL;
 			gGL.loadMatrix(gGLModelView);
 			LLGLSLShader::bindNoShader();
-			doOcclusion(camera);
+			doOcclusion(camera, mScreen, mOcclusionDepth, &mDeferredDepth);
 			gGL.setColorMask(true, false);
 		}
 
@@ -4618,6 +4886,7 @@ void LLPipeline::renderPhysicsDisplay()
 	mPhysicsDisplay.flush();
 }
 
+extern std::set<LLSpatialGroup*> visible_selected_groups;
 
 void LLPipeline::renderDebug()
 {
@@ -5007,8 +5276,8 @@ void LLPipeline::renderDebug()
 			LLSpatialPartition* part = region->getSpatialPartition(i);
 			if (part)
 			{
-				if ( hud_only && (part->mDrawableType == RENDER_TYPE_HUD || part->mDrawableType == RENDER_TYPE_HUD_PARTICLES) ||
-					 !hud_only && hasRenderType(part->mDrawableType) )
+				if ( (hud_only && (part->mDrawableType == RENDER_TYPE_HUD || part->mDrawableType == RENDER_TYPE_HUD_PARTICLES)) ||
+					 (!hud_only && hasRenderType(part->mDrawableType)) )
 				{
 					part->renderDebug();
 				}
@@ -5028,6 +5297,27 @@ void LLPipeline::renderDebug()
 		}
 	}
 
+	if (gPipeline.hasRenderDebugMask(LLPipeline::RENDER_DEBUG_OCCLUSION) && LLGLSLShader::sNoFixedFunction)
+	{ //render visible selected group occlusion geometry
+		gDebugProgram.bind();
+		LLGLDepthTest depth(GL_TRUE, GL_FALSE);
+		gGL.diffuseColor3f(1,0,1);
+		for (std::set<LLSpatialGroup*>::iterator iter = visible_selected_groups.begin(); iter != visible_selected_groups.end(); ++iter)
+		{
+			LLSpatialGroup* group = *iter;
+
+			LLVector4a fudge;
+			fudge.splat(0.25f); //SG_OCCLUSION_FUDGE
+
+			LLVector4a size;
+			size.setAdd(fudge, group->mBounds[1]);
+
+			drawBox(group->mBounds[0], size);
+		}
+	}
+
+	visible_selected_groups.clear();
+
 	if (LLGLSLShader::sNoFixedFunction)
 	{
 		gUIProgram.bind();
@@ -5323,6 +5613,32 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )
 		}
 		break;
 
+	case LLDrawPool::POOL_ALPHA_MASK:
+		if (mAlphaMaskPool)
+		{
+			llassert(0);
+			llwarns << "Ignoring duplicate alpha mask pool." << llendl;
+			break;
+		}
+		else
+		{
+			mAlphaMaskPool = (LLRenderPass*) new_poolp;
+		}
+		break;
+
+	case LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK:
+		if (mFullbrightAlphaMaskPool)
+		{
+			llassert(0);
+			llwarns << "Ignoring duplicate alpha mask pool." << llendl;
+			break;
+		}
+		else
+		{
+			mFullbrightAlphaMaskPool = (LLRenderPass*) new_poolp;
+		}
+		break;
+		
 	case LLDrawPool::POOL_GRASS:
 		if (mGrassPool)
 		{
@@ -5390,7 +5706,17 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )
 			mBumpPool = new_poolp;
 		}
 		break;
-
+	case LLDrawPool::POOL_MATERIALS:
+		if (mMaterialsPool)
+		{
+			llassert(0);
+			llwarns << "Ignorning duplicate materials pool." << llendl;
+		}
+		else
+		{
+			mMaterialsPool = new_poolp;
+		}
+		break;
 	case LLDrawPool::POOL_ALPHA:
 		if( mAlphaPool )
 		{
@@ -5399,7 +5725,7 @@ void LLPipeline::addToQuickLookup( LLDrawPool* new_poolp )
 		}
 		else
 		{
-			mAlphaPool = new_poolp;
+			mAlphaPool = (LLDrawPoolAlpha*) new_poolp;
 		}
 		break;
 
@@ -5479,6 +5805,16 @@ void LLPipeline::removeFromQuickLookup( LLDrawPool* poolp )
 		mSimplePool = NULL;
 		break;
 
+	case LLDrawPool::POOL_ALPHA_MASK:
+		llassert(mAlphaMaskPool == poolp);
+		mAlphaMaskPool = NULL;
+		break;
+
+	case LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK:
+		llassert(mFullbrightAlphaMaskPool == poolp);
+		mFullbrightAlphaMaskPool = NULL;
+		break;
+
 	case LLDrawPool::POOL_GRASS:
 		llassert(mGrassPool == poolp);
 		mGrassPool = NULL;
@@ -5530,7 +5866,12 @@ void LLPipeline::removeFromQuickLookup( LLDrawPool* poolp )
 		llassert( poolp == mBumpPool );
 		mBumpPool = NULL;
 		break;
-	
+			
+	case LLDrawPool::POOL_MATERIALS:
+		llassert(poolp == mMaterialsPool);
+		mMaterialsPool = NULL;
+		break;
+			
 	case LLDrawPool::POOL_ALPHA:
 		llassert( poolp == mAlphaPool );
 		mAlphaPool = NULL;
@@ -5593,8 +5934,15 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
 
 		LLLightState* light = gGL.getLight(1);
 
-		mHWLightColors[1] = diffuse;
+		if (LLPipeline::sRenderDeferred)
+		{
+			/*diffuse.mV[0] = powf(diffuse.mV[0], 2.2f);
+			diffuse.mV[1] = powf(diffuse.mV[1], 2.2f);
+			diffuse.mV[2] = powf(diffuse.mV[2], 2.2f);*/
+		}
 
+		mHWLightColors[1] = diffuse;
+				
 		light->setDiffuse(diffuse);
 		light->setAmbient(LLColor4::black);
 		light->setSpecular(LLColor4::black);
@@ -5633,6 +5981,13 @@ void LLPipeline::setupAvatarLights(BOOL for_edit)
 		}
 		backlight_diffuse *= backlight_mag / max_component;
 
+		if (LLPipeline::sRenderDeferred)
+		{
+			/*backlight_diffuse.mV[0] = powf(backlight_diffuse.mV[0], 2.2f);
+			backlight_diffuse.mV[1] = powf(backlight_diffuse.mV[1], 2.2f);
+			backlight_diffuse.mV[2] = powf(backlight_diffuse.mV[2], 2.2f);*/
+		}
+
 		mHWLightColors[1] = backlight_diffuse;
 
 		LLLightState* light = gGL.getLight(1);
@@ -5839,6 +6194,14 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 
 		LLVector4 light_pos(mSunDir, 0.0f);
 		LLColor4 light_diffuse = mSunDiffuse;
+
+		if (LLPipeline::sRenderDeferred)
+		{
+			/*light_diffuse.mV[0] = powf(light_diffuse.mV[0], 2.2f);
+			light_diffuse.mV[1] = powf(light_diffuse.mV[1], 2.2f);
+			light_diffuse.mV[2] = powf(light_diffuse.mV[2], 2.2f);*/
+		}
+
 		mHWLightColors[0] = light_diffuse;
 
 		LLLightState* light = gGL.getLight(0);
@@ -5907,6 +6270,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 			F32 x = (3.f * (1.f + light->getLightFalloff())); // why this magic?  probably trying to match a historic behavior.
 			float linatten = x / (light_radius); // % of brightness at radius
 
+			if (LLPipeline::sRenderDeferred)
+			{
+				/*light_color.mV[0] = powf(light_color.mV[0], 2.2f);
+				light_color.mV[1] = powf(light_color.mV[1], 2.2f);
+				light_color.mV[2] = powf(light_color.mV[2], 2.2f);*/
+			}
+
 			mHWLightColors[cur_light] = light_color;
 			LLLightState* light_state = gGL.getLight(cur_light);
 			
@@ -5917,7 +6287,7 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 			if (sRenderDeferred)
 			{
 				F32 size = light_radius*1.5f;
-				light_state->setLinearAttenuation(size*size);
+				light_state->setLinearAttenuation(size);
 				light_state->setQuadraticAttenuation(light->getLightFalloff()*0.5f+1.f);
 			}
 			else
@@ -5980,6 +6350,13 @@ void LLPipeline::setupHWLights(LLDrawPool* pool)
 			F32 x = 3.f;
 		float linatten = x / (light_radius); // % of brightness at radius
 
+		if (LLPipeline::sRenderDeferred)
+		{
+			/*light_color.mV[0] = powf(light_color.mV[0], 2.2f);
+			light_color.mV[1] = powf(light_color.mV[1], 2.2f);
+			light_color.mV[2] = powf(light_color.mV[2], 2.2f);*/
+		}
+
 		mHWLightColors[2] = light_color;
 		LLLightState* light = gGL.getLight(2);
 
@@ -6620,20 +6997,26 @@ BOOL LLPipeline::getRenderHighlights(void*)
 	return sRenderHighlight;
 }
 
-LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start, const LLVector3& end,
+// static
+void LLPipeline::setRenderHighlightTextureChannel(LLRender::eTexIndex channel)
+{
+	sRenderHighlightTextureChannel = channel;
+}
+
+LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector4a& start, const LLVector4a& end,
 														BOOL pick_transparent,												
 														S32* face_hit,
-														LLVector3* intersection,         // return the intersection point
+														LLVector4a* intersection,         // return the intersection point
 														LLVector2* tex_coord,            // return the texture coordinates of the intersection point
-														LLVector3* normal,               // return the surface normal at the intersection point
-														LLVector3* bi_normal             // return the surface bi-normal at the intersection point
+														LLVector4a* normal,               // return the surface normal at the intersection point
+														LLVector4a* tangent             // return the surface tangent at the intersection point
 	)
 {
 	LLDrawable* drawable = NULL;
 
-	LLVector3 local_end = end;
+	LLVector4a local_end = end;
 
-	LLVector3 position;
+	LLVector4a position;
 
 	sPickAvatar = FALSE; //LLToolMgr::getInstance()->inBuildMode() ? FALSE : TRUE;
 	
@@ -6653,7 +7036,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 				LLSpatialPartition* part = region->getSpatialPartition(j);
 				if (part && hasRenderType(part->mDrawableType))
 				{
-					LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, bi_normal);
+					LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, tangent);
 					if (hit)
 					{
 						drawable = hit;
@@ -6668,8 +7051,8 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 	{
 		//save hit info in case we need to restore
 		//due to attachment override
-		LLVector3 local_normal;
-		LLVector3 local_binormal;
+		LLVector4a local_normal;
+		LLVector4a local_tangent;
 		LLVector2 local_texcoord;
 		S32 local_face_hit = -1;
 
@@ -6681,14 +7064,22 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 		{
 			local_texcoord = *tex_coord;
 		}
-		if (bi_normal)
+		if (tangent)
+		{
+			local_tangent = *tangent;
+		}
+		else
 		{
-			local_binormal = *bi_normal;
+			local_tangent.clear();
 		}
 		if (normal)
 		{
 			local_normal = *normal;
 		}
+		else
+		{
+			local_normal.clear();
+		}
 				
 		const F32 ATTACHMENT_OVERRIDE_DIST = 0.1f;
 
@@ -6702,12 +7093,15 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 			LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_BRIDGE);
 			if (part && hasRenderType(part->mDrawableType))
 			{
-				LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, bi_normal);
+				LLDrawable* hit = part->lineSegmentIntersect(start, local_end, pick_transparent, face_hit, &position, tex_coord, normal, tangent);
 				if (hit)
 				{
+					LLVector4a delta;
+					delta.setSub(position, local_end);
+
 					if (!drawable || 
 						!drawable->getVObj()->isAttachment() ||
-						(position-local_end).magVec() > ATTACHMENT_OVERRIDE_DIST)
+						delta.getLength3().getF32() > ATTACHMENT_OVERRIDE_DIST)
 					{ //avatar overrides if previously hit drawable is not an attachment or 
 					  //attachment is far enough away from detected intersection
 						drawable = hit;
@@ -6725,9 +7119,9 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 						{
 							*tex_coord = local_texcoord;
 						}
-						if (bi_normal)
+						if (tangent)
 						{
-							*bi_normal = local_binormal;
+							*tangent = local_tangent;
 						}
 						if (normal)
 						{
@@ -6761,13 +7155,13 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInWorld(const LLVector3& start,
 	return drawable ? drawable->getVObj().get() : NULL;
 }
 
-LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector3& start, const LLVector3& end,
+LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector4a& start, const LLVector4a& end,
 													  BOOL pick_transparent,													
 													  S32* face_hit,
-													  LLVector3* intersection,         // return the intersection point
+													  LLVector4a* intersection,         // return the intersection point
 													  LLVector2* tex_coord,            // return the texture coordinates of the intersection point
-													  LLVector3* normal,               // return the surface normal at the intersection point
-													  LLVector3* bi_normal             // return the surface bi-normal at the intersection point
+													  LLVector4a* normal,               // return the surface normal at the intersection point
+													  LLVector4a* tangent				// return the surface tangent at the intersection point
 	)
 {
 	LLDrawable* drawable = NULL;
@@ -6787,7 +7181,7 @@ LLViewerObject* LLPipeline::lineSegmentIntersectInHUD(const LLVector3& start, co
 		LLSpatialPartition* part = region->getSpatialPartition(LLViewerRegion::PARTITION_HUD);
 		if (part)
 		{
-			LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, face_hit, intersection, tex_coord, normal, bi_normal);
+			LLDrawable* hit = part->lineSegmentIntersect(start, end, pick_transparent, face_hit, intersection, tex_coord, normal, tangent);
 			if (hit)
 			{
 				drawable = hit;
@@ -6891,7 +7285,9 @@ void LLPipeline::doResetVertexBuffers()
 
 	LLVertexBuffer::unbind();	
 	
-	sRenderBump = gSavedSettings.getBOOL("RenderObjectBump");
+	updateRenderBump();
+	updateRenderDeferred();
+
 	sUseTriStrips = gSavedSettings.getBOOL("RenderUseTriStrips");
 	LLVertexBuffer::sUseStreamDraw = gSavedSettings.getBOOL("RenderUseStreamVBO");
 	LLVertexBuffer::sUseVAO = gSavedSettings.getBOOL("RenderUseVAO");
@@ -6917,6 +7313,17 @@ void LLPipeline::renderObjects(U32 type, U32 mask, BOOL texture, BOOL batch_text
 	gGLLastMatrix = NULL;		
 }
 
+void LLPipeline::renderMaskedObjects(U32 type, U32 mask, BOOL texture, BOOL batch_texture)
+{
+	assertInitialized();
+	gGL.loadMatrix(gGLModelView);
+	gGLLastMatrix = NULL;
+	mAlphaMaskPool->pushMaskBatches(type, mask, texture, batch_texture);
+	gGL.loadMatrix(gGLModelView);
+	gGLLastMatrix = NULL;		
+}
+
+
 void apply_cube_face_rotation(U32 face)
 {
 	switch (face)
@@ -7018,10 +7425,10 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 	gGL.loadIdentity();
 
 	LLGLDisable test(GL_ALPHA_TEST);
-
+	
 	gGL.setColorMask(true, true);
 	glClearColor(0,0,0,0);
-		
+	
 	{
 		{
 			LLFastTimer ftm(FTM_RENDER_BLOOM_FBO);
@@ -7193,13 +7600,18 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 			{
 				if (LLViewerJoystick::getInstance()->getOverrideCamera())
 				{ //focus on point under cursor
-					focus_point = gDebugRaycastIntersection;
+					focus_point.set(gDebugRaycastIntersection.getF32ptr());
 				}
 				else if (gAgentCamera.cameraMouselook())
 				{ //focus on point under mouselook crosshairs
+					LLVector4a result;
+					result.clear();
+
 					gViewerWindow->cursorIntersect(-1, -1, 512.f, NULL, -1, FALSE,
 													NULL,
-													&focus_point);
+													&result);
+
+					focus_point.set(result.getF32ptr());
 				}
 				else
 				{
@@ -7359,6 +7771,13 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 					mScreen.bindTexture(0, channel);
 					gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_BILINEAR);
 				}
+				
+				if (!LLViewerCamera::getInstance()->cameraUnderWater())
+				{
+					shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 2.2);
+				} else {
+					shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 1.0);
+				}
 
 				shader->uniform1f(LLShaderMgr::DOF_MAX_COF, CameraMaxCoF);
 				shader->uniform1f(LLShaderMgr::DOF_RES_SCALE, CameraDoFResScale);
@@ -7400,6 +7819,13 @@ void LLPipeline::renderBloom(BOOL for_snapshot, F32 zoom_factor, int subfield)
 			{
 				mScreen.bindTexture(0, channel);
 			}
+			
+			if (!LLViewerCamera::getInstance()->cameraUnderWater())
+			{
+				shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 2.2);
+			} else {
+				shader->uniform1f(LLShaderMgr::GLOBAL_GAMMA, 1.0);
+			}
 
 			gGL.begin(LLRender::TRIANGLE_STRIP);
 			gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
@@ -7820,6 +8246,22 @@ void LLPipeline::bindDeferredShader(LLGLSLShader& shader, U32 light_index, U32 n
 	}
 }
 
+LLColor3 pow3f(LLColor3 v, F32 f)
+{
+	v.mV[0] = powf(v.mV[0], f);
+	v.mV[1] = powf(v.mV[1], f);
+	v.mV[2] = powf(v.mV[2], f);
+	return v;
+}
+
+LLVector4 pow4fsrgb(LLVector4 v, F32 f)
+{
+	v.mV[0] = powf(v.mV[0], f);
+	v.mV[1] = powf(v.mV[1], f);
+	v.mV[2] = powf(v.mV[2], f);
+	return v;
+}
+
 static LLFastTimer::DeclareTimer FTM_GI_TRACE("Trace");
 static LLFastTimer::DeclareTimer FTM_GI_GATHER("Gather");
 static LLFastTimer::DeclareTimer FTM_SUN_SHADOW("Shadow Map");
@@ -7873,11 +8315,7 @@ void LLPipeline::renderDeferredLighting()
 
 		LLStrider<LLVector3> vert; 
 		mDeferredVB->getVertexStrider(vert);
-		LLStrider<LLVector2> tc0;
-		LLStrider<LLVector2> tc1;
-		mDeferredVB->getTexCoord0Strider(tc0);
-		mDeferredVB->getTexCoord1Strider(tc1);
-
+		
 		vert[0].set(-1,1,0);
 		vert[1].set(-1,-3,0);
 		vert[2].set(3,1,0);
@@ -8058,7 +8496,7 @@ void LLPipeline::renderDeferredLighting()
 										LLPipeline::END_RENDER_TYPES);
 								
 			
-			renderGeomPostDeferred(*LLViewerCamera::getInstance());
+			renderGeomPostDeferred(*LLViewerCamera::getInstance(), false);
 			gPipeline.popRenderTypeMask();
 		}
 
@@ -8152,9 +8590,13 @@ void LLPipeline::renderDeferredLighting()
 								continue;
 							}
 							
+							/*col.mV[0] = powf(col.mV[0], 2.2f);
+							col.mV[1] = powf(col.mV[1], 2.2f);
+							col.mV[2] = powf(col.mV[2], 2.2f);*/
+							
 							LLFastTimer ftm(FTM_LOCAL_LIGHTS);
 							gDeferredLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
-							gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
+							gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
 							gDeferredLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
 							gDeferredLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
 							gGL.syncMatrices();
@@ -8175,7 +8617,7 @@ void LLPipeline::renderDeferredLighting()
 						glh::vec3f tc(c);
 						mat.mult_matrix_vec(tc);
 					
-						fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s*s));
+						fullscreen_lights.push_back(LLVector4(tc.v[0], tc.v[1], tc.v[2], s));
 						light_colors.push_back(LLVector4(col.mV[0], col.mV[1], col.mV[2], volume->getLightFalloff()*0.5f));
 					}
 				}
@@ -8208,9 +8650,12 @@ void LLPipeline::renderDeferredLighting()
 					setupSpotLight(gDeferredSpotLightProgram, drawablep);
 					
 					LLColor3 col = volume->getLightColor();
+					/*col.mV[0] = powf(col.mV[0], 2.2f);
+					col.mV[1] = powf(col.mV[1], 2.2f);
+					col.mV[2] = powf(col.mV[2], 2.2f);*/
 					
 					gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, c);
-					gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
+					gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
 					gDeferredSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
 					gDeferredSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
 					gGL.syncMatrices();
@@ -8256,9 +8701,13 @@ void LLPipeline::renderDeferredLighting()
 					fullscreen_lights.pop_front();
 					col[count] = light_colors.front();
 					light_colors.pop_front();
-
-					far_z = llmin(light[count].mV[2]-sqrtf(light[count].mV[3]), far_z);
-
+					
+					/*col[count].mV[0] = powf(col[count].mV[0], 2.2f);
+					col[count].mV[1] = powf(col[count].mV[1], 2.2f);
+					col[count].mV[2] = powf(col[count].mV[2], 2.2f);*/
+					
+					far_z = llmin(light[count].mV[2]-light[count].mV[3], far_z);
+					//col[count] = pow4fsrgb(col[count], 2.2f);
 					count++;
 					if (count == max_count || fullscreen_lights.empty())
 					{
@@ -8300,8 +8749,12 @@ void LLPipeline::renderDeferredLighting()
 
 					LLColor3 col = volume->getLightColor();
 					
+					/*col.mV[0] = powf(col.mV[0], 2.2f);
+					col.mV[1] = powf(col.mV[1], 2.2f);
+					col.mV[2] = powf(col.mV[2], 2.2f);*/
+					
 					gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::LIGHT_CENTER, 1, tc.v);
-					gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s*s);
+					gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_SIZE, s);
 					gDeferredMultiSpotLightProgram.uniform3fv(LLShaderMgr::DIFFUSE_COLOR, 1, col.mV);
 					gDeferredMultiSpotLightProgram.uniform1f(LLShaderMgr::LIGHT_FALLOFF, volume->getLightFalloff()*0.5f);
 					mDeferredVB->drawArrays(LLRender::TRIANGLES, 0, 3);
@@ -8319,6 +8772,65 @@ void LLPipeline::renderDeferredLighting()
 		gGL.setColorMask(true, true);
 	}
 
+	mScreen.flush();
+
+	//gamma correct lighting
+	gGL.matrixMode(LLRender::MM_PROJECTION);
+	gGL.pushMatrix();
+	gGL.loadIdentity();
+	gGL.matrixMode(LLRender::MM_MODELVIEW);
+	gGL.pushMatrix();
+	gGL.loadIdentity();
+
+	{
+		LLGLDepthTest depth(GL_FALSE, GL_FALSE);
+
+		LLVector2 tc1(0,0);
+		LLVector2 tc2((F32) mScreen.getWidth()*2,
+				  (F32) mScreen.getHeight()*2);
+
+		mScreen.bindTarget();
+		// Apply gamma correction to the frame here.
+		gDeferredPostGammaCorrectProgram.bind();
+		//mDeferredVB->setBuffer(LLVertexBuffer::MAP_VERTEX);
+		S32 channel = 0;
+		channel = gDeferredPostGammaCorrectProgram.enableTexture(LLShaderMgr::DEFERRED_DIFFUSE, mScreen.getUsage());
+		if (channel > -1)
+		{
+			mScreen.bindTexture(0,channel);
+			gGL.getTexUnit(channel)->setTextureFilteringOption(LLTexUnit::TFO_POINT);
+		}
+		
+		gDeferredPostGammaCorrectProgram.uniform2f(LLShaderMgr::DEFERRED_SCREEN_RES, mScreen.getWidth(), mScreen.getHeight());
+		
+		F32 gamma = 1.0/2.2;
+
+		gDeferredPostGammaCorrectProgram.uniform1f(LLShaderMgr::TEXTURE_GAMMA, gamma);
+		
+		gGL.begin(LLRender::TRIANGLE_STRIP);
+		gGL.texCoord2f(tc1.mV[0], tc1.mV[1]);
+		gGL.vertex2f(-1,-1);
+		
+		gGL.texCoord2f(tc1.mV[0], tc2.mV[1]);
+		gGL.vertex2f(-1,3);
+		
+		gGL.texCoord2f(tc2.mV[0], tc1.mV[1]);
+		gGL.vertex2f(3,-1);
+		
+		gGL.end();
+		
+		gGL.getTexUnit(channel)->unbind(mScreen.getUsage());
+		gDeferredPostGammaCorrectProgram.unbind();
+		mScreen.flush();
+	}
+
+	gGL.matrixMode(LLRender::MM_PROJECTION);
+	gGL.popMatrix();
+	gGL.matrixMode(LLRender::MM_MODELVIEW);
+	gGL.popMatrix();	
+
+	mScreen.bindTarget();
+
 	{ //render non-deferred geometry (alpha, fullbright, glow)
 		LLGLDisable blend(GL_BLEND);
 		LLGLDisable stencil(GL_STENCIL_TEST);
@@ -8343,6 +8855,8 @@ void LLPipeline::renderDeferredLighting()
 						 LLPipeline::RENDER_TYPE_PASS_INVISIBLE,
 						 LLPipeline::RENDER_TYPE_PASS_INVISI_SHINY,
 						 LLPipeline::RENDER_TYPE_AVATAR,
+						 LLPipeline::RENDER_TYPE_ALPHA_MASK,
+						 LLPipeline::RENDER_TYPE_FULLBRIGHT_ALPHA_MASK,
 						 END_RENDER_TYPES);
 		
 		renderGeomPostDeferred(*LLViewerCamera::getInstance());
@@ -8895,19 +9409,36 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
 		LLRenderPass::PASS_FULLBRIGHT, 
 		LLRenderPass::PASS_SHINY, 
 		LLRenderPass::PASS_BUMP, 
-		LLRenderPass::PASS_FULLBRIGHT_SHINY 
+		LLRenderPass::PASS_FULLBRIGHT_SHINY ,
+		LLRenderPass::PASS_MATERIAL,
+		LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE,
+		LLRenderPass::PASS_SPECMAP,
+		LLRenderPass::PASS_SPECMAP_EMISSIVE,
+		LLRenderPass::PASS_NORMMAP,
+		LLRenderPass::PASS_NORMMAP_EMISSIVE,
+		LLRenderPass::PASS_NORMSPEC,
+		LLRenderPass::PASS_NORMSPEC_EMISSIVE,
 	};
 
 	LLGLEnable cull(GL_CULL_FACE);
 
+	//enable depth clamping if available
+	LLGLEnable depth_clamp(gGLManager.mHasDepthClamp ? GL_DEPTH_CLAMP : 0);
+
 	if (use_shader)
 	{
 		gDeferredShadowCubeProgram.bind();
 	}
 
+	LLRenderTarget& occlusion_target = mShadowOcclusion[LLViewerCamera::sCurCameraID-1];
+
+	occlusion_target.bindTarget();
 	updateCull(shadow_cam, result);
+	occlusion_target.flush();
+
 	stateSort(shadow_cam, result);
 	
+	
 	//generate shadow map
 	gGL.matrixMode(LLRender::MM_PROJECTION);
 	gGL.pushMatrix();
@@ -8966,7 +9497,6 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
 	{
 		LLFastTimer ftm(FTM_SHADOW_ALPHA);
 		gDeferredShadowAlphaMaskProgram.bind();
-		gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);
 		gDeferredShadowAlphaMaskProgram.uniform1f(LLShaderMgr::DEFERRED_SHADOW_TARGET_WIDTH, (float)target_width);
 
 		U32 mask =	LLVertexBuffer::MAP_VERTEX | 
@@ -8974,10 +9504,19 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
 					LLVertexBuffer::MAP_COLOR | 
 					LLVertexBuffer::MAP_TEXTURE_INDEX;
 
-		renderObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE);
-		renderObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE);
+		renderMaskedObjects(LLRenderPass::PASS_ALPHA_MASK, mask, TRUE, TRUE);
+		renderMaskedObjects(LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK, mask, TRUE, TRUE);
+		gDeferredShadowAlphaMaskProgram.setMinimumAlpha(0.598f);
 		renderObjects(LLRenderPass::PASS_ALPHA, mask, TRUE, TRUE);
+
+		mask = mask & ~LLVertexBuffer::MAP_TEXTURE_INDEX;
+
 		gDeferredTreeShadowProgram.bind();
+		renderMaskedObjects(LLRenderPass::PASS_NORMSPEC_MASK, mask);
+		renderMaskedObjects(LLRenderPass::PASS_MATERIAL_ALPHA_MASK, mask);
+		renderMaskedObjects(LLRenderPass::PASS_SPECMAP_MASK, mask);
+		renderMaskedObjects(LLRenderPass::PASS_NORMMAP_MASK, mask);
+		
 		gDeferredTreeShadowProgram.setMinimumAlpha(0.598f);
 		renderObjects(LLRenderPass::PASS_GRASS, LLVertexBuffer::MAP_VERTEX | LLVertexBuffer::MAP_TEXCOORD0, TRUE);
 	}
@@ -8987,7 +9526,10 @@ void LLPipeline::renderShadow(glh::matrix4f& view, glh::matrix4f& proj, LLCamera
 	gDeferredShadowCubeProgram.bind();
 	gGLLastMatrix = NULL;
 	gGL.loadMatrix(gGLModelView);
-	doOcclusion(shadow_cam);
+
+	LLRenderTarget& occlusion_source = mShadow[LLViewerCamera::sCurCameraID-1];
+
+	doOcclusion(shadow_cam, occlusion_source, occlusion_target);
 
 	if (use_shader)
 	{
@@ -9308,6 +9850,22 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT,
 					LLPipeline::RENDER_TYPE_PASS_SHINY,
 					LLPipeline::RENDER_TYPE_PASS_FULLBRIGHT_SHINY,
+					LLPipeline::RENDER_TYPE_PASS_MATERIAL,
+					LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA,
+					LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA_MASK,
+					LLPipeline::RENDER_TYPE_PASS_MATERIAL_ALPHA_EMISSIVE,
+					LLPipeline::RENDER_TYPE_PASS_SPECMAP,
+					LLPipeline::RENDER_TYPE_PASS_SPECMAP_BLEND,
+					LLPipeline::RENDER_TYPE_PASS_SPECMAP_MASK,
+					LLPipeline::RENDER_TYPE_PASS_SPECMAP_EMISSIVE,
+					LLPipeline::RENDER_TYPE_PASS_NORMMAP,
+					LLPipeline::RENDER_TYPE_PASS_NORMMAP_BLEND,
+					LLPipeline::RENDER_TYPE_PASS_NORMMAP_MASK,
+					LLPipeline::RENDER_TYPE_PASS_NORMMAP_EMISSIVE,
+					LLPipeline::RENDER_TYPE_PASS_NORMSPEC,
+					LLPipeline::RENDER_TYPE_PASS_NORMSPEC_BLEND,
+					LLPipeline::RENDER_TYPE_PASS_NORMSPEC_MASK,
+					LLPipeline::RENDER_TYPE_PASS_NORMSPEC_EMISSIVE,
 					END_RENDER_TYPES);
 
 	gGL.setColorMask(false, false);
@@ -9827,7 +10385,6 @@ void LLPipeline::generateSunShadow(LLCamera& camera)
 			{
 				static LLCullResult result[4];
 
-				//LLGLEnable enable(GL_DEPTH_CLAMP_NV);
 				renderShadow(view[j], proj[j], shadow_cam, result[j], TRUE, TRUE, target_width);
 			}
 
@@ -10134,11 +10691,13 @@ void LLPipeline::generateImpostor(LLVOAvatar* avatar)
 		LLVector4a left;
 		left.load3(camera.getLeftAxis().mV);
 		left.mul(left);
+		llassert(left.dot3(left).getF32() > F_APPROXIMATELY_ZERO);
 		left.normalize3fast();
 
 		LLVector4a up;
 		up.load3(camera.getUpAxis().mV);
 		up.mul(up);
+		llassert(up.dot3(up).getF32() > F_APPROXIMATELY_ZERO);
 		up.normalize3fast();
 
 		tdim.mV[0] = fabsf(half_height.dot3(left).getF32());
diff --git a/indra/newview/pipeline.h b/indra/newview/pipeline.h
old mode 100644
new mode 100755
index a8db93585e66aa8c22ae37f8446e32dcd3629ec0..70dcf8040708568ae3c576bb686a814a137c635c
--- a/indra/newview/pipeline.h
+++ b/indra/newview/pipeline.h
@@ -35,7 +35,8 @@
 #include "llspatialpartition.h"
 #include "m4math.h"
 #include "llpointer.h"
-#include "lldrawpool.h"
+#include "lldrawpoolalpha.h"
+#include "lldrawpoolmaterials.h"
 #include "llgl.h"
 #include "lldrawable.h"
 #include "llrendertarget.h"
@@ -59,6 +60,7 @@ class LLCullResult;
 class LLVOAvatar;
 class LLGLSLShader;
 class LLCurlRequest;
+class LLDrawPoolAlpha;
 
 class LLMeshResponder;
 
@@ -95,6 +97,7 @@ extern LLFastTimer::DeclareTimer FTM_RENDER_WL_SKY;
 extern LLFastTimer::DeclareTimer FTM_RENDER_ALPHA;
 extern LLFastTimer::DeclareTimer FTM_RENDER_CHARACTERS;
 extern LLFastTimer::DeclareTimer FTM_RENDER_BUMP;
+extern LLFastTimer::DeclareTimer FTM_RENDER_MATERIALS;
 extern LLFastTimer::DeclareTimer FTM_RENDER_FULLBRIGHT;
 extern LLFastTimer::DeclareTimer FTM_RENDER_GLOW;
 extern LLFastTimer::DeclareTimer FTM_STATESORT;
@@ -173,6 +176,12 @@ class LLPipeline
 	// Object related methods
 	void        markVisible(LLDrawable *drawablep, LLCamera& camera);
 	void		markOccluder(LLSpatialGroup* group);
+
+	//downsample source to dest, taking the maximum depth value per pixel in source and writing to dest
+	// if source's depth buffer cannot be bound for reading, a scratch space depth buffer must be provided
+	void		downsampleDepthBuffer(LLRenderTarget& source, LLRenderTarget& dest, LLRenderTarget* scratch_space = NULL);
+
+	void		doOcclusion(LLCamera& camera, LLRenderTarget& source, LLRenderTarget& dest, LLRenderTarget* scratch_space = NULL);
 	void		doOcclusion(LLCamera& camera);
 	void		markNotCulled(LLSpatialGroup* group, LLCamera &camera);
 	void        markMoved(LLDrawable *drawablep, BOOL damped_motion = FALSE);
@@ -185,21 +194,21 @@ class LLPipeline
 	void		markMeshDirty(LLSpatialGroup* group);
 
 	//get the object between start and end that's closest to start.
-	LLViewerObject* lineSegmentIntersectInWorld(const LLVector3& start, const LLVector3& end,
+	LLViewerObject* lineSegmentIntersectInWorld(const LLVector4a& start, const LLVector4a& end,
 												BOOL pick_transparent,
 												S32* face_hit,                          // return the face hit
-												LLVector3* intersection = NULL,         // return the intersection point
+												LLVector4a* intersection = NULL,         // return the intersection point
 												LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
-												LLVector3* normal = NULL,               // return the surface normal at the intersection point
-												LLVector3* bi_normal = NULL             // return the surface bi-normal at the intersection point  
+												LLVector4a* normal = NULL,               // return the surface normal at the intersection point
+												LLVector4a* tangent = NULL             // return the surface tangent at the intersection point  
 		);
-	LLViewerObject* lineSegmentIntersectInHUD(const LLVector3& start, const LLVector3& end,
+	LLViewerObject* lineSegmentIntersectInHUD(const LLVector4a& start, const LLVector4a& end,
 											  BOOL pick_transparent,
 											  S32* face_hit,                          // return the face hit
-											  LLVector3* intersection = NULL,         // return the intersection point
+											  LLVector4a* intersection = NULL,         // return the intersection point
 											  LLVector2* tex_coord = NULL,            // return the texture coordinates of the intersection point
-											  LLVector3* normal = NULL,               // return the surface normal at the intersection point
-											  LLVector3* bi_normal = NULL             // return the surface bi-normal at the intersection point
+											  LLVector4a* normal = NULL,               // return the surface normal at the intersection point
+											  LLVector4a* tangent = NULL             // return the surface tangent at the intersection point
 		);
 
 	// Something about these textures has changed.  Dirty them.
@@ -256,6 +265,8 @@ class LLPipeline
 	void forAllVisibleDrawables(void (*func)(LLDrawable*));
 
 	void renderObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE);
+	void renderMaskedObjects(U32 type, U32 mask, BOOL texture = TRUE, BOOL batch_texture = FALSE);
+
 	void renderGroups(LLRenderPass* pass, U32 type, U32 mask, BOOL texture);
 
 	void grabReferences(LLCullResult& result);
@@ -270,7 +281,7 @@ class LLPipeline
 
 	void renderGeom(LLCamera& camera, BOOL forceVBOUpdate = FALSE);
 	void renderGeomDeferred(LLCamera& camera);
-	void renderGeomPostDeferred(LLCamera& camera);
+	void renderGeomPostDeferred(LLCamera& camera, bool do_occlusion=true);
 	void renderGeomShadow(LLCamera& camera);
 	void bindDeferredShader(LLGLSLShader& shader, U32 light_index = 0, U32 noise_map = 0xFFFFFFFF);
 	void setupSpotLight(LLGLSLShader& shader, LLDrawable* drawablep);
@@ -389,12 +400,16 @@ class LLPipeline
 	static void setRenderHighlights(BOOL val);
 	static void toggleRenderHighlights(void* data);
 	static BOOL getRenderHighlights(void* data);
+	static void setRenderHighlightTextureChannel(LLRender::eTexIndex channel); // sets which UV setup to display in highlight overlay
 
+	static void updateRenderBump();
 	static void updateRenderDeferred();
 	static void refreshCachedSettings();
 
 	static void throttleNewMemoryAllocation(BOOL disable);
 
+	
+
 	void addDebugBlip(const LLVector3& position, const LLColor4& color);
 
 	void hidePermanentObjects( std::vector<U32>& restoreList );
@@ -425,8 +440,11 @@ class LLPipeline
 		RENDER_TYPE_TERRAIN						= LLDrawPool::POOL_TERRAIN,
 		RENDER_TYPE_SIMPLE						= LLDrawPool::POOL_SIMPLE,
 		RENDER_TYPE_GRASS						= LLDrawPool::POOL_GRASS,
+		RENDER_TYPE_ALPHA_MASK					= LLDrawPool::POOL_ALPHA_MASK,
+		RENDER_TYPE_FULLBRIGHT_ALPHA_MASK		= LLDrawPool::POOL_FULLBRIGHT_ALPHA_MASK,
 		RENDER_TYPE_FULLBRIGHT					= LLDrawPool::POOL_FULLBRIGHT,
 		RENDER_TYPE_BUMP						= LLDrawPool::POOL_BUMP,
+		RENDER_TYPE_MATERIALS					= LLDrawPool::POOL_MATERIALS,
 		RENDER_TYPE_AVATAR						= LLDrawPool::POOL_AVATAR,
 		RENDER_TYPE_TREE						= LLDrawPool::POOL_TREE,
 		RENDER_TYPE_INVISIBLE					= LLDrawPool::POOL_INVISIBLE,
@@ -447,6 +465,22 @@ class LLPipeline
 		RENDER_TYPE_PASS_ALPHA					= LLRenderPass::PASS_ALPHA,
 		RENDER_TYPE_PASS_ALPHA_MASK				= LLRenderPass::PASS_ALPHA_MASK,
 		RENDER_TYPE_PASS_FULLBRIGHT_ALPHA_MASK	= LLRenderPass::PASS_FULLBRIGHT_ALPHA_MASK,
+		RENDER_TYPE_PASS_MATERIAL				= LLRenderPass::PASS_MATERIAL,
+		RENDER_TYPE_PASS_MATERIAL_ALPHA			= LLRenderPass::PASS_MATERIAL_ALPHA,
+		RENDER_TYPE_PASS_MATERIAL_ALPHA_MASK	= LLRenderPass::PASS_MATERIAL_ALPHA_MASK,
+		RENDER_TYPE_PASS_MATERIAL_ALPHA_EMISSIVE= LLRenderPass::PASS_MATERIAL_ALPHA_EMISSIVE,
+		RENDER_TYPE_PASS_SPECMAP				= LLRenderPass::PASS_SPECMAP,
+		RENDER_TYPE_PASS_SPECMAP_BLEND			= LLRenderPass::PASS_SPECMAP_BLEND,
+		RENDER_TYPE_PASS_SPECMAP_MASK			= LLRenderPass::PASS_SPECMAP_MASK,
+		RENDER_TYPE_PASS_SPECMAP_EMISSIVE		= LLRenderPass::PASS_SPECMAP_EMISSIVE,
+		RENDER_TYPE_PASS_NORMMAP				= LLRenderPass::PASS_NORMMAP,
+		RENDER_TYPE_PASS_NORMMAP_BLEND			= LLRenderPass::PASS_NORMMAP_BLEND,
+		RENDER_TYPE_PASS_NORMMAP_MASK			= LLRenderPass::PASS_NORMMAP_MASK,
+		RENDER_TYPE_PASS_NORMMAP_EMISSIVE		= LLRenderPass::PASS_NORMMAP_EMISSIVE,
+		RENDER_TYPE_PASS_NORMSPEC				= LLRenderPass::PASS_NORMSPEC,
+		RENDER_TYPE_PASS_NORMSPEC_BLEND			= LLRenderPass::PASS_NORMSPEC_BLEND,
+		RENDER_TYPE_PASS_NORMSPEC_MASK			= LLRenderPass::PASS_NORMSPEC_MASK,
+		RENDER_TYPE_PASS_NORMSPEC_EMISSIVE		= LLRenderPass::PASS_NORMSPEC_EMISSIVE,
 		// Following are object types (only used in drawable mRenderType)
 		RENDER_TYPE_HUD = LLRenderPass::NUM_RENDER_TYPES,
 		RENDER_TYPE_VOLUME,
@@ -562,7 +596,8 @@ class LLPipeline
 	static BOOL				sRenderDeferred;
 	static BOOL             sMemAllocationThrottled;
 	static S32				sVisibleLightCount;
-	static F32				sMinRenderSize;	
+	static F32				sMinRenderSize;
+	static BOOL				sRenderingHUDs;
 
 	//screen texture
 	U32 					mScreenWidth;
@@ -574,6 +609,7 @@ class LLPipeline
 	LLRenderTarget			mFXAABuffer;
 	LLRenderTarget			mEdgeMap;
 	LLRenderTarget			mDeferredDepth;
+	LLRenderTarget			mOcclusionDepth;
 	LLRenderTarget			mDeferredLight;
 	LLRenderTarget			mHighlight;
 	LLRenderTarget			mPhysicsDisplay;
@@ -586,6 +622,7 @@ class LLPipeline
 
 	//sun shadow map
 	LLRenderTarget			mShadow[6];
+	LLRenderTarget			mShadowOcclusion[6];
 	std::vector<LLVector3>	mShadowFrustPoints[4];
 	LLVector4				mShadowError;
 	LLVector4				mShadowFOV;
@@ -773,17 +810,20 @@ class LLPipeline
 	// For quick-lookups into mPools (mapped by texture pointer)
 	std::map<uintptr_t, LLDrawPool*>	mTerrainPools;
 	std::map<uintptr_t, LLDrawPool*>	mTreePools;
-	LLDrawPool*					mAlphaPool;
+	LLDrawPoolAlpha*			mAlphaPool;
 	LLDrawPool*					mSkyPool;
 	LLDrawPool*					mTerrainPool;
 	LLDrawPool*					mWaterPool;
 	LLDrawPool*					mGroundPool;
 	LLRenderPass*				mSimplePool;
 	LLRenderPass*				mGrassPool;
+	LLRenderPass*				mAlphaMaskPool;
+	LLRenderPass*				mFullbrightAlphaMaskPool;
 	LLRenderPass*				mFullbrightPool;
 	LLDrawPool*					mInvisiblePool;
 	LLDrawPool*					mGlowPool;
 	LLDrawPool*					mBumpPool;
+	LLDrawPool*					mMaterialsPool;
 	LLDrawPool*					mWLSkyPool;
 	// Note: no need to keep an quick-lookup to avatar pools, since there's only one per avatar
 	
@@ -822,6 +862,10 @@ class LLPipeline
 	static BOOL				sRenderBeacons;
 	static BOOL				sRenderHighlight;
 
+	// Determines which set of UVs to use in highlight display
+	//
+	static LLRender::eTexIndex sRenderHighlightTextureChannel;
+
 	//debug use
 	static U32              sCurRenderPoolType ;
 
diff --git a/indra/newview/pl.lproj/language.txt b/indra/newview/pl.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/pt.lproj/language.txt b/indra/newview/pt.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/arrow.BMP b/indra/newview/res-sdl/arrow.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/arrowcop.BMP b/indra/newview/res-sdl/arrowcop.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/arrowcopmulti.BMP b/indra/newview/res-sdl/arrowcopmulti.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/arrowdrag.BMP b/indra/newview/res-sdl/arrowdrag.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/circleandline.BMP b/indra/newview/res-sdl/circleandline.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/cross.BMP b/indra/newview/res-sdl/cross.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/hand.BMP b/indra/newview/res-sdl/hand.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/ibeam.BMP b/indra/newview/res-sdl/ibeam.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llarrow.BMP b/indra/newview/res-sdl/llarrow.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llarrowdrag.BMP b/indra/newview/res-sdl/llarrowdrag.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llarrowdragmulti.BMP b/indra/newview/res-sdl/llarrowdragmulti.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llarrowlocked.BMP b/indra/newview/res-sdl/llarrowlocked.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llgrablocked.BMP b/indra/newview/res-sdl/llgrablocked.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llno.BMP b/indra/newview/res-sdl/llno.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/llnolocked.BMP b/indra/newview/res-sdl/llnolocked.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolcamera.BMP b/indra/newview/res-sdl/lltoolcamera.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolcreate.BMP b/indra/newview/res-sdl/lltoolcreate.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolfocus.BMP b/indra/newview/res-sdl/lltoolfocus.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolgrab.BMP b/indra/newview/res-sdl/lltoolgrab.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolland.BMP b/indra/newview/res-sdl/lltoolland.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpan.BMP b/indra/newview/res-sdl/lltoolpan.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpathfinding.BMP b/indra/newview/res-sdl/lltoolpathfinding.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathend.BMP b/indra/newview/res-sdl/lltoolpathfindingpathend.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathendadd.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstart.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP b/indra/newview/res-sdl/lltoolpathfindingpathstartadd.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolpipette.BMP b/indra/newview/res-sdl/lltoolpipette.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolrotate.BMP b/indra/newview/res-sdl/lltoolrotate.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolscale.BMP b/indra/newview/res-sdl/lltoolscale.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltooltranslate.BMP b/indra/newview/res-sdl/lltooltranslate.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolzoomin.BMP b/indra/newview/res-sdl/lltoolzoomin.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/lltoolzoomout.BMP b/indra/newview/res-sdl/lltoolzoomout.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/sizenesw.BMP b/indra/newview/res-sdl/sizenesw.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/sizens.BMP b/indra/newview/res-sdl/sizens.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/sizenwse.BMP b/indra/newview/res-sdl/sizenwse.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/sizewe.BMP b/indra/newview/res-sdl/sizewe.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolbuy.BMP b/indra/newview/res-sdl/toolbuy.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolmediaopen.BMP b/indra/newview/res-sdl/toolmediaopen.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolopen.BMP b/indra/newview/res-sdl/toolopen.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolpause.BMP b/indra/newview/res-sdl/toolpause.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolpickobject.BMP b/indra/newview/res-sdl/toolpickobject.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolpickobject2.BMP b/indra/newview/res-sdl/toolpickobject2.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolpickobject3.BMP b/indra/newview/res-sdl/toolpickobject3.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolplay.BMP b/indra/newview/res-sdl/toolplay.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/toolsit.BMP b/indra/newview/res-sdl/toolsit.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/wait.BMP b/indra/newview/res-sdl/wait.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res-sdl/working.BMP b/indra/newview/res-sdl/working.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res/arrow.cur b/indra/newview/res/arrow.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/arrowcop.cur b/indra/newview/res/arrowcop.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/arrowcopmulti.cur b/indra/newview/res/arrowcopmulti.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/arrowdrag.cur b/indra/newview/res/arrowdrag.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/bitmap2.bmp b/indra/newview/res/bitmap2.bmp
old mode 100644
new mode 100755
diff --git a/indra/newview/res/circleandline.cur b/indra/newview/res/circleandline.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/have_artwork_bundle.marker b/indra/newview/res/have_artwork_bundle.marker
old mode 100644
new mode 100755
diff --git a/indra/newview/res/icon1.ico b/indra/newview/res/icon1.ico
old mode 100644
new mode 100755
diff --git a/indra/newview/res/install_icon.BMP b/indra/newview/res/install_icon.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llarrow.cur b/indra/newview/res/llarrow.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llarrowdrag.cur b/indra/newview/res/llarrowdrag.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llarrowdragmulti.cur b/indra/newview/res/llarrowdragmulti.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llarrowlocked.cur b/indra/newview/res/llarrowlocked.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llgrablocked.cur b/indra/newview/res/llgrablocked.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llno.cur b/indra/newview/res/llno.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/llnolocked.cur b/indra/newview/res/llnolocked.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolcamera.cur b/indra/newview/res/lltoolcamera.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolcreate.cur b/indra/newview/res/lltoolcreate.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolfocus.cur b/indra/newview/res/lltoolfocus.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolgrab.cur b/indra/newview/res/lltoolgrab.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolland.cur b/indra/newview/res/lltoolland.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpan.cur b/indra/newview/res/lltoolpan.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpathfinding.cur b/indra/newview/res/lltoolpathfinding.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpathfindingpathend.cur b/indra/newview/res/lltoolpathfindingpathend.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpathfindingpathendadd.cur b/indra/newview/res/lltoolpathfindingpathendadd.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpathfindingpathstart.cur b/indra/newview/res/lltoolpathfindingpathstart.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpathfindingpathstartadd.cur b/indra/newview/res/lltoolpathfindingpathstartadd.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolpipette.cur b/indra/newview/res/lltoolpipette.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolrotate.cur b/indra/newview/res/lltoolrotate.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolscale.cur b/indra/newview/res/lltoolscale.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltooltranslate.cur b/indra/newview/res/lltooltranslate.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolzoomin.cur b/indra/newview/res/lltoolzoomin.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/lltoolzoomout.cur b/indra/newview/res/lltoolzoomout.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/loginbackground.bmp b/indra/newview/res/loginbackground.bmp
old mode 100644
new mode 100755
diff --git a/indra/newview/res/resource.h b/indra/newview/res/resource.h
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolbuy.cur b/indra/newview/res/toolbuy.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolmediaopen.cur b/indra/newview/res/toolmediaopen.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolopen.cur b/indra/newview/res/toolopen.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolpause.cur b/indra/newview/res/toolpause.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolpickobject.cur b/indra/newview/res/toolpickobject.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolpickobject2.cur b/indra/newview/res/toolpickobject2.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolpickobject3.cur b/indra/newview/res/toolpickobject3.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolpipette.cur b/indra/newview/res/toolpipette.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolplay.cur b/indra/newview/res/toolplay.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/toolsit.cur b/indra/newview/res/toolsit.cur
old mode 100644
new mode 100755
diff --git a/indra/newview/res/uninstall_icon.BMP b/indra/newview/res/uninstall_icon.BMP
old mode 100644
new mode 100755
diff --git a/indra/newview/res/viewerRes.rc b/indra/newview/res/viewerRes.rc
old mode 100644
new mode 100755
index 471a896019d86937f4bcb42e7da9f191a64189f9..8587243791274c274b45b67015b5392b5e8133e3
--- a/indra/newview/res/viewerRes.rc
+++ b/indra/newview/res/viewerRes.rc
@@ -135,8 +135,8 @@ TOOLNO                  CURSOR                  "llno.cur"
 //
 
 VS_VERSION_INFO VERSIONINFO
- FILEVERSION 3,4,1,264760
- PRODUCTVERSION 3,4,1,264760
+ FILEVERSION ${VIEWER_VERSION_MAJOR},${VIEWER_VERSION_MINOR},${VIEWER_VERSION_PATCH},${VIEWER_VERSION_REVISION}
+ PRODUCTVERSION ${VIEWER_VERSION_MAJOR},${VIEWER_VERSION_MINOR},${VIEWER_VERSION_PATCH},${VIEWER_VERSION_REVISION}
  FILEFLAGSMASK 0x3fL
 #ifdef _DEBUG
  FILEFLAGS 0x1L
@@ -153,12 +153,12 @@ BEGIN
         BEGIN
             VALUE "CompanyName", "Linden Lab"
             VALUE "FileDescription", "Second Life"
-            VALUE "FileVersion", "3.4.1.264760"
+            VALUE "FileVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
             VALUE "InternalName", "Second Life"
-            VALUE "LegalCopyright", "Copyright � 2001-2010, Linden Research, Inc."
+            VALUE "LegalCopyright", "Copyright � 2001, Linden Research, Inc."
             VALUE "OriginalFilename", "SecondLife.exe"
             VALUE "ProductName", "Second Life"
-            VALUE "ProductVersion", "3.4.1.264760"
+            VALUE "ProductVersion", "${VIEWER_VERSION_MAJOR}.${VIEWER_VERSION_MINOR}.${VIEWER_VERSION_PATCH}.${VIEWER_VERSION_REVISION}"
         END
     END
     BLOCK "VarFileInfo"
diff --git a/indra/newview/ru.lproj/language.txt b/indra/newview/ru.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/secondlife-i686.supp b/indra/newview/secondlife-i686.supp
old mode 100644
new mode 100755
diff --git a/indra/newview/secondlife.icns b/indra/newview/secondlife.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/secondlife_firstlook.icns b/indra/newview/secondlife_firstlook.icns
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/colors.xml b/indra/newview/skins/default/colors.xml
old mode 100644
new mode 100755
index 0de217fc0d377c87e9af886bf2dc190ab96a669b..a9176595c7c0df87623b9344d8c7f6b960edc048
--- a/indra/newview/skins/default/colors.xml
+++ b/indra/newview/skins/default/colors.xml
@@ -101,6 +101,9 @@
 	<color
 	name="MdBlue"
 	value=".07 .38 .51 1" />
+  <color
+      name="DkBlue"
+      value=".06 .06 .3 1" />
   <color
       name="LtRed"
       value="1 0.2 0.2 1" />
@@ -110,6 +113,9 @@
   <color
       name="Red_80"
       value="1 0 0 0.8" />
+  <color
+      name="DkRed"
+      value="0.3 0.06 0.06 1" />
   <color
       name="Green_80"
       value="0 1 0 0.8" />
@@ -650,6 +656,15 @@
   <color
       name="PathfindingGoodColor"
       reference="LtGreen" />
+  <color
+      name="MaterialErrorColor"
+      reference="LtRed" />
+  <color
+      name="MaterialWarningColor"
+      reference="DrYellow" />
+  <color
+      name="MaterialGoodColor"
+      reference="LtGreen" />
   <color
       name="PathfindingDefaultBeaconColor"
       reference="Red_80" />
@@ -830,9 +845,14 @@
      name="ChatTimestampColor"
      reference="White" />
     <color
+      name="MenuBarBetaBgColor"
+      reference="DkBlue" />
+  <color
      name="MenuBarProjectBgColor"
      reference="MdBlue" />
-  
+  <color
+      name="MenuBarTestBgColor"
+      reference="DkRed" />
     <color
       name="MeshImportTableNormalColor"
       value="1 1 1 1"/>
diff --git a/indra/newview/skins/default/html/btn_purplepill_bg.png b/indra/newview/skins/default/html/btn_purplepill_bg.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/da/loading/loading.html b/indra/newview/skins/default/html/da/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/de/loading-error/index.html b/indra/newview/skins/default/html/de/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/de/loading/loading.html b/indra/newview/skins/default/html/de/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/en-us/help-offline/index.html b/indra/newview/skins/default/html/en-us/help-offline/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/en-us/loading-error/index.html b/indra/newview/skins/default/html/en-us/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/en-us/loading/loading.html b/indra/newview/skins/default/html/en-us/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/en-us/loading/sl_logo_rotate_black.gif b/indra/newview/skins/default/html/en-us/loading/sl_logo_rotate_black.gif
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/es/loading-error/index.html b/indra/newview/skins/default/html/es/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/es/loading/loading.html b/indra/newview/skins/default/html/es/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/fr/loading-error/index.html b/indra/newview/skins/default/html/fr/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/fr/loading/loading.html b/indra/newview/skins/default/html/fr/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/hu/loading/loading.html b/indra/newview/skins/default/html/hu/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/it/loading/loading.html b/indra/newview/skins/default/html/it/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/ja/loading-error/index.html b/indra/newview/skins/default/html/ja/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/ja/loading/loading.html b/indra/newview/skins/default/html/ja/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/ko/loading-error/index.html b/indra/newview/skins/default/html/ko/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/nl/loading/loading.html b/indra/newview/skins/default/html/nl/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/pl/loading/loading.html b/indra/newview/skins/default/html/pl/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/pt/loading-error/index.html b/indra/newview/skins/default/html/pt/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/pt/loading/loading.html b/indra/newview/skins/default/html/pt/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/ru/loading/loading.html b/indra/newview/skins/default/html/ru/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/tr/loading/loading.html b/indra/newview/skins/default/html/tr/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/uk/loading/loading.html b/indra/newview/skins/default/html/uk/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/unabletoconnect.png b/indra/newview/skins/default/html/unabletoconnect.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/zh/loading-error/index.html b/indra/newview/skins/default/html/zh/loading-error/index.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/html/zh/loading/loading.html b/indra/newview/skins/default/html/zh/loading/loading.html
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/Blank.png b/indra/newview/skins/default/textures/Blank.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/Rounded_Rect.png b/indra/newview/skins/default/textures/Rounded_Rect.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/alpha_gradient.tga b/indra/newview/skins/default/textures/alpha_gradient.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/alpha_gradient_2d.j2c b/indra/newview/skins/default/textures/alpha_gradient_2d.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/arrow_down.tga b/indra/newview/skins/default/textures/arrow_down.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/arrow_up.tga b/indra/newview/skins/default/textures/arrow_up.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/avatar_thumb_bkgrnd.png b/indra/newview/skins/default/textures/avatar_thumb_bkgrnd.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/badge_note.j2c b/indra/newview/skins/default/textures/badge_note.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/badge_ok.j2c b/indra/newview/skins/default/textures/badge_ok.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/badge_warn.j2c b/indra/newview/skins/default/textures/badge_warn.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Avatar_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Avatar_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_FreeCam_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_FreeCam_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Orbit_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Orbit_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Pan_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Pan_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Back_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Eye_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Front_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png b/indra/newview/skins/default/textures/bottomtray/Cam_Preset_Side_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_In.png b/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_In.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Out.png b/indra/newview/skins/default/textures/bottomtray/Cam_Rotate_Out.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_In.png b/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_In.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Out.png b/indra/newview/skins/default/textures/bottomtray/Cam_Tracking_Out.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png b/indra/newview/skins/default/textures/bottomtray/ChatBarHandle.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/DownArrow.png b/indra/newview/skins/default/textures/bottomtray/DownArrow.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png b/indra/newview/skins/default/textures/bottomtray/Mouselook_View_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Fly_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Run_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Run_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Move_Walk_Off.png b/indra/newview/skins/default/textures/bottomtray/Move_Walk_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Backward_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Backward_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Backward_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Backward_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Down_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Down_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Forward_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Forward_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Forward_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Forward_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Left_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Left_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Right_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Right_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnLeft_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_TurnRight_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png b/indra/newview/skins/default/textures/bottomtray/Movement_Up_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png b/indra/newview/skins/default/textures/bottomtray/Movement_Up_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png b/indra/newview/skins/default/textures/bottomtray/Notices_Unread.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png b/indra/newview/skins/default/textures/bottomtray/Object_View_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Object_View_On.png b/indra/newview/skins/default/textures/bottomtray/Object_View_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png b/indra/newview/skins/default/textures/bottomtray/PanOrbit_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png b/indra/newview/skins/default/textures/bottomtray/Snapshot_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png b/indra/newview/skins/default/textures/bottomtray/Unread_Chiclet.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl1.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl1.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl2.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl2.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl3.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Lvl3.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_Off.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/VoicePTT_On.png b/indra/newview/skins/default/textures/bottomtray/VoicePTT_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png b/indra/newview/skins/default/textures/bottomtray/WellButton_Lit_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Cone.png b/indra/newview/skins/default/textures/build/Object_Cone.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Cone_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Cube.png b/indra/newview/skins/default/textures/build/Object_Cube.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Cube_Selected.png b/indra/newview/skins/default/textures/build/Object_Cube_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder.png b/indra/newview/skins/default/textures/build/Object_Cylinder.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Cylinder_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Grass.png b/indra/newview/skins/default/textures/build/Object_Grass.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Grass_Selected.png b/indra/newview/skins/default/textures/build/Object_Grass_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cone_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Cylinder_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Hemi_Sphere_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Prism.png b/indra/newview/skins/default/textures/build/Object_Prism.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Prism_Selected.png b/indra/newview/skins/default/textures/build/Object_Prism_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid.png b/indra/newview/skins/default/textures/build/Object_Pyramid.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png b/indra/newview/skins/default/textures/build/Object_Pyramid_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Ring.png b/indra/newview/skins/default/textures/build/Object_Ring.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Ring_Selected.png b/indra/newview/skins/default/textures/build/Object_Ring_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Sphere.png b/indra/newview/skins/default/textures/build/Object_Sphere.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png b/indra/newview/skins/default/textures/build/Object_Sphere_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png b/indra/newview/skins/default/textures/build/Object_Tetrahedron_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Torus.png b/indra/newview/skins/default/textures/build/Object_Torus.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Torus_Selected.png b/indra/newview/skins/default/textures/build/Object_Torus_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Tree.png b/indra/newview/skins/default/textures/build/Object_Tree.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Tree_Selected.png b/indra/newview/skins/default/textures/build/Object_Tree_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Tube.png b/indra/newview/skins/default/textures/build/Object_Tube.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Object_Tube_Selected.png b/indra/newview/skins/default/textures/build/Object_Tube_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Tool_Create.png b/indra/newview/skins/default/textures/build/Tool_Create.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Tool_Dozer.png b/indra/newview/skins/default/textures/build/Tool_Dozer.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Tool_Face.png b/indra/newview/skins/default/textures/build/Tool_Face.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Tool_Grab.png b/indra/newview/skins/default/textures/build/Tool_Grab.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/build/Tool_Zoom.png b/indra/newview/skins/default/textures/build/Tool_Zoom.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/button_anim_pause.tga b/indra/newview/skins/default/textures/button_anim_pause.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/button_anim_pause_selected.tga b/indra/newview/skins/default/textures/button_anim_pause_selected.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/button_anim_play.tga b/indra/newview/skins/default/textures/button_anim_play.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/button_anim_play_selected.tga b/indra/newview/skins/default/textures/button_anim_play_selected.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/checker.png b/indra/newview/skins/default/textures/checker.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/cloud-particle.j2c b/indra/newview/skins/default/textures/cloud-particle.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/color_swatch_alpha.tga b/indra/newview/skins/default/textures/color_swatch_alpha.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Off.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Press.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowClosed_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Off.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Press.png b/indra/newview/skins/default/textures/containers/Accordion_ArrowOpened_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_Off.png b/indra/newview/skins/default/textures/containers/Accordion_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_Over.png b/indra/newview/skins/default/textures/containers/Accordion_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_Press.png b/indra/newview/skins/default/textures/containers/Accordion_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Accordion_Selected.png b/indra/newview/skins/default/textures/containers/Accordion_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Container.png b/indra/newview/skins/default/textures/containers/Container.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/TabTop_Left_Off.png b/indra/newview/skins/default/textures/containers/TabTop_Left_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/TabTop_Left_Selected.png b/indra/newview/skins/default/textures/containers/TabTop_Left_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/TabTop_Middle_Off.png b/indra/newview/skins/default/textures/containers/TabTop_Middle_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/TabTop_Middle_Selected.png b/indra/newview/skins/default/textures/containers/TabTop_Middle_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/TabTop_Right_Off.png b/indra/newview/skins/default/textures/containers/TabTop_Right_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/TabTop_Right_Selected.png b/indra/newview/skins/default/textures/containers/TabTop_Right_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Flash.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Flash.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Off.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Over.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Left_Selected.png b/indra/newview/skins/default/textures/containers/Toolbar_Left_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Flash.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Flash.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Off.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Over.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Middle_Selected.png b/indra/newview/skins/default/textures/containers/Toolbar_Middle_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Flash.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Flash.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Off.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Over.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/containers/Toolbar_Right_Selected.png b/indra/newview/skins/default/textures/containers/Toolbar_Right_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/crosshairs.tga b/indra/newview/skins/default/textures/crosshairs.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/default_land_picture.j2c b/indra/newview/skins/default/textures/default_land_picture.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/default_profile_picture.j2c b/indra/newview/skins/default/textures/default_profile_picture.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/direction_arrow.tga b/indra/newview/skins/default/textures/direction_arrow.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/down_arrow.png b/indra/newview/skins/default/textures/down_arrow.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/eye_button_active.tga b/indra/newview/skins/default/textures/eye_button_active.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/eye_button_inactive.tga b/indra/newview/skins/default/textures/eye_button_inactive.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/flatnormal.tga b/indra/newview/skins/default/textures/flatnormal.tga
new file mode 100644
index 0000000000000000000000000000000000000000..6d5abd17821b5589422617c7e5665a93def5a48a
Binary files /dev/null and b/indra/newview/skins/default/textures/flatnormal.tga differ
diff --git a/indra/newview/skins/default/textures/folder_arrow.tga b/indra/newview/skins/default/textures/folder_arrow.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/foot_shadow.j2c b/indra/newview/skins/default/textures/foot_shadow.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/green_checkmark.png b/indra/newview/skins/default/textures/green_checkmark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icn_media_movie.tga b/indra/newview/skins/default/textures/icn_media_movie.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icn_media_web.tga b/indra/newview/skins/default/textures/icn_media_web.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icon_avatar_offline.tga b/indra/newview/skins/default/textures/icon_avatar_offline.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icon_avatar_online.tga b/indra/newview/skins/default/textures/icon_avatar_online.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icon_diurnal.tga b/indra/newview/skins/default/textures/icon_diurnal.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icon_for_sale_adult.tga b/indra/newview/skins/default/textures/icon_for_sale_adult.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icon_top_pick.tga b/indra/newview/skins/default/textures/icon_top_pick.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/AddItem_Disabled.png b/indra/newview/skins/default/textures/icons/AddItem_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/AddItem_Off.png b/indra/newview/skins/default/textures/icons/AddItem_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/AddItem_Press.png b/indra/newview/skins/default/textures/icons/AddItem_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/AudioMute_Off.png b/indra/newview/skins/default/textures/icons/AudioMute_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/AudioMute_Over.png b/indra/newview/skins/default/textures/icons/AudioMute_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Audio_Off.png b/indra/newview/skins/default/textures/icons/Audio_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Audio_Press.png b/indra/newview/skins/default/textures/icons/Audio_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/BackArrow_Off.png b/indra/newview/skins/default/textures/icons/BackArrow_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Conv_log_inbox.png b/indra/newview/skins/default/textures/icons/Conv_log_inbox.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Copy.png b/indra/newview/skins/default/textures/icons/Copy.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/DownArrow_Off.png b/indra/newview/skins/default/textures/icons/DownArrow_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Edit_Wrench.png b/indra/newview/skins/default/textures/icons/Edit_Wrench.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png b/indra/newview/skins/default/textures/icons/ExternalBrowser_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Female.png b/indra/newview/skins/default/textures/icons/Female.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/ForSale_Badge.png b/indra/newview/skins/default/textures/icons/ForSale_Badge.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/ForwardArrow_Off.png b/indra/newview/skins/default/textures/icons/ForwardArrow_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/ForwardArrow_Press.png b/indra/newview/skins/default/textures/icons/ForwardArrow_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Generic_Group.png b/indra/newview/skins/default/textures/icons/Generic_Group.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Generic_Group_Large.png b/indra/newview/skins/default/textures/icons/Generic_Group_Large.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Generic_Object_Small.png b/indra/newview/skins/default/textures/icons/Generic_Object_Small.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Generic_Person.png b/indra/newview/skins/default/textures/icons/Generic_Person.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Generic_Person_Large.png b/indra/newview/skins/default/textures/icons/Generic_Person_Large.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png b/indra/newview/skins/default/textures/icons/Hierarchy_View_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Icon_For_Sale.png b/indra/newview/skins/default/textures/icons/Icon_For_Sale.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Info.png b/indra/newview/skins/default/textures/icons/Info.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Info_Over.png b/indra/newview/skins/default/textures/icons/Info_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Info_Small.png b/indra/newview/skins/default/textures/icons/Info_Small.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Alpha.png b/indra/newview/skins/default/textures/icons/Inv_Alpha.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Animation.png b/indra/newview/skins/default/textures/icons/Inv_Animation.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_BodyShape.png b/indra/newview/skins/default/textures/icons/Inv_BodyShape.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_CallingCard.png b/indra/newview/skins/default/textures/icons/Inv_CallingCard.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Clothing.png b/indra/newview/skins/default/textures/icons/Inv_Clothing.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Eye.png b/indra/newview/skins/default/textures/icons/Inv_Eye.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_FolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_FolderClosed.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_FolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_FolderOpen.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Gesture.png b/indra/newview/skins/default/textures/icons/Inv_Gesture.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Gloves.png b/indra/newview/skins/default/textures/icons/Inv_Gloves.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Hair.png b/indra/newview/skins/default/textures/icons/Inv_Hair.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Invalid.png b/indra/newview/skins/default/textures/icons/Inv_Invalid.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Jacket.png b/indra/newview/skins/default/textures/icons/Inv_Jacket.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Landmark.png b/indra/newview/skins/default/textures/icons/Inv_Landmark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Link.png b/indra/newview/skins/default/textures/icons/Inv_Link.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_LinkFolder.png b/indra/newview/skins/default/textures/icons/Inv_LinkFolder.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_LinkItem.png b/indra/newview/skins/default/textures/icons/Inv_LinkItem.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderClosed.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png b/indra/newview/skins/default/textures/icons/Inv_LookFolderOpen.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_LostClosed.png b/indra/newview/skins/default/textures/icons/Inv_LostClosed.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_LostOpen.png b/indra/newview/skins/default/textures/icons/Inv_LostOpen.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Mesh.png b/indra/newview/skins/default/textures/icons/Inv_Mesh.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Notecard.png b/indra/newview/skins/default/textures/icons/Inv_Notecard.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Object.png b/indra/newview/skins/default/textures/icons/Inv_Object.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png b/indra/newview/skins/default/textures/icons/Inv_Object_Multi.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Pants.png b/indra/newview/skins/default/textures/icons/Inv_Pants.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Physics.png b/indra/newview/skins/default/textures/icons/Inv_Physics.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Script.png b/indra/newview/skins/default/textures/icons/Inv_Script.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Shirt.png b/indra/newview/skins/default/textures/icons/Inv_Shirt.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Shoe.png b/indra/newview/skins/default/textures/icons/Inv_Shoe.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Skin.png b/indra/newview/skins/default/textures/icons/Inv_Skin.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Skirt.png b/indra/newview/skins/default/textures/icons/Inv_Skirt.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Snapshot.png b/indra/newview/skins/default/textures/icons/Inv_Snapshot.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Socks.png b/indra/newview/skins/default/textures/icons/Inv_Socks.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Sound.png b/indra/newview/skins/default/textures/icons/Inv_Sound.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_SysClosed.png b/indra/newview/skins/default/textures/icons/Inv_SysClosed.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_SysOpen.png b/indra/newview/skins/default/textures/icons/Inv_SysOpen.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Tattoo.png b/indra/newview/skins/default/textures/icons/Inv_Tattoo.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Texture.png b/indra/newview/skins/default/textures/icons/Inv_Texture.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png b/indra/newview/skins/default/textures/icons/Inv_TrashClosed.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png b/indra/newview/skins/default/textures/icons/Inv_TrashOpen.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Underpants.png b/indra/newview/skins/default/textures/icons/Inv_Underpants.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Inv_Undershirt.png b/indra/newview/skins/default/textures/icons/Inv_Undershirt.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/List_View_Disabled.png b/indra/newview/skins/default/textures/icons/List_View_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/List_View_On.png b/indra/newview/skins/default/textures/icons/List_View_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Lock.png b/indra/newview/skins/default/textures/icons/Lock.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Locked_Icon.png b/indra/newview/skins/default/textures/icons/Locked_Icon.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Male.png b/indra/newview/skins/default/textures/icons/Male.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Microphone_On.png b/indra/newview/skins/default/textures/icons/Microphone_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/MinusItem_Disabled.png b/indra/newview/skins/default/textures/icons/MinusItem_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/MinusItem_Off.png b/indra/newview/skins/default/textures/icons/MinusItem_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/MinusItem_Press.png b/indra/newview/skins/default/textures/icons/MinusItem_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Disabled.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Off.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OptionsMenu_Press.png b/indra/newview/skins/default/textures/icons/OptionsMenu_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png b/indra/newview/skins/default/textures/icons/OutboxPush_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Off.png b/indra/newview/skins/default/textures/icons/OutboxPush_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On.png b/indra/newview/skins/default/textures/icons/OutboxPush_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_On_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Press.png b/indra/newview/skins/default/textures/icons/OutboxPush_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_1.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_2.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_3.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_4.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_5.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png b/indra/newview/skins/default/textures/icons/OutboxPush_Progress_6.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png b/indra/newview/skins/default/textures/icons/OutboxPush_Selected_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_BuildNo_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Build_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Build_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_DamageNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_DamageNo_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Damage_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Damage_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Exp_Color.png b/indra/newview/skins/default/textures/icons/Parcel_Exp_Color.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_FlyNo_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Fly_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_ForSale_Light.png b/indra/newview/skins/default/textures/icons/Parcel_ForSale_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Health_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Health_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_M_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_M_Light.png b/indra/newview/skins/default/textures/icons/Parcel_M_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PG_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_PushNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_PushNo_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_PushNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_PushNo_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Push_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Push_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_R_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_R_Light.png b/indra/newview/skins/default/textures/icons/Parcel_R_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_ScriptsNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_ScriptsNo_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Scripts_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Scripts_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOff_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png b/indra/newview/skins/default/textures/icons/Parcel_SeeAVsOn_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Light.png b/indra/newview/skins/default/textures/icons/Parcel_VoiceNo_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Voice_Dark.png b/indra/newview/skins/default/textures/icons/Parcel_Voice_Dark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Parcel_Voice_Light.png b/indra/newview/skins/default/textures/icons/Parcel_Voice_Light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Pathfinding_Dirty.png b/indra/newview/skins/default/textures/icons/Pathfinding_Dirty.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Pathfinding_Disabled.png b/indra/newview/skins/default/textures/icons/Pathfinding_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Pause_Off.png b/indra/newview/skins/default/textures/icons/Pause_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Pause_Over.png b/indra/newview/skins/default/textures/icons/Pause_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Pause_Press.png b/indra/newview/skins/default/textures/icons/Pause_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Person_Check.png b/indra/newview/skins/default/textures/icons/Person_Check.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Person_Star.png b/indra/newview/skins/default/textures/icons/Person_Star.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Play_Off.png b/indra/newview/skins/default/textures/icons/Play_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Play_Over.png b/indra/newview/skins/default/textures/icons/Play_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Play_Press.png b/indra/newview/skins/default/textures/icons/Play_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_1.png b/indra/newview/skins/default/textures/icons/Progress_1.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_10.png b/indra/newview/skins/default/textures/icons/Progress_10.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_11.png b/indra/newview/skins/default/textures/icons/Progress_11.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_12.png b/indra/newview/skins/default/textures/icons/Progress_12.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_2.png b/indra/newview/skins/default/textures/icons/Progress_2.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_3.png b/indra/newview/skins/default/textures/icons/Progress_3.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_4.png b/indra/newview/skins/default/textures/icons/Progress_4.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_5.png b/indra/newview/skins/default/textures/icons/Progress_5.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_6.png b/indra/newview/skins/default/textures/icons/Progress_6.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_7.png b/indra/newview/skins/default/textures/icons/Progress_7.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_8.png b/indra/newview/skins/default/textures/icons/Progress_8.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Progress_9.png b/indra/newview/skins/default/textures/icons/Progress_9.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Refresh_Off.png b/indra/newview/skins/default/textures/icons/Refresh_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/SL_Logo.png b/indra/newview/skins/default/textures/icons/SL_Logo.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Search_Icon.png b/indra/newview/skins/default/textures/icons/Search_Icon.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Shirt_Large.png b/indra/newview/skins/default/textures/icons/Shirt_Large.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Shop.png b/indra/newview/skins/default/textures/icons/Shop.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/SkipBackward_Off.png b/indra/newview/skins/default/textures/icons/SkipBackward_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/SkipForward_Off.png b/indra/newview/skins/default/textures/icons/SkipForward_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/StopReload_Off.png b/indra/newview/skins/default/textures/icons/StopReload_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/StopReload_Over.png b/indra/newview/skins/default/textures/icons/StopReload_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Stop_Off.png b/indra/newview/skins/default/textures/icons/Stop_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Disabled.png b/indra/newview/skins/default/textures/icons/Sync_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Enabled.png b/indra/newview/skins/default/textures/icons/Sync_Enabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_1.png b/indra/newview/skins/default/textures/icons/Sync_Progress_1.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_2.png b/indra/newview/skins/default/textures/icons/Sync_Progress_2.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_3.png b/indra/newview/skins/default/textures/icons/Sync_Progress_3.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_4.png b/indra/newview/skins/default/textures/icons/Sync_Progress_4.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_5.png b/indra/newview/skins/default/textures/icons/Sync_Progress_5.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Sync_Progress_6.png b/indra/newview/skins/default/textures/icons/Sync_Progress_6.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Disabled.png b/indra/newview/skins/default/textures/icons/TrashItem_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Off.png b/indra/newview/skins/default/textures/icons/TrashItem_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/TrashItem_Press.png b/indra/newview/skins/default/textures/icons/TrashItem_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/UnZoom_Off.png b/indra/newview/skins/default/textures/icons/UnZoom_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/UpArrow_Off.png b/indra/newview/skins/default/textures/icons/UpArrow_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Lvl1.png b/indra/newview/skins/default/textures/icons/VoicePTT_Lvl1.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Lvl2.png b/indra/newview/skins/default/textures/icons/VoicePTT_Lvl2.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Lvl3.png b/indra/newview/skins/default/textures/icons/VoicePTT_Lvl3.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_Off.png b/indra/newview/skins/default/textures/icons/VoicePTT_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/VoicePTT_On.png b/indra/newview/skins/default/textures/icons/VoicePTT_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Web_Profile_Off.png b/indra/newview/skins/default/textures/icons/Web_Profile_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png b/indra/newview/skins/default/textures/icons/YouAreHere_Badge.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/Zoom_Off.png b/indra/newview/skins/default/textures/icons/Zoom_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/avaline_default_icon.jpg b/indra/newview/skins/default/textures/icons/avaline_default_icon.jpg
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_off.png b/indra/newview/skins/default/textures/icons/back_arrow_off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_over.png b/indra/newview/skins/default/textures/icons/back_arrow_over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/back_arrow_press.png b/indra/newview/skins/default/textures/icons/back_arrow_press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/check_mark.png b/indra/newview/skins/default/textures/icons/check_mark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/collapse_to_one_line.png b/indra/newview/skins/default/textures/icons/collapse_to_one_line.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/edit_mine.png b/indra/newview/skins/default/textures/icons/edit_mine.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/edit_theirs.png b/indra/newview/skins/default/textures/icons/edit_theirs.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/expand_one_liner.png b/indra/newview/skins/default/textures/icons/expand_one_liner.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/nearby_chat_icon.png b/indra/newview/skins/default/textures/icons/nearby_chat_icon.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/object_icon.png b/indra/newview/skins/default/textures/icons/object_icon.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/pop_up_caution.png b/indra/newview/skins/default/textures/icons/pop_up_caution.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/see_me_online.png b/indra/newview/skins/default/textures/icons/see_me_online.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/see_on_map.png b/indra/newview/skins/default/textures/icons/see_on_map.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/icons/unknown_icon.png b/indra/newview/skins/default/textures/icons/unknown_icon.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/jump_left_in.tga b/indra/newview/skins/default/textures/jump_left_in.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/jump_left_out.tga b/indra/newview/skins/default/textures/jump_left_out.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/jump_right_in.tga b/indra/newview/skins/default/textures/jump_right_in.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/jump_right_out.tga b/indra/newview/skins/default/textures/jump_right_out.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/lag_status_critical.tga b/indra/newview/skins/default/textures/lag_status_critical.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/lag_status_good.tga b/indra/newview/skins/default/textures/lag_status_good.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/lag_status_warning.tga b/indra/newview/skins/default/textures/lag_status_warning.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/legend.tga b/indra/newview/skins/default/textures/legend.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/locked_image.j2c b/indra/newview/skins/default/textures/locked_image.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_16.tga b/indra/newview/skins/default/textures/map_avatar_16.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_32.tga b/indra/newview/skins/default/textures/map_avatar_32.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_8.tga b/indra/newview/skins/default/textures/map_avatar_8.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_above_32.tga b/indra/newview/skins/default/textures/map_avatar_above_32.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_below_32.tga b/indra/newview/skins/default/textures/map_avatar_below_32.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_unknown_32.tga b/indra/newview/skins/default/textures/map_avatar_unknown_32.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_avatar_you_32.tga b/indra/newview/skins/default/textures/map_avatar_you_32.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_event.tga b/indra/newview/skins/default/textures/map_event.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_home.tga b/indra/newview/skins/default/textures/map_home.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_infohub.tga b/indra/newview/skins/default/textures/map_infohub.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_telehub.tga b/indra/newview/skins/default/textures/map_telehub.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/map_track_16.tga b/indra/newview/skins/default/textures/map_track_16.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/materials_ui_x_24.png b/indra/newview/skins/default/textures/materials_ui_x_24.png
new file mode 100644
index 0000000000000000000000000000000000000000..6d8855491483301b3de7e279d9d1b1f870f34246
Binary files /dev/null and b/indra/newview/skins/default/textures/materials_ui_x_24.png differ
diff --git a/indra/newview/skins/default/textures/menu_separator.png b/indra/newview/skins/default/textures/menu_separator.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/missing_asset.tga b/indra/newview/skins/default/textures/missing_asset.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png b/indra/newview/skins/default/textures/model_wizard/progress_bar_bg.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/model_wizard/progress_light.png b/indra/newview/skins/default/textures/model_wizard/progress_light.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Arrow_Left_Off.png b/indra/newview/skins/default/textures/navbar/Arrow_Left_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Arrow_Right_Off.png b/indra/newview/skins/default/textures/navbar/Arrow_Right_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png b/indra/newview/skins/default/textures/navbar/BuyArrow_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Link_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Active.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Active.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Off.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Over.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Favorite_Star_Press.png b/indra/newview/skins/default/textures/navbar/Favorite_Star_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/FileMenu_Divider.png b/indra/newview/skins/default/textures/navbar/FileMenu_Divider.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Flag.png b/indra/newview/skins/default/textures/navbar/Flag.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Help_Press.png b/indra/newview/skins/default/textures/navbar/Help_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Home_Off.png b/indra/newview/skins/default/textures/navbar/Home_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Info_Off.png b/indra/newview/skins/default/textures/navbar/Info_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Info_Over.png b/indra/newview/skins/default/textures/navbar/Info_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Info_Press.png b/indra/newview/skins/default/textures/navbar/Info_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Lock.png b/indra/newview/skins/default/textures/navbar/Lock.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG.png b/indra/newview/skins/default/textures/navbar/NavBar_BG.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG_NoFav_Bevel.png b/indra/newview/skins/default/textures/navbar/NavBar_BG_NoFav_Bevel.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/NavBar_BG_NoNav_Bevel.png b/indra/newview/skins/default/textures/navbar/NavBar_BG_NoNav_Bevel.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Row_Selection.png b/indra/newview/skins/default/textures/navbar/Row_Selection.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/Search.png b/indra/newview/skins/default/textures/navbar/Search.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/navbar/separator.png b/indra/newview/skins/default/textures/navbar/separator.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/notify_caution_icon.tga b/indra/newview/skins/default/textures/notify_caution_icon.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/pixiesmall.j2c b/indra/newview/skins/default/textures/pixiesmall.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/red_x.png b/indra/newview/skins/default/textures/red_x.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/rounded_square.j2c b/indra/newview/skins/default/textures/rounded_square.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/script_error.j2c b/indra/newview/skins/default/textures/script_error.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/silhouette.j2c b/indra/newview/skins/default/textures/silhouette.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/slim_icon_16_viewer.tga b/indra/newview/skins/default/textures/slim_icon_16_viewer.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/snapshot_download.png b/indra/newview/skins/default/textures/snapshot_download.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/snapshot_email.png b/indra/newview/skins/default/textures/snapshot_email.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/spacer24.tga b/indra/newview/skins/default/textures/spacer24.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/tabarea.tga b/indra/newview/skins/default/textures/tabarea.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png b/indra/newview/skins/default/textures/taskpanel/Activate_Checkmark.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Dock_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png b/indra/newview/skins/default/textures/taskpanel/Sidebar_Icon_Undock_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Close_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Close_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Home_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Me_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Open_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Open_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_People_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Places_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Off.png b/indra/newview/skins/default/textures/taskpanel/TabIcon_Things_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png b/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Selected.png b/indra/newview/skins/default/textures/taskpanel/TaskPanel_Tab_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/tearoff_pressed.tga b/indra/newview/skins/default/textures/tearoff_pressed.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/tearoffbox.tga b/indra/newview/skins/default/textures/tearoffbox.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/textures.xml b/indra/newview/skins/default/textures/textures.xml
old mode 100644
new mode 100755
index fcab966dee78df48b26057a4b3457de3a6dc4ad8..b0e4b71d21554f3672ed08ceb70dc652c4b0cd5b
--- a/indra/newview/skins/default/textures/textures.xml
+++ b/indra/newview/skins/default/textures/textures.xml
@@ -743,6 +743,7 @@ with the same filename but different name
   <texture name="default_land_picture.j2c" />
   <texture name="default_profile_picture.j2c" />
   <texture name="locked_image.j2c" />
+  <texture name="materials_ui_x_24.png" />
 
   <texture name="Progress_1" file_name="icons/Progress_1.png" preload="true" />
   <texture name="Progress_2" file_name="icons/Progress_2.png" preload="true" />
diff --git a/indra/newview/skins/default/textures/toolbar_icons/appearance.png b/indra/newview/skins/default/textures/toolbar_icons/appearance.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/avatars.png b/indra/newview/skins/default/textures/toolbar_icons/avatars.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/build.png b/indra/newview/skins/default/textures/toolbar_icons/build.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png b/indra/newview/skins/default/textures/toolbar_icons/caret_bottom.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_left.png b/indra/newview/skins/default/textures/toolbar_icons/caret_left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/caret_right.png b/indra/newview/skins/default/textures/toolbar_icons/caret_right.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/chat.png b/indra/newview/skins/default/textures/toolbar_icons/chat.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/destinations.png b/indra/newview/skins/default/textures/toolbar_icons/destinations.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/gestures.png b/indra/newview/skins/default/textures/toolbar_icons/gestures.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/howto.png b/indra/newview/skins/default/textures/toolbar_icons/howto.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/inventory.png b/indra/newview/skins/default/textures/toolbar_icons/inventory.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/land.png b/indra/newview/skins/default/textures/toolbar_icons/land.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/map.png b/indra/newview/skins/default/textures/toolbar_icons/map.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/marketplace.png b/indra/newview/skins/default/textures/toolbar_icons/marketplace.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png b/indra/newview/skins/default/textures/toolbar_icons/mini_cart.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/mini_map.png b/indra/newview/skins/default/textures/toolbar_icons/mini_map.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/move.png b/indra/newview/skins/default/textures/toolbar_icons/move.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/nearbyvoice.png b/indra/newview/skins/default/textures/toolbar_icons/nearbyvoice.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/outbox.png b/indra/newview/skins/default/textures/toolbar_icons/outbox.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/people.png b/indra/newview/skins/default/textures/toolbar_icons/people.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/picks.png b/indra/newview/skins/default/textures/toolbar_icons/picks.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/places.png b/indra/newview/skins/default/textures/toolbar_icons/places.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/preferences.png b/indra/newview/skins/default/textures/toolbar_icons/preferences.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/profile.png b/indra/newview/skins/default/textures/toolbar_icons/profile.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/search.png b/indra/newview/skins/default/textures/toolbar_icons/search.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/snapshot.png b/indra/newview/skins/default/textures/toolbar_icons/snapshot.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/speak.png b/indra/newview/skins/default/textures/toolbar_icons/speak.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/toolbar_icons/view.png b/indra/newview/skins/default/textures/toolbar_icons/view.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/transparent.j2c b/indra/newview/skins/default/textures/transparent.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/up_arrow.png b/indra/newview/skins/default/textures/up_arrow.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/uv_test1.j2c b/indra/newview/skins/default/textures/uv_test1.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/uv_test2.tga b/indra/newview/skins/default/textures/uv_test2.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/voice_meter_dot.j2c b/indra/newview/skins/default/textures/voice_meter_dot.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/voice_meter_rings.j2c b/indra/newview/skins/default/textures/voice_meter_rings.j2c
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/white.tga b/indra/newview/skins/default/textures/white.tga
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Down.png b/indra/newview/skins/default/textures/widgets/Arrow_Down.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Right.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Right.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Small_Up.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Arrow_Up.png b/indra/newview/skins/default/textures/widgets/Arrow_Up.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Background.png b/indra/newview/skins/default/textures/widgets/Badge_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Badge_Border.png b/indra/newview/skins/default/textures/widgets/Badge_Border.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Left_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Middle_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png b/indra/newview/skins/default/textures/widgets/BreadCrumbBtn_Right_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Disabled.png b/indra/newview/skins/default/textures/widgets/Checkbox_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Off.png b/indra/newview/skins/default/textures/widgets/Checkbox_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On.png b/indra/newview/skins/default/textures/widgets/Checkbox_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On_Disabled.png b/indra/newview/skins/default/textures/widgets/Checkbox_On_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_On_Press.png b/indra/newview/skins/default/textures/widgets/Checkbox_On_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Checkbox_Press.png b/indra/newview/skins/default/textures/widgets/Checkbox_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Disabled.png b/indra/newview/skins/default/textures/widgets/ComboButton_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Off.png b/indra/newview/skins/default/textures/widgets/ComboButton_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_On.png b/indra/newview/skins/default/textures/widgets/ComboButton_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_Selected.png b/indra/newview/skins/default/textures/widgets/ComboButton_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpOff.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png b/indra/newview/skins/default/textures/widgets/ComboButton_UpSelected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Off.png b/indra/newview/skins/default/textures/widgets/DisclosureArrow_Opened_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/DropDown_Disabled.png b/indra/newview/skins/default/textures/widgets/DropDown_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/DropDown_Off.png b/indra/newview/skins/default/textures/widgets/DropDown_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/DropDown_On.png b/indra/newview/skins/default/textures/widgets/DropDown_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/DropDown_Press.png b/indra/newview/skins/default/textures/widgets/DropDown_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/DropTarget.png b/indra/newview/skins/default/textures/widgets/DropTarget.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Error_Tag_Background.png b/indra/newview/skins/default/textures/widgets/Error_Tag_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Alert.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Alert.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png b/indra/newview/skins/default/textures/widgets/Linden_Dollar_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ListItem_Over.png b/indra/newview/skins/default/textures/widgets/ListItem_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ListItem_Select.png b/indra/newview/skins/default/textures/widgets/ListItem_Select.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png b/indra/newview/skins/default/textures/widgets/MarketplaceBtn_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/New_Tag_Background.png b/indra/newview/skins/default/textures/widgets/New_Tag_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/New_Tag_Border.png b/indra/newview/skins/default/textures/widgets/New_Tag_Border.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ProgressBar.png b/indra/newview/skins/default/textures/widgets/ProgressBar.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ProgressTrack.png b/indra/newview/skins/default/textures/widgets/ProgressTrack.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Disabled.png b/indra/newview/skins/default/textures/widgets/PushButton_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Off.png b/indra/newview/skins/default/textures/widgets/PushButton_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_On.png b/indra/newview/skins/default/textures/widgets/PushButton_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_On_Selected.png b/indra/newview/skins/default/textures/widgets/PushButton_On_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Over.png b/indra/newview/skins/default/textures/widgets/PushButton_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Press.png b/indra/newview/skins/default/textures/widgets/PushButton_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/PushButton_Selected_Press.png b/indra/newview/skins/default/textures/widgets/PushButton_Selected_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Disabled.png b/indra/newview/skins/default/textures/widgets/RadioButton_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Off.png b/indra/newview/skins/default/textures/widgets/RadioButton_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On.png b/indra/newview/skins/default/textures/widgets/RadioButton_On.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On_Disabled.png b/indra/newview/skins/default/textures/widgets/RadioButton_On_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_On_Press.png b/indra/newview/skins/default/textures/widgets/RadioButton_On_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/RadioButton_Press.png b/indra/newview/skins/default/textures/widgets/RadioButton_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Down_Over_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Left_Over_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Right_Over_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png b/indra/newview/skins/default/textures/widgets/ScrollArrow_Up_Over_Opaque.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz.png b/indra/newview/skins/default/textures/widgets/ScrollThumb_Horiz.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollThumb_Vert.png b/indra/newview/skins/default/textures/widgets/ScrollThumb_Vert.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollTrack_Horiz.png b/indra/newview/skins/default/textures/widgets/ScrollTrack_Horiz.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/ScrollTrack_Vert.png b/indra/newview/skins/default/textures/widgets/ScrollTrack_Vert.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Off.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Left_Selected_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Middle_Selected_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Off.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_On_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Over.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Disabled.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Press.png b/indra/newview/skins/default/textures/widgets/SegmentedBtn_Right_Selected_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Disabled.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Off.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SliderThumb_Press.png b/indra/newview/skins/default/textures/widgets/SliderThumb_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SliderTrack_Horiz.png b/indra/newview/skins/default/textures/widgets/SliderTrack_Horiz.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/SliderTrack_Vert.png b/indra/newview/skins/default/textures/widgets/SliderTrack_Vert.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Down_Off.png b/indra/newview/skins/default/textures/widgets/Stepper_Down_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Down_Press.png b/indra/newview/skins/default/textures/widgets/Stepper_Down_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Up_Off.png b/indra/newview/skins/default/textures/widgets/Stepper_Up_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Stepper_Up_Press.png b/indra/newview/skins/default/textures/widgets/Stepper_Up_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/TextField_Active.png b/indra/newview/skins/default/textures/widgets/TextField_Active.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/TextField_Disabled.png b/indra/newview/skins/default/textures/widgets/TextField_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/TextField_Off.png b/indra/newview/skins/default/textures/widgets/TextField_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Active.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Active.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Disabled.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Disabled.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/TextField_Search_Off.png b/indra/newview/skins/default/textures/widgets/TextField_Search_Off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/Tooltip.png b/indra/newview/skins/default/textures/widgets/Tooltip.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/bevel_background.png b/indra/newview/skins/default/textures/widgets/bevel_background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/buy_off.png b/indra/newview/skins/default/textures/widgets/buy_off.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/buy_over.png b/indra/newview/skins/default/textures/widgets/buy_over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/buy_press.png b/indra/newview/skins/default/textures/widgets/buy_press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/jump_left_in.png b/indra/newview/skins/default/textures/widgets/jump_left_in.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/jump_left_out.png b/indra/newview/skins/default/textures/widgets/jump_left_out.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/jump_right_in.png b/indra/newview/skins/default/textures/widgets/jump_right_in.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/widgets/jump_right_out.png b/indra/newview/skins/default/textures/widgets/jump_right_out.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Dragbar.png b/indra/newview/skins/default/textures/windows/Dragbar.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Flyout_Left.png b/indra/newview/skins/default/textures/windows/Flyout_Left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Flyout_Pointer.png b/indra/newview/skins/default/textures/windows/Flyout_Pointer.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Flyout_Right.png b/indra/newview/skins/default/textures/windows/Flyout_Right.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Close_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Press.png b/indra/newview/skins/default/textures/windows/Icon_Close_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Close_Toast.png b/indra/newview/skins/default/textures/windows/Icon_Close_Toast.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Dock_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Dock_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Dock_Press.png b/indra/newview/skins/default/textures/windows/Icon_Dock_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png b/indra/newview/skins/default/textures/windows/Icon_Gear_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Help_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Help_Press.png b/indra/newview/skins/default/textures/windows/Icon_Help_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png b/indra/newview/skins/default/textures/windows/Icon_Minimize_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png b/indra/newview/skins/default/textures/windows/Icon_Restore_Press.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Icon_Undock_Foreground.png b/indra/newview/skins/default/textures/windows/Icon_Undock_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Inspector_Background.png b/indra/newview/skins/default/textures/windows/Inspector_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Inspector_Hover.png b/indra/newview/skins/default/textures/windows/Inspector_Hover.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Inspector_I.png b/indra/newview/skins/default/textures/windows/Inspector_I.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Resize_Corner.png b/indra/newview/skins/default/textures/windows/Resize_Corner.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Toast_Background.png b/indra/newview/skins/default/textures/windows/Toast_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Toast_CloseBtn.png b/indra/newview/skins/default/textures/windows/Toast_CloseBtn.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Toast_Over.png b/indra/newview/skins/default/textures/windows/Toast_Over.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Volume_Background.png b/indra/newview/skins/default/textures/windows/Volume_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Wearables_Divider.png b/indra/newview/skins/default/textures/windows/Wearables_Divider.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Window_Background.png b/indra/newview/skins/default/textures/windows/Window_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Window_Foreground.png b/indra/newview/skins/default/textures/windows/Window_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png b/indra/newview/skins/default/textures/windows/Window_NoTitle_Foreground.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_down.png b/indra/newview/skins/default/textures/windows/hint_arrow_down.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png b/indra/newview/skins/default/textures/windows/hint_arrow_lower_left.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_right.png b/indra/newview/skins/default/textures/windows/hint_arrow_right.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/hint_arrow_up.png b/indra/newview/skins/default/textures/windows/hint_arrow_up.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/hint_background.png b/indra/newview/skins/default/textures/windows/hint_background.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/startup_logo.png b/indra/newview/skins/default/textures/windows/startup_logo.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/windows/yellow_gradient.png b/indra/newview/skins/default/textures/windows/yellow_gradient.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/world/BeaconArrow.png b/indra/newview/skins/default/textures/world/BeaconArrow.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/world/CameraDragDot.png b/indra/newview/skins/default/textures/world/CameraDragDot.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/world/NoEntryLines.png b/indra/newview/skins/default/textures/world/NoEntryLines.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/textures/world/NoEntryPassLines.png b/indra/newview/skins/default/textures/world/NoEntryPassLines.png
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_about.xml b/indra/newview/skins/default/xui/da/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_about_land.xml b/indra/newview/skins/default/xui/da/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_activeim.xml b/indra/newview/skins/default/xui/da/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_animation_preview.xml b/indra/newview/skins/default/xui/da/floater_animation_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_auction.xml b/indra/newview/skins/default/xui/da/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_picker.xml b/indra/newview/skins/default/xui/da/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_avatar_textures.xml b/indra/newview/skins/default/xui/da/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_beacons.xml b/indra/newview/skins/default/xui/da/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_build_options.xml b/indra/newview/skins/default/xui/da/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_bulk_perms.xml b/indra/newview/skins/default/xui/da/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_bumps.xml b/indra/newview/skins/default/xui/da/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_buy_contents.xml b/indra/newview/skins/default/xui/da/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency.xml b/indra/newview/skins/default/xui/da/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/da/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_buy_land.xml b/indra/newview/skins/default/xui/da/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_buy_object.xml b/indra/newview/skins/default/xui/da/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_camera.xml b/indra/newview/skins/default/xui/da/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_choose_group.xml b/indra/newview/skins/default/xui/da/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_color_picker.xml b/indra/newview/skins/default/xui/da/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_critical.xml b/indra/newview/skins/default/xui/da/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_display_name.xml b/indra/newview/skins/default/xui/da/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_event.xml b/indra/newview/skins/default/xui/da/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_font_test.xml b/indra/newview/skins/default/xui/da/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_gesture.xml b/indra/newview/skins/default/xui/da/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_god_tools.xml b/indra/newview/skins/default/xui/da/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_hardware_settings.xml b/indra/newview/skins/default/xui/da/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_help_browser.xml b/indra/newview/skins/default/xui/da/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_hud.xml b/indra/newview/skins/default/xui/da/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_im_container.xml b/indra/newview/skins/default/xui/da/floater_im_container.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_im_session.xml b/indra/newview/skins/default/xui/da/floater_im_session.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_image_preview.xml b/indra/newview/skins/default/xui/da/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_import_collada.xml b/indra/newview/skins/default/xui/da/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_incoming_call.xml b/indra/newview/skins/default/xui/da/floater_incoming_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_inspect.xml b/indra/newview/skins/default/xui/da/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_inventory.xml b/indra/newview/skins/default/xui/da/floater_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/da/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/da/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_joystick.xml b/indra/newview/skins/default/xui/da/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_lagmeter.xml b/indra/newview/skins/default/xui/da/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_land_holdings.xml b/indra/newview/skins/default/xui/da/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/da/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_lsl_guide.xml b/indra/newview/skins/default/xui/da/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_map.xml b/indra/newview/skins/default/xui/da/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_media_browser.xml b/indra/newview/skins/default/xui/da/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_media_settings.xml b/indra/newview/skins/default/xui/da/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_mem_leaking.xml b/indra/newview/skins/default/xui/da/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_model_preview.xml b/indra/newview/skins/default/xui/da/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_moveview.xml b/indra/newview/skins/default/xui/da/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_mute_object.xml b/indra/newview/skins/default/xui/da/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_nearby_chat.xml b/indra/newview/skins/default/xui/da/floater_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_openobject.xml b/indra/newview/skins/default/xui/da/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_outgoing_call.xml b/indra/newview/skins/default/xui/da/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_pay.xml b/indra/newview/skins/default/xui/da/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_pay_object.xml b/indra/newview/skins/default/xui/da/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_perm_prefs.xml b/indra/newview/skins/default/xui/da/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_postcard.xml b/indra/newview/skins/default/xui/da/floater_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_preferences.xml b/indra/newview/skins/default/xui/da/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_preview_animation.xml b/indra/newview/skins/default/xui/da/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_preview_gesture.xml b/indra/newview/skins/default/xui/da/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_preview_notecard.xml b/indra/newview/skins/default/xui/da/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_preview_sound.xml b/indra/newview/skins/default/xui/da/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_preview_texture.xml b/indra/newview/skins/default/xui/da/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_price_for_listing.xml b/indra/newview/skins/default/xui/da/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_publish_classified.xml b/indra/newview/skins/default/xui/da/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_region_debug_console.xml b/indra/newview/skins/default/xui/da/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_region_info.xml b/indra/newview/skins/default/xui/da/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_report_abuse.xml b/indra/newview/skins/default/xui/da/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_script_debug.xml b/indra/newview/skins/default/xui/da/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/da/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_script_limits.xml b/indra/newview/skins/default/xui/da/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_script_preview.xml b/indra/newview/skins/default/xui/da/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_script_queue.xml b/indra/newview/skins/default/xui/da/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_script_search.xml b/indra/newview/skins/default/xui/da/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_search.xml b/indra/newview/skins/default/xui/da/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_select_key.xml b/indra/newview/skins/default/xui/da/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_sell_land.xml b/indra/newview/skins/default/xui/da/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_settings_debug.xml b/indra/newview/skins/default/xui/da/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_snapshot.xml b/indra/newview/skins/default/xui/da/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_sound_devices.xml b/indra/newview/skins/default/xui/da/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_sound_preview.xml b/indra/newview/skins/default/xui/da/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_stats.xml b/indra/newview/skins/default/xui/da/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_sys_well.xml b/indra/newview/skins/default/xui/da/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_telehub.xml b/indra/newview/skins/default/xui/da/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/da/floater_texture_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_tools.xml b/indra/newview/skins/default/xui/da/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_top_objects.xml b/indra/newview/skins/default/xui/da/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_tos.xml b/indra/newview/skins/default/xui/da/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_url_entry.xml b/indra/newview/skins/default/xui/da/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_voice_controls.xml b/indra/newview/skins/default/xui/da/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_voice_effect.xml b/indra/newview/skins/default/xui/da/floater_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_web_content.xml b/indra/newview/skins/default/xui/da/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/da/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_window_size.xml b/indra/newview/skins/default/xui/da/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/floater_world_map.xml b/indra/newview/skins/default/xui/da/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/inspect_avatar.xml b/indra/newview/skins/default/xui/da/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/inspect_group.xml b/indra/newview/skins/default/xui/da/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/inspect_object.xml b/indra/newview/skins/default/xui/da/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/inspect_remote_object.xml b/indra/newview/skins/default/xui/da/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/language_settings.xml b/indra/newview/skins/default/xui/da/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/da/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_attachment_other.xml b/indra/newview/skins/default/xui/da/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_attachment_self.xml b/indra/newview/skins/default/xui/da/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_avatar_icon.xml b/indra/newview/skins/default/xui/da/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_avatar_other.xml b/indra/newview/skins/default/xui/da/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_avatar_self.xml b/indra/newview/skins/default/xui/da/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_bottomtray.xml b/indra/newview/skins/default/xui/da/menu_bottomtray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_cof_attachment.xml b/indra/newview/skins/default/xui/da/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_cof_body_part.xml b/indra/newview/skins/default/xui/da/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_cof_clothing.xml b/indra/newview/skins/default/xui/da/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_cof_gear.xml b/indra/newview/skins/default/xui/da/menu_cof_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_edit.xml b/indra/newview/skins/default/xui/da/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_favorites.xml b/indra/newview/skins/default/xui/da/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_gesture_gear.xml b/indra/newview/skins/default/xui/da/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_group_plus.xml b/indra/newview/skins/default/xui/da/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_hide_navbar.xml b/indra/newview/skins/default/xui/da/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/da/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/da/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/da/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/da/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/da/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inventory.xml b/indra/newview/skins/default/xui/da/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inventory_add.xml b/indra/newview/skins/default/xui/da/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/da/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_land.xml b/indra/newview/skins/default/xui/da/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_landmark.xml b/indra/newview/skins/default/xui/da/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_login.xml b/indra/newview/skins/default/xui/da/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_media_ctrl.xml b/indra/newview/skins/default/xui/da/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_mini_map.xml b/indra/newview/skins/default/xui/da/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/da/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_navbar.xml b/indra/newview/skins/default/xui/da/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_nearby_chat.xml b/indra/newview/skins/default/xui/da/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_notification_well_button.xml b/indra/newview/skins/default/xui/da/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_object.xml b/indra/newview/skins/default/xui/da/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_object_icon.xml b/indra/newview/skins/default/xui/da/menu_object_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_outfit_gear.xml b/indra/newview/skins/default/xui/da/menu_outfit_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_outfit_tab.xml b/indra/newview/skins/default/xui/da/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_participant_list.xml b/indra/newview/skins/default/xui/da/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_groups.xml b/indra/newview/skins/default/xui/da/menu_people_groups.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby.xml b/indra/newview/skins/default/xui/da/menu_people_nearby.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/da/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_picks.xml b/indra/newview/skins/default/xui/da/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_picks_plus.xml b/indra/newview/skins/default/xui/da/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_place.xml b/indra/newview/skins/default/xui/da/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_place_add_button.xml b/indra/newview/skins/default/xui/da/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/da/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/da/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_profile_overflow.xml b/indra/newview/skins/default/xui/da/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_save_outfit.xml b/indra/newview/skins/default/xui/da/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_script_chiclet.xml b/indra/newview/skins/default/xui/da/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_slurl.xml b/indra/newview/skins/default/xui/da/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/da/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/da/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/da/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_text_editor.xml b/indra/newview/skins/default/xui/da/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_topinfobar.xml b/indra/newview/skins/default/xui/da/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_agent.xml b/indra/newview/skins/default/xui/da/menu_url_agent.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_group.xml b/indra/newview/skins/default/xui/da/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_http.xml b/indra/newview/skins/default/xui/da/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_inventory.xml b/indra/newview/skins/default/xui/da/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_map.xml b/indra/newview/skins/default/xui/da/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_objectim.xml b/indra/newview/skins/default/xui/da/menu_url_objectim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_parcel.xml b/indra/newview/skins/default/xui/da/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_slapp.xml b/indra/newview/skins/default/xui/da/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_slurl.xml b/indra/newview/skins/default/xui/da/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_url_teleport.xml b/indra/newview/skins/default/xui/da/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_viewer.xml b/indra/newview/skins/default/xui/da/menu_viewer.xml
old mode 100644
new mode 100755
index d695cd1f896c446899361f744610017d054bba3f..f2ed7c2e64cf19dac5530625dece1f272c4b2c6f
--- a/indra/newview/skins/default/xui/da/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/da/menu_viewer.xml
@@ -245,7 +245,7 @@
 		<menu label="Gengivelse" name="Rendering">
 			<menu_item_check label="Akser" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Lys og skygger" name="Lighting and Shadows"/>
+			<menu_item_check label="Lys og skygger" name="Advanced Lighting Model"/>
 			<menu_item_check label="Skygger fra sol/måne/andre lyskilder" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO og skygge udjævning" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Globalt lys (eksperimentiel)" name="Global Illumination"/>
diff --git a/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/da/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_wearing_gear.xml b/indra/newview/skins/default/xui/da/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/menu_wearing_tab.xml b/indra/newview/skins/default/xui/da/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/mime_types.xml b/indra/newview/skins/default/xui/da/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/mime_types_linux.xml b/indra/newview/skins/default/xui/da/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/mime_types_mac.xml b/indra/newview/skins/default/xui/da/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/notifications.xml b/indra/newview/skins/default/xui/da/notifications.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/da/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_active_object_row.xml b/indra/newview/skins/default/xui/da/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/da/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/da/panel_avatar_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/da/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/da/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/da/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray.xml b/indra/newview/skins/default/xui/da/panel_bottomtray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/da/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_classified_info.xml b/indra/newview/skins/default/xui/da/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/da/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/da/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_cof_wearables.xml b/indra/newview/skins/default/xui/da/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/da/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/da/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_alpha.xml b/indra/newview/skins/default/xui/da/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_classified.xml b/indra/newview/skins/default/xui/da/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_eyes.xml b/indra/newview/skins/default/xui/da/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_gloves.xml b/indra/newview/skins/default/xui/da/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_hair.xml b/indra/newview/skins/default/xui/da/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_jacket.xml b/indra/newview/skins/default/xui/da/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_pants.xml b/indra/newview/skins/default/xui/da/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_physics.xml b/indra/newview/skins/default/xui/da/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_pick.xml b/indra/newview/skins/default/xui/da/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_profile.xml b/indra/newview/skins/default/xui/da/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_shape.xml b/indra/newview/skins/default/xui/da/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_shirt.xml b/indra/newview/skins/default/xui/da/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_shoes.xml b/indra/newview/skins/default/xui/da/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_skin.xml b/indra/newview/skins/default/xui/da/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_skirt.xml b/indra/newview/skins/default/xui/da/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_socks.xml b/indra/newview/skins/default/xui/da/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/da/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_underpants.xml b/indra/newview/skins/default/xui/da/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/da/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_edit_wearable.xml b/indra/newview/skins/default/xui/da/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_control_panel.xml b/indra/newview/skins/default/xui/da/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_general.xml b/indra/newview/skins/default/xui/da/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/da/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_invite.xml b/indra/newview/skins/default/xui/da/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_land_money.xml b/indra/newview/skins/default/xui/da/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_list_item.xml b/indra/newview/skins/default/xui/da/panel_group_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_notices.xml b/indra/newview/skins/default/xui/da/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_notify.xml b/indra/newview/skins/default/xui/da/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_group_roles.xml b/indra/newview/skins/default/xui/da/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_im_control_panel.xml b/indra/newview/skins/default/xui/da/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_inventory_item.xml b/indra/newview/skins/default/xui/da/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_landmark_info.xml b/indra/newview/skins/default/xui/da/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_landmarks.xml b/indra/newview/skins/default/xui/da/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_login.xml b/indra/newview/skins/default/xui/da/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_main_inventory.xml b/indra/newview/skins/default/xui/da/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_me.xml b/indra/newview/skins/default/xui/da/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_general.xml b/indra/newview/skins/default/xui/da/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/da/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_media_settings_security.xml b/indra/newview/skins/default/xui/da/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_navigation_bar.xml b/indra/newview/skins/default/xui/da/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/da/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_nearby_media.xml b/indra/newview/skins/default/xui/da/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_notify_textbox.xml b/indra/newview/skins/default/xui/da/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_online_status_toast.xml b/indra/newview/skins/default/xui/da/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_outfit_edit.xml b/indra/newview/skins/default/xui/da/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/da/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_list.xml b/indra/newview/skins/default/xui/da/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/da/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_people.xml b/indra/newview/skins/default/xui/da/panel_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_pick_info.xml b/indra/newview/skins/default/xui/da/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_picks.xml b/indra/newview/skins/default/xui/da/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_place_profile.xml b/indra/newview/skins/default/xui/da/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_places.xml b/indra/newview/skins/default/xui/da/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/da/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/da/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_chat.xml b/indra/newview/skins/default/xui/da/panel_preferences_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_colors.xml b/indra/newview/skins/default/xui/da/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_general.xml b/indra/newview/skins/default/xui/da/panel_preferences_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/da/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_move.xml b/indra/newview/skins/default/xui/da/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/da/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_setup.xml b/indra/newview/skins/default/xui/da/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_preferences_sound.xml b/indra/newview/skins/default/xui/da/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/da/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_region_covenant.xml b/indra/newview/skins/default/xui/da/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_region_debug.xml b/indra/newview/skins/default/xui/da/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_region_estate.xml b/indra/newview/skins/default/xui/da/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_region_general.xml b/indra/newview/skins/default/xui/da/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_region_terrain.xml b/indra/newview/skins/default/xui/da/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_region_texture.xml b/indra/newview/skins/default/xui/da/panel_region_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_script_ed.xml b/indra/newview/skins/default/xui/da/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/da/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/da/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_scrolling_param.xml b/indra/newview/skins/default/xui/da/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/da/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_side_tray.xml b/indra/newview/skins/default/xui/da/panel_side_tray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/da/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_sound_devices.xml b/indra/newview/skins/default/xui/da/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/da/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_status_bar.xml b/indra/newview/skins/default/xui/da/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history.xml b/indra/newview/skins/default/xui/da/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/da/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_voice_effect.xml b/indra/newview/skins/default/xui/da/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/panel_world_map.xml b/indra/newview/skins/default/xui/da/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/role_actions.xml b/indra/newview/skins/default/xui/da/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/sidepanel_appearance.xml b/indra/newview/skins/default/xui/da/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/sidepanel_inventory.xml b/indra/newview/skins/default/xui/da/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/sidepanel_item_info.xml b/indra/newview/skins/default/xui/da/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/sidepanel_task_info.xml b/indra/newview/skins/default/xui/da/sidepanel_task_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/strings.xml b/indra/newview/skins/default/xui/da/strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/teleport_strings.xml b/indra/newview/skins/default/xui/da/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/da/xui_version.xml b/indra/newview/skins/default/xui/da/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_about.xml b/indra/newview/skins/default/xui/de/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_about_land.xml b/indra/newview/skins/default/xui/de/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_activeim.xml b/indra/newview/skins/default/xui/de/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/de/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_auction.xml b/indra/newview/skins/default/xui/de/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_autoreplace.xml b/indra/newview/skins/default/xui/de/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_avatar.xml b/indra/newview/skins/default/xui/de/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_picker.xml b/indra/newview/skins/default/xui/de/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_avatar_textures.xml b/indra/newview/skins/default/xui/de/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_beacons.xml b/indra/newview/skins/default/xui/de/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_build_options.xml b/indra/newview/skins/default/xui/de/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_bulk_perms.xml b/indra/newview/skins/default/xui/de/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_bumps.xml b/indra/newview/skins/default/xui/de/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_buy_contents.xml b/indra/newview/skins/default/xui/de/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency.xml b/indra/newview/skins/default/xui/de/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/de/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_buy_land.xml b/indra/newview/skins/default/xui/de/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_buy_object.xml b/indra/newview/skins/default/xui/de/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_camera.xml b/indra/newview/skins/default/xui/de/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_chat_bar.xml b/indra/newview/skins/default/xui/de/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_choose_group.xml b/indra/newview/skins/default/xui/de/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_color_picker.xml b/indra/newview/skins/default/xui/de/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_conversation_log.xml b/indra/newview/skins/default/xui/de/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..19620a0fc9a514cef7859c5ea89d8e87f1bf17f3
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="UNTERHALTUNGSPROTOKOLL">
+	<panel name="buttons_panel">
+		<filter_editor label="Nach Personen filtern" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Aktionen für ausgewählte Person/Gruppe"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_conversation_preview.xml b/indra/newview/skins/default/xui/de/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..010ad19076db0f3648092a32405412f9d7f199d4
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="UNTERHALTUNG:">
+	<floater.string name="Title">
+		UNTERHALTUNG: [NAME]
+	</floater.string>
+	<text name="page_label" value="Seite"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_critical.xml b/indra/newview/skins/default/xui/de/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/de/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_destinations.xml b/indra/newview/skins/default/xui/de/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_display_name.xml b/indra/newview/skins/default/xui/de/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/de/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/de/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/de/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_environment_settings.xml b/indra/newview/skins/default/xui/de/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_event.xml b/indra/newview/skins/default/xui/de/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_fast_timers.xml b/indra/newview/skins/default/xui/de/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_font_test.xml b/indra/newview/skins/default/xui/de/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_gesture.xml b/indra/newview/skins/default/xui/de/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_god_tools.xml b/indra/newview/skins/default/xui/de/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_hardware_settings.xml b/indra/newview/skins/default/xui/de/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_help_browser.xml b/indra/newview/skins/default/xui/de/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_how_to.xml b/indra/newview/skins/default/xui/de/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_hud.xml b/indra/newview/skins/default/xui/de/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_im_container.xml b/indra/newview/skins/default/xui/de/floater_im_container.xml
old mode 100644
new mode 100755
index 95eda97938c13f076780058296e0630bfb6590ce..5bf916c8e989cb1263d28b86d47d52804c141e6d
--- a/indra/newview/skins/default/xui/de/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/de/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="GESPRÄCHE"/>
+<multi_floater name="floater_im_box" title="GESPRÄCHE">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+					<button name="add_btn" tool_tip="Neue Unterhaltung starten"/>
+					<button name="speak_btn" tool_tip="Über Ihr Mikrofon mit anderen sprechen"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Diese Liste schließen/erweitern"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Dieses Fenster schließen"/>
+					<text name="stub_textbox">
+						Diese Unterhaltung erscheint in einem separaten Fenster.   [secondlife:/// Zurückholen.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/de/floater_im_session.xml b/indra/newview/skins/default/xui/de/floater_im_session.xml
old mode 100644
new mode 100755
index abaf27565191c4bd18979ba083e76f8c802bbeb6..f96eb72cb1dd9d2a532dd86ba7f3ff6b5ff3ca70
--- a/indra/newview/skins/default/xui/de/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/de/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="An" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] wurde zur Unterhaltung eingeladen."/>
+	<floater.string name="multiple_participants_added" value="[NAME] wurden zur Unterhaltung eingeladen."/>
+	<floater.string name="tooltip_to_separate_window" value="Diese Unterhaltung in separates Fenster verschieben"/>
+	<floater.string name="tooltip_to_main_window" value="Diese Unterhaltung zurück ins Hauptfenster verschieben"/>
+	<floater.string name="start_call_button_tooltip" value="Voice-Verbindung öffnen"/>
+	<floater.string name="end_call_button_tooltip" value="Voice-Verbindung schließen"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Dieses Fenster schließen"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Teilnehmerliste schließen"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Teilnehmerliste erweitern"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+				<menu_button name="gear_btn" tool_tip="Aktionen für ausgewählte Person"/>
+				<button name="add_btn" tool_tip="Jemanden zu dieser Unterhaltung hinzufügen"/>
+				<button name="voice_call_btn" tool_tip="Voice-Verbindung öffnen"/>
+				<button name="close_btn" tool_tip="Diese Unterhaltung beenden"/>
+				<button name="expand_collapse_btn" tool_tip="Dieses Fenster schließen/erweitern"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Chat übersetzen" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="An" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Nachrichtenfenster anzeigen/ausblenden"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_image_preview.xml b/indra/newview/skins/default/xui/de/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_import_collada.xml b/indra/newview/skins/default/xui/de/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_incoming_call.xml b/indra/newview/skins/default/xui/de/floater_incoming_call.xml
old mode 100644
new mode 100755
index 213d9f54f5c9587471ca2344f41a7a44112a2473..f13842f4792a9b9b3696807eac8edda2f5141c12
--- a/indra/newview/skins/default/xui/de/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/de/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		Anonym
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		ruft an.
+		ruft Sie an.
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		ist einem Voice-Konferenz-Chat beigetreten.
@@ -25,9 +25,9 @@
 		Möchten Sie [CURRENT_CHAT] verlassen und diesem Voice-Chat beitreten?
 	</floater.string>
 	<text name="question">
-		Möchten Sie [CURRENT_CHAT] verlassen und diesem Voice-Chat beitreten?
+		Wenn Sie antworten, wird Ihre aktuelle Voice-Unterhaltung beendet.
 	</text>
-	<button label="Akzeptieren" label_selected="Akzeptieren" name="Accept"/>
-	<button label="Ablehnen" label_selected="Ablehnen" name="Reject"/>
-	<button label="IM starten" name="Start IM"/>
+	<button label="Annehmen" label_selected="Annehmen" name="Accept"/>
+	<button label="Ignorieren" label_selected="Ignorieren" name="Reject"/>
+	<button label="Stattdessen IM öffnen" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/de/floater_inspect.xml b/indra/newview/skins/default/xui/de/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/de/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/de/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_joystick.xml b/indra/newview/skins/default/xui/de/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_lagmeter.xml b/indra/newview/skins/default/xui/de/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_land_holdings.xml b/indra/newview/skins/default/xui/de/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/de/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_lsl_guide.xml b/indra/newview/skins/default/xui/de/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_map.xml b/indra/newview/skins/default/xui/de/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_media_browser.xml b/indra/newview/skins/default/xui/de/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_media_settings.xml b/indra/newview/skins/default/xui/de/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_mem_leaking.xml b/indra/newview/skins/default/xui/de/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/de/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_model_preview.xml b/indra/newview/skins/default/xui/de/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_moveview.xml b/indra/newview/skins/default/xui/de/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_mute_object.xml b/indra/newview/skins/default/xui/de/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_my_appearance.xml b/indra/newview/skins/default/xui/de/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_my_inventory.xml b/indra/newview/skins/default/xui/de/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_notification.xml b/indra/newview/skins/default/xui/de/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_notifications_console.xml b/indra/newview/skins/default/xui/de/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_object_weights.xml b/indra/newview/skins/default/xui/de/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_openobject.xml b/indra/newview/skins/default/xui/de/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/de/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_outgoing_call.xml b/indra/newview/skins/default/xui/de/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index ebf8f01632ff177b9f1838369b825381a8606b84..88e9f53a4c3966631553a878a6d577ddc609c08d
--- a/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/de/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Anzeigen:
 			</text>
-			<check_box label="Welt" name="show_world"/>
+			<check_box label="Test" name="show_world"/>
 			<check_box label="Nur bewegliche Objekte" name="show_world_movables_only"/>
 			<check_box label="Navmesh" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/de/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_pay.xml b/indra/newview/skins/default/xui/de/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_pay_object.xml b/indra/newview/skins/default/xui/de/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_people.xml b/indra/newview/skins/default/xui/de/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_perm_prefs.xml b/indra/newview/skins/default/xui/de/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_picks.xml b/indra/newview/skins/default/xui/de/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_places.xml b/indra/newview/skins/default/xui/de/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_post_process.xml b/indra/newview/skins/default/xui/de/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preferences.xml b/indra/newview/skins/default/xui/de/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/de/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preview_animation.xml b/indra/newview/skins/default/xui/de/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preview_gesture.xml b/indra/newview/skins/default/xui/de/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preview_notecard.xml b/indra/newview/skins/default/xui/de/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preview_sound.xml b/indra/newview/skins/default/xui/de/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_preview_texture.xml b/indra/newview/skins/default/xui/de/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_price_for_listing.xml b/indra/newview/skins/default/xui/de/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_publish_classified.xml b/indra/newview/skins/default/xui/de/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_region_debug_console.xml b/indra/newview/skins/default/xui/de/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_region_info.xml b/indra/newview/skins/default/xui/de/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_report_abuse.xml b/indra/newview/skins/default/xui/de/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug.xml b/indra/newview/skins/default/xui/de/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/de/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_script_limits.xml b/indra/newview/skins/default/xui/de/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_script_preview.xml b/indra/newview/skins/default/xui/de/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_script_queue.xml b/indra/newview/skins/default/xui/de/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_script_search.xml b/indra/newview/skins/default/xui/de/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_search.xml b/indra/newview/skins/default/xui/de/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_select_key.xml b/indra/newview/skins/default/xui/de/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_sell_land.xml b/indra/newview/skins/default/xui/de/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_settings_debug.xml b/indra/newview/skins/default/xui/de/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_snapshot.xml b/indra/newview/skins/default/xui/de/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_sound_devices.xml b/indra/newview/skins/default/xui/de/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_sound_preview.xml b/indra/newview/skins/default/xui/de/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_spellcheck.xml b/indra/newview/skins/default/xui/de/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/de/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_stats.xml b/indra/newview/skins/default/xui/de/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_sys_well.xml b/indra/newview/skins/default/xui/de/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_telehub.xml b/indra/newview/skins/default/xui/de/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/de/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/de/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index 9585622516b7a9623e85c74216c9ec51ead336e6..b794d879f0ff7f0f9c284386222ed269d5401f9a
--- a/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/de/floater_texture_ctrl.xml
@@ -20,7 +20,7 @@
 	<button label="Leer" label_selected="Leer" name="Blank"/>
 	<button label="Keine" label_selected="Keine" name="None"/>
 	<button label="" label_selected="" name="Pipette"/>
-	<check_box initial_value="true" label="Live-Vorschau" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="Jetzt übernehmen" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Vorschau deaktiviert"/>
 	<filter_editor label="Texturen filtern" name="inventory search editor"/>
 	<check_box initial_value="false" label="Ordner anzeigen" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/de/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/de/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_tools.xml b/indra/newview/skins/default/xui/de/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_top_objects.xml b/indra/newview/skins/default/xui/de/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_tos.xml b/indra/newview/skins/default/xui/de/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_toybox.xml b/indra/newview/skins/default/xui/de/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_translation_settings.xml b/indra/newview/skins/default/xui/de/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_url_entry.xml b/indra/newview/skins/default/xui/de/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/de/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..15259639e83175a7b4382bb4fa34f295dcfadf6e
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="VOICE-CHAT-LAUTSTÄRKE">
+	<slider label="Voice-Chat" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_controls.xml b/indra/newview/skins/default/xui/de/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_voice_effect.xml b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
old mode 100644
new mode 100755
index 413a46525c56146876bcb8fe4ee226097d0b577f..8d37950480abb2b9e6025d07570bebd386149d3c
--- a/indra/newview/skins/default/xui/de/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/de/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Orte" name="voice_effects" title="VOICE MORPHING">
+<floater label="Orte" name="voice_effects" title="VOICE-MORPHING-VORSCHAU">
 	<string name="no_voice_effect">
 		(Kein Voice-Morphing)
 	</string>
diff --git a/indra/newview/skins/default/xui/de/floater_voice_volume.xml b/indra/newview/skins/default/xui/de/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..258627c94f4fdf860b0ca9eab8572ab75dc394d9
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="LAUTSTÄRKE">
+	<slider name="volume_slider" tool_tip="Lautstärke" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/de/floater_web_content.xml b/indra/newview/skins/default/xui/de/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/de/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_window_size.xml b/indra/newview/skins/default/xui/de/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/floater_world_map.xml b/indra/newview/skins/default/xui/de/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/inspect_avatar.xml b/indra/newview/skins/default/xui/de/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/inspect_group.xml b/indra/newview/skins/default/xui/de/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/inspect_object.xml b/indra/newview/skins/default/xui/de/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/inspect_remote_object.xml b/indra/newview/skins/default/xui/de/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/language_settings.xml b/indra/newview/skins/default/xui/de/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/de/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_other.xml b/indra/newview/skins/default/xui/de/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_attachment_self.xml b/indra/newview/skins/default/xui/de/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_icon.xml b/indra/newview/skins/default/xui/de/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_other.xml b/indra/newview/skins/default/xui/de/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_avatar_self.xml b/indra/newview/skins/default/xui/de/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_cof_attachment.xml b/indra/newview/skins/default/xui/de/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_cof_body_part.xml b/indra/newview/skins/default/xui/de/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_cof_clothing.xml b/indra/newview/skins/default/xui/de/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_cof_gear.xml b/indra/newview/skins/default/xui/de/menu_cof_gear.xml
old mode 100644
new mode 100755
index 54b218d22f73509627db704a0d965f5f2175a2ad..2dd871b2eaac7afc05f9d2b61558c0162925de37
--- a/indra/newview/skins/default/xui/de/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear COF">
+<toggleable_menu name="Gear COF">
 	<menu label="Neue Kleider" name="COF.Gear.New_Clothes"/>
-	<menu label="Neue Körperteile" name="COF.Geear.New_Body_Parts"/>
-</menu>
+	<menu label="Neue Körperteile" name="COF.Gear.New_Body_Parts"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_conversation.xml b/indra/newview/skins/default/xui/de/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..30d3ab79e1a53bac35e0bc86c49eaedf61a21b50
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Unterhaltung schließen" name="close_conversation"/>
+	<menu_item_call label="Unterhaltung öffnen" name="open_voice_conversation"/>
+	<menu_item_call label="Voice-Verbindung trennen" name="disconnect_from_voice"/>
+	<menu_item_call label="Profil anzeigen" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Teleport anbieten" name="offer_teleport"/>
+	<menu_item_call label="Voice-Anruf" name="voice_call"/>
+	<menu_item_call label="Chatverlauf..." name="chat_history"/>
+	<menu_item_call label="Freund hinzufügen" name="add_friend"/>
+	<menu_item_call label="Freund entfernen" name="remove_friend"/>
+	<menu_item_call label="Freunde entfernen" name="remove_friends"/>
+	<menu_item_call label="In Gruppe einladen..." name="invite_to_group"/>
+	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
+	<menu_item_call label="Karte" name="map"/>
+	<menu_item_call label="Freigeben" name="share"/>
+	<menu_item_call label="Bezahlen" name="pay"/>
+	<menu_item_check label="Voice ignorieren" name="block_unblock"/>
+	<menu_item_check label="Text ignorieren" name="MuteText"/>
+	<menu_item_call label="Gruppenprofil" name="group_profile"/>
+	<menu_item_call label="Gruppe aktivieren" name="activate_group"/>
+	<menu_item_call label="Gruppe verlassen" name="leave_group"/>
+	<context_menu label="Moderatoroptionen" name="Moderator Options">
+		<menu_item_check label="Text-Chat zulassen" name="AllowTextChat"/>
+		<menu_item_call label="Diesen Teilnehmer stummschalten" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Stummschaltung für diesen Teilnehmer aufheben" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Alle stummschalten" name="ModerateVoiceMute"/>
+		<menu_item_call label="Stummschaltung für alle aufheben" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/de/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2ef876212819912c043c5ed8e837c007592cb499
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="IM..." name="IM"/>
+	<menu_item_call label="Voice-Anruf..." name="Call"/>
+	<menu_item_call label="Chatverlauf öffnen..." name="Chat history"/>
+	<menu_item_call label="Profil anzeigen" name="View Profile"/>
+	<menu_item_call label="Teleport anbieten" name="teleport"/>
+	<menu_item_call label="Freund hinzufügen" name="add_friend"/>
+	<menu_item_call label="Freund entfernen" name="remove_friend"/>
+	<menu_item_call label="In Gruppe einladen..." name="Invite"/>
+	<menu_item_call label="Karte" name="Map"/>
+	<menu_item_call label="Freigeben" name="Share"/>
+	<menu_item_call label="Bezahlen" name="Pay"/>
+	<menu_item_check label="Ignorieren/Nicht mehr ignorieren" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/de/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae3cc5bc970d5354c6fc92b947ca2dd4699acc5f
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Nach Namen sortieren" name="sort_by_name"/>
+	<menu_item_check label="Nach Datum sortieren" name="sort_by_date"/>
+	<menu_item_check label="Freunde oben anzeigen" name="sort_by_friends"/>
+	<menu_item_call label="Verlaufsliste für „Chat in der Nähe“ anzeigen..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_edit.xml b/indra/newview/skins/default/xui/de/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_favorites.xml b/indra/newview/skins/default/xui/de/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_gesture_gear.xml b/indra/newview/skins/default/xui/de/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_group_plus.xml b/indra/newview/skins/default/xui/de/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_hide_navbar.xml b/indra/newview/skins/default/xui/de/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_im_conversation.xml b/indra/newview/skins/default/xui/de/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..875524b19de39c6cd377b102b156cac1adb673b2
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Profil anzeigen" name="View Profile"/>
+	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
+	<menu_item_call label="Freund entfernen" name="remove_friend"/>
+	<menu_item_call label="Teleport anbieten" name="offer_teleport"/>
+	<menu_item_call label="In Gruppe einladen..." name="invite_to_group"/>
+	<menu_item_call label="Chatverlauf..." name="chat_history"/>
+	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
+	<menu_item_call label="Karte" name="map"/>
+	<menu_item_call label="Freigeben" name="Share"/>
+	<menu_item_call label="Bezahlen" name="Pay"/>
+	<menu_item_check label="Voice ignorieren" name="Block/Unblock"/>
+	<menu_item_check label="Text ignorieren" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/de/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..48f62d29a1095dff3faba227b4b394ad0e36b400
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Kompaktansicht" name="compact_view"/>
+	<menu_item_check label="Erweiterte Ansicht" name="expanded_view"/>
+	<menu_item_check label="Zeit anzeigen" name="IMShowTime"/>
+	<menu_item_check label="Namen in privaten Unterhaltungen anzeigen" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/de/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/de/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/de/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/de/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/de/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inventory.xml b/indra/newview/skins/default/xui/de/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inventory_add.xml b/indra/newview/skins/default/xui/de/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/de/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_land.xml b/indra/newview/skins/default/xui/de/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_landmark.xml b/indra/newview/skins/default/xui/de/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_login.xml b/indra/newview/skins/default/xui/de/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_media_ctrl.xml b/indra/newview/skins/default/xui/de/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_mini_map.xml b/indra/newview/skins/default/xui/de/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/de/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_navbar.xml b/indra/newview/skins/default/xui/de/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_nearby_chat.xml b/indra/newview/skins/default/xui/de/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_notification_well_button.xml b/indra/newview/skins/default/xui/de/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_object.xml b/indra/newview/skins/default/xui/de/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_object_icon.xml b/indra/newview/skins/default/xui/de/menu_object_icon.xml
old mode 100644
new mode 100755
index 8b6c558416ba3ea6016c277f240b7cacfdcb595c..f92fa0f82b7c512a6761c8eb0e2348079cf32c75
--- a/indra/newview/skins/default/xui/de/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/de/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Objektprofil..." name="Object Profile"/>
 	<menu_item_call label="Ignorieren..." name="Block"/>
+	<menu_item_call label="Auf Karte anzeigen" name="show_on_map"/>
+	<menu_item_call label="Zu Objektposition teleportieren" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/de/menu_outfit_gear.xml b/indra/newview/skins/default/xui/de/menu_outfit_gear.xml
old mode 100644
new mode 100755
index d56c93533cf24fa3c2dbcbf829add06d584bb07f..0cf3c09882bb17059fc452fef82890f48cb7aa92
--- a/indra/newview/skins/default/xui/de/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/de/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Neues Haar" name="New Hair"/>
 		<menu_item_call label="Neue Augen" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Alle Ordner erweitern" name="expand"/>
+	<menu_item_call label="Alle Ordner schließen" name="collapse"/>
 	<menu_item_call label="Outfit neu benennen" name="rename"/>
 	<menu_item_call label="Outfit löschen" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_outfit_tab.xml b/indra/newview/skins/default/xui/de/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_participant_list.xml b/indra/newview/skins/default/xui/de/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_participant_view.xml b/indra/newview/skins/default/xui/de/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ceb9ac4c5c7912ccd5bfbe640cb260c90b69618
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Unterhaltungen nach Typ sortieren" name="sort_sessions_by_type"/>
+	<menu_item_check label="Unterhaltungen nach Namen sortieren" name="sort_sessions_by_name"/>
+	<menu_item_check label="Unterhaltungen nach jüngster Aktivität sortieren" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Teilnehmer nach Namen sortieren" name="sort_participants_by_name"/>
+	<menu_item_check label="Teilnehmer nach jüngster Aktivität sortieren" name="sort_participants_by_recent"/>
+	<menu_item_call label="Chat-Einstellungen..." name="chat_preferences"/>
+	<menu_item_call label="Privatsphäre-Einstellungen..." name="privacy_preferences"/>
+	<menu_item_check label="Unterhaltungsprotokoll..." name="Conversation"/>
+	<menu_item_check label="Chat in der Nähe übersetzen" name="Translate_chat"/>
+	<menu_item_check label="Übersetzungseinstellungen..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f69a453e58c89ba29d02a02ef62a831764615c11
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="Nicht mehr ignorieren" name="unblock"/>
+	<menu_item_call label="Profil..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/de/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..041fde139db837485ff5a39b4df4c733fc511fb1
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Einwohner nach Namen ignorieren..." name="block_resident_by_name"/>
+	<menu_item_call label="Objekt nach Namen ignorieren" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/de/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1dae593ebe84af8fe25dfe796a1ab2f85d5d5bdb
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Nach Namen sortieren" name="sort_by_name"/>
+	<menu_item_check label="Nach Typ sortieren" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_friends_view.xml b/indra/newview/skins/default/xui/de/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..da4890fe96ceeba7eb8d0436191d066b01671261
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Nach Namen sortieren" name="sort_name"/>
+	<menu_item_check label="Nach Status sortieren" name="sort_status"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+	<menu_item_check label="Erteilte Genehmigungen anzeigen" name="view_permissions"/>
+	<menu_item_check label="Unterhaltungsprotokoll anzeigen..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_people_groups.xml b/indra/newview/skins/default/xui/de/menu_people_groups.xml
old mode 100644
new mode 100755
index 76225ba2414e10156718d78c14b0888bb7b09f49..a69c82d3d85ef43020ba40e90cd9c7e469472e96
--- a/indra/newview/skins/default/xui/de/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Info anzeigen" name="View Info"/>
 	<menu_item_call label="Chat" name="Chat"/>
-	<menu_item_call label="Anrufen" name="Call"/>
+	<menu_item_call label="Voice-Anruf" name="Call"/>
 	<menu_item_call label="Aktivieren" name="Activate"/>
 	<menu_item_call label="Verlassen" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_groups_view.xml b/indra/newview/skins/default/xui/de/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20386bba567f379fb6f3c7b64afa1864f0138a75
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Gruppensymbole anzeigen" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby.xml b/indra/newview/skins/default/xui/de/menu_people_nearby.xml
old mode 100644
new mode 100755
index 1db964357fe9bbcf2b561dc5586fa3b531a1d9dd..cdbb3ae917c19c18ce9cc1a3b8dff42b80873f62
--- a/indra/newview/skins/default/xui/de/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Profil anzeigen" name="View Profile"/>
-	<menu_item_call label="Freund hinzufügen" name="Add Friend"/>
-	<menu_item_call label="Freund entfernen" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Anrufen" name="Call"/>
-	<menu_item_call label="Karte" name="Map"/>
-	<menu_item_call label="Teilen" name="Share"/>
-	<menu_item_call label="Bezahlen" name="Pay"/>
-	<menu_item_check label="Ignorieren/Freischalten" name="Block/Unblock"/>
-	<menu_item_call label="Teleport anbieten" name="teleport"/>
+	<menu_item_call label="Profil anzeigen" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Teleport anbieten" name="offer_teleport"/>
+	<menu_item_call label="Voice-Anruf" name="voice_call"/>
+	<menu_item_call label="Chatverlauf anzeigen..." name="chat_history"/>
+	<menu_item_call label="Freund hinzufügen" name="add_friend"/>
+	<menu_item_call label="Freund entfernen" name="remove_friend"/>
+	<menu_item_call label="In Gruppe einladen..." name="invite_to_group"/>
+	<menu_item_call label="Hineinzoomen" name="zoom_in"/>
+	<menu_item_call label="Karte" name="map"/>
+	<menu_item_call label="Freigeben" name="share"/>
+	<menu_item_call label="Bezahlen" name="pay"/>
+	<menu_item_check label="Ignorieren/Nicht mehr ignorieren" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index b6e99edfe1fdfa716d31cf5484bdd7a8eab3af26..ba6578e2d1d8cedfa19d884ac74c8e93da0bb7dd
--- a/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Freunde hinzufügen" name="Add Friends"/>
-	<menu_item_call label="Freunde entfernen" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Anrufen" name="Call"/>
-	<menu_item_call label="Teilen" name="Share"/>
-	<menu_item_call label="Bezahlen" name="Pay"/>
-	<menu_item_call label="Teleport anbieten" name="teleport"/>
+	<menu_item_call label="Freunde hinzufügen" name="add_friends"/>
+	<menu_item_call label="Freunde entfernen" name="remove_friends"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Anrufen" name="call"/>
+	<menu_item_call label="Freigeben" name="share"/>
+	<menu_item_call label="Bezahlen" name="pay"/>
+	<menu_item_call label="Teleport anbieten" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d38ec65037661b26f08063a5a02091fc8c9600dc
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Nach letzten Sprechern sortieren" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Nach Namen sortieren" name="sort_name"/>
+	<menu_item_check label="Nach Nähe sortieren" name="sort_distance"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+	<menu_item_check label="Karte anzeigen" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_people_recent_view.xml b/indra/newview/skins/default/xui/de/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a116ad0bc166b0de78c55eefde679ee8771bed38
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Nach jüngsten sortieren" name="sort_most"/>
+	<menu_item_check label="Nach Namen sortieren" name="sort_name"/>
+	<menu_item_check label="Symbole für Personen anzeigen" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/de/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_picks.xml b/indra/newview/skins/default/xui/de/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_picks_plus.xml b/indra/newview/skins/default/xui/de/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_place.xml b/indra/newview/skins/default/xui/de/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_place_add_button.xml b/indra/newview/skins/default/xui/de/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/de/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/de/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_profile_overflow.xml b/indra/newview/skins/default/xui/de/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_save_outfit.xml b/indra/newview/skins/default/xui/de/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_script_chiclet.xml b/indra/newview/skins/default/xui/de/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_slurl.xml b/indra/newview/skins/default/xui/de/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/de/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_text_editor.xml b/indra/newview/skins/default/xui/de/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_toolbars.xml b/indra/newview/skins/default/xui/de/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_topinfobar.xml b/indra/newview/skins/default/xui/de/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_agent.xml b/indra/newview/skins/default/xui/de/menu_url_agent.xml
old mode 100644
new mode 100755
index 9a808088fbeebd8681eab0915973f1139b77b7b5..c61ebb0eae29fcfa781d38ea3ca77c2a2abcb43b
--- a/indra/newview/skins/default/xui/de/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/de/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Einwohnerprofil anzeigen" name="show_agent"/>
+	<menu_item_call label="Profil anzeigen" name="show_agent"/>
+	<menu_item_call label="IM senden..." name="send_im"/>
+	<menu_item_call label="Freund hinzufügen..." name="add_friend"/>
 	<menu_item_call label="Name in Zwischenablage kopieren" name="url_copy_label"/>
 	<menu_item_call label="SLurl in die Zwischenablage kopieren" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/de/menu_url_group.xml b/indra/newview/skins/default/xui/de/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_http.xml b/indra/newview/skins/default/xui/de/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_inventory.xml b/indra/newview/skins/default/xui/de/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_map.xml b/indra/newview/skins/default/xui/de/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_objectim.xml b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
old mode 100644
new mode 100755
index 90d3763d9c0871d794cd9619c55b275057f11778..77b7004e44f398928bdb80597d41d2e70c50e2df
--- a/indra/newview/skins/default/xui/de/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/de/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Objektinformationen anzeigen" name="show_object"/>
+	<menu_item_call label="Objektprofil..." name="show_object"/>
 	<menu_item_call label="Auf Karte zeigen" name="show_on_map"/>
 	<menu_item_call label="Zu Objekt-Position teleportieren" name="teleport_to_object"/>
 	<menu_item_call label="Objektname in Zwischenablage kopieren" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/de/menu_url_parcel.xml b/indra/newview/skins/default/xui/de/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_slapp.xml b/indra/newview/skins/default/xui/de/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_slurl.xml b/indra/newview/skins/default/xui/de/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_url_teleport.xml b/indra/newview/skins/default/xui/de/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_viewer.xml b/indra/newview/skins/default/xui/de/menu_viewer.xml
old mode 100644
new mode 100755
index 845df1f0503fdbb9c11a0e8b6702d337dd68888c..47d9fec35276a4c25c6710782db1b0a8005bdc9e
--- a/indra/newview/skins/default/xui/de/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/de/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Animation meines Avatars stoppen" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Gehen/Rennen/Fliegen..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Status" name="Status">
-			<menu_item_call label="Abwesend" name="Set Away"/>
-			<menu_item_call label="Beschäftigt" name="Set Busy"/>
-		</menu>
+		<menu label="Status" name="Status"/>
 		<menu_item_call label="L$ kaufen..." name="Buy and Sell L$"/>
 		<menu_item_call label="Händler-Outbox..." name="MerchantOutbox"/>
 		<menu_item_call label="Kontoübersicht..." name="Manage My Account">
@@ -32,14 +29,18 @@
 		<menu_item_call label="[APP_NAME] schließen" name="Quit"/>
 	</menu>
 	<menu label="Unterhalten" name="Communicate">
-		<menu_item_check label="Chat..." name="Nearby Chat"/>
+		<menu_item_check label="Unterhaltungen..." name="Conversations"/>
+		<menu_item_check label="Chat in der Nähe..." name="Nearby Chat"/>
 		<menu_item_check label="Sprechen" name="Speak"/>
-		<menu_item_check label="Voice-Einstellungen..." name="Nearby Voice"/>
-		<menu_item_check label="Voice-Morphing..." name="ShowVoice"/>
+		<menu label="Voice-Morphing" name="VoiceMorphing">
+			<menu_item_check label="Kein Voice-Morphing" name="NoVoiceMorphing"/>
+			<menu_item_check label="Vorschau..." name="Preview"/>
+			<menu_item_call label="Abonnieren..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Gesten..." name="Gestures"/>
-		<menu_item_call label="Freunde" name="My Friends"/>
-		<menu_item_call label="Gruppen" name="My Groups"/>
-		<menu_item_call label="Leute in der Nähe" name="Active Speakers"/>
+		<menu_item_check label="Freunde" name="My Friends"/>
+		<menu_item_check label="Gruppen" name="My Groups"/>
+		<menu_item_check label="Leute in der Nähe" name="Active Speakers"/>
 		<menu_item_call label="Blockierliste" name="Block List"/>
 	</menu>
 	<menu label="Welt" name="World">
@@ -115,7 +116,6 @@
 			<menu_item_call label="Kaufen" name="Menu Object Buy"/>
 			<menu_item_call label="Nehmen" name="Menu Object Take"/>
 			<menu_item_call label="Kopie nehmen" name="Take Copy"/>
-			<menu_item_call label="Objekt wieder in meinem Inventar speichern" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Wieder in Objektinhalt speichern" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="Objekt zurückgeben" name="Return Object back to Owner"/>
 		</menu>
@@ -130,6 +130,7 @@
 			<menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="Figuren..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="Anzeigen/Testen..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="Region neu formen" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="Optionen" name="Options">
 			<menu_item_check label="Erweiterte Berechtigungen anzeigen" name="DebugPermissions"/>
@@ -159,6 +160,13 @@
 	<menu label="Hilfe" name="Help">
 		<menu_item_call label="Anweisungen..." name="How To"/>
 		<menu_item_call label="[SECOND_LIFE]-Hilfe" name="Second Life Help"/>
+		<menu_item_call label="Benutzerhandbuch" name="User’s guide"/>
+		<menu_item_call label="Knowledge Base" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="Community-Foren" name="Community Forums"/>
+		<menu_item_call label="Support-Portal" name="Support portal"/>
+		<menu_item_call label="[SECOND_LIFE]-Neuigkeiten" name="Second Life News"/>
+		<menu_item_call label="[SECOND_LIFE]-Blogs" name="Second Life Blogs"/>
 		<menu_item_call label="Missbrauch melden" name="Report Abuse"/>
 		<menu_item_call label="Fehler melden" name="Report Bug"/>
 		<menu_item_call label="INFO ÜBER [APP_NAME]" name="About Second Life"/>
@@ -307,7 +315,7 @@
 			<menu_item_call label="Texturinfo für ausgewähltes Objekt" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
 			<menu_item_check label="Objekt-Objekt Okklusion" name="Object-Object Occlusion"/>
-			<menu_item_check label="Licht und Schatten" name="Lighting and Shadows"/>
+			<menu_item_check label="Uber Licht Modell" name="Advanced Lighting Model"/>
 			<menu_item_check label="Schatten von Sonne-/Mond-Projektoren" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO und Schattenglättung" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Fehler in GL beseitigen" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/de/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_wearing_gear.xml b/indra/newview/skins/default/xui/de/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/menu_wearing_tab.xml b/indra/newview/skins/default/xui/de/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/mime_types.xml b/indra/newview/skins/default/xui/de/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/mime_types_linux.xml b/indra/newview/skins/default/xui/de/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/mime_types_mac.xml b/indra/newview/skins/default/xui/de/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/notifications.xml b/indra/newview/skins/default/xui/de/notifications.xml
old mode 100644
new mode 100755
index 4b7a60b4eb74601204601f9fa6ed7f75f0dbb638..dc0d7dc6b4b6ebcf73d33006044f688429ba03b3
--- a/indra/newview/skins/default/xui/de/notifications.xml
+++ b/indra/newview/skins/default/xui/de/notifications.xml
@@ -523,6 +523,24 @@ Weitere Informationen finden Sie auf [_URL].
 		</url>
 		<usetemplate ignoretext="Mein Grafiktreiber ist veraltet" name="okcancelignore" notext="Nein" yestext="Ja"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		Wahrscheinlich gibt es einen neueren Treiber für Ihren Grafikchip.  Durch Aktualisieren der Grafiktreiber lässt sich die Leistung u. U. beträchtlich verbessern.
+
+    Unter [_URL] nach aktualisierten Treibern suchen?
+		<url name="url">
+			http://support.amd.com/de/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Mein Grafiktreiber ist veraltet" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		Wahrscheinlich gibt es einen neueren Treiber für Ihren Grafikchip.  Durch Aktualisieren der Grafiktreiber lässt sich die Leistung u. U. beträchtlich verbessern.
+
+    Unter [_URL] nach aktualisierten Treibern suchen?
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=de-de
+		</url>
+		<usetemplate ignoretext="Mein Grafiktreiber ist veraltet" name="okcancelignore" notext="Nein" yestext="Ja"/>
+	</notification>
 	<notification name="UnknownGPU">
 		Ihr System verwendet eine Grafikkarte, die [APP_NAME] nicht erkennt.
 Dies passiert dann, wenn die neue Hardware noch nicht mit [APP_NAME] getestet wurde.  Wahrscheinlich wird das Programm richtig ausgeführt, aber Sie müssen eventuell ein paar Grafikeinstellungen vornehmen.
@@ -1558,10 +1576,13 @@ Diese Gruppe verlassen?
 		Sie können gerade keine Freundschaft anbieten. Warten Sie kurz und versuchen Sie es dann noch einmal.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		Beschäftigt-Modus ist aktiviert.
-Chat und Instant Messages werden ausgeblendet. Instant Messages (Sofortnachrichten) erhalten Ihre Beschäftigt-Antwort. Alle Teleport-Angebote werden abgelehnt. Alle Inventar-Angebote werden in Ihren Papierkorb geschoben.
-		<usetemplate ignoretext="Ich ändere meinen Status zu Beschäftigt" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		Nicht-stören-Modus ist aktiviert:  Sie erhalten keine Benachrichtigung über eingehende Kommunikation.
+
+- Andere Einwohner erhalten Ihre Nicht-stören-Antwort (festgelegt in Einstellungen &gt; Allgemein).
+- Teleport-Angebote werden abgelehnt.
+- Voice-Anrufe werden abgelehnt.
+		<usetemplate ignoretext="Ich ändere meinen Status zu „Nicht stören“" name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Sie haben die maximale Anzahl an Gruppen erreicht. Bitte verlassen Sie eine andere Gruppe, um dieser beitreten zu können oder lehnen Sie das Angebot ab.
@@ -2049,6 +2070,10 @@ Inventarobjekt(e) verschieben?
 		Möchten Sie Ihre [http://secondlife.com/account/ Startseite] aufrufen, um Ihre Konto-Statistik anzuzeigen?
 		<usetemplate ignoretext="Meinen Browser starten, um meine Konto-Statistik anzuzeigen" name="okcancelignore" notext="Abbrechen" yestext="Gehe zu Seite"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		Wenn Sie eine Person zu einer vorhandenen Unterhaltung hinzufügen, wird eine neue Unterhaltung erstellt.  Alle Teilnehmer erhalten neue Unterhaltungsbenachrichtigungen.
+		<usetemplate ignoretext="Hinzufügen von Chat-Teilnehmern bestätigen" name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		Wirklich beenden?
 		<usetemplate ignoretext="Bestätigen, bevor Sitzung beendet wird" name="okcancelignore" notext="Nicht beenden" yestext="Beenden"/>
@@ -2122,14 +2147,14 @@ Möchten Sie es mit dem ausgewählten Objekt ersetzen?
 			<button ignore="Nie ersetzen" name="No" text="Abbrechen"/>
 		</form>
 	</notification>
-	<notification label="Beschäftigt-Modus-Warnung" name="BusyModePay">
-		Sie sind im Beschäftigt-Modus, sodass Sie im Austausch für diese Zahlung keine Objekte erhalten können.
+	<notification label="Warnung für Nicht-stören-Modus" name="DoNotDisturbModePay">
+		Sie haben den Nicht-stören-Modus aktiviert. Sie erhalten keine Artikel, die im Gegenzug für diese Zahlung angeboten werden.
 
-Möchten Sie den Bechäftigt-Modus verlassen, bevor Sie diese Transaktion abschließen?
+Möchten Sie den Nicht-stören-Modus deaktivieren, bevor Sie diese Transaktion abschließen?
 		<form name="form">
-			<ignore name="ignore" save_option="true" text="Ich bin im Begriff eine Person oder ein Objekt zu bezahlen, während ich im Modus Beschäftigt bin."/>
-			<button ignore="Beschäftigt-Modus immer deaktivieren" name="Yes" text="OK"/>
-			<button ignore="Beschäftigt-Modus aktiviert lassen" name="No" text="Abbrechen"/>
+			<ignore name="ignore" text="Ich bin im Begriff eine Person oder ein Objekt zu bezahlen, während ich im Nicht-stören-Modus bin."/>
+			<button ignore="„Nicht stören“-Modus immer verlassen" name="Yes" text="OK"/>
+			<button ignore="„Nicht stören“-Modus nie verlassen" name="No" text="Abbrechen"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2264,11 +2289,8 @@ Von einer Webseite zu diesem Formular linken, um anderen leichten Zugang zu dies
 	<notification name="GroupNotice">
 		Betreff: [SUBJECT], Nachricht: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; ist online
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; ist offline
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; ist [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Obwohl Sie ein sehr netter Mensch sind, können Sie sich nicht selbst als Freund hinzufügen.
@@ -2496,13 +2518,6 @@ Fliegen ist hier nicht möglich.
 	<notification name="DynamicPathfindingDisabled">
 		Dynamisches Pathfinding ist in dieser Region nicht aktiviert. Geskriptete Objekte, die Pathfinding-LSL-Aufrufe verwenden, funktionieren in dieser Region u. U. nicht wie erwartet.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		Wenn Sie bestimmte Objekte in dieser Region ändern, verhalten sich andere bewegliche Objekte u. U. inkorrekt. Um dieses Problem zu beheben, klicken Sie auf die Schaltfläche „Region neu formen“. Um weitere Informationen zu erhalten, klicken Sie auf „Hilfe“.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Hilfe" ignoretext="Wenn Sie bestimmte Objekte in dieser Region ändern, verhalten sich andere bewegliche Objekte u. U. inkorrekt." name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Fehler aufgetreten. Möglicherweise ist ein Netzwerk- oder Serverproblem aufgetreten oder Sie haben nicht die erforderlichen Baurechte. Dieses Problem lässt sich manchmal durch Ab- und Anmelden lösen.
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2765,7 +2780,7 @@ Ist das OK?
 	<notification name="ScriptQuestionCaution">
 		Achtung: Das Objekt „&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;“ fordert uneingeschränkten Zugriff auf Ihr Linden-Dollar-Konto an. Wenn Sie Zugriff gewähren, kann dieses Objekt jederzeit und ohne weitere Warnung Ihr Konto belasten bzw. ganz leeren.
   
-Eine solche Anforderung ist nur in seltenen Fällen legitim. Gewähren Sie dem Objekt nur dann Zugriff, wenn Sie genau verstehen, wieso ein solcher Zugriff auf Ihr Konto erforderlich ist.
+Gewähren Sie dem Objekt nur dann Zugriff, wenn Sie genau verstehen, wieso ein solcher Zugriff auf Ihr Konto erforderlich ist.
 		<form name="form">
 			<button name="Grant" text="Uneingeschränkten Zugriff gewähren"/>
 			<button name="Deny" text="Verweigern"/>
@@ -3346,4 +3361,633 @@ Versuch abgebrochen.
 		Sie sind dabei, [NUM_ITEMS] Objekte zu löschen. Möchten Sie diesen Vorgang wirklich fortsetzen?
 		<usetemplate ignoretext="Möchten Sie wirklich mehrere Objekte löschen?" name="okcancelignore" notext="Nein" yestext="Ja"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] hat Sie eingefroren. Sie können sich nicht bewegen oder mit der Welt interagieren.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] hat Sie [AV_FREEZE_TIME] Sekunden lang eingefroren. Sie können sich nicht bewegen oder mit der Welt interagieren.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Avatar eingefroren.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] hat Sie aufgetaut.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Avatar aufgetaut.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		Einfrieren fehlgeschlagen, da Sie keine Berechtigung für diese Parzelle haben.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		Sie sind nicht mehr eingefroren und können sich frei bewegen.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Dieser Benutzer kann nicht eingefroren werden.
+	</notification>
+	<notification name="NowOwnObject">
+		Sie sind jetzt Eigentümer des Objekts [OBJECT_NAME]
+	</notification>
+	<notification name="CantRezOnLand">
+		Objekt kann nicht an [OBJECT_POS] gerezzt werden, da der Landeigentümer dies nicht zulässt.  Machen Sie den Landeigentümer mit dem Landwerkzeug ausfindig.
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		Objekt kann nicht gerezzt werden, da zu viele Anforderungen vorliegen.
+	</notification>
+	<notification name="SitFailCantMove">
+		Sie können sich nicht hinsetzen, da Sie zur Zeit unbeweglich sind.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		Sie können sich nicht hinsetzen, da Sie auf diesem Land keine Berechtigung dazu haben.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Kommen Sie näher heran.  Sitzen auf Objekt nicht möglich, da
+es sich nicht in der gleichen Region befindet wie Sie.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		Neues Objekt kann nicht erstellt werden. Die Region ist voll.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Objekt konnte nicht an festgelegtem Ort platziert werden.  Versuchen Sie es erneut.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		Auf Land, das Sie nicht besitzen, können Sie keine Bäume und Gräser erstellen.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		Kopieren fehlgeschlagen, da Sie keine Berechtigung zum Kopieren des Objekts „OBJ_NAME]“ besitzen.
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		Kopieren fehlgeschlagen, weil Objekt „[OBJ_NAME]“ nicht an Sie übertragen werden kann.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		Kopieren fehlgeschlagen, weil Objekt „[OBJ_NAME]“ zum Navmesh beiträgt.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Ohne ausgewählte Hauptobjekte duplizieren.
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		Objekte können nicht dupliziert werden, da die Region voll ist.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		Objekte können nicht dupliziert werden, da die Parzelle, in der sie sich befinden, nicht auffindbar ist.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		Objekt kann nicht erstellt werden, da 
+die Parzelle voll ist.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Versuch zum Rezzen eines Objekts fehlgeschlagen.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		Objekt, das in dieser Region zu Problemen geführt hat, kann nicht erstellt werden.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		Dieses Inventarobjekt ist auf der schwarzen Liste.
+	</notification>
+	<notification name="NoCanRezObjects">
+		Sie können gegenwärtig keine Objekte erstellen.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Landsuche blockiert.
+Sie haben zu viele Landsuchen in zu kurzer Zeit durchgeführt.
+Warten Sie kurz und versuchen Sie es noch einmal.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		Nicht genügend Skriptressourcen verfügbar, um Objekt anzuhängen.
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Sie sind gestorben und wurden nach Hause teleportiert
+	</notification>
+	<notification name="EjectComingSoon">
+		Sie nicht hier nicht mehr zugelassen und haben [EJECT_TIME] Sekunden Zeit, um zu gehen.
+	</notification>
+	<notification name="NoEnterServerFull">
+		Sie können diese Region nicht betreten, da 
+der Server voll ist.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Erneutes Speichern im Inventar ist deaktiviert.
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		„[OBJ_NAME]“ kann nicht im Objektinhalt gespeichert werden, da das Objekt, aus dem es gerezzt wurde, nicht mehr existiert.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		„[OBJ_NAME]“ kann nicht in Objektinhalt gespeichert werden, da Sie nicht die Berechtigung zum Modifizieren des Objekts „[DEST_NAME]“ besitzen.
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		„[OBJ_NAME]“ kann nicht erneut im Inventar gespeichert werden – dieser Vorgang wurde deaktiviert.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		Sie können Ihre Auswahl nicht kopieren, da Sie nicht die Berechtigung zum Kopieren des Objekts „[OBJ_NAME]“ haben.
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		Sie können Ihre Auswahl nicht kopieren, da das Objekt „[OBJ_NAME]“ nicht übertragbar ist.
+	</notification>
+	<notification name="NoTransNoCopy">
+		Sie können Ihre Auswahl nicht kopieren, da das Objekt „[OBJ_NAME]“ nicht übertragbar ist.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		Entfernen des Objekts „[OBJ_NAME]“ aus dem Simulator wird vom Berechtigungssystem nicht gestattet.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		Sie können Ihre Auswahl nicht speichern, da Sie keine Berechtigung zum Modifizieren des Objekts „[OBJ_NAME]“ besitzen.
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		Ihre Auswahl kann nicht gespeichert werden, da das Objekt „[OBJ_NAME]“ nicht kopiert werden kann.
+	</notification>
+	<notification name="NoModNoTaking">
+		Sie können Ihre Auswahl nicht in Empfang nehmen, da Sie nicht die Berechtigung zum Modifizieren des Objekts „[OBJ_NAME]“ haben.
+	</notification>
+	<notification name="RezDestInternalError">
+		Interner Fehler: Unbekannter Zielttyp.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		Löschen fehlgeschlagen, da Objekt nicht gefunden wurde
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Dieser Benutzer kann nicht hinausgeworfen werden.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Diese Region gestattet nicht, dass Sie hier Ihr Zuhause festlegen.
+	</notification>
+	<notification name="HomeLocationLimits">
+		Ihr Zuhause kann sich nur auf Ihrem eigenen Land oder in einem Infohub auf dem Mainland befinden.
+	</notification>
+	<notification name="HomePositionSet">
+		Position für Zuhause festgelegt.
+	</notification>
+	<notification name="AvatarEjected">
+		Avatar hinausgeworfen.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		Hinauswerfen fehlgeschlagen, da Sie keine Admin-Berechtigung für diese Parzelle haben.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		Objekt „[OBJECT_NAME]“ kann nicht nach
+[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da die Parzelle voll ist.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		Objekt „[OBJECT_NAME]“ kann nicht nach
+[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da Ihre Objekte auf dieser Parzelle nicht gestattet sind.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		Objekt „[OBJECT_NAME]“ kann nicht nach
+[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da nicht genügend Ressourcen für dieses Objekt auf dieser Parzelle vorhanden sind.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		Objekt „[OBJECT_NAME]“ kann nicht nach
+[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da die andere Region eine ältere Version verwendet, die das Empfangen dieses Objekts per Regionswechsel nicht unterstützt.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		Objekt „[OBJECT_NAME]“ kann nicht nach
+[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da Sie das Navmesh nicht regionsübergreifend modifizieren können.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		Objekt „[OBJECT_NAME]“ kann nicht nach
+[OBJ_POSITION] in Region [REGION_NAME] verschoben werden, da ein unbekannter Fehler vorliegt. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		Ihnen fehlt die Berechtigung zum Modifizieren dieses Objekts.
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		Physik kann nicht für ein Objekt aktiviert werden, das zum Navmesh beiträgt.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		Physik für Keyframe-Objekte kann nicht aktiviert werden.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		Physik für Objekte kann nicht aktiviert werden – nicht genügend Landressourcen.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		Physik für Objekt mit Physikressourcenkosten höher als [MAX_OBJECTS] kann nicht aktiviert werden.
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Dieses Objekt kann kein konkaves Teil enthalten, da es ein Phantom ist und zum Navmesh beiträgt.
+	</notification>
+	<notification name="UnableAddItem">
+		Objekt konnte nicht hinzugefügt werden.
+	</notification>
+	<notification name="UnableEditItem">
+		Kein Bearbeiten möglich.
+	</notification>
+	<notification name="NoPermToEdit">
+		Bearbeiten nicht gestattet.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		Kopieren dieses Inventars nicht gestattet.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		Kein Speichern in Objektinhalt möglich: Objekt nicht mehr vorhanden.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		Kein Speichern in Objektinhalt möglich: Artikel mit diesem Namen ist bereits im Inventar vorhanden.
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		Kein Speichern in Objektinhalt möglich: Dadurch würden die Anhängeberechtigungen geändert.
+	</notification>
+	<notification name="TooManyScripts">
+		Zu viele Skripts.
+	</notification>
+	<notification name="UnableAddScript">
+		Skript konnte nicht hinzugefügt werden.
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		Asset-Server hat nicht rechtzeitig reagiert.  Objekt wurde zum Sim zurückübertragen.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		In dieser Region sind keine Physikformen aktiviert.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		Sie können das Navmesh nicht regionsübergreifend modifizieren.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		Für diesen Objekttyp können keine Physikeigenschaften gesetzt werden.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		Hauptprim kann nicht auf formlos eingestellt werden.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		In dieser Region sind keine Physikmaterialien aktiviert.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		Nur bei Hauptprims können die Physikmaterialien angepasst werden.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		Die Anwendung von Physikmaterialien auf Personen wird noch nicht unterstützt.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Eine oder mehrere der angegebenen Eigenschaften für Physikmaterialien waren ungültig.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		Sie können den Nahttyp eines Mesh-Objekts nicht ändern.
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		Sie können die Form eines Mesh-Objekts nicht ändern.
+	</notification>
+	<notification name="FullRegionCantEnter">
+		Sie können diese Region nicht betreten, \nda die Region voll ist.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Verknüpfungsfehler – Eigentümer sind unterschiedlich
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Verknüpfungsfehler – Navmesh kann nicht regionsübergreifend modifiziert werden.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Verknüpfungsfehler, da Sie keine Berechtigung zum Bearbeiten haben.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Verknüpfungsfehler – zu viele Primitive
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Verknüpfungsfehler – nichtkopierfähige Objekte können nicht mit nichtübertragungsfähigen Objekten verknüpft werden
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Verknüpfungsfehler – nichts zum Verknüpfen vorhanden.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Verknüpfungsfehler – zu viele Pathfinding-Figuren
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Verknüpfungsfehler – nicht genügend Landressourcen
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		Objekt verwendet zu viele Physikressourcen – seine Dynamik wurde deaktiviert.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		Sie wurden vom Objekt „[OBJECT_NAME]“ auf der Parzelle „[PARCEL_NAME]“ nach Hause teleportiert
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		Sie wurden von Objekt „[OBJECT_NAME]“ nach Hause teleportiert.
+	</notification>
+	<notification name="TeleportedByAttachment">
+		Sie wurden von einem Anhang an [ITEM_ID] teleportiert
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		Sie wurden von Objekt „[OBJECT_NAME]“ auf der Parzelle „[PARCEL_NAME]“ teleportiert
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Sie wurden von Objekt „[OBJECT_NAME]“, das [OWNER_ID] gehört, teleportiert
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Sie wurden von Objekt „[OBJECT_NAME]“, das einem unbekannten Benutzer gehört, teleportiert.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		Angefordertes Objekt kann nicht erstellt werden. Die Region ist voll.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		Sie können nicht mehrere Objekte an ein und derselben Stelle anhängen.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Sie können hier nicht mehrere Objekte erstellen.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		Angefordertes Objekt kann nicht erstellt werden. Objekt fehlt in Datenbank.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		Angefordertes Objekt kann nicht erstellt werden. Zeitüberschreitung bei Anforderung. Versuchen Sie es erneut.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		Angefordertes Objekt kann nicht erstellt werden. Versuchen Sie es erneut.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Fehler beim Rezzen; Laden des angeforderten Objekts hat zu lang gedauert.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Objekt konnte nicht an angegebenem Ort platziert werden.  Versuchen Sie es erneut.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		Auf diesem Land können keine Pflanzen erstellt werden.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		Objekt kann nicht wiederhergestellt werden. Keine Weltposition gefunden.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		Objekt kann nicht gerezzt werden, da seine Meshdaten ungültig sind.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		Objekt kann nicht gerezzt werden, da die Region bereits zu viele Skripts aufweist.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Ihr Zugangsberechtigungen gestatten nicht das Erstellen von Objekten an dieser Stelle.
+	</notification>
+	<notification name="CantCreateObject">
+		Sie können gegenwärtig keine Objekte erstellen.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Ungültige Objektparameter
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Ihre Zugangsberechtigungen gestatten nicht das Duplizieren von Objekten an dieser Stelle.
+	</notification>
+	<notification name="CantChangeShape">
+		Sie können diese Form nicht ändern.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Ihr Zugangsberechtigungen gestatten nicht das Beanspruchen von Objekten an dieser Stelle.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		Übertragung fehlgeschlagen, da Sie keine Berechtigung zum Übertragen von Objekten für Ihre Gruppe haben.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Ihr Zugangsberechtigungen gestatten nicht das Kaufen von Objekten an dieser Stelle.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		Objekt kann nicht angehängt werden, da ein Avatar darauf sitzt.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		Bäume und Gräser können nicht als Anhänge getragen werden.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		Objekte im Gruppenbesitz können nicht angehängt werden.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		Objekte, die Ihnen nicht gehören, können nicht angehängt werden.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		Objekte, die zum Navmesh beitragen, können nicht angehängt werden.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		Objekt kann nicht angehängt werden, weil Sie es nicht verschieben dürfen.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		Nicht genügend Skriptressourcen verfügbar, um Objekt anzuhängen.
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		Ablegen von Objekten hier nicht möglich; versuchen Sie es mit dem kostenlosen Testbereich.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		Sie können keine Mesh-Anhänge ablegen. In Inventar zurückführen und inworld rezzen.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		Anhang konnte nicht abgelegt werden: Ihnen fehlt die Berechtigung zum Ablegen an dieser Stelle.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		Anhang konnte nicht abgelegt werden: nicht genügend Landressourcen verfügbar.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Anhänge konnten nicht abgelegt werden: nicht genügend Ressourcen.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		Objekt kann nicht hier abgelegt werden.  Die Parzelle ist voll.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		Dieses Objekt kann nicht berührt/angefasst werden, da Sie von der Landparzelle verbannt sind.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Grenzen Sie Ihre Löschparameter ein.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		Asset kann nicht hochgeladen werden.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		Keinen Benutzer zum Teleportieren nach Hause gefunden
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		Anforderdung nach übernatürlichen Kräften fehlgeschlagen
+	</notification>
+	<notification name="GenericRequestFailed">
+		generische Anforderdung fehlgeschlagen
+	</notification>
+	<notification name="CantUploadPostcard">
+		Postkarte kann nicht hochgeladen werden.  Versuchen Sie es später erneut.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		Inventardetails für Gruppenmitteilung kann nicht abgerufen werden.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		Gruppenmitteilung kann nicht gesendet werden – Vorgang nicht gestattet.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		Gruppenmitteilung kann nicht gesendet werden – Bauen von Inventar nicht möglich.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		Inventar in Mitteilung kann nicht geparst werden.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Fehler beim Hochladen von Terrain.
+	</notification>
+	<notification name="TerrainFileWritten">
+		Terraindatei geschrieben.
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		Terraindatei geschrieben, Download beginnt...
+	</notification>
+	<notification name="TerrainBaked">
+		Terrain geformt.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Nur die ersten 10 ausgewählten Objekte wurden deaktiviert. Aktualisieren Sie die Anzeige und wählen Sie ggf. weitere Objekte aus.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Um diese Parzelle zu kaufen, müssen Sie Ihren Viewer aktualisieren.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Kein Kauf möglich; die ausgewählte Parzelle steht nicht zum Verkauf.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		Kein Kauf möglich, da sich der Verkaufspreis oder die Fläche geändert haben.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		Sie sind nicht der autorisierte Käufer dieser Parzelle.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		Sie können diese Parzelle nicht kaufen, da sie bereits auf Kaufauthorisierung wartet.
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		Sie können hier keine Objekte bauen, denn dies würde den Rahmen der Parzelle sprengen.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		Sie haben Land mit unterschiedlichen Besitzern ausgewählt. Wählen Sie ein kleineres Gebiet aus und versuchen Sie es erneut.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		Auswahl enthält nicht genügend gemietete Parzellen zum Zusammenlegen.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		Land kann nicht geteilt werden.\nMehr als eine Parzelle ist ausgewählt.\nWählen Sie ein kleineres Stück Land aus.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		Land kann nicht geteilt werden.\nParzelle nicht auffindbar.\nMelden Sie das Problem über „Hilfe“ -&gt; „Fehler melden“...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		Land kann nicht geteilt werden. Die gesamte Parzelle ist ausgewählt.\nWählen Sie ein kleineres Stück Land aus.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		Land wurde geteilt.
+	</notification>
+	<notification name="PassPurchased">
+		Sie haben einen Pass gekauft.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		Region lässt keine Werbung zu.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Ihr Pass für dieses Land läuft demnächst ab.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Keine geeignete Oberfläche zum Sitzen; probieren Sie es an einer anderen Stelle.
+	</notification>
+	<notification name="CantSitNoRoom">
+		Kein Platz zum Hinsetzen; probieren Sie es an einer anderen Stelle.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		Objektbeanspruchung fehlgeschlagen, da Sie keine Berechtigung haben.
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		Objektbeanspruchung fehlgeschlagen, da Sie nicht genügend L$ haben.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		Land in Gruppenbesitz kann nicht übertragen werden.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		Objektkauf fehlgeschlagen, da Sie nicht genügend L$ haben.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		Inventarkauf fehlgeschlagen, da Sie nicht genügend L$ haben.
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		Sie haben nicht genügend L$, um einen Pass für dieses Land zu kaufen.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		Passkauf momentan nicht möglich.  Versuchen Sie es später erneut.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		Objekt kann nicht erstellt werden, \nda die Parzelle voll ist.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Objekt konnte nicht an festgelegtem Ort platziert werden.  Versuchen Sie es erneut.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		Landmarke für dieses Ereignis kann nicht erstellt werden.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		Ihre übernatürlichen Kräfte heben das Einfrieren auf!
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Anforderung nach Superpower fehlgeschlagen. Diese Anforderung wurde protokolliert.
+	</notification>
+	<notification name="ExpireExplanation">
+		Das System kann Ihre Anfrage momentan nicht verarbeiten. Zeitüberschreitung bei Anforderung.
+	</notification>
+	<notification name="DieExplanation">
+		Das System kann Ihre Anfrage nicht verarbeiten.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		Sie haben nicht genügend Geld, um Primitive zu erstellen.
+	</notification>
+	<notification name="RezObjectFailure">
+		Sie haben nicht genügend Geld, um Objekt zu erstellen.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Zuhause-Position neu festlegen, da Zuhause nicht zulässig war.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		Sie können gegenwärtig niemanden an Ihren Standort einladen, da die Region voll ist. Versuchen Sie es später erneut.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Diese Region gestattet nicht, dass Sie hier Ihr Zuhause festlegen.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		Ihr Zuhause kann sich nur auf Ihrem eigenen Land oder in einem Infohub auf dem Mainland befinden.
+	</notification>
+	<notification name="SetHomePosition">
+		Position für Zuhause festgelegt.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		Aufgrund eines Inventarfehlers kann das Rezzen dieses Objekts nicht aufgehoben werden.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		Angefordertes Inventar kann nicht erstellt werden.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		Angeforderter Inventarordner kann nicht erstellt werden.
+	</notification>
+	<notification name="CantCreateInventory">
+		Dieses Inventar kann nicht erstellt werden.
+	</notification>
+	<notification name="CantCreateLandmark">
+		Landmarke kann nicht erstellt werden.
+	</notification>
+	<notification name="CantCreateOutfit">
+		Im Moment kann kein Outfit erstellt werden. Versuchen Sie es gleich noch einmal.
+	</notification>
+	<notification name="InventoryNotForSale">
+		Inventar steht nicht zum Verkauf.
+	</notification>
+	<notification name="CantFindInvItem">
+		Inventarobjekt kann nicht gefunden werden.
+	</notification>
+	<notification name="CantFindObject">
+		Objekt kann nicht gefunden werden.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		Geldüberweisungen an Objekte sind in dieser Region gegenwärtig deaktiviert.
+	</notification>
+	<notification name="CantPayNoAgent">
+		Nicht ersichtlich, wer bezahlt werden muss.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		Sie können öffentlichen Objekten keine L$ geben.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Inventarerstellung für Inworld-Objekt fehlgeschlagen.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Aufgrund eines internen Fehlers konnte Ihr Viewer nicht ordnungsgemäß aktualisiert werden.  Der in Ihrem Viewer angezeigte L$-Kontostand oder Parzellenbesitz stimmt möglicherweise nicht mit dem aktuellen Stand auf den Servern überein.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		Große Prims, die sich mit anderen Spielern überschneiden, können nicht erstellt werden.  Bitte erneut versuchen, wenn sich die anderen Spieler bewegt haben.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Dadurch werden die Protokolle vorheriger Unterhaltungen und alle Backups dieser Datei gelöscht.
+		<usetemplate ignoretext="Löschen des Protokolls vorheriger Unterhaltungen bestätigen." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Dadurch werden die Transkripte aller vorherigen Unterhaltungen gelöscht. Die Liste vergangener Unterhaltungen ist davon nicht betroffen. Alle Dateien mit den Suffixen .txt und txt.backup im Order [FOLDER] werden gelöscht.
+		<usetemplate ignoretext="Um Bestätigung bitten, bevor ich Transkripte lösche." name="okcancelignore" notext="Abbrechen" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		Dateien können nicht verschoben werden. Vorheriger Pfad wurde wiederhergestellt.
+		<usetemplate ignoretext="Dateien können nicht verschoben werden. Vorheriger Pfad wurde wiederhergestellt." name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/de/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/de/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_active_object_row.xml b/indra/newview/skins/default/xui/de/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/de/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index dcfcffa6e2f076730d3d7ddc030b68771d26a9ad..79a2ebe9df9f7dd6ad5afafb82cddf2f08eda707
--- a/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/de/panel_avatar_list_item.xml
@@ -27,5 +27,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Dieser Freund kann Ihre Objekte bearbeiten, löschen und an sich nehmen"/>
 	<icon name="permission_map_icon" tool_tip="Dieser Freund kann Sie auf der Karte finden"/>
 	<icon name="permission_online_icon" tool_tip="Dieser Freund kann sehen, wenn Sie online sind"/>
+	<button name="info_btn" tool_tip="Mehr Infos"/>
 	<button name="profile_btn" tool_tip="Profil anzeigen"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_avatar_tag.xml b/indra/newview/skins/default/xui/de/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 2d140515d4fc0bdc2d5180aab0c9c59107ed1821..c105a5b8a35710943305c92ca744d1b838e0d623
--- a/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/de/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel" width="300">
-	<text left_pad="5" name="title_text" width="260">
-		Liste der ignorierten Einwohner
-	</text>
-	<scroll_list name="blocked" tool_tip="Liste der zur Zeit ignorierten Einwohner" width="290"/>
-	<button label="Einwohner ignorieren" label_selected="Einwohner ignorieren..." name="Block resident..." tool_tip="Wählen Sie einen Einwohner, um ihn zu ignorieren"/>
-	<button label="Objekt nach Name ignorieren" label_selected="Objekt nach Name ignorieren..." name="Block object by name..." tool_tip="Ein Objekt auswählen, um nach Namen zu ignorieren."/>
-	<button label="Freischalten" label_selected="Freischalten" name="Unblock" tool_tip="Einwohner oder Objekt von der Liste der ignorierten Einwohner oder Objekte entfernen"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Filtern" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Aktionen für ausgewählte(s) Person/Objekt"/>
+		<menu_button name="view_btn" tool_tip="Sortieroptionen"/>
+		<menu_button name="plus_btn" tool_tip="Einwohner oder Objekt zum ignorieren auswählen"/>
+		<button name="unblock_btn" tool_tip="Einwohner oder Objekt aus der Liste der ignorierten Einwohner oder Objekte entfernen"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Liste der zur Zeit ignorierten Einwohner" width="290"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/de/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/de/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/de/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_chat_header.xml b/indra/newview/skins/default/xui/de/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/de/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_classified_info.xml b/indra/newview/skins/default/xui/de/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/de/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/de/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_cof_wearables.xml b/indra/newview/skins/default/xui/de/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/de/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9bfe4754ee9a013296b8c8ea27a35504885e2ca
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(laden)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/de/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..afeaa14e81900e9b4f317989391701f75e1be926
--- /dev/null
+++ b/indra/newview/skins/default/xui/de/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="Enthielt eine Voice-Unterhaltung"/>
+	<icon name="unread_ims_icon" tool_tip="Nachrichten trafen ein, während Sie abgemeldet waren"/>
+	<button name="delete_btn" tool_tip="Diesen Eintrag entfernen"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/de/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/de/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_alpha.xml b/indra/newview/skins/default/xui/de/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_classified.xml b/indra/newview/skins/default/xui/de/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_eyes.xml b/indra/newview/skins/default/xui/de/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_gloves.xml b/indra/newview/skins/default/xui/de/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_hair.xml b/indra/newview/skins/default/xui/de/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_jacket.xml b/indra/newview/skins/default/xui/de/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_pants.xml b/indra/newview/skins/default/xui/de/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_physics.xml b/indra/newview/skins/default/xui/de/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_pick.xml b/indra/newview/skins/default/xui/de/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_profile.xml b/indra/newview/skins/default/xui/de/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_shape.xml b/indra/newview/skins/default/xui/de/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_shirt.xml b/indra/newview/skins/default/xui/de/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_shoes.xml b/indra/newview/skins/default/xui/de/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_skin.xml b/indra/newview/skins/default/xui/de/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_skirt.xml b/indra/newview/skins/default/xui/de/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_socks.xml b/indra/newview/skins/default/xui/de/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/de/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_underpants.xml b/indra/newview/skins/default/xui/de/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/de/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_edit_wearable.xml b/indra/newview/skins/default/xui/de/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_control_panel.xml b/indra/newview/skins/default/xui/de/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_general.xml b/indra/newview/skins/default/xui/de/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/de/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_invite.xml b/indra/newview/skins/default/xui/de/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_land_money.xml b/indra/newview/skins/default/xui/de/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_list_item.xml b/indra/newview/skins/default/xui/de/panel_group_list_item.xml
old mode 100644
new mode 100755
index d097a2b18c35af62711ac0ec72cf711304f7d6c3..fc911a64dff0b7ef88021bb01702ed4c4038110c
--- a/indra/newview/skins/default/xui/de/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/de/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Unbekannt"/>
+	<button name="info_btn" tool_tip="Mehr Infos"/>
 	<button name="profile_btn" tool_tip="Profil anzeigen"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_group_notices.xml b/indra/newview/skins/default/xui/de/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_notify.xml b/indra/newview/skins/default/xui/de/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_group_roles.xml b/indra/newview/skins/default/xui/de/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_im_control_panel.xml b/indra/newview/skins/default/xui/de/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_instant_message.xml b/indra/newview/skins/default/xui/de/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_inventory_item.xml b/indra/newview/skins/default/xui/de/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_landmark_info.xml b/indra/newview/skins/default/xui/de/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_landmarks.xml b/indra/newview/skins/default/xui/de/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_login.xml b/indra/newview/skins/default/xui/de/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_main_inventory.xml b/indra/newview/skins/default/xui/de/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_me.xml b/indra/newview/skins/default/xui/de/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_general.xml b/indra/newview/skins/default/xui/de/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/de/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_media_settings_security.xml b/indra/newview/skins/default/xui/de/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_navigation_bar.xml b/indra/newview/skins/default/xui/de/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/de/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_nearby_media.xml b/indra/newview/skins/default/xui/de/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_notifications_channel.xml b/indra/newview/skins/default/xui/de/panel_notifications_channel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_notify_textbox.xml b/indra/newview/skins/default/xui/de/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_online_status_toast.xml b/indra/newview/skins/default/xui/de/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/de/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_outfit_edit.xml b/indra/newview/skins/default/xui/de/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/de/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_list.xml b/indra/newview/skins/default/xui/de/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/de/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_people.xml b/indra/newview/skins/default/xui/de/panel_people.xml
old mode 100644
new mode 100755
index 4e76147746ca34a78eedc5ea33e116f6b3b4dea7..8c05ca2c247f926bfc4494ae37ecc5ea6df73986
--- a/indra/newview/skins/default/xui/de/panel_people.xml
+++ b/indra/newview/skins/default/xui/de/panel_people.xml
@@ -14,81 +14,53 @@ Sie suchen nach Leuten? Verwenden Sie die [secondlife:///app/worldmap Karte].
 	<string name="no_filtered_friends_msg">
 		Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/people/[SEARCH_TERM] Suche].
 	</string>
-	<string name="people_filter_label" value="Nach Leuten filtern"/>
-	<string name="groups_filter_label" value="Nach Gruppen filtern"/>
 	<string name="no_filtered_groups_msg" value="Sie haben nicht das Richtige gefunden? Versuchen Sie es mit der [secondlife:///app/search/groups/[SEARCH_TERM] Suche]."/>
 	<string name="no_groups_msg" value="Suchen Sie nach Gruppen? Versuchen Sie es mit der [secondlife:///app/search/groups Suche]."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Doppelklicken, um Karte zu öffnen; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Doppelklicken, um zu teleportieren; Umschalttaste gedrückt halten und ziehen, um zu schwenken)"/>
-	<filter_editor label="Filter" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="IN DER NÄHE" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Optionen"/>
-				<button name="add_friend_btn" tool_tip="Ausgewählten Einwohner zur Freundeliste hinzufügen"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="Nach Personen filtern" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Aktionen für ausgewählte Person"/>
+				<menu_button name="nearby_view_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+				<button name="add_friend_btn" tool_tip="Einem Einwohner die Freundschaft anbieten"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Ausgewählte Person als Freund entfernen"/>
 			</panel>
 		</panel>
-		<panel label="MEINE FREUNDE" name="friends_panel">
+		<panel label="FREUNDE" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="Nach Personen filtern" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Aktionen für ausgewählte Person"/>
+				<menu_button name="friends_view_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+				<button name="friends_add_btn" tool_tip="Einem Einwohner die Freundschaft anbieten"/>
+				<dnd_button name="friends_del_btn" tool_tip="Ausgewählte Person als Freund entfernen"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="Online"/>
 				<accordion_tab name="tab_all" title="Alle"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="Zusätzliche Optionen anzeigen"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Bieten Sie einem Einwohner die Freundschaft an"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Ausgewählte Person aus Ihrer Freundesliste entfernen"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="MEINE GRUPPEN" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Optionen"/>
-				<button name="plus_btn" tool_tip="Gruppe beitreten/Neue Gruppe erstellen"/>
-				<button name="activate_btn" tool_tip="Ausgewählte Gruppe aktivieren"/>
+		<panel label="GRUPPEN" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Nach Gruppen filtern" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Aktionen für ausgewählte Gruppe"/>
+				<menu_button name="groups_view_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+				<menu_button name="plus_btn" tool_tip="Gruppe beitreten/Neue Gruppe erstellen"/>
+				<dnd_button name="minus_btn" tool_tip="Ausgewählte Gruppe verlassen"/>
 			</panel>
 		</panel>
 		<panel label="AKTUELL" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Optionen"/>
-				<button name="add_friend_btn" tool_tip="Ausgewählten Einwohner zur Freundeliste hinzufügen"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="Nach Personen filtern" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Aktionen für ausgewählte Person"/>
+				<menu_button name="recent_view_btn" tool_tip="Anzeige-/Sortieroptionen"/>
+				<button name="add_friend_btn" tool_tip="Einem Einwohner die Freundschaft anbieten"/>
+				<dnd_button name="recent_del_btn" tool_tip="Ausgewählte Person als Freund entfernen"/>
 			</panel>
 		</panel>
+		<panel label="IGNORIERT" name="blocked_panel">
+			<panel label="Ignorierte Einwohner und Objekte" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Profil" name="view_profile_btn" tool_tip="Bilder, Gruppen und andere Einwohner-Informationen anzeigen"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="IM" name="im_btn" tool_tip="IM-Sitzung öffnen"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Anrufen" name="call_btn" tool_tip="Diesen Einwohner anrufen"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Freigeben" name="share_btn" tool_tip="Inventarobjekt freigeben"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Teleportieren" name="teleport_btn" tool_tip="Teleport anbieten"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Gruppenprofil" name="group_info_btn" tool_tip="Gruppeninformationen anzeigen"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Gruppen-Chat" name="chat_btn" tool_tip="Chat öffnen"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Gruppe anrufen" name="group_call_btn" tool_tip="Diese Gruppe anrufen"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_pick_info.xml b/indra/newview/skins/default/xui/de/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_picks.xml b/indra/newview/skins/default/xui/de/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_place_profile.xml b/indra/newview/skins/default/xui/de/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_places.xml b/indra/newview/skins/default/xui/de/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_message.xml b/indra/newview/skins/default/xui/de/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_postcard_settings.xml b/indra/newview/skins/default/xui/de/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/de/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/de/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
old mode 100644
new mode 100755
index c9ae350147371a2b4df8622d179056e2b43a6228..8193fd42c1172fa36f2f4c1a8680a2c19ee29b64
--- a/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Text-Chat" name="chat">
-	<text name="font_size">
-		Schriftgröße:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Klein" name="radio" value="0"/>
-		<radio_item label="Mittel" name="radio2" value="1"/>
-		<radio_item label="Groß" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
-	<check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
-	<check_box label="Kompakten IM- und Text-Chatverlauf aktivieren" name="plain_text_chat_history"/>
-	<check_box label="Blasen-Chat" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		IMs anzeigen in:
-	</text>
-	<text name="requires_restart_label">
-		(Neustart erforderlich)
-	</text>
-	<radio_group name="chat_window" tool_tip="Zeigen Sie Ihre Sofortnachrichten (Instant Messages) in einem anderen Fenster oder in einem einzigen Fenster mit vielen Registerkarten an (Neustart erforderlich).">
-		<radio_item label="Getrennte Fenster" name="radio" value="0"/>
-		<radio_item label="Registerkarten" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Popups für eingehende Chats aktivieren:
-	</text>
-	<check_box label="Gruppen-Chats" name="EnableGroupChatPopups" tool_tip="Markieren, um Popups zu sehen, wenn Gruppen-Chat-Message eintrifft"/>
-	<check_box label="IM-Chats" name="EnableIMChatPopups" tool_tip="Markieren, um Popups zu sehen, wenn Instant Message eintrifft"/>
-	<spinner label="Lebenszeit von Toasts für Chat in der Nähe:" name="nearby_toasts_lifetime"/>
-	<spinner label="Ein-/Ausblenddauer von Toasts für Chat in der Nähe:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="Beim Chatten Tippanimation abspielen" name="play_typing_animation"/>
+		<check_box label="IMs per Email zuschicken, wenn ich offline bin" name="send_im_to_email"/>
+		<check_box label="Nur IMs und Anrufe von Freunden oder Gruppen durchstellen" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Schriftgröße:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Klein" name="Small" value="0"/>
+			<item label="Mittel" name="Medium" value="1"/>
+			<item label="Groß" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Blasen-Chat" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Benachrichtigungen
+		</text>
+		<text name="friend_ims">
+			IMs von Freunden:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
+			<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
+			<item label="None" name="None" value="none"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			IMs von anderen:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
+			<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
+			<item label="None" name="None" value="none"/>
+		</combo_box>
+		<text name="conference_ims">
+			Konferenz-IMs:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
+			<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
+			<item label="None" name="None" value="none"/>
+		</combo_box>
+		<text name="group_chat">
+			Gruppen-Chat:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
+			<item label="Flash-Symbolleistenschaltfläche" name="FlashToolbarButton" value="flash"/>
+			<item label="None" name="None" value="none"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Chat in der Nähe:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Unterhaltungsfenster öffnen" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Nachricht in Popup anzeigen" name="PopUpMessage" value="toast"/>
+			<item label="Flash-Symbolleistenschaltfläche" name="FlashToolBarButton" value="flash"/>
+			<item label="None" name="None" value="none"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Um vorübergehend alle Benachrichtigungen zu stoppen, wählen Sie „Unterhalten“ &gt; „Nicht stören“.
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Sound abspielen:
+		</text>
+		<check_box label="Neue Unterhaltung" name="new_conversation"/>
+		<check_box label="Eingehender Anruf..." name="incoming_voice_call"/>
+		<check_box label="Teleport-Angebot" name="teleport_offer"/>
+		<check_box label="Inventarangebot" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Protokoll löschen..." name="clear_log"/>
+		<button label="Protokolle löschen..." name="delete_transcripts"/>
+		<button label="Durchsuchen..." label_selected="Durchsuchen" name="log_path_button"/>
+	</panel>
 	<button label="Übersetzen..." name="ok_btn"/>
 	<button label="Automatisch ersetzen..." name="autoreplace_showgui"/>
 	<button label="Rechtschreibprüfung..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_colors.xml b/indra/newview/skins/default/xui/de/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_general.xml b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
old mode 100644
new mode 100755
index 979ccba48d1fc4dbe72908f446a1f089953765b5..4e453b6969f658c62cc032789252af76de9be9ab
--- a/indra/newview/skins/default/xui/de/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/de/panel_preferences_general.xml
@@ -69,9 +69,9 @@
 		<combo_box.item label="nie" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Antwort, wenn im „Beschäftigt“-Modus:
+		Nicht-stören-Antwort:
 	</text>
-	<text_editor name="busy_response">
+	<text_editor name="do_not_disturb_response">
 		log_in_to_change
 	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/de/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_move.xml b/indra/newview/skins/default/xui/de/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/de/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_setup.xml b/indra/newview/skins/default/xui/de/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_preferences_sound.xml b/indra/newview/skins/default/xui/de/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/de/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_region_covenant.xml b/indra/newview/skins/default/xui/de/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_region_debug.xml b/indra/newview/skins/default/xui/de/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_region_environment.xml b/indra/newview/skins/default/xui/de/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_region_estate.xml b/indra/newview/skins/default/xui/de/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_region_general.xml b/indra/newview/skins/default/xui/de/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_region_terrain.xml b/indra/newview/skins/default/xui/de/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_script_ed.xml b/indra/newview/skins/default/xui/de/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/de/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/de/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_script_question_toast.xml b/indra/newview/skins/default/xui/de/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_scrolling_param.xml b/indra/newview/skins/default/xui/de/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/de/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/de/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/de/panel_sidetray_home_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/de/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_local.xml b/indra/newview/skins/default/xui/de/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_options.xml b/indra/newview/skins/default/xui/de/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/de/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/de/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_sound_devices.xml b/indra/newview/skins/default/xui/de/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/de/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_status_bar.xml b/indra/newview/skins/default/xui/de/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_sys_well_item.xml b/indra/newview/skins/default/xui/de/panel_sys_well_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history.xml b/indra/newview/skins/default/xui/de/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/de/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_voice_effect.xml b/indra/newview/skins/default/xui/de/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/de/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/panel_world_map.xml b/indra/newview/skins/default/xui/de/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/role_actions.xml b/indra/newview/skins/default/xui/de/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/sidepanel_appearance.xml b/indra/newview/skins/default/xui/de/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/sidepanel_inventory.xml b/indra/newview/skins/default/xui/de/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/sidepanel_item_info.xml b/indra/newview/skins/default/xui/de/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
old mode 100644
new mode 100755
index 4c8d77d336a24346e91af92430ba7895c5f9af7a..29239033fe97a5f18b087af47d19274d8feaa4ea
--- a/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/de/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Objekt kaufen" name="Buyobject"/>
 			<combo_box.item label="Objekt bezahlen" name="Payobject"/>
 			<combo_box.item label="Öffnen" name="Open"/>
+			<combo_box.item label="Zoomen" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/de/strings.xml b/indra/newview/skins/default/xui/de/strings.xml
old mode 100644
new mode 100755
index 79cb73ecf9778df9d158f143ee3fd9a8972a15ce..e142cb8029674774bb4acb29c01be2e4a20f1900
--- a/indra/newview/skins/default/xui/de/strings.xml
+++ b/indra/newview/skins/default/xui/de/strings.xml
@@ -137,7 +137,7 @@
 		Beenden
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=de-DE&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		Mit dem von Ihnen verwendeten Viewer ist der Zugriff auf Second Life nicht mehr möglich. Laden Sie von den folgenden Seite einen neuen Viewer herunter:
@@ -622,8 +622,8 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="AvatarAway">
 		Abwesend
 	</string>
-	<string name="AvatarBusy">
-		Beschäftigt
+	<string name="AvatarDoNotDisturb">
+		Nicht stören
 	</string>
 	<string name="AvatarMuted">
 		Ignoriert
@@ -859,6 +859,12 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="ST_NO_JOINT">
 		HAUPTVERZEICHNIS oder VERBINDUNG nicht gefunden.
 	</string>
+	<string name="NearbyChatTitle">
+		Chat in der Nähe
+	</string>
+	<string name="NearbyChatLabel">
+		(Chat in der Nähe)
+	</string>
 	<string name="whisper">
 		flüstert:
 	</string>
@@ -922,12 +928,15 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="ControlYourCamera">
 		Kamerasteuerung
 	</string>
-	<string name="TeleportYourAgent">
-		Sie teleportieren
-	</string>
 	<string name="NotConnected">
 		Nicht verbunden
 	</string>
+	<string name="AgentNameSubst">
+		(Sie)
+	</string>
+	<string name="TeleportYourAgent">
+		Sie teleportieren
+	</string>
 	<string name="SIM_ACCESS_PG">
 		Generell
 	</string>
@@ -1009,18 +1018,6 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="dictionary_files">
 		Wörterbücher
 	</string>
-	<string name="AvatarSetNotAway">
-		Nicht abwesend
-	</string>
-	<string name="AvatarSetAway">
-		Abwesend
-	</string>
-	<string name="AvatarSetNotBusy">
-		Nicht beschäftigt
-	</string>
-	<string name="AvatarSetBusy">
-		Beschäftigt
-	</string>
 	<string name="shape">
 		Form
 	</string>
@@ -1989,8 +1986,8 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="PanelContentsNewScript">
 		Neues Skript
 	</string>
-	<string name="BusyModeResponseDefault">
-		Der Einwohner/Die Einwohnerin ist „beschäftigt”, d.h. er/sie möchte im Moment nicht gestört werden.  Ihre Nachricht wird dem Einwohner/der Einwohnerin als IM angezeigt, und kann später beantwortet werden.
+	<string name="DoNotDisturbModeResponseDefault">
+		Dieser Einwohner hat den Nicht-stören-Modus aktiviert und wird Ihre Nachricht später sehen.
 	</string>
 	<string name="MuteByName">
 		(Nach Namen)
@@ -2103,9 +2100,6 @@ Warten Sie kurz und versuchen Sie dann noch einmal, sich anzumelden.
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		Inhalte
-	</string>
 	<string name="AcquiredItems">
 		Erworbene Artikel
 	</string>
@@ -3877,7 +3871,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 		Generelle Region
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Avatare sichtbar; Chat außerhalb dieser Parzelle gestattet
+		Avatare in dieser Parzelle können von Avataren außerhalb dieser Parzelle weder gesehen noch gehört werden
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Bewegliche Objekte verhalten sich in dieser Region u. U. erst dann korrekt, wenn die Region neu geformt wird.
@@ -3954,6 +3948,12 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="IM_unblock_only_groups_friends">
 		Wenn Sie diese Meldung sehen, müssen Sie unter „Einstellungen“ &gt; „Privatsphäre“ die Option „Nur IMs und Anrufe von Freunden oder Gruppen durchstellen“ deaktivieren.
 	</string>
+	<string name="OnlineStatus">
+		Online
+	</string>
+	<string name="OfflineStatus">
+		Offline
+	</string>
 	<string name="answered_call">
 		Ihr Anruf wurde entgegengenommen
 	</string>
@@ -3963,6 +3963,9 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 	<string name="you_joined_call">
 		Sie sind dem Gespräch beigetreten
 	</string>
+	<string name="you_auto_rejected_call-im">
+		Sie haben den Voice-Anruf automatisch abgelehnt, während der Nicht-stören-Modus aktiviert war.
+	</string>
 	<string name="name_started_call">
 		[NAME] hat einen Voice-Anruf begonnen
 	</string>
@@ -3979,7 +3982,7 @@ Falls diese Meldung weiterhin angezeigt wird, wenden Sie sich bitte an [SUPPORT_
 		Wird verbunden...
 	</string>
 	<string name="conference-title">
-		Ad-hoc-Konferenz
+		Chat mit mehreren Personen
 	</string>
 	<string name="conference-title-incoming">
 		Konferenz mit [AGENT_NAME]
@@ -4859,6 +4862,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
 	<string name="Command_Chat_Label">
 		Chat
 	</string>
+	<string name="Command_Conversations_Label">
+		Unterhaltungen
+	</string>
 	<string name="Command_Compass_Label">
 		Kompass
 	</string>
@@ -4934,6 +4940,9 @@ Setzen Sie den Editorpfad in Anführungszeichen
 	<string name="Command_Chat_Tooltip">
 		Mit Leuten in der Nähe chatten
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Mit allen unterhalten
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Kompass
 	</string>
@@ -5063,4 +5072,13 @@ Setzen Sie den Editorpfad in Anführungszeichen
 	<string name="UserDictionary">
 		[Benutzer]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		Unterhaltungen werden nicht protokolliert. Um ein Protokoll zu starten, wählen Sie „Speichern: nur Protokoll“ oder „Speichern: Protokoll und Transkripte“ unter „Einstellungen“ &gt; „Chat“.
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		Es werden keine Unterhaltungen mehr protokolliert. Um weiterhin ein Protokoll zu führen, wählen Sie „Speichern: nur Protokoll“ oder „Speichern: Protokoll und Transkripte“ unter „Einstellungen“ &gt; „Chat“.
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		Keine protokollierten Unterhaltungen verfügbar. Hier erscheint ein Protokolleintrag, wenn Sie eine Person kontaktieren oder von einer Person kontaktiert werden.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/de/teleport_strings.xml b/indra/newview/skins/default/xui/de/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/de/xui_version.xml b/indra/newview/skins/default/xui/de/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/accordion_drag.xml b/indra/newview/skins/default/xui/en/accordion_drag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/accordion_parent.xml b/indra/newview/skins/default/xui/en/accordion_parent.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/alert_button.xml b/indra/newview/skins/default/xui/en/alert_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/alert_check_box.xml b/indra/newview/skins/default/xui/en/alert_check_box.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/alert_icon.xml b/indra/newview/skins/default/xui/en/alert_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/alert_line_editor.xml b/indra/newview/skins/default/xui/en/alert_line_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/favorites_bar_button.xml b/indra/newview/skins/default/xui/en/favorites_bar_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_aaa.xml b/indra/newview/skins/default/xui/en/floater_aaa.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_about.xml b/indra/newview/skins/default/xui/en/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_about_land.xml b/indra/newview/skins/default/xui/en/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_activeim.xml b/indra/newview/skins/default/xui/en/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/en/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_auction.xml b/indra/newview/skins/default/xui/en/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_autoreplace.xml b/indra/newview/skins/default/xui/en/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_avatar.xml b/indra/newview/skins/default/xui/en/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_picker.xml b/indra/newview/skins/default/xui/en/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_avatar_textures.xml b/indra/newview/skins/default/xui/en/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_beacons.xml b/indra/newview/skins/default/xui/en/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_build_options.xml b/indra/newview/skins/default/xui/en/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_bulk_perms.xml b/indra/newview/skins/default/xui/en/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_bumps.xml b/indra/newview/skins/default/xui/en/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_buy_contents.xml b/indra/newview/skins/default/xui/en/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency.xml b/indra/newview/skins/default/xui/en/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/en/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_buy_land.xml b/indra/newview/skins/default/xui/en/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_buy_object.xml b/indra/newview/skins/default/xui/en/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_camera.xml b/indra/newview/skins/default/xui/en/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_choose_group.xml b/indra/newview/skins/default/xui/en/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_color_picker.xml b/indra/newview/skins/default/xui/en/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_conversation_log.xml b/indra/newview/skins/default/xui/en/floater_conversation_log.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_conversation_preview.xml b/indra/newview/skins/default/xui/en/floater_conversation_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_critical.xml b/indra/newview/skins/default/xui/en/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/en/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_destinations.xml b/indra/newview/skins/default/xui/en/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_display_name.xml b/indra/newview/skins/default/xui/en/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/en/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/en/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/en/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_environment_settings.xml b/indra/newview/skins/default/xui/en/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_event.xml b/indra/newview/skins/default/xui/en/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_fast_timers.xml b/indra/newview/skins/default/xui/en/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_font_test.xml b/indra/newview/skins/default/xui/en/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_gesture.xml b/indra/newview/skins/default/xui/en/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_god_tools.xml b/indra/newview/skins/default/xui/en/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_hardware_settings.xml b/indra/newview/skins/default/xui/en/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_help_browser.xml b/indra/newview/skins/default/xui/en/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_how_to.xml b/indra/newview/skins/default/xui/en/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_hud.xml b/indra/newview/skins/default/xui/en/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_im_container.xml b/indra/newview/skins/default/xui/en/floater_im_container.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_im_session.xml b/indra/newview/skins/default/xui/en/floater_im_session.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_image_preview.xml b/indra/newview/skins/default/xui/en/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_import_collada.xml b/indra/newview/skins/default/xui/en/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_incoming_call.xml b/indra/newview/skins/default/xui/en/floater_incoming_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_inspect.xml b/indra/newview/skins/default/xui/en/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/en/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/en/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_joystick.xml b/indra/newview/skins/default/xui/en/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_lagmeter.xml b/indra/newview/skins/default/xui/en/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_land_holdings.xml b/indra/newview/skins/default/xui/en/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/en/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_lsl_guide.xml b/indra/newview/skins/default/xui/en/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_map.xml b/indra/newview/skins/default/xui/en/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_media_browser.xml b/indra/newview/skins/default/xui/en/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_media_settings.xml b/indra/newview/skins/default/xui/en/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_mem_leaking.xml b/indra/newview/skins/default/xui/en/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/en/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_model_preview.xml b/indra/newview/skins/default/xui/en/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_moveview.xml b/indra/newview/skins/default/xui/en/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_mute_object.xml b/indra/newview/skins/default/xui/en/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_my_appearance.xml b/indra/newview/skins/default/xui/en/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_my_inventory.xml b/indra/newview/skins/default/xui/en/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_my_web_profile.xml b/indra/newview/skins/default/xui/en/floater_my_web_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_notification.xml b/indra/newview/skins/default/xui/en/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_notifications_console.xml b/indra/newview/skins/default/xui/en/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_object_weights.xml b/indra/newview/skins/default/xui/en/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_openobject.xml b/indra/newview/skins/default/xui/en/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/en/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_outgoing_call.xml b/indra/newview/skins/default/xui/en/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index 79f2027c31862a27cb79ee34ffcd28cbe973b325..26293130699004f3c76a0a46e4148139331ba87e
--- a/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/en/floater_pathfinding_console.xml
@@ -152,7 +152,7 @@
       </text>
       <check_box
           height="19"
-          label="Test"
+          label="World"
           layout="topleft"
           name="show_world"
           top_pad="4"
diff --git a/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/en/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_pay.xml b/indra/newview/skins/default/xui/en/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_pay_object.xml b/indra/newview/skins/default/xui/en/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_people.xml b/indra/newview/skins/default/xui/en/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_perm_prefs.xml b/indra/newview/skins/default/xui/en/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_picks.xml b/indra/newview/skins/default/xui/en/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_places.xml b/indra/newview/skins/default/xui/en/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_post_process.xml b/indra/newview/skins/default/xui/en/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preferences.xml b/indra/newview/skins/default/xui/en/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/en/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preview_animation.xml b/indra/newview/skins/default/xui/en/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preview_gesture.xml b/indra/newview/skins/default/xui/en/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preview_notecard.xml b/indra/newview/skins/default/xui/en/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preview_sound.xml b/indra/newview/skins/default/xui/en/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_preview_texture.xml b/indra/newview/skins/default/xui/en/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_price_for_listing.xml b/indra/newview/skins/default/xui/en/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_publish_classified.xml b/indra/newview/skins/default/xui/en/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_region_debug_console.xml b/indra/newview/skins/default/xui/en/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_region_info.xml b/indra/newview/skins/default/xui/en/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_report_abuse.xml b/indra/newview/skins/default/xui/en/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script.xml b/indra/newview/skins/default/xui/en/floater_script.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script_debug.xml b/indra/newview/skins/default/xui/en/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/en/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script_limits.xml b/indra/newview/skins/default/xui/en/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script_preview.xml b/indra/newview/skins/default/xui/en/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script_queue.xml b/indra/newview/skins/default/xui/en/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_script_search.xml b/indra/newview/skins/default/xui/en/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_search.xml b/indra/newview/skins/default/xui/en/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_select_key.xml b/indra/newview/skins/default/xui/en/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_sell_land.xml b/indra/newview/skins/default/xui/en/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_settings_debug.xml b/indra/newview/skins/default/xui/en/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml b/indra/newview/skins/default/xui/en/floater_side_bar_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_snapshot.xml b/indra/newview/skins/default/xui/en/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_sound_devices.xml b/indra/newview/skins/default/xui/en/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_sound_preview.xml b/indra/newview/skins/default/xui/en/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_spellcheck.xml b/indra/newview/skins/default/xui/en/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/en/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_stats.xml b/indra/newview/skins/default/xui/en/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_sys_well.xml b/indra/newview/skins/default/xui/en/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_telehub.xml b/indra/newview/skins/default/xui/en/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_button.xml b/indra/newview/skins/default/xui/en/floater_test_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_checkbox.xml b/indra/newview/skins/default/xui/en/floater_test_checkbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_combobox.xml b/indra/newview/skins/default/xui/en/floater_test_combobox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_inspectors.xml b/indra/newview/skins/default/xui/en/floater_test_inspectors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_layout.xml b/indra/newview/skins/default/xui/en/floater_test_layout.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/en/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_line_editor.xml b/indra/newview/skins/default/xui/en/floater_test_line_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_list_view.xml b/indra/newview/skins/default/xui/en/floater_test_list_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml b/indra/newview/skins/default/xui/en/floater_test_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml b/indra/newview/skins/default/xui/en/floater_test_radiogroup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_slider.xml b/indra/newview/skins/default/xui/en/floater_test_slider.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_spinner.xml b/indra/newview/skins/default/xui/en/floater_test_spinner.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_text_editor.xml b/indra/newview/skins/default/xui/en/floater_test_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/en/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_textbox.xml b/indra/newview/skins/default/xui/en/floater_test_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_toolbar.xml b/indra/newview/skins/default/xui/en/floater_test_toolbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_test_widgets.xml b/indra/newview/skins/default/xui/en/floater_test_widgets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/en/floater_texture_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/en/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_tools.xml b/indra/newview/skins/default/xui/en/floater_tools.xml
old mode 100644
new mode 100755
index 436e9f8fed65dfbfa6af5aa751c4c227d8e9400f..8b9733df17a438b6562ddf7ad0702f34c6d9a198
--- a/indra/newview/skins/default/xui/en/floater_tools.xml
+++ b/indra/newview/skins/default/xui/en/floater_tools.xml
@@ -2491,534 +2491,10 @@ even though the user gets a free copy.
              width="132" />
         </panel>
          <panel
-         border="false"
-         follows="all"
-         height="367"
          label="Texture"
-         layout="topleft"
-         left_delta="0"
-         mouse_opaque="false"
          help_topic="toolbox_texture_tab"
          name="Texture"
-         top_delta="0"
-         width="295">
-            <panel.string
-             name="string repeats per meter">
-                Repeats Per Meter
-            </panel.string>
-            <panel.string
-             name="string repeats per face">
-                Repeats Per Face
-            </panel.string>
-            <texture_picker
-             can_apply_immediately="true"
-             default_image_name="Default"
-             fallback_image="locked_image.j2c"
-             follows="left|top"
-             height="80"
-             label="Texture"
-             layout="topleft"
-             left="10"
-             name="texture control"
-             tool_tip="Click to choose a picture"
-             top="8"
-             width="64" />
-            <color_swatch
-             can_apply_immediately="true"
-             follows="left|top"
-             height="80"
-             label="Color"
-             layout="topleft"
-             left_pad="15"
-             name="colorswatch"
-             tool_tip="Click to open color picker"
-             top_delta="0"
-             width="64" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             left_pad="15"
-             name="color trans"
-             text_readonly_color="LabelDisabledColor"
-             top="6"
-             width="110">
-                Transparency %
-            </text>
-            <spinner
-             decimal_digits="0"
-             follows="left|top"
-             height="19"
-             increment="2"
-             initial_value="0"
-             layout="topleft"
-             left_delta="0"
-             max_val="100"
-             name="ColorTrans"
-             top_pad="4"
-             width="80" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             left_delta="0"
-             name="glow label"
-             text_readonly_color="LabelDisabledColor"
-             top_pad="8"
-             width="80">
-                Glow
-            </text>
-            <spinner
-             decimal_digits="2"
-             follows="left|top"
-             height="19"
-             initial_value="0"
-             layout="topleft"
-             left_delta="0"
-             name="glow"
-             top_pad="4"
-             width="80" />
-            <check_box
-             height="19"
-             label="Full Bright"
-             layout="topleft"
-             left_delta="-5"
-             name="checkbox fullbright"
-             top_pad="4"
-             width="81" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             left="10"
-             name="tex gen"
-             text_readonly_color="LabelDisabledColor"
-             top_pad="5"
-             width="90">
-                Mapping
-            </text>
-            <combo_box
-             height="23"
-             layout="topleft"
-             left_delta="0"
-             name="combobox texgen"
-             top_pad="4"
-             width="90">
-                <combo_box.item
-                 label="Default"
-                 name="Default"
-                 value="Default" />
-                <combo_box.item
-                 label="Planar"
-                 name="Planar"
-                 value="Planar" />
-            </combo_box>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             name="label shininess"
-             left_pad="4"
-             text_readonly_color="LabelDisabledColor"
-             top_pad="-37"
-             width="90">
-                Shininess
-            </text>
-            <combo_box
-             height="23"
-             layout="topleft"
-             left_delta="0"
-             name="combobox shininess"
-             top_pad="4"
-             width="90">
-                <combo_box.item
-                 label="None"
-                 name="None"
-                 value="None" />
-                <combo_box.item
-                 label="Low"
-                 name="Low"
-                 value="Low" />
-                <combo_box.item
-                 label="Medium"
-                 name="Medium"
-                 value="Medium" />
-                <combo_box.item
-                 label="High"
-                 name="High"
-                 value="High" />
-            </combo_box>
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             left_pad="4"
-             name="label bumpiness"
-             text_readonly_color="LabelDisabledColor"
-             top_pad="-37"
-             width="90">
-                Bumpiness
-            </text>
-            <combo_box
-             height="23"
-             layout="topleft"
-             left_delta="0"
-             name="combobox bumpiness"
-             top_pad="4"
-             width="90">
-                <combo_box.item
-                 label="None"
-                 name="None"
-                 value="None" />
-                <combo_box.item
-                 label="Brightness"
-                 name="Brightness"
-                 value="Brightness" />
-                <combo_box.item
-                 label="Darkness"
-                 name="Darkness"
-                 value="Darkness" />
-                <combo_box.item
-                 label="woodgrain"
-                 name="woodgrain"
-                 value="woodgrain" />
-                <combo_box.item
-                 label="bark"
-                 name="bark"
-                 value="bark" />
-                <combo_box.item
-                 label="bricks"
-                 name="bricks"
-                 value="bricks" />
-                <combo_box.item
-                 label="checker"
-                 name="checker"
-                 value="checker" />
-                <combo_box.item
-                 label="concrete"
-                 name="concrete"
-                 value="concrete" />
-                <combo_box.item
-                 label="crustytile"
-                 name="crustytile"
-                 value="crustytile" />
-                <combo_box.item
-                 label="cutstone"
-                 name="cutstone"
-                 value="cutstone" />
-                <combo_box.item
-                 label="discs"
-                 name="discs"
-                 value="discs" />
-                <combo_box.item
-                 label="gravel"
-                 name="gravel"
-                 value="gravel" />
-                <combo_box.item
-                 label="petridish"
-                 name="petridish"
-                 value="petridish" />
-                <combo_box.item
-                 label="siding"
-                 name="siding"
-                 value="siding" />
-                <combo_box.item
-                 label="stonetile"
-                 name="stonetile"
-                 value="stonetile" />
-                <combo_box.item
-                 label="stucco"
-                 name="stucco"
-                 value="stucco" />
-                <combo_box.item
-                 label="suction"
-                 name="suction"
-                 value="suction" />
-                <combo_box.item
-                 label="weave"
-                 name="weave"
-                 value="weave" />
-            </combo_box>
-          <!--
-            <line_editor
-             bevel_style="in"
-             border_style="line"
-             border_thickness="1"
-             follows="left|top"
-             height="16"
-             layout="topleft"
-             left="10"
-             max_length_bytes="63"
-             name="Home Url"
-             select_on_focus="true"
-             top="134"
-             width="250" />
-            <check_box
-             height="16"
-             label="Media Face"
-             layout="topleft"
-             left_delta="0"
-             name="has media"
-             top_pad="6"
-             width="70" />
-            <button
-             follows="left|top"
-             font="SansSerifSmall"
-             height="20"
-             label="Set Media Info"
-             label_selected="Set Media Info"
-             layout="topleft"
-             left_pad="60"
-             name="media info set"
-             top_delta="-4"
-             width="120" />
--->
-            <check_box
-             follows="top|left"
-             height="16"
-             initial_value="false"
-             label="Align planar faces"
-             layout="topleft"
-             left="17"
-             name="checkbox planar align"
-             tool_tip="Align textures on all selected faces with the last selected face. Requires Planar texture mapping."
-             top_delta="26"
-             width="140" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             left="10"
-             name="rpt"
-             text_readonly_color="LabelDisabledColor"
-             top_pad="2"
-             width="140">
-                Repeats / Face
-            </text>
-            <spinner
-             follows="left|top"
-             height="19"
-             initial_value="0"
-             label="Horizontal (U)"
-             label_width="125"
-             layout="topleft"
-             left="20"
-             max_val="100"
-             name="TexScaleU"
-             top_pad="5"
-             width="185" />
-            <check_box
-             height="19"
-             label="Flip"
-             layout="topleft"
-             left_pad="5"
-             name="checkbox flip s"
-             top_delta="0"
-             width="70" />
-            <spinner
-             follows="left|top"
-             height="19"
-             initial_value="0"
-             label="Vertical (V)"
-             label_width="125"
-             layout="topleft"
-             left="20"
-             max_val="100"
-             name="TexScaleV"
-             width="185" />
-            <check_box
-             height="19"
-             label="Flip"
-             layout="topleft"
-             left_pad="5"
-             name="checkbox flip t"
-             top_delta="0"
-             width="70" />
-            <spinner
-             decimal_digits="2"
-             follows="left|top"
-             height="19"
-             increment="1"
-             initial_value="0"
-			 label="RotationËš"
-             layout="topleft"
-			 label_width="135"
-             left="10"
-             max_val="9999"
-             min_val="-9999"
-             name="TexRot"
-             width="195" />
-
-            <spinner
-             decimal_digits="1"
-             follows="left|top"
-             height="23"
-             initial_value="1"
-			 label="Repeats / Meter"
-             layout="topleft"
-			 label_width="135"
-             left="10"
-             max_val="10"
-             min_val="0.1"
-             name="rptctrl"
-             width="195" />
-            <button
-             follows="left|top"
-             height="23"
-             label="Apply"
-             label_selected="Apply"
-             layout="topleft"
-             left_pad="5"
-             name="button apply"
-             width="75" />
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="10"
-             layout="topleft"
-             left="10"
-             name="tex offset"
-             text_readonly_color="LabelDisabledColor"
-             width="200">
-                Texture Offset
-            </text>
-            <spinner
-             follows="left|top"
-             height="19"
-             initial_value="0"
-             label="Horizontal (U)"
-             label_width="125"
-             layout="topleft"
-             left="20"
-             min_val="-1"
-             name="TexOffsetU"
-             width="185" />
-            <spinner
-             follows="left|top"
-             height="19"
-             initial_value="0"
-             label="Vertical (V)"
-             label_width="125"
-             layout="topleft"
-             left_delta="0"
-             min_val="-1"
-             name="TexOffsetV"
-             top_pad="1"
-             width="185" />
-        <panel
-         border="false"
-         follows="left|top"
-         layout="topleft"
-         mouse_opaque="false"
-         background_visible="true"
-         bg_alpha_color="DkGray"
-         name="Add_Media"
-         left="0"
-         height="47"
-         width="290">
-            <text
-             type="string"
-             length="1"
-             follows="left|top"
-             height="18"
-             layout="topleft"
-             left="10"
-             top_pad="3"
-             name="media_tex"
-             width="190">
-              Media
-			</text>
-			<button
-			 follows="top|left"
-			 height="18"
-			 image_selected="AddItem_Press"
-			 image_unselected="AddItem_Off"
-			 image_disabled="AddItem_Disabled"
-			 layout="topleft"
-			 left_pad="0"
-			 name="add_media"
-			 tab_stop="false"
-			 top_delta="0"
-			 tool_tip="Add Media"
-			 width="18">
-				<button.commit_callback
-				function="BuildTool.AddMedia"/>
-			</button>
-			<button
-			 follows="top|left"
-			 height="18"
-			 image_selected="TrashItem_Press"
-			 image_unselected="TrashItem_Off"
-			 layout="topleft"
-			 left_pad="5"
-			 name="delete_media"
-			 tool_tip="Delete this media texture"
-			 top_delta="0"
-			 width="18">
-				<button.commit_callback
-				function="BuildTool.DeleteMedia"/>
-			</button>
-			<button
-			 follows="top|left"
-			 tool_tip="Edit this Media"
-			 height="12"
-             image_disabled="Icon_Gear_Background"
-             image_selected="Icon_Gear_Press"
-             image_unselected="Icon_Gear_Foreground"
-			 layout="topleft"
-			 left_pad="10"
-			 name="edit_media"
-			 top_delta="3"
-			 width="12">
-				<button.commit_callback
-				function="BuildTool.EditMedia"/>
-			</button>
-      <text
-			 follows="left|top|right"
-			 height="9"
-			 layout="topleft"
-			 left="10"
-                         use_ellipses="true"
-			 read_only="true"
-			 name="media_info"
-			 width="180" />
-      <web_browser
-        visible="false"
-        enabled="false"
-        border_visible="true"
-        bottom_delta="0"
-        follows="top|left"
-        left="0"
-        name="title_media"
-        width="4"
-        height="4"
-        start_url="about:blank"
-        decouple_texture_size="true" />
-     <button
-			 follows="right|top"
-			 height="22"
-			 label="Align"
-			 label_selected="Align Media"
-			 layout="topleft"
-			 right="-16"
-			 name="button align"
-			 top_delta="-4"
-			 tool_tip="Align media texture (must load first)"
-			 width="80" />
-		</panel>
+         filename="panel_tools_texture.xml">
 	   </panel>
        <panel
          border="false"
diff --git a/indra/newview/skins/default/xui/en/floater_top_objects.xml b/indra/newview/skins/default/xui/en/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_tos.xml b/indra/newview/skins/default/xui/en/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_toybox.xml b/indra/newview/skins/default/xui/en/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_translation_settings.xml b/indra/newview/skins/default/xui/en/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_ui_preview.xml b/indra/newview/skins/default/xui/en/floater_ui_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_url_entry.xml b/indra/newview/skins/default/xui/en/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/en/floater_voice_chat_volume.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_voice_effect.xml b/indra/newview/skins/default/xui/en/floater_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_voice_volume.xml b/indra/newview/skins/default/xui/en/floater_voice_volume.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_web_content.xml b/indra/newview/skins/default/xui/en/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_web_profile.xml b/indra/newview/skins/default/xui/en/floater_web_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/en/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_window_size.xml b/indra/newview/skins/default/xui/en/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/floater_world_map.xml b/indra/newview/skins/default/xui/en/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/fonts.xml b/indra/newview/skins/default/xui/en/fonts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/inspect_avatar.xml b/indra/newview/skins/default/xui/en/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/inspect_group.xml b/indra/newview/skins/default/xui/en/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/inspect_object.xml b/indra/newview/skins/default/xui/en/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/inspect_remote_object.xml b/indra/newview/skins/default/xui/en/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/inspect_toast.xml b/indra/newview/skins/default/xui/en/inspect_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml b/indra/newview/skins/default/xui/en/inspector_info_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/language_settings.xml b/indra/newview/skins/default/xui/en/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/main_view.xml b/indra/newview/skins/default/xui/en/main_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/en/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_other.xml b/indra/newview/skins/default/xui/en/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_attachment_self.xml b/indra/newview/skins/default/xui/en/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_icon.xml b/indra/newview/skins/default/xui/en/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_other.xml b/indra/newview/skins/default/xui/en/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_avatar_self.xml b/indra/newview/skins/default/xui/en/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_cof_attachment.xml b/indra/newview/skins/default/xui/en/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_cof_body_part.xml b/indra/newview/skins/default/xui/en/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_cof_clothing.xml b/indra/newview/skins/default/xui/en/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_cof_gear.xml b/indra/newview/skins/default/xui/en/menu_cof_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_conversation.xml b/indra/newview/skins/default/xui/en/menu_conversation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/en/menu_conversation_log_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/en/menu_conversation_log_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_edit.xml b/indra/newview/skins/default/xui/en/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_favorites.xml b/indra/newview/skins/default/xui/en/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_gesture_gear.xml b/indra/newview/skins/default/xui/en/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_group_plus.xml b/indra/newview/skins/default/xui/en/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_hide_navbar.xml b/indra/newview/skins/default/xui/en/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_im_conversation.xml b/indra/newview/skins/default/xui/en/menu_im_conversation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/en/menu_im_session_showmodes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/en/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/en/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/en/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_inventory.xml b/indra/newview/skins/default/xui/en/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_add.xml b/indra/newview/skins/default/xui/en/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_land.xml b/indra/newview/skins/default/xui/en/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_landmark.xml b/indra/newview/skins/default/xui/en/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_login.xml b/indra/newview/skins/default/xui/en/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_media_ctrl.xml b/indra/newview/skins/default/xui/en/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_mini_map.xml b/indra/newview/skins/default/xui/en/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/en/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_navbar.xml b/indra/newview/skins/default/xui/en/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_nearby_chat.xml b/indra/newview/skins/default/xui/en/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_notification_well_button.xml b/indra/newview/skins/default/xui/en/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_object.xml b/indra/newview/skins/default/xui/en/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_object_icon.xml b/indra/newview/skins/default/xui/en/menu_object_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_gear.xml b/indra/newview/skins/default/xui/en/menu_outfit_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_outfit_tab.xml b/indra/newview/skins/default/xui/en/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_participant_list.xml b/indra/newview/skins/default/xui/en/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_participant_view.xml b/indra/newview/skins/default/xui/en/menu_participant_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/en/menu_people_blocked_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/en/menu_people_blocked_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/en/menu_people_blocked_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_friends_view.xml b/indra/newview/skins/default/xui/en/menu_people_friends_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_groups.xml b/indra/newview/skins/default/xui/en/menu_people_groups.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_groups_view.xml b/indra/newview/skins/default/xui/en/menu_people_groups_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby.xml b/indra/newview/skins/default/xui/en/menu_people_nearby.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/en/menu_people_nearby_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_people_recent_view.xml b/indra/newview/skins/default/xui/en/menu_people_recent_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_picks.xml b/indra/newview/skins/default/xui/en/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_picks_plus.xml b/indra/newview/skins/default/xui/en/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_place.xml b/indra/newview/skins/default/xui/en/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_place_add_button.xml b/indra/newview/skins/default/xui/en/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/en/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/en/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_profile_overflow.xml b/indra/newview/skins/default/xui/en/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_save_outfit.xml b/indra/newview/skins/default/xui/en/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_script_chiclet.xml b/indra/newview/skins/default/xui/en/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_slurl.xml b/indra/newview/skins/default/xui/en/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/en/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_text_editor.xml b/indra/newview/skins/default/xui/en/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_toolbars.xml b/indra/newview/skins/default/xui/en/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_topinfobar.xml b/indra/newview/skins/default/xui/en/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_agent.xml b/indra/newview/skins/default/xui/en/menu_url_agent.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_group.xml b/indra/newview/skins/default/xui/en/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_http.xml b/indra/newview/skins/default/xui/en/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_inventory.xml b/indra/newview/skins/default/xui/en/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_map.xml b/indra/newview/skins/default/xui/en/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_objectim.xml b/indra/newview/skins/default/xui/en/menu_url_objectim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_parcel.xml b/indra/newview/skins/default/xui/en/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_slapp.xml b/indra/newview/skins/default/xui/en/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_slurl.xml b/indra/newview/skins/default/xui/en/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_url_teleport.xml b/indra/newview/skins/default/xui/en/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml
old mode 100644
new mode 100755
index a11cd13fdbb5c9c0436cad7af6524e467e5f47cc..b01c3067ff577179ba54528b9c7db7350bcf0978
--- a/indra/newview/skins/default/xui/en/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/en/menu_viewer.xml
@@ -2363,6 +2363,12 @@
                 <menu_item_check.on_click
                  function="Advanced.ToggleFrameTest" />
             </menu_item_check>
+          <menu_item_call
+             label="Frame Profile"
+             name="Frame Profile">
+            <menu_item_call.on_click
+             function="Advanced.ClickRenderProfile" />
+          </menu_item_call>
         </menu>
       <menu
         create_jump_keys="true"
@@ -2658,6 +2664,13 @@
                 <menu_item_call.on_click
                  function="Advanced.SelectedTextureInfo" />
             </menu_item_call>
+            <menu_item_call
+             label="Selected Material Info"
+             name="Selected Material Info"
+             shortcut="control|alt|shift|M">
+                <menu_item_call.on_click
+                 function="Advanced.SelectedMaterialInfo" />
+            </menu_item_call>
             <menu_item_check
              label="Wireframe"
              name="Wireframe"
@@ -2684,8 +2697,8 @@
           <menu_item_separator />
 
           <menu_item_check
-                       label="Lighting and Shadows"
-                       name="Lighting and Shadows">
+                       label="Advanced Lighting Model"
+                       name="Advanced Lighting Model">
             <menu_item_check.on_check
              function="CheckControl"
              parameter="RenderDeferred" />
@@ -2792,16 +2805,6 @@
                  parameter="TextureLoadFullRes" />
             </menu_item_check>
             <menu_item_check
-             label="Texture Atlas (experimental)"
-             name="Texture Atlas">
-              <menu_item_check.on_check
-               function="CheckControl"
-               parameter="EnableTextureAtlas" />
-              <menu_item_check.on_click
-               function="ToggleControl"
-               parameter="EnableTextureAtlas" />
-            </menu_item_check>
-              <menu_item_check
              label="Render Attached Lights"
              name="Render Attached Lights">
                 <menu_item_check.on_check
diff --git a/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/en/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_gear.xml b/indra/newview/skins/default/xui/en/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/menu_wearing_tab.xml b/indra/newview/skins/default/xui/en/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/mime_types.xml b/indra/newview/skins/default/xui/en/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/mime_types_linux.xml b/indra/newview/skins/default/xui/en/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/mime_types_mac.xml b/indra/newview/skins/default/xui/en/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/notification_visibility.xml b/indra/newview/skins/default/xui/en/notification_visibility.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/notifications.xml b/indra/newview/skins/default/xui/en/notifications.xml
old mode 100644
new mode 100755
index 105bef7321aec94bcb0e5b2394bd7e6c531c24e7..9e582cf0de169ca608af5b03d33dffddd1c3437f
--- a/indra/newview/skins/default/xui/en/notifications.xml
+++ b/indra/newview/skins/default/xui/en/notifications.xml
@@ -3480,7 +3480,7 @@ Version [VERSION] [[RELEASE_NOTES_FULL_URL] Information about this update]
  name="RequiredUpdateDownloadedVerboseDialog"
  type="alertmodal">
 We have downloaded a required software update.
-Version [VERSION]
+Version [VERSION] [[INFO_URL] Information about this update]
 
 We must restart [APP_NAME] to install the update.
     <tag>confirm</tag>
@@ -3494,6 +3494,66 @@ We must restart [APP_NAME] to install the update.
  name="RequiredUpdateDownloadedDialog"
  type="alertmodal">
 We must restart [APP_NAME] to install the update.
+[[INFO_URL] Information about this update]
+    <tag>confirm</tag>
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
+  </notification>
+
+  <notification
+   icon="notify.tga"
+   name="OtherChannelDownloadBackgroundTip"
+   type="notify">
+We have downloaded an update to your [APP_NAME] installation.
+Version [VERSION] 
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] for details about this update]
+    <tag>confirm</tag>
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Later..."
+     yestext="Install now and restart [APP_NAME]"/>
+  </notification>
+
+  <notification
+ icon="alertmodal.tga"
+ name="OtherChannelDownloadBackgroundDialog"
+ type="alertmodal">
+We have downloaded an update to your [APP_NAME] installation.
+Version [VERSION]
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] Information about this update]
+    <tag>confirm</tag>
+    <usetemplate
+     name="okcancelbuttons"
+     notext="Later..."
+     yestext="Install now and restart [APP_NAME]"/>
+  </notification>
+  
+  <notification
+ icon="alertmodal.tga"
+ name="OtherChannelRequiredUpdateDownloadedVerboseDialog"
+ type="alertmodal">
+We have downloaded a required software update.
+Version [VERSION]
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] Information about this update]
+
+We must restart [APP_NAME] to install the update.
+    <tag>confirm</tag>
+    <usetemplate
+     name="okbutton"
+     yestext="OK"/>
+  </notification>
+  
+  <notification
+ icon="alertmodal.tga"
+ name="OtherChannelRequiredUpdateDownloadedDialog"
+ type="alertmodal">
+We must restart [APP_NAME] to install the update.
+This experimental viewer has been replaced by a [NEW_CHANNEL] viewer;
+see [[INFO_URL] Information about this update]
     <tag>confirm</tag>
     <usetemplate
      name="okbutton"
@@ -6865,6 +6925,28 @@ Do not allow access if you do not fully understand why it wants access to your a
   </notification>
 
   <notification
+   icon="notify.tga"
+	 name="UnknownScriptQuestion"
+	 persist="false"
+	 type="notify">
+The runtime script permission requested by &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos;, an object owned by &apos;[NAME]&apos;, isn&apos;t recognized by the viewer and can&apos;t be granted.
+
+To grant this permission please update your viewer to the latest version from [DOWNLOADURL].
+		<tag>confirm</tag>
+		<form name="form">
+			<button
+			 default="true"
+			 index="1"
+			 name="Deny"
+			 text="Ok"/>
+			<button
+			 index="2"
+			 name="Mute"
+			 text="Block"/>
+		</form>
+	</notification>
+
+	<notification
    icon="notify.tga"
    name="ScriptDialog"
    show_toast="false"
diff --git a/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/en/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_active_object_row.xml b/indra/newview/skins/default/xui/en/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/en/panel_avatar_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_avatar_tag.xml b/indra/newview/skins/default/xui/en/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/en/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_blocked_list_item.xml b/indra/newview/skins/default/xui/en/panel_blocked_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/en/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/en/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/en/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_chat_header.xml b/indra/newview/skins/default/xui/en/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_chat_item.xml b/indra/newview/skins/default/xui/en/panel_chat_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_chat_separator.xml b/indra/newview/skins/default/xui/en/panel_chat_separator.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/en/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_classified_info.xml b/indra/newview/skins/default/xui/en/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml b/indra/newview/skins/default/xui/en/panel_classifieds_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_cof_wearables.xml b/indra/newview/skins/default/xui/en/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/en/panel_conversation_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/en/panel_conversation_log_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_alpha.xml b/indra/newview/skins/default/xui/en/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_classified.xml b/indra/newview/skins/default/xui/en/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_eyes.xml b/indra/newview/skins/default/xui/en/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_gloves.xml b/indra/newview/skins/default/xui/en/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_hair.xml b/indra/newview/skins/default/xui/en/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_jacket.xml b/indra/newview/skins/default/xui/en/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pants.xml b/indra/newview/skins/default/xui/en/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_physics.xml b/indra/newview/skins/default/xui/en/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_pick.xml b/indra/newview/skins/default/xui/en/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_profile.xml b/indra/newview/skins/default/xui/en/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shape.xml b/indra/newview/skins/default/xui/en/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shirt.xml b/indra/newview/skins/default/xui/en/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_shoes.xml b/indra/newview/skins/default/xui/en/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skin.xml b/indra/newview/skins/default/xui/en/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_skirt.xml b/indra/newview/skins/default/xui/en/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_socks.xml b/indra/newview/skins/default/xui/en/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/en/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_underpants.xml b/indra/newview/skins/default/xui/en/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/en/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_edit_wearable.xml b/indra/newview/skins/default/xui/en/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_generic_tip.xml b/indra/newview/skins/default/xui/en/panel_generic_tip.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_general.xml b/indra/newview/skins/default/xui/en/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/en/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_invite.xml b/indra/newview/skins/default/xui/en/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_land_money.xml b/indra/newview/skins/default/xui/en/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_list_item.xml b/indra/newview/skins/default/xui/en/panel_group_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_notices.xml b/indra/newview/skins/default/xui/en/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_notify.xml b/indra/newview/skins/default/xui/en/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_group_roles.xml b/indra/newview/skins/default/xui/en/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_hint.xml b/indra/newview/skins/default/xui/en/panel_hint.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_hint_image.xml b/indra/newview/skins/default/xui/en/panel_hint_image.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_hud.xml b/indra/newview/skins/default/xui/en/panel_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_inbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_instant_message.xml b/indra/newview/skins/default/xui/en/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_inventory_item.xml b/indra/newview/skins/default/xui/en/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_landmark_info.xml b/indra/newview/skins/default/xui/en/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_landmarks.xml b/indra/newview/skins/default/xui/en/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_login.xml b/indra/newview/skins/default/xui/en/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_main_inventory.xml b/indra/newview/skins/default/xui/en/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_me.xml b/indra/newview/skins/default/xui/en/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_general.xml b/indra/newview/skins/default/xui/en/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/en/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_media_settings_security.xml b/indra/newview/skins/default/xui/en/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_navigation_bar.xml b/indra/newview/skins/default/xui/en/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/en/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_nearby_media.xml b/indra/newview/skins/default/xui/en/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_notification.xml b/indra/newview/skins/default/xui/en/panel_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_notifications_channel.xml b/indra/newview/skins/default/xui/en/panel_notifications_channel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_notify_textbox.xml b/indra/newview/skins/default/xui/en/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_online_status_toast.xml b/indra/newview/skins/default/xui/en/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/en/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_outfit_edit.xml b/indra/newview/skins/default/xui/en/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/en/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_list.xml b/indra/newview/skins/default/xui/en/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/en/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_people.xml b/indra/newview/skins/default/xui/en/panel_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_pick_info.xml b/indra/newview/skins/default/xui/en/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_pick_list_item.xml b/indra/newview/skins/default/xui/en/panel_pick_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_picks.xml b/indra/newview/skins/default/xui/en/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_place_profile.xml b/indra/newview/skins/default/xui/en/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_places.xml b/indra/newview/skins/default/xui/en/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_message.xml b/indra/newview/skins/default/xui/en/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_postcard_settings.xml b/indra/newview/skins/default/xui/en/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/en/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/en/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_chat.xml b/indra/newview/skins/default/xui/en/panel_preferences_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_colors.xml b/indra/newview/skins/default/xui/en/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_general.xml b/indra/newview/skins/default/xui/en/panel_preferences_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
index cd243d40a4e653ddd8aa3fe035a755abb6f9ad56..d7db7caf66efc65ee754638f17d96d29569d9320
--- a/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_graphics1.xml
@@ -211,16 +211,19 @@
 		 name="TransparentWater"
 		 top_pad="7"
 		 width="256" />
-		<check_box
-		 control_name="RenderObjectBump"
-		 height="16"
-		 initial_value="true"
-		 label="Bump mapping and shiny"
-		 layout="topleft"
-		 left_delta="0"
-		 name="BumpShiny"
-		 top_pad="1"
-		width="256" />
+      <check_box
+       control_name="RenderObjectBump"
+       height="16"
+       initial_value="true"
+       label="Bump mapping and shiny"
+       layout="topleft"
+       left_delta="0"
+       name="BumpShiny"
+       top_pad="1"
+      width="256">
+        <check_box.commit_callback
+        function="Pref.VertexShaderEnable" />
+      </check_box>
     <check_box
 		control_name="RenderLocalLights"
 		height="16"
@@ -262,7 +265,7 @@
 		 control_name="RenderDeferred"
 		 height="16"
 		 initial_value="true"
-		 label="Lighting and Shadows"
+		 label="Advanced Lighting Model"
 		 layout="topleft"
 		 left_delta="0"
 		 name="UseLightShaders"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_move.xml b/indra/newview/skins/default/xui/en/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/en/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
old mode 100644
new mode 100755
index 4aeea8823e688845558c83619550d0a58b5639b7..dd4533ae74f83acc450450698968e228645fcf35
--- a/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
+++ b/indra/newview/skins/default/xui/en/panel_preferences_setup.xml
@@ -232,6 +232,18 @@
          name="Install_manual"
          value="0" />
   </combo_box>
+  <check_box
+    top_delta="4"
+    enabled="true"
+    follows="left|top"
+    height="14"
+    control_name="UpdaterWillingToTest"
+    label="Willing to update to release candidates"
+    left_delta="0"
+    mouse_opaque="true"
+    name="update_willing_to_test"
+    width="400"           
+    top_pad="5"/>
   <text
      type="string"
      length="1"
diff --git a/indra/newview/skins/default/xui/en/panel_preferences_sound.xml b/indra/newview/skins/default/xui/en/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/en/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_progress.xml b/indra/newview/skins/default/xui/en/panel_progress.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_region_covenant.xml b/indra/newview/skins/default/xui/en/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_region_debug.xml b/indra/newview/skins/default/xui/en/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_region_environment.xml b/indra/newview/skins/default/xui/en/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_region_estate.xml b/indra/newview/skins/default/xui/en/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_region_general.xml b/indra/newview/skins/default/xui/en/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_region_terrain.xml b/indra/newview/skins/default/xui/en/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_script_ed.xml b/indra/newview/skins/default/xui/en/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/en/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/en/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_script_question_toast.xml b/indra/newview/skins/default/xui/en/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/en/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/en/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/en/panel_sidetray_home_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/en/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_local.xml b/indra/newview/skins/default/xui/en/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_options.xml b/indra/newview/skins/default/xui/en/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/en/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/en/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_sound_devices.xml b/indra/newview/skins/default/xui/en/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/en/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_status_bar.xml b/indra/newview/skins/default/xui/en/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_sys_well_item.xml b/indra/newview/skins/default/xui/en/panel_sys_well_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history.xml b/indra/newview/skins/default/xui/en/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/en/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_toast.xml b/indra/newview/skins/default/xui/en/panel_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_toolbar_view.xml b/indra/newview/skins/default/xui/en/panel_toolbar_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_tools_texture.xml b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ac2ec2b206bbccc4f9e302334dd49c0826e6370
--- /dev/null
+++ b/indra/newview/skins/default/xui/en/panel_tools_texture.xml
@@ -0,0 +1,766 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
+<panel
+         border="false"
+         follows="all"
+         height="420"
+         label="Texture"
+         layout="topleft"
+         left="0"
+         mouse_opaque="false"
+         help_topic="toolbox_texture_tab"
+         name="Texture"
+         top="0"
+         width="295">
+            <panel.string
+             name="string repeats per meter">
+                Repeats Per Meter
+            </panel.string>
+            <panel.string
+             name="string repeats per face">
+                Repeats Per Face
+            </panel.string>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left="10"
+             name="color label"
+             text_readonly_color="LabelDisabledColor"
+             top="6"
+             width="64">
+                Color
+            </text>
+            <!-- label is blank because control places it below the box -->
+            <color_swatch
+             can_apply_immediately="true"
+             follows="left|top"
+             height="45"
+             label=""
+             layout="topleft"
+             left="10"
+             name="colorswatch"
+             tool_tip="Click to open color picker"
+             top="20"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_pad="15"
+             name="color trans"
+             text_readonly_color="LabelDisabledColor"
+             top="6"
+             width="110">
+                Transparency %
+            </text>
+            <spinner
+             decimal_digits="0"
+             follows="left|top"
+             height="19"
+             increment="2"
+             initial_value="0"
+             layout="topleft"
+             left_delta="0"
+             max_val="100"
+             name="ColorTrans"
+             top_pad="4"
+             width="80" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_pad="15"
+             name="glow label"
+             text_readonly_color="LabelDisabledColor"
+             top="6"
+             width="80">
+                Glow
+            </text>
+            <spinner
+             decimal_digits="2"
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             layout="topleft"
+             left_delta="0"
+             name="glow"
+             top_pad="4"
+             width="80" />
+            <check_box
+             height="19"
+             label="Full Bright"
+             layout="topleft"
+             left="7"
+             name="checkbox fullbright"
+             top_pad="4"
+             width="81" />
+            <combo_box
+             height="23"
+             layout="topleft"
+             left="10"
+             name="combobox matmedia"
+             top_pad="5"
+             width="100">
+                <combo_box.item
+                 label="Materials"
+                 name="Materials"
+                 value="Materials" />
+                <combo_box.item
+                 label="Media"
+                 name="Media"
+                 value="Media" />
+            </combo_box>
+            <combo_box
+             height="23"
+             layout="topleft"
+             left_pad="10"
+             name="combobox mattype"
+             top_delta="0"
+             width="155">
+                <combo_box.item
+                 label="Texture (diffuse)"
+                 name="Texture (diffuse)"
+                 value="Texture (diffuse)" />
+                <combo_box.item
+                 label="Bumpiness (normal)"
+                 name="Bumpiness (normal)"
+                 value="Bumpiness (normal)" />
+                <combo_box.item
+                 label="Shininess (specular)"
+                 name="Shininess (specular)"
+                 value="Shininess (specular)" />
+            </combo_box>
+            <texture_picker
+             can_apply_immediately="true"
+             default_image_name="Default"
+             fallback_image="materials_ui_x_24.png"
+             follows="left|top"
+             height="80"
+             label="Texture       "
+             layout="topleft"
+             left="10"
+             name="texture control"
+             tool_tip="Click to choose a picture"
+             top_pad="8"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_pad="10"
+             name="label alphamode"
+             text_readonly_color="LabelDisabledColor"
+             top_delta="0"
+             width="90">
+                Alpha mode
+            </text>
+            <combo_box
+             height="23"
+             layout="topleft"
+             left_delta="0"
+             name="combobox alphamode"
+             top_pad="4"
+             width="120">
+                <combo_box.item
+                 label="None"
+                 name="None"
+                 value="None" />
+                <combo_box.item
+                 label="Alpha blending"
+                 name="Alpha blending"
+                 value="Alpha blending" />
+                <combo_box.item
+                 label="Alpha masking"
+                 name="Alpha masking"
+                 value="Alpha masking" />
+                <combo_box.item
+                 label="Emissive mask"
+                 name="Emissive mask"
+                 value="Emissive mask" />
+            </combo_box>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="0"
+             name="label maskcutoff"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="4"
+             width="90">
+                Mask cutoff
+            </text>
+            <spinner
+             decimal_digits="0"
+             min_val="0"
+             max_val="255"
+             follows="left|top"
+             height="19"
+             initial_value="55"
+             layout="topleft"
+             top_pad="4"
+             left_delta="0"
+             increment="1"
+             name="maskcutoff"
+             width="80" />
+            <texture_picker
+             allow_no_texture="true"
+             can_apply_immediately="true"
+             default_image_name="Default"
+             fallback_image="materials_ui_x_24.png"
+             follows="left|top"
+             height="80"
+             label="Texture       "
+             layout="topleft"
+             left="10"
+             name="bumpytexture control"
+             tool_tip="Click to choose a picture"
+             top_delta="-55"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_pad="10"
+             name="label bumpiness"
+             text_readonly_color="LabelDisabledColor"
+             top_delta="0"
+             width="90">
+                Bumpiness
+            </text>
+            <combo_box
+             height="23"
+             layout="topleft"
+             left_delta="0"
+             name="combobox bumpiness"
+             top_pad="4"
+             width="90">
+                <combo_box.item
+                 label="None"
+                 name="None"
+                 value="None" />
+                <combo_box.item
+                 label="Brightness"
+                 name="Brightness"
+                 value="Brightness" />
+                <combo_box.item
+                 label="Darkness"
+                 name="Darkness"
+                 value="Darkness" />
+                <combo_box.item
+                 label="woodgrain"
+                 name="woodgrain"
+                 value="woodgrain" />
+                <combo_box.item
+                 label="bark"
+                 name="bark"
+                 value="bark" />
+                <combo_box.item
+                 label="bricks"
+                 name="bricks"
+                 value="bricks" />
+                <combo_box.item
+                 label="checker"
+                 name="checker"
+                 value="checker" />
+                <combo_box.item
+                 label="concrete"
+                 name="concrete"
+                 value="concrete" />
+                <combo_box.item
+                 label="crustytile"
+                 name="crustytile"
+                 value="crustytile" />
+                <combo_box.item
+                 label="cutstone"
+                 name="cutstone"
+                 value="cutstone" />
+                <combo_box.item
+                 label="discs"
+                 name="discs"
+                 value="discs" />
+                <combo_box.item
+                 label="gravel"
+                 name="gravel"
+                 value="gravel" />
+                <combo_box.item
+                 label="petridish"
+                 name="petridish"
+                 value="petridish" />
+                <combo_box.item
+                 label="siding"
+                 name="siding"
+                 value="siding" />
+                <combo_box.item
+                 label="stonetile"
+                 name="stonetile"
+                 value="stonetile" />
+                <combo_box.item
+                 label="stucco"
+                 name="stucco"
+                 value="stucco" />
+                <combo_box.item
+                 label="suction"
+                 name="suction"
+                 value="suction" />
+                <combo_box.item
+                 label="weave"
+                 name="weave"
+                 value="weave" />
+              <!--
+                 NORSPEC-182, ensure item doesn't show up in menu until it should
+                <combo_box.item
+                 label="Use texture"
+                 name="Use texture"
+                 value="Use texture" />
+                 -->
+            </combo_box>
+            <texture_picker
+             allow_no_texture="true"
+             can_apply_immediately="true"
+             default_image_name="Default"
+             fallback_image="materials_ui_x_24.png"
+             follows="left|top"
+             height="80"
+             label="Texture       "
+             layout="topleft"
+             left="10"
+             name="shinytexture control"
+             tool_tip="Click to choose a picture"
+             top_delta="-14"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             name="label shininess"
+             left_pad="10"
+             text_readonly_color="LabelDisabledColor"
+             top_delta="6"
+             width="90">
+                Shininess
+            </text>
+            <combo_box
+             height="23"
+             layout="topleft"
+             left_pad="10"
+             name="combobox shininess"
+             top_delta="-6"
+             width="90">
+                <combo_box.item
+                 label="None"
+                 name="None"
+                 value="None" />
+                <combo_box.item
+                 label="Low"
+                 name="Low"
+                 value="Low" />
+                <combo_box.item
+                 label="Medium"
+                 name="Medium"
+                 value="Medium" />
+                <combo_box.item
+                 label="High"
+                 name="High"
+                 value="High" />
+              <!--
+                 NORSPEC-182, ensure item doesn't show up in menu until it should
+                <combo_box.item
+                 label="Use texture"
+                 name="Use texture"
+                 value="Use texture" />
+                 -->
+            </combo_box>
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="-100"
+             name="label glossiness"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="8"
+             width="116">
+                Glossiness
+            </text>
+            <spinner
+             decimal_digits="0"
+             min_val="0"
+             max_val="255"
+             follows="left|top"
+             height="19"
+             initial_value="51"
+             increment="1"
+             layout="topleft"
+             top_delta="-4"
+             left_pad="10"
+             name="glossiness"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="-126"
+             name="label environment"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="8"
+             width="116">
+                Environment
+            </text>
+            <spinner
+             decimal_digits="0"
+             min_val="0"
+             max_val="255"
+             increment="1"
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             layout="topleft"
+             top_delta="-4"
+             left_pad="10"
+             name="environment"
+             width="64" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left_delta="-126"
+             name="label shinycolor"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="8"
+             width="116">
+                Color
+            </text>
+            <!-- label is blank because control places it below the box -->
+            <color_swatch
+             can_apply_immediately="true"
+             follows="left|top"
+             height="45"
+             label=""
+             layout="topleft"
+             left_pad="10"
+             name="shinycolorswatch"
+             tool_tip="Click to open color picker"
+             top_delta="-4"
+             width="64" />
+            <text
+			 follows="left|top|right"
+			 height="9"
+			 layout="topleft"
+			 left="10"
+			 top_delta="-50"
+             use_ellipses="true"
+			 read_only="true"
+			 name="media_info"
+			 width="280">
+			 URL of chosen media, if any, goes here
+			 </text>
+			<button
+			 follows="top|left"
+			 height="18"
+			 layout="topleft"
+			 left="10"
+			 name="add_media"
+			 top_pad="4"
+			 tool_tip="Add Media"
+			 label="Choose..."
+			 width="85">
+				<button.commit_callback
+				function="BuildTool.AddMedia"/>
+			</button>
+			<button
+			 follows="top|left"
+			 height="18"
+			 layout="topleft"
+			 left_pad="5"
+			 name="delete_media"
+			 tool_tip="Delete this media texture"
+			 top_delta="0"
+			 label="Remove"
+			 width="85">
+				<button.commit_callback
+				function="BuildTool.DeleteMedia"/>
+			</button>
+            <button
+			 follows="left|top"
+			 height="18"
+			 label="Align"
+			 label_selected="Align Media"
+			 layout="topleft"
+			 left_pad="5"
+			 name="button align"
+			 top_delta="0"
+			 tool_tip="Align media texture (must load first)"
+			 width="85" />
+            <text
+             type="string"
+             length="1"
+             follows="left|top"
+             height="10"
+             layout="topleft"
+             left="10"
+             name="tex gen"
+             text_readonly_color="LabelDisabledColor"
+             top_pad="60"
+             width="140">
+                Mapping
+            </text>
+            <combo_box
+             height="23"
+             layout="topleft"
+             left_pad="0"
+             name="combobox texgen"
+             top_pad="-13"
+             width="125">
+                <combo_box.item
+                 label="Default"
+                 name="Default"
+                 value="Default" />
+                <combo_box.item
+                 label="Planar"
+                 name="Planar"
+                 value="Planar" />
+            </combo_box>
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="TexScaleU"
+             top_pad="5"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="TexScaleV"
+             width="265" />
+            <spinner
+             decimal_digits="1"
+             follows="left|top"
+             height="19"
+             initial_value=""
+			 label="Repeats per meter"
+             layout="topleft"
+			 label_width="205"
+             left="10"
+             max_val="100"
+             min_val="0.1"
+             name="rptctrl"
+             width="265" />
+           <spinner
+             decimal_digits="2"
+             follows="left|top"
+             height="19"
+             increment="1"
+             initial_value="0"
+			 label="Rotation degrees"
+             layout="topleft"
+			 label_width="205"
+             left="10"
+             max_val="9999"
+             min_val="-9999"
+             name="TexRot"
+             width="265" />
+
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="TexOffsetU"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="TexOffsetV"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="bumpyScaleU"
+             top_delta="-115"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="bumpyScaleV"
+             width="265" />
+           <spinner
+             decimal_digits="2"
+             follows="left|top"
+             height="19"
+             top_pad="27"
+             increment="1"
+             initial_value="0"
+			 label="Rotation degrees"
+             layout="topleft"
+			 label_width="205"
+             left="10"
+             max_val="360"
+             min_val="0"
+             name="bumpyRot"
+             width="265" />
+
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="bumpyOffsetU"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="bumpyOffsetV"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="shinyScaleU"
+             top_delta="-115"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical scale"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-100"
+             max_val="100"
+             name="shinyScaleV"
+             width="265" />
+           <spinner
+             decimal_digits="2"
+             follows="left|top"
+             height="19"
+             top_pad="27"
+             increment="1"
+             initial_value="0"
+			 label="Rotation degrees"
+             layout="topleft"
+			 label_width="205"
+             left="10"
+             max_val="360"
+             min_val="0"
+             name="shinyRot"
+             width="265" />
+
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Horizontal offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="shinyOffsetU"
+             width="265" />
+            <spinner
+             follows="left|top"
+             height="19"
+             initial_value="0"
+             label="Vertical offset"
+             label_width="205"
+             layout="topleft"
+             left="10"
+             min_val="-1"
+             name="shinyOffsetV"
+             width="265" />
+            <check_box
+             follows="top|left"
+             height="16"
+             initial_value="false"
+             label="Align planar faces"
+             layout="topleft"
+             left="7"
+             name="checkbox planar align"
+             tool_tip="Align textures on all selected faces with the last selected face. Requires Planar texture mapping."
+             top_delta="16"
+             width="260" />
+            <web_browser
+             visible="false"
+             enabled="false"
+             border_visible="true"
+             bottom_delta="0"
+             follows="top|left"
+             left="0"
+             name="title_media"
+             width="4"
+             height="4"
+             start_url="about:blank"
+             decouple_texture_size="true" />
+	   </panel>
diff --git a/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml b/indra/newview/skins/default/xui/en/panel_topinfo_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_voice_effect.xml b/indra/newview/skins/default/xui/en/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/en/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/panel_world_map.xml b/indra/newview/skins/default/xui/en/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/role_actions.xml b/indra/newview/skins/default/xui/en/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/sidepanel_appearance.xml b/indra/newview/skins/default/xui/en/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/sidepanel_inventory.xml b/indra/newview/skins/default/xui/en/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/sidepanel_item_info.xml b/indra/newview/skins/default/xui/en/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/sidepanel_task_info.xml b/indra/newview/skins/default/xui/en/sidepanel_task_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/strings.xml b/indra/newview/skins/default/xui/en/strings.xml
old mode 100644
new mode 100755
index 7c08aef65e3ac9ef5f3c2d5f44a392c81d65df50..f7b33b0a4ad39d1591952416a43260d839d75821
--- a/indra/newview/skins/default/xui/en/strings.xml
+++ b/indra/newview/skins/default/xui/en/strings.xml
@@ -61,6 +61,7 @@
 	<string name="Quit">Quit</string>
 	<string name="create_account_url">http://join.secondlife.com/?sourceid=[sourceid]</string>
 
+	<string name="ViewerDownloadURL">http://secondlife.com/download</string>
 	<string name="LoginFailedViewerNotPermitted">
 The viewer you are using can no longer access Second Life. Please visit the following page to download a new viewer:
 http://secondlife.com/download
@@ -372,6 +373,8 @@ Please try logging in again in a minute.</string>
 	<!-- build floater -->
 	<string name="multiple_textures">Multiple</string>
 
+<string name="use_texture">Use texture</string>
+
 	<!-- world map -->
 	<string name="texture_loading">Loading...</string>
 	<string name="worldmap_offline">Offline</string>
@@ -410,6 +413,11 @@ Please try logging in again in a minute.</string>
 	<string name="NotConnected">Not Connected</string>
 	<string name="AgentNameSubst">(You)</string> <!-- Substitution for agent name -->
   <string name="TeleportYourAgent">Teleport you</string>
+	<string name="JoinAnExperience">Join an experience</string> <!-- not used -->
+	<string name="SilentlyManageEstateAccess">Suppress alerts when managing estate access lists</string>
+	<string name="OverrideYourAnimations">Replace your default animations</string>
+	<string name="ScriptReturnObjects">Return objects on your behalf</string>
+	<string name="UnknownScriptPermission">(unknown)!</string>
 
 	<!-- Sim Access labels -->
 	<string name="SIM_ACCESS_PG">General</string>
diff --git a/indra/newview/skins/default/xui/en/teleport_strings.xml b/indra/newview/skins/default/xui/en/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/accordion.xml b/indra/newview/skins/default/xui/en/widgets/accordion.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml b/indra/newview/skins/default/xui/en/widgets/accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml b/indra/newview/skins/default/xui/en/widgets/avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml b/indra/newview/skins/default/xui/en/widgets/avatar_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/badge.xml b/indra/newview/skins/default/xui/en/widgets/badge.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml b/indra/newview/skins/default/xui/en/widgets/bodyparts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/button.xml b/indra/newview/skins/default/xui/en/widgets/button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_editor.xml b/indra/newview/skins/default/xui/en/widgets/chat_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/chat_history.xml b/indra/newview/skins/default/xui/en/widgets/chat_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/check_box.xml b/indra/newview/skins/default/xui/en/widgets/check_box.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_offer.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_panel.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml b/indra/newview/skins/default/xui/en/widgets/chiclet_script.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/color_swatch.xml b/indra/newview/skins/default/xui/en/widgets/color_swatch.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/combo_box.xml b/indra/newview/skins/default/xui/en/widgets/combo_box.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/context_menu.xml b/indra/newview/skins/default/xui/en/widgets/context_menu.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/conversation_view_session.xml b/indra/newview/skins/default/xui/en/widgets/conversation_view_session.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/en/widgets/deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/drop_down.xml b/indra/newview/skins/default/xui/en/widgets/drop_down.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/en/widgets/dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/expandable_text.xml b/indra/newview/skins/default/xui/en/widgets/expandable_text.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/filter_editor.xml b/indra/newview/skins/default/xui/en/widgets/filter_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml b/indra/newview/skins/default/xui/en/widgets/flat_list_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/floater.xml b/indra/newview/skins/default/xui/en/widgets/floater.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/flyout_button.xml b/indra/newview/skins/default/xui/en/widgets/flyout_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml b/indra/newview/skins/default/xui/en/widgets/folder_view_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/gesture_combo_list.xml b/indra/newview/skins/default/xui/en/widgets/gesture_combo_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/group_icon.xml b/indra/newview/skins/default/xui/en/widgets/group_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/hint_popup.xml b/indra/newview/skins/default/xui/en/widgets/hint_popup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/icon.xml b/indra/newview/skins/default/xui/en/widgets/icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_item.xml b/indra/newview/skins/default/xui/en/widgets/inbox_folder_view_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inbox_inventory_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/inspector.xml b/indra/newview/skins/default/xui/en/widgets/inspector.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml b/indra/newview/skins/default/xui/en/widgets/inventory_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml b/indra/newview/skins/default/xui/en/widgets/inventory_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/joystick_rotate.xml b/indra/newview/skins/default/xui/en/widgets/joystick_rotate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/layout_stack.xml b/indra/newview/skins/default/xui/en/widgets/layout_stack.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/line_editor.xml b/indra/newview/skins/default/xui/en/widgets/line_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/list_view.xml b/indra/newview/skins/default/xui/en/widgets/list_view.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml b/indra/newview/skins/default/xui/en/widgets/loading_indicator.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/location_input.xml b/indra/newview/skins/default/xui/en/widgets/location_input.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu.xml b/indra/newview/skins/default/xui/en/widgets/menu.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_bar.xml b/indra/newview/skins/default/xui/en/widgets/menu_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item.xml b/indra/newview/skins/default/xui/en/widgets/menu_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_call.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_check.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_check.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_separator.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml b/indra/newview/skins/default/xui/en/widgets/menu_item_tear_off.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/multi_slider.xml b/indra/newview/skins/default/xui/en/widgets/multi_slider.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/multi_slider_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/name_editor.xml b/indra/newview/skins/default/xui/en/widgets/name_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/name_list.xml b/indra/newview/skins/default/xui/en/widgets/name_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/output_monitor.xml b/indra/newview/skins/default/xui/en/widgets/output_monitor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/panel.xml b/indra/newview/skins/default/xui/en/widgets/panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml b/indra/newview/skins/default/xui/en/widgets/panel_camera_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/progress_bar.xml b/indra/newview/skins/default/xui/en/widgets/progress_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/radio_group.xml b/indra/newview/skins/default/xui/en/widgets/radio_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/radio_item.xml b/indra/newview/skins/default/xui/en/widgets/radio_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml b/indra/newview/skins/default/xui/en/widgets/scroll_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml b/indra/newview/skins/default/xui/en/widgets/scroll_column_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_container.xml b/indra/newview/skins/default/xui/en/widgets/scroll_container.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/scroll_list.xml b/indra/newview/skins/default/xui/en/widgets/scroll_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/scrolling_panel_list.xml b/indra/newview/skins/default/xui/en/widgets/scrolling_panel_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml b/indra/newview/skins/default/xui/en/widgets/search_combo_box.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/search_editor.xml b/indra/newview/skins/default/xui/en/widgets/search_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/side_tray.xml b/indra/newview/skins/default/xui/en/widgets/side_tray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/sidetray_tab.xml b/indra/newview/skins/default/xui/en/widgets/sidetray_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml b/indra/newview/skins/default/xui/en/widgets/simple_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/slider.xml b/indra/newview/skins/default/xui/en/widgets/slider.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/slider_bar.xml b/indra/newview/skins/default/xui/en/widgets/slider_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/spinner.xml b/indra/newview/skins/default/xui/en/widgets/spinner.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/split_button.xml b/indra/newview/skins/default/xui/en/widgets/split_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/tab_container.xml b/indra/newview/skins/default/xui/en/widgets/tab_container.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/talk_button.xml b/indra/newview/skins/default/xui/en/widgets/talk_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/teleport_history_menu_item.xml b/indra/newview/skins/default/xui/en/widgets/teleport_history_menu_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/text.xml b/indra/newview/skins/default/xui/en/widgets/text.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/text_editor.xml b/indra/newview/skins/default/xui/en/widgets/text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/textbase.xml b/indra/newview/skins/default/xui/en/widgets/textbase.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/texture_picker.xml b/indra/newview/skins/default/xui/en/widgets/texture_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/time.xml b/indra/newview/skins/default/xui/en/widgets/time.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml b/indra/newview/skins/default/xui/en/widgets/toggleable_menu.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/tool_tip.xml b/indra/newview/skins/default/xui/en/widgets/tool_tip.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/toolbar.xml b/indra/newview/skins/default/xui/en/widgets/toolbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml b/indra/newview/skins/default/xui/en/widgets/ui_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/view_border.xml b/indra/newview/skins/default/xui/en/widgets/view_border.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/web_browser.xml b/indra/newview/skins/default/xui/en/widgets/web_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/widgets/window_shade.xml b/indra/newview/skins/default/xui/en/widgets/window_shade.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/en/xui_version.xml b/indra/newview/skins/default/xui/en/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_about.xml b/indra/newview/skins/default/xui/es/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_about_land.xml b/indra/newview/skins/default/xui/es/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_activeim.xml b/indra/newview/skins/default/xui/es/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_auction.xml b/indra/newview/skins/default/xui/es/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_autoreplace.xml b/indra/newview/skins/default/xui/es/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_avatar.xml b/indra/newview/skins/default/xui/es/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_picker.xml b/indra/newview/skins/default/xui/es/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_avatar_textures.xml b/indra/newview/skins/default/xui/es/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_beacons.xml b/indra/newview/skins/default/xui/es/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_build_options.xml b/indra/newview/skins/default/xui/es/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_bulk_perms.xml b/indra/newview/skins/default/xui/es/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_bumps.xml b/indra/newview/skins/default/xui/es/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_buy_contents.xml b/indra/newview/skins/default/xui/es/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency.xml b/indra/newview/skins/default/xui/es/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/es/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_buy_land.xml b/indra/newview/skins/default/xui/es/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_buy_object.xml b/indra/newview/skins/default/xui/es/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_camera.xml b/indra/newview/skins/default/xui/es/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_chat_bar.xml b/indra/newview/skins/default/xui/es/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_choose_group.xml b/indra/newview/skins/default/xui/es/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_color_picker.xml b/indra/newview/skins/default/xui/es/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_conversation_log.xml b/indra/newview/skins/default/xui/es/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9202fab92dfd4c7b4e7643ff693439de8083a415
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="REGISTRO DE CONVERSACIONES">
+	<panel name="buttons_panel">
+		<filter_editor label="Filtrar la gente" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Opciones de vista/orden"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Acciones en la persona o el grupo seleccionado"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_conversation_preview.xml b/indra/newview/skins/default/xui/es/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f579e720fb220d1b9c79af136e51901a40c933a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="CONVERSACIÓN:">
+	<floater.string name="Title">
+		CONVERSACIÓN: [NAME]
+	</floater.string>
+	<text name="page_label" value="Página"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_critical.xml b/indra/newview/skins/default/xui/es/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/es/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_destinations.xml b/indra/newview/skins/default/xui/es/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_display_name.xml b/indra/newview/skins/default/xui/es/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/es/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/es/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/es/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_environment_settings.xml b/indra/newview/skins/default/xui/es/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_event.xml b/indra/newview/skins/default/xui/es/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_fast_timers.xml b/indra/newview/skins/default/xui/es/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_font_test.xml b/indra/newview/skins/default/xui/es/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_gesture.xml b/indra/newview/skins/default/xui/es/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_god_tools.xml b/indra/newview/skins/default/xui/es/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_hardware_settings.xml b/indra/newview/skins/default/xui/es/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_help_browser.xml b/indra/newview/skins/default/xui/es/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_how_to.xml b/indra/newview/skins/default/xui/es/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_hud.xml b/indra/newview/skins/default/xui/es/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_im_container.xml b/indra/newview/skins/default/xui/es/floater_im_container.xml
old mode 100644
new mode 100755
index 1cd752e6ec4d7a72e9ec7812273fba296219aae3..f772441141a92f45d35070045d1a7f0de1d522e2
--- a/indra/newview/skins/default/xui/es/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/es/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="CONVERSACIONES"/>
+<multi_floater name="floater_im_box" title="CONVERSACIONES">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Opciones de vista/orden"/>
+					<button name="add_btn" tool_tip="Iniciar una conversación nueva"/>
+					<button name="speak_btn" tool_tip="Utiliza el micrófono para hablar con las personas"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Cerrar/expandir esta lista"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Cerrar este panel"/>
+					<text name="stub_textbox">
+						Esta conversación está en una ventana aparte.   [secondlife:/// Traerla de vuelta.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/es/floater_im_session.xml b/indra/newview/skins/default/xui/es/floater_im_session.xml
old mode 100644
new mode 100755
index 3d9d17fc81ada808766e00cd9c8bb4b0bf33ad78..5f38fbd61512717b13f094d10d6f71c2d9453cab
--- a/indra/newview/skins/default/xui/es/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/es/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="A" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] ha sido invitado a la conversación."/>
+	<floater.string name="multiple_participants_added" value="[NAME] han sido invitados a la conversación."/>
+	<floater.string name="tooltip_to_separate_window" value="Mover esta conversación a otra ventana"/>
+	<floater.string name="tooltip_to_main_window" value="Volver a poner esta conversación en la ventana principal"/>
+	<floater.string name="start_call_button_tooltip" value="Abrir conexión de voz"/>
+	<floater.string name="end_call_button_tooltip" value="Cerrar la conexión de voz"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Cerrar este panel"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Cerrar la lista de participantes"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Expandir la lista de participantes"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Opciones de vista/orden"/>
+				<menu_button name="gear_btn" tool_tip="Acciones en la persona seleccionada"/>
+				<button name="add_btn" tool_tip="Añadir alguien a esta conversación"/>
+				<button name="voice_call_btn" tool_tip="Abrir conexión de voz"/>
+				<button name="close_btn" tool_tip="Finalizar esta conversación"/>
+				<button name="expand_collapse_btn" tool_tip="Cerrar/expandir este panel"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Traducir el chat" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="A" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Muestra/oculta el panel de mensajes"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_image_preview.xml b/indra/newview/skins/default/xui/es/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_import_collada.xml b/indra/newview/skins/default/xui/es/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_incoming_call.xml b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
old mode 100644
new mode 100755
index b5b756abb6a194d9166d90eef4091abef5f4a484..acbb25b713145aa79bc193912015a0027fe91223
--- a/indra/newview/skins/default/xui/es/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/es/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		anónimo
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		está llamando.
+		te está llamando.
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		ha entrado en un chat de voz en multiconferencia.
@@ -25,9 +25,9 @@
 		¿Quieres dejar [CURRENT_CHAT] y entrar en este chat de voz?
 	</floater.string>
 	<text name="question">
-		¿Quieres dejar [CURRENT_CHAT] y entrar a este chat de voz?
+		Si respondes, te desconectarás de la conversación de voz actual.
 	</text>
-	<button label="Aceptar" label_selected="Aceptar" name="Accept"/>
-	<button label="Rechazar" label_selected="Rechazar" name="Reject"/>
-	<button label="Comenzar un MI" name="Start IM"/>
+	<button label="Responder" label_selected="Responder" name="Accept"/>
+	<button label="Ignorar" label_selected="Ignorar" name="Reject"/>
+	<button label="Abrir MI en su lugar" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/es/floater_inspect.xml b/indra/newview/skins/default/xui/es/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/es/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/es/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_joystick.xml b/indra/newview/skins/default/xui/es/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_lagmeter.xml b/indra/newview/skins/default/xui/es/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_land_holdings.xml b/indra/newview/skins/default/xui/es/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/es/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_lsl_guide.xml b/indra/newview/skins/default/xui/es/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_map.xml b/indra/newview/skins/default/xui/es/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_media_browser.xml b/indra/newview/skins/default/xui/es/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_media_settings.xml b/indra/newview/skins/default/xui/es/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_mem_leaking.xml b/indra/newview/skins/default/xui/es/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/es/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_model_preview.xml b/indra/newview/skins/default/xui/es/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_moveview.xml b/indra/newview/skins/default/xui/es/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_mute_object.xml b/indra/newview/skins/default/xui/es/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_my_appearance.xml b/indra/newview/skins/default/xui/es/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_my_inventory.xml b/indra/newview/skins/default/xui/es/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_object_weights.xml b/indra/newview/skins/default/xui/es/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_openobject.xml b/indra/newview/skins/default/xui/es/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/es/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_outgoing_call.xml b/indra/newview/skins/default/xui/es/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index e93ecc9e10d3483cacaf1db2888999333fc19399..3602270e5a5d9a8fcdbe86fd05693a1b710e5115
--- a/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/es/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Mostrar:
 			</text>
-			<check_box label="Mundo virtual" name="show_world"/>
+			<check_box label="Prueba" name="show_world"/>
 			<check_box label="Solamente los objetos movibles" name="show_world_movables_only"/>
 			<check_box label="Navmesh" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/es/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/es/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_pay.xml b/indra/newview/skins/default/xui/es/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_pay_object.xml b/indra/newview/skins/default/xui/es/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_people.xml b/indra/newview/skins/default/xui/es/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_perm_prefs.xml b/indra/newview/skins/default/xui/es/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_picks.xml b/indra/newview/skins/default/xui/es/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_places.xml b/indra/newview/skins/default/xui/es/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_post_process.xml b/indra/newview/skins/default/xui/es/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preferences.xml b/indra/newview/skins/default/xui/es/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/es/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preview_animation.xml b/indra/newview/skins/default/xui/es/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preview_gesture.xml b/indra/newview/skins/default/xui/es/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preview_notecard.xml b/indra/newview/skins/default/xui/es/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preview_sound.xml b/indra/newview/skins/default/xui/es/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_preview_texture.xml b/indra/newview/skins/default/xui/es/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_price_for_listing.xml b/indra/newview/skins/default/xui/es/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_publish_classified.xml b/indra/newview/skins/default/xui/es/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_region_debug_console.xml b/indra/newview/skins/default/xui/es/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_region_info.xml b/indra/newview/skins/default/xui/es/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_report_abuse.xml b/indra/newview/skins/default/xui/es/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_script_debug.xml b/indra/newview/skins/default/xui/es/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/es/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_script_limits.xml b/indra/newview/skins/default/xui/es/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_script_preview.xml b/indra/newview/skins/default/xui/es/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_script_queue.xml b/indra/newview/skins/default/xui/es/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_script_search.xml b/indra/newview/skins/default/xui/es/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_search.xml b/indra/newview/skins/default/xui/es/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_select_key.xml b/indra/newview/skins/default/xui/es/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_sell_land.xml b/indra/newview/skins/default/xui/es/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_settings_debug.xml b/indra/newview/skins/default/xui/es/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_snapshot.xml b/indra/newview/skins/default/xui/es/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_sound_devices.xml b/indra/newview/skins/default/xui/es/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_sound_preview.xml b/indra/newview/skins/default/xui/es/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_spellcheck.xml b/indra/newview/skins/default/xui/es/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/es/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_stats.xml b/indra/newview/skins/default/xui/es/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_sys_well.xml b/indra/newview/skins/default/xui/es/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_telehub.xml b/indra/newview/skins/default/xui/es/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/es/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index 93bc9f293c159ca4bcfd56a6d2808f1986b1934d..01b024bc3e40abcf859884d265bb1a9bc2856b7c
--- a/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/es/floater_texture_ctrl.xml
@@ -20,7 +20,7 @@
 	<button label="Blanca" label_selected="Blanca" name="Blank"/>
 	<button label="Ninguna" label_selected="Ninguna" left="90" name="None"/>
 	<button label="" label_selected="" name="Pipette"/>
-	<check_box initial_value="true" label="Vista previa inmediata" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="Aplicarlo ahora" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Vista previa inhabilitada"/>
 	<filter_editor label="Filtrar las texturas" name="inventory search editor"/>
 	<check_box initial_value="false" label="Ver las carpetas" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/es/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/es/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_tools.xml b/indra/newview/skins/default/xui/es/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_top_objects.xml b/indra/newview/skins/default/xui/es/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_tos.xml b/indra/newview/skins/default/xui/es/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_toybox.xml b/indra/newview/skins/default/xui/es/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_translation_settings.xml b/indra/newview/skins/default/xui/es/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_url_entry.xml b/indra/newview/skins/default/xui/es/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/es/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1115d672399ce5c050d8e04edf5d79808da3f6c5
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="VOLUMEN DE CHAT DE VOZ">
+	<slider label="Chat de voz" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_voice_controls.xml b/indra/newview/skins/default/xui/es/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_voice_effect.xml b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
old mode 100644
new mode 100755
index 1a265845af5f6ab247ccbfead11aea949864ef60..02ebe80ff7da7283dc1b5978bc9a566e413c2311
--- a/indra/newview/skins/default/xui/es/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/es/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Lugares" name="voice_effects" title="TRANSFORMACIÓN DE VOZ">
+<floater label="Lugares" name="voice_effects" title="PROBAR TRANSFORMACIÓN DE VOZ">
 	<string name="no_voice_effect">
 		(Sin transformación de voz)
 	</string>
diff --git a/indra/newview/skins/default/xui/es/floater_voice_volume.xml b/indra/newview/skins/default/xui/es/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0ebc511887e353c3229f893ce9d2c59c93d932ad
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="VOLUMEN DE VOZ">
+	<slider name="volume_slider" tool_tip="Volumen de la voz" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/es/floater_web_content.xml b/indra/newview/skins/default/xui/es/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/es/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_window_size.xml b/indra/newview/skins/default/xui/es/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/floater_world_map.xml b/indra/newview/skins/default/xui/es/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/inspect_avatar.xml b/indra/newview/skins/default/xui/es/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/inspect_group.xml b/indra/newview/skins/default/xui/es/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/inspect_object.xml b/indra/newview/skins/default/xui/es/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/inspect_remote_object.xml b/indra/newview/skins/default/xui/es/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/language_settings.xml b/indra/newview/skins/default/xui/es/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/es/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_other.xml b/indra/newview/skins/default/xui/es/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_attachment_self.xml b/indra/newview/skins/default/xui/es/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_icon.xml b/indra/newview/skins/default/xui/es/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_other.xml b/indra/newview/skins/default/xui/es/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_avatar_self.xml b/indra/newview/skins/default/xui/es/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_cof_attachment.xml b/indra/newview/skins/default/xui/es/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_cof_body_part.xml b/indra/newview/skins/default/xui/es/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_cof_clothing.xml b/indra/newview/skins/default/xui/es/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_cof_gear.xml b/indra/newview/skins/default/xui/es/menu_cof_gear.xml
old mode 100644
new mode 100755
index ff8ad0977acd795d97daf4c52af4deb5c6a2aa6c..a889992b8aaa04ad609a878491678b69056de37d
--- a/indra/newview/skins/default/xui/es/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear COF">
+<toggleable_menu name="Gear COF">
 	<menu label="Ropas nuevas" name="COF.Gear.New_Clothes"/>
-	<menu label="Nuevas partes del cuerpo" name="COF.Geear.New_Body_Parts"/>
-</menu>
+	<menu label="Nuevas partes del cuerpo" name="COF.Gear.New_Body_Parts"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_conversation.xml b/indra/newview/skins/default/xui/es/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e4e9a0bf63d0dc80cdd7d2260bfb07bf77b56b81
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Cerrar conversación" name="close_conversation"/>
+	<menu_item_call label="Abrir conversación de voz" name="open_voice_conversation"/>
+	<menu_item_call label="Desconectar de voz" name="disconnect_from_voice"/>
+	<menu_item_call label="Ver el perfil" name="view_profile"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Ofrecer teleporte" name="offer_teleport"/>
+	<menu_item_call label="Llamada de voz" name="voice_call"/>
+	<menu_item_call label="Historial del chat..." name="chat_history"/>
+	<menu_item_call label="Añadir como amigo" name="add_friend"/>
+	<menu_item_call label="Quitarle como amigo" name="remove_friend"/>
+	<menu_item_call label="Quitar amigos" name="remove_friends"/>
+	<menu_item_call label="Invitar al grupo..." name="invite_to_group"/>
+	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
+	<menu_item_call label="Mapa" name="map"/>
+	<menu_item_call label="Compartir" name="share"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_check label="Ignorar la voz" name="block_unblock"/>
+	<menu_item_check label="Ignorar el texto" name="MuteText"/>
+	<menu_item_call label="Perfil del grupo" name="group_profile"/>
+	<menu_item_call label="Activar el grupo" name="activate_group"/>
+	<menu_item_call label="Abandonar el grupo" name="leave_group"/>
+	<context_menu label="Opciones del moderador" name="Moderator Options">
+		<menu_item_check label="Permitir el chat de texto" name="AllowTextChat"/>
+		<menu_item_call label="Ignorar a este participante" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Quitar el silencio a este participante" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Silenciar a todos" name="ModerateVoiceMute"/>
+		<menu_item_call label="Quitar el silencio a todos" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/es/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..090e6fb0bf71cc85b3d7103ffd2c13ef1ae2e9e9
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="MI..." name="IM"/>
+	<menu_item_call label="Llamada de voz..." name="Call"/>
+	<menu_item_call label="Abrir el historial de chat..." name="Chat history"/>
+	<menu_item_call label="Ver el perfil" name="View Profile"/>
+	<menu_item_call label="Ofrecer teleporte" name="teleport"/>
+	<menu_item_call label="Añadir como amigo" name="add_friend"/>
+	<menu_item_call label="Quitarle como amigo" name="remove_friend"/>
+	<menu_item_call label="Invitar al grupo..." name="Invite"/>
+	<menu_item_call label="Mapa" name="Map"/>
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Ignorar / No ignorar" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/es/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b8b4616b2d9f9b708229bb5d5bcde7fa46275ebf
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por fecha" name="sort_by_date"/>
+	<menu_item_check label="Ordenar con los amigos al principio" name="sort_by_friends"/>
+	<menu_item_call label="Ver el historial de chat..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_edit.xml b/indra/newview/skins/default/xui/es/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_favorites.xml b/indra/newview/skins/default/xui/es/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_gesture_gear.xml b/indra/newview/skins/default/xui/es/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_group_plus.xml b/indra/newview/skins/default/xui/es/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_hide_navbar.xml b/indra/newview/skins/default/xui/es/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_im_conversation.xml b/indra/newview/skins/default/xui/es/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5ba0fb898e8e5f77857363d2987887de09abeafc
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Ver el perfil" name="View Profile"/>
+	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
+	<menu_item_call label="Quitarle como amigo" name="remove_friend"/>
+	<menu_item_call label="Ofrecer teleporte" name="offer_teleport"/>
+	<menu_item_call label="Invitar al grupo..." name="invite_to_group"/>
+	<menu_item_call label="Historial del chat..." name="chat_history"/>
+	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
+	<menu_item_call label="Mapa" name="map"/>
+	<menu_item_call label="Compartir" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Ignorar la voz" name="Block/Unblock"/>
+	<menu_item_check label="Ignorar el texto" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/es/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6ea970b826599d06495961a7215690e1f8f04304
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Vista compacta" name="compact_view"/>
+	<menu_item_check label="Vista ampliada" name="expanded_view"/>
+	<menu_item_check label="Mostrar tiempo" name="IMShowTime"/>
+	<menu_item_check label="Mostrar los nombres en las conversaciones individuales" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/es/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/es/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/es/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/es/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/es/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inventory.xml b/indra/newview/skins/default/xui/es/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inventory_add.xml b/indra/newview/skins/default/xui/es/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_land.xml b/indra/newview/skins/default/xui/es/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_landmark.xml b/indra/newview/skins/default/xui/es/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_login.xml b/indra/newview/skins/default/xui/es/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_media_ctrl.xml b/indra/newview/skins/default/xui/es/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_mini_map.xml b/indra/newview/skins/default/xui/es/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/es/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_navbar.xml b/indra/newview/skins/default/xui/es/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_nearby_chat.xml b/indra/newview/skins/default/xui/es/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_notification_well_button.xml b/indra/newview/skins/default/xui/es/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_object.xml b/indra/newview/skins/default/xui/es/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_object_icon.xml b/indra/newview/skins/default/xui/es/menu_object_icon.xml
old mode 100644
new mode 100755
index 7e4578b95040a45c287c053b4361dbf95ec8b1bb..a99c889bb0604c2ed97b45250eda7497847ddea9
--- a/indra/newview/skins/default/xui/es/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/es/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Perfil del objeto..." name="Object Profile"/>
 	<menu_item_call label="Ignorar..." name="Block"/>
+	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
+	<menu_item_call label="Teleportarse a la posición del objeto" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/es/menu_outfit_gear.xml b/indra/newview/skins/default/xui/es/menu_outfit_gear.xml
old mode 100644
new mode 100755
index 558ff6afd3cea6701e51c9f2e909dfec28a0b366..56e64c729f78057938fa320568a17ed5852752d7
--- a/indra/newview/skins/default/xui/es/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/es/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Pelo nuevo" name="New Hair"/>
 		<menu_item_call label="Ojos nuevos" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Abrir todas las carpetas" name="expand"/>
+	<menu_item_call label="Cerrar todas las carpetas" name="collapse"/>
 	<menu_item_call label="Renombrar el vestuario" name="rename"/>
 	<menu_item_call label="Borrar el vestuario" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_outfit_tab.xml b/indra/newview/skins/default/xui/es/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_participant_list.xml b/indra/newview/skins/default/xui/es/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_participant_view.xml b/indra/newview/skins/default/xui/es/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fcfeeb922bf6dbb3ec2cd9d3125d1d90bbdabf74
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Ordenar las conversaciones por tipo" name="sort_sessions_by_type"/>
+	<menu_item_check label="Ordenar las conversaciones por nombre" name="sort_sessions_by_name"/>
+	<menu_item_check label="Ordenar las conversaciones por actividad reciente" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Ordenar los participantes por nombre" name="sort_participants_by_name"/>
+	<menu_item_check label="Ordenar los participantes por actividad reciente" name="sort_participants_by_recent"/>
+	<menu_item_call label="Preferencias de chat..." name="chat_preferences"/>
+	<menu_item_call label="Preferencias de privacidad..." name="privacy_preferences"/>
+	<menu_item_check label="Registro de conversaciones..." name="Conversation"/>
+	<menu_item_check label="Traducir el chat" name="Translate_chat"/>
+	<menu_item_check label="Configuración de traducción..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..986389a4fe76bfc29be96b2725602ef8dd12e7fa
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="No ignorar" name="unblock"/>
+	<menu_item_call label="Perfil..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/es/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..10f6a3fc14f7ce6f402f02144faaa306e9b3d52a
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Ignorar residentes según el nombre..." name="block_resident_by_name"/>
+	<menu_item_call label="Ignorar objetos según el nombre" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/es/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bc557c7ec15efa8e7b8dd848922ecaa64a13ee09
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por tipo" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_friends_view.xml b/indra/newview/skins/default/xui/es/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ad896c1b74e21bc6e376c8fc8964919ea9d6c152
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
+	<menu_item_check label="Ordenar por estatus" name="sort_status"/>
+	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+	<menu_item_check label="Ver permisos concedidos" name="view_permissions"/>
+	<menu_item_check label="Ver el registro de conversaciones..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_people_groups.xml b/indra/newview/skins/default/xui/es/menu_people_groups.xml
old mode 100644
new mode 100755
index 51bd2c720856c67d41dd2ef8a4953b50944482dc..125e25cd1a6dc022c4c7c1b298d80bb12bf39537
--- a/indra/newview/skins/default/xui/es/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Ver la información" name="View Info"/>
 	<menu_item_call label="Chat" name="Chat"/>
-	<menu_item_call label="Llamar" name="Call"/>
+	<menu_item_call label="Llamada de voz" name="Call"/>
 	<menu_item_call label="Activar" name="Activate"/>
 	<menu_item_call label="Dejar" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_groups_view.xml b/indra/newview/skins/default/xui/es/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c3973625b0ae58fe433a54358fb06a32b16fc5e0
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Mostrar los iconos de grupo" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby.xml b/indra/newview/skins/default/xui/es/menu_people_nearby.xml
old mode 100644
new mode 100755
index dc1486d87960a2bf990ef1e60ac2ef6f64abf0ee..09bb119d5ad150fc6a150ad7e86e4f6df117530e
--- a/indra/newview/skins/default/xui/es/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Ver el perfil" name="View Profile"/>
-	<menu_item_call label="Añadir como amigo" name="Add Friend"/>
-	<menu_item_call label="Quitarle como amigo" name="Remove Friend"/>
-	<menu_item_call label="MI" name="IM"/>
-	<menu_item_call label="Llamar" name="Call"/>
-	<menu_item_call label="Mapa" name="Map"/>
-	<menu_item_call label="Compartir" name="Share"/>
-	<menu_item_call label="Pagar" name="Pay"/>
-	<menu_item_check label="Ignorar / No ignorar" name="Block/Unblock"/>
-	<menu_item_call label="Ofrecer teleporte" name="teleport"/>
+	<menu_item_call label="Ver el perfil" name="view_profile"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Ofrecer teleporte" name="offer_teleport"/>
+	<menu_item_call label="Llamada de voz" name="voice_call"/>
+	<menu_item_call label="Ver el historial de chat..." name="chat_history"/>
+	<menu_item_call label="Añadir como amigo" name="add_friend"/>
+	<menu_item_call label="Quitarle como amigo" name="remove_friend"/>
+	<menu_item_call label="Invitar al grupo..." name="invite_to_group"/>
+	<menu_item_call label="Acercar el zoom" name="zoom_in"/>
+	<menu_item_call label="Mapa" name="map"/>
+	<menu_item_call label="Compartir" name="share"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_check label="Ignorar / No ignorar" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 227c5ebe58f06f321dfc9e70739fcf622d71a2d8..9df160f5ad9f45cfdcf8d2d0e7a7bf116f83b209
--- a/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Añadir como amigos" name="Add Friends"/>
-	<menu_item_call label="Quitar amigos" name="Remove Friend"/>
-	<menu_item_call label="MI" name="IM"/>
-	<menu_item_call label="Llamar" name="Call"/>
-	<menu_item_call label="Compartir" name="Share"/>
-	<menu_item_call label="Pagar" name="Pay"/>
-	<menu_item_call label="Ofrecer teleporte" name="teleport"/>
+	<menu_item_call label="Añadir como amigos" name="add_friends"/>
+	<menu_item_call label="Quitar amigos" name="remove_friends"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Visita" name="call"/>
+	<menu_item_call label="Compartir" name="share"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_call label="Ofrecer teleporte" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c2fb360dd1c0b5ef90234e8bd6b81cbb9d2660ff
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordenar según las intervenciones recientes" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
+	<menu_item_check label="Ordenar según distancia" name="sort_distance"/>
+	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+	<menu_item_check label="Ver mapa" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_people_recent_view.xml b/indra/newview/skins/default/xui/es/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f0ffd140248374b2e1adaf6c67fcea0b982b3c47
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por más reciente" name="sort_most"/>
+	<menu_item_check label="Ordenar alfabéticamente" name="sort_name"/>
+	<menu_item_check label="Ver los iconos de la gente" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/es/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_picks.xml b/indra/newview/skins/default/xui/es/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_picks_plus.xml b/indra/newview/skins/default/xui/es/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_place.xml b/indra/newview/skins/default/xui/es/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_place_add_button.xml b/indra/newview/skins/default/xui/es/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/es/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/es/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_profile_overflow.xml b/indra/newview/skins/default/xui/es/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_save_outfit.xml b/indra/newview/skins/default/xui/es/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_script_chiclet.xml b/indra/newview/skins/default/xui/es/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_slurl.xml b/indra/newview/skins/default/xui/es/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/es/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_text_editor.xml b/indra/newview/skins/default/xui/es/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_toolbars.xml b/indra/newview/skins/default/xui/es/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_topinfobar.xml b/indra/newview/skins/default/xui/es/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_agent.xml b/indra/newview/skins/default/xui/es/menu_url_agent.xml
old mode 100644
new mode 100755
index a089c8f68e3b9a3496a3cbf89fb20f48bf23723a..69a03671aba0d0465df2fb65fd4ae1c394c0fe24
--- a/indra/newview/skins/default/xui/es/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/es/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Mostrar el perfil del Residente" name="show_agent"/>
+	<menu_item_call label="Ver el perfil" name="show_agent"/>
+	<menu_item_call label="Enviar un MI..." name="send_im"/>
+	<menu_item_call label="Añadir como amigo..." name="add_friend"/>
 	<menu_item_call label="Copiar el nombre al portapapeles" name="url_copy_label"/>
 	<menu_item_call label="Copiar la SLurl al portapapeles" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/es/menu_url_group.xml b/indra/newview/skins/default/xui/es/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_http.xml b/indra/newview/skins/default/xui/es/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_inventory.xml b/indra/newview/skins/default/xui/es/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_map.xml b/indra/newview/skins/default/xui/es/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_objectim.xml b/indra/newview/skins/default/xui/es/menu_url_objectim.xml
old mode 100644
new mode 100755
index 8791a290af63de783c7e5fb419836e61c62514c9..e78fdec55802b4087ec1dfd04ed4fa5af2d22d37
--- a/indra/newview/skins/default/xui/es/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/es/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Mostrar la información del objeto" name="show_object"/>
+	<menu_item_call label="Perfil del objeto..." name="show_object"/>
 	<menu_item_call label="Mostrar en el mapa" name="show_on_map"/>
 	<menu_item_call label="Teleportarse a la posición del objeto" name="teleport_to_object"/>
 	<menu_item_call label="Copiar el nombre del objeto al portapapeles" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/es/menu_url_parcel.xml b/indra/newview/skins/default/xui/es/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_slapp.xml b/indra/newview/skins/default/xui/es/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_slurl.xml b/indra/newview/skins/default/xui/es/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_url_teleport.xml b/indra/newview/skins/default/xui/es/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_viewer.xml b/indra/newview/skins/default/xui/es/menu_viewer.xml
old mode 100644
new mode 100755
index d80150ef6df8010b9bb71412f2bbd99465af304a..1e0ceb2220522f4b525942315738d14d58200232
--- a/indra/newview/skins/default/xui/es/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/es/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Parar mis animaciones" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Caminar / Correr / Volar..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Estado" name="Status">
-			<menu_item_call label="Ausente" name="Set Away"/>
-			<menu_item_call label="Ocupado" name="Set Busy"/>
-		</menu>
+		<menu label="Estado" name="Status"/>
 		<menu_item_call label="Comprar L$..." name="Buy and Sell L$"/>
 		<menu_item_call label="Panel de control de la cuenta..." name="Manage My Account">
 			<menu_item_call.on_click name="ManageMyAccount_url" parameter="WebLaunchJoinNow,http://secondlife.com/account/index.php?lang=es"/>
@@ -31,14 +28,18 @@
 		<menu_item_call label="Salir de [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Comunicarme" name="Communicate">
+		<menu_item_check label="Conversaciones..." name="Conversations"/>
 		<menu_item_check label="Chat..." name="Nearby Chat"/>
 		<menu_item_check label="Hablar" name="Speak"/>
-		<menu_item_check label="Configuración de voz..." name="Nearby Voice"/>
-		<menu_item_check label="Transformación de voz..." name="ShowVoice"/>
+		<menu label="Transformación de voz" name="VoiceMorphing">
+			<menu_item_check label="Sin transformación de voz" name="NoVoiceMorphing"/>
+			<menu_item_check label="Probar..." name="Preview"/>
+			<menu_item_call label="Suscribir..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Gestos..." name="Gestures"/>
-		<menu_item_call label="Amigos" name="My Friends"/>
-		<menu_item_call label="Grupos" name="My Groups"/>
-		<menu_item_call label="Gente cerca" name="Active Speakers"/>
+		<menu_item_check label="Amigos" name="My Friends"/>
+		<menu_item_check label="Grupos" name="My Groups"/>
+		<menu_item_check label="Gente cerca" name="Active Speakers"/>
 		<menu_item_call label="Lista de ignorados" name="Block List"/>
 	</menu>
 	<menu label="Mundo" name="World">
@@ -114,7 +115,6 @@
 			<menu_item_call label="Comprar" name="Menu Object Buy"/>
 			<menu_item_call label="Tomar" name="Menu Object Take"/>
 			<menu_item_call label="Coger una copia" name="Take Copy"/>
-			<menu_item_call label="Guardar una copia en mi inventario" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Guardar una copia del objeto en los contenidos de donde salió" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
 		</menu>
@@ -129,6 +129,7 @@
 			<menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="Personajes..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="Ver/probar..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="Recargar la región" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="Opciones" name="Options">
 			<menu_item_check label="Mostrar los permisos avanzados" name="DebugPermissions"/>
@@ -158,6 +159,13 @@
 	<menu label="Ayuda" name="Help">
 		<menu_item_call label="Cómo..." name="How To"/>
 		<menu_item_call label="Ayuda de [SECOND_LIFE]" name="Second Life Help"/>
+		<menu_item_call label="Guía del usuario" name="User’s guide"/>
+		<menu_item_call label="Base de Conocimientos" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="Foros comunitarios" name="Community Forums"/>
+		<menu_item_call label="Portal de soporte" name="Support portal"/>
+		<menu_item_call label="Noticias de [SECOND_LIFE]" name="Second Life News"/>
+		<menu_item_call label="Blogs de [SECOND_LIFE]" name="Second Life Blogs"/>
 		<menu_item_call label="Denunciar una infracción" name="Report Abuse"/>
 		<menu_item_call label="Informar de un fallo" name="Report Bug"/>
 		<menu_item_call label="Acerca de [APP_NAME]" name="About Second Life"/>
@@ -285,7 +293,7 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Luces y sombras" name="Lighting and Shadows"/>
+			<menu_item_check label="Luces y sombras" name="Advanced Lighting Model"/>
 			<menu_item_check label="Sombras del sol/la luna/proyectores" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO y sombras suavizadas" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Capas alfa automáticas (deferidas)" name="Automatic Alpha Masks (deferred)"/>
@@ -335,9 +343,14 @@
 				<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
 				<menu_item_check label="Allow Select Avatar" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="Velocidad de animación" name="Animation Speed">
+				<menu_item_call label="Acelerar todas las animaciones un 10%" name="All Animations 10 Faster"/>
+				<menu_item_call label="Ralentizar todas las animaciones un 10%" name="All Animations 10 Slower"/>
+				<menu_item_call label="Restablecer la velocidad de todas las animaciones" name="Reset All Animation Speed"/>
+				<menu_item_check label="Animaciones a cámara lenta" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="Force Params to Default" name="Force Params to Default"/>
 			<menu_item_check label="Animation Info" name="Animation Info"/>
-			<menu_item_check label="Slow Motion Animations" name="Slow Motion Animations"/>
 			<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
 			<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
 			<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
diff --git a/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/es/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_wearing_gear.xml b/indra/newview/skins/default/xui/es/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/menu_wearing_tab.xml b/indra/newview/skins/default/xui/es/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/mime_types.xml b/indra/newview/skins/default/xui/es/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/mime_types_linux.xml b/indra/newview/skins/default/xui/es/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/mime_types_mac.xml b/indra/newview/skins/default/xui/es/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/notifications.xml b/indra/newview/skins/default/xui/es/notifications.xml
old mode 100644
new mode 100755
index 7dfb27717d30b721a4a22e62cfa80377d5ff0a2e..05455f54c39d8c1b73a6460658430e87ee7d0b51
--- a/indra/newview/skins/default/xui/es/notifications.xml
+++ b/indra/newview/skins/default/xui/es/notifications.xml
@@ -511,6 +511,24 @@ El objeto debe de haber sido borrado o estar fuera de rango (&apos;out of range&
 		</url>
 		<usetemplate ignoretext="Mi controlador de gráficos no está actualizado" name="okcancelignore" notext="No" yestext="Sí"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		Probablemente ya existe un controlador más reciente para tu procesador de gráficos. La actualización del controlador de gráficos puede mejorar sustancialmente el rendimiento.
+
+    ¿Deseas visitar [_URL] para comprobar si hay controladores actualizados?
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Mi controlador de gráficos no está actualizado" name="okcancelignore" notext="No" yestext="Sí"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		Probablemente ya existe un controlador más reciente para tu procesador de gráficos.  La actualización del controlador de gráficos puede mejorar sustancialmente el rendimiento.
+
+    ¿Deseas visitar [_URL] para comprobar si hay controladores actualizados?
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=es
+		</url>
+		<usetemplate ignoretext="Mi controlador de gráficos no está actualizado" name="okcancelignore" notext="No" yestext="Sí"/>
+	</notification>
 	<notification name="UnknownGPU">
 		Tu sistema usa una tarjeta gráfica que [APP_NAME] no reconoce.
 Suele suceder con hardware nuevo que todavía no ha sido probado con [APP_NAME].  Probablemente todo irá bien, pero deberás ajustar tus configuraciones gráficas.
@@ -1553,10 +1571,13 @@ Debemos reiniciar [APP_NAME] para instalar la actualización.
 		En este momento, no se puede ofrecer el ser amigo. Por favor, vuelve a intentarlo en un momento.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		Pasar al modo ocupado.
-Se ocultará el chat y los mensajes instantáneos   (éstos recibirán tu Respuesta en el modo ocupado). Se rehusarán todos los ofrecimientos de teleporte. Todas las ofertas de inventario irán a tu Papelera.
-		<usetemplate ignoretext="Cambio mi estado al modo ocupado" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		Está activado No molestar. No obtendrás un aviso cuando recibas comunicaciones.
+
+- Los otros residentes recibirán tu respuesta de No molestar (se configura en Preferencias &gt; General).
+- Se rehusarán los ofrecimientos de teleporte.
+- Se rechazarán las llamadas de voz.
+		<usetemplate ignoretext="Cambio mi estado al modo No molestar" name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Has superado tu número máximo de grupos. Por favor, sal de al menos uno antes de entrar en éste, o rehúsa la oferta.
@@ -2043,6 +2064,10 @@ Dado que estos objetos tienen scripts, moverlos a tu inventario puede provocar u
 		¿Ir a tu [http://secondlife.com/account/ Panel de Control] para ver el historial de tu cuenta?
 		<usetemplate ignoretext="Abrir mi navegador para ver el historial de mi cuenta" name="okcancelignore" notext="Cancelar" yestext="Ir a la página"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		Si agregas una persona a una conversación en curso, se creará una conversación nueva. Todos los participantes recibirán notificaciones de la nueva conversación.
+		<usetemplate ignoretext="Confirmar agregar participantes al chat" name="okcancelignore" notext="Cancelar" yestext="Aceptar"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		¿Estás seguro de que quieres salir?
 		<usetemplate ignoretext="Confirmar antes de salir" name="okcancelignore" notext="No salir" yestext="Salir"/>
@@ -2116,14 +2141,14 @@ Linden Lab
 			<button ignore="Nunca reemplazar" name="No" text="Cancelar"/>
 		</form>
 	</notification>
-	<notification label="¡Aviso! Modo Ocupado" name="BusyModePay">
-		Estás en el modo Ocupado. Por tanto, no recibirás ningún ítem a cambio de este pago.
+	<notification label="Advertencia del modo No molestar" name="DoNotDisturbModePay">
+		Tienes activado No molestar. No podrás recibir ningún objeto ofrecido a cambio de este pago.
 
-¿Quieres salir del modo Ocupado antes de completar esta transacción?
+¿Deseas desactivar No molestar antes de finalizar esta transacción?
 		<form name="form">
-			<ignore name="ignore" save_option="true" text="Voy a pagar a una persona u objeto mientras estoy en el modo ocupado"/>
-			<button ignore="Siempre salir del modo Ocupado" name="Yes" text="OK"/>
-			<button ignore="Nunca salir del modo Ocupado" name="No" text="Cancelar"/>
+			<ignore name="ignore" text="Voy a pagar a una persona u objeto mientras estoy en el modo No molestar"/>
+			<button ignore="Salir siempre del modo No molestar" name="Yes" text="OK"/>
+			<button ignore="No salir nunca del modo No molestar" name="No" text="Cancelar"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2258,11 +2283,8 @@ Publícala en una página web para que otros puedan acceder fácilmente a esta p
 	<notification name="GroupNotice">
 		Asunto: [SUBJECT], Mensaje: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; está conectado
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; está desconectado
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; está [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Aunque eres muy agradable, no puedes añadirte como amigo a ti mismo.
@@ -2490,13 +2512,6 @@ Aquí no puedes volar.
 	<notification name="DynamicPathfindingDisabled">
 		Esta región no tiene activado el pathfinding dinámico. Los objetos programados que utilicen llamadas LSL de pathfinding pueden tener un comportamiento inesperado en ella.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		Si cambias ciertos objetos en esta región, otros objetos móviles podrían tener un comportamiento incorrecto. Para que los objetos móviles se comporten correctamente, pulsa el botón “Recargar la región”. Si quieres más información, elige “Ayuda”.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Ayuda" ignoretext="Si cambias ciertos objetos en esta región, otros objetos móviles podrían tener un comportamiento incorrecto." name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Se ha producido un error. Puede haber ocurrido un problema en la red o el servidor, o quizás no tengas derechos de construcción. Este problema podría resolverse cerrando la sesión e iniciando una sesión nueva.
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2757,9 +2772,9 @@ Del objeto: &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;, propietario: [NAME]?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Atención: El objeto &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; solicita un acceso total a tu cuenta de dólares Linden. Si le autorizas el acceso, podrá retirar fondos de tu cuenta en cualquier momento o vaciarla por completo, de manera permanente y sin más advertencias.
+		Atención: El objeto &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; solicita un acceso pleno a tu cuenta de dólares Linden. Si le autorizas el acceso, podrá retirar fondos de tu cuenta en cualquier momento o vaciarla por completo, cuando lo desee y sin más advertencias.
   
-Estas solicitudes pocas veces son legítimas. No autorices el acceso si no conoces la razón exacta por la que desea el acceso a tu cuenta.
+No autorices el acceso a tu cuenta si no conoces cuál es la razón exacta.
 		<form name="form">
 			<button name="Grant" text="Permitir acceso total"/>
 			<button name="Deny" text="Denegar"/>
@@ -3331,4 +3346,633 @@ Intento cancelado.
 		Vas a eliminar [NUM_ITEMS] objetos. ¿Estás seguro de que deseas continuar?
 		<usetemplate ignoretext="¿Estás seguro de que quieres eliminar varios elementos?" name="okcancelignore" notext="No" yestext="Sí"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] te ha congelado. No puedes moverte ni interactuar con el mundo.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] te ha congelado durante [AV_FREEZE_TIME] segundos. No puedes moverte ni interactuar con el mundo.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Avatar congelado.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] te ha descongelado.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Avatar descongelado.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		Error al congelar: no tienes permisos de administrador en esa parcela.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		La congelación ha terminado, puedes seguir con tus asuntos.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Lo sentimos, ese usuario no se puede congelar.
+	</notification>
+	<notification name="NowOwnObject">
+		Ahora eres el propietario del objeto [OBJECT_NAME]
+	</notification>
+	<notification name="CantRezOnLand">
+		No se puede colocar el objeto en [OBJECT_POS] porque el propietario de ese terreno no lo permite. Usa la herramienta de terreno para ver quién es el propietario.
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		El objeto no se puede colocar porque hay demasiadas solicitudes.
+	</notification>
+	<notification name="SitFailCantMove">
+		No te puedes sentar porque en este momento no puedes desplazarte.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		No te puedes sentar porque no tienes permiso para estar en ese terreno.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Acércate. No te puedes sentar en el objeto porque
+no está en la misma región que tú.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		No se puede crear el nuevo objeto. La región está llena.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Error al colocar el objeto en el lugar especificado.  Vuelve a intentarlo.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		No puedes crear árboles y hierba en un terreno que no es tuyo.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		Error al copiar: careces de permiso para copiar el objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		Error al copiar: no se te puede transferir el objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		Error al copiar porque el objeto &apos;[OBJ_NAME]&apos; contribuye al navmesh.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Duplicación sin objetos raíz seleccionados.
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		No se pueden duplicar objetos porque la región está llena.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		No se pueden duplicar los objetos: no se encuentra la parcela en la que se hallan.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		No se puede crear el objeto porque 
+la parcela está llena.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Error al intentar colocar un objeto.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		No se puede crear un objeto que ha causado problemas en esta región.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		Ese objeto de inventario está en la lista negra.
+	</notification>
+	<notification name="NoCanRezObjects">
+		Actualmente no tienes autorización para crear objetos.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Búsqueda de terrenos bloqueada.
+Has realizado demasiadas búsquedas de terreno con excesiva rapidez.
+Prueba otra vez dentro de un minuto.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		No hay suficientes recursos de script disponibles para anexar el objeto
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Has muerto y te has teleportado a tu lugar de origen
+	</notification>
+	<notification name="EjectComingSoon">
+		Te han expulsado de aquí y tienes [EJECT_TIME] segundos para salir.
+	</notification>
+	<notification name="NoEnterServerFull">
+		No puedes entrar en esta región porque 
+el servidor está lleno.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Se ha deshabilitado Devolver el objeto a mi inventario.
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		No se puede guardar &apos;[OBJ_NAME]&apos; en el contenido del objeto porque el objeto desde el cual ha sido colocado ya no existe.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		No se puede guardar &apos;[OBJ_NAME]&apos; en el contenido del objeto porque no tienes permiso para modificar el objeto &apos;[DEST_NAME]&apos;.
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		No se puede guardar &apos;[OBJ_NAME]&apos; de nuevo en el inventario; esta operación está desactivada.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		No se puede copiar tu selección porque no tienes permiso para copiar el objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		No se puede copiar tu selección porque el objeto &apos;[OBJ_NAME]&apos; es intransferible.
+	</notification>
+	<notification name="NoTransNoCopy">
+		No se puede copiar tu selección porque el objeto &apos;[OBJ_NAME]&apos; es intransferible.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		El sistema de permisos no admite la eliminación del objeto &apos;[OBJ_NAME]&apos; del simulador.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		No se puede guardar tu selección porque no tienes permiso para modificar el objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		No se puede guardar tu selección porque el objeto &apos;[OBJ_NAME]&apos; no se puede copiar.
+	</notification>
+	<notification name="NoModNoTaking">
+		No se puede aceptar tu selección porque no tienes permiso para modificar el objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="RezDestInternalError">
+		Error interno: tipo de destino desconocido.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		Error al borrar: el objeto no se encuentra
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Lo sentimos, ese usuario no se puede expulsar.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Esta región no te permite configurar aquí tu lugar de origen.
+	</notification>
+	<notification name="HomeLocationLimits">
+		Tu &apos;Lugar de origen&apos; solo se puede configurar en tu terreno o en un punto de información del continente.
+	</notification>
+	<notification name="HomePositionSet">
+		Posición de origen ajustada.
+	</notification>
+	<notification name="AvatarEjected">
+		Avatar expulsado.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		Error al expulsar: no tienes permiso de administrador en esa parcela.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		No se puede mover el objeto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] en la región [REGION_NAME] porque la parcela está llena.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		No se puede mover el objeto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] de la región [REGION_NAME] porque tus objetos no están permitidos en esta parcela.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		No se puede mover el objeto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] de la región [REGION_NAME] porque no hay suficientes recursos para este objeto en esta parcela.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		No se puede mover el objeto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] de la región [REGION_NAME] porque la otra región ejecuta una versión más antigua que no admite la recepción de este objeto atravesando regiones.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		No se puede mover el objeto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] en la región [REGION_NAME] porque no puedes modificar el navmesh a través de límites de región.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		No se puede mover el objeto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] en la región [REGION_NAME] por un motivo desconocido. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		No tienes permiso para modificar ese objeto
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		No se puede habilitar la física para un objeto que contribuye al navmesh.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		No se puede activar la física para los objetos con fotogramas clave.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		No se puede habilitar la física para el objeto: recursos de terreno insuficientes.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		No se puede activar la física para un objeto con un coste de recursos de física mayor que [MAX_OBJECTS]
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Este objeto no puede tener una pieza cóncava porque es inmaterial y contribuye al navmesh.
+	</notification>
+	<notification name="UnableAddItem">
+		¡No se puede añadir un objeto!
+	</notification>
+	<notification name="UnableEditItem">
+		¡No se puede editar esto!
+	</notification>
+	<notification name="NoPermToEdit">
+		No puedes editar esto.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		No está permitido copiar ese inventario.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		No se puede guardar en el contenido del objeto: el objeto ya no existe.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		No se puede guardar en el contenido del objeto: el inventario ya contiene un objeto con ese nombre
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		No se puede guardar en el contenido del objeto: se modificarían los permisos de anexo.
+	</notification>
+	<notification name="TooManyScripts">
+		Demasiados scripts.
+	</notification>
+	<notification name="UnableAddScript">
+		¡No se puede añadir un script!
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		El servidor de objetos no respondió puntualmente. El objeto se ha devuelto al sim.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		Esta región no tiene habilitadas las formas de física.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		No se puede modificar el navmesh a través de límites de región.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		No se pueden establecer propiedades de física en ese tipo de objeto.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		No se puede establecer que un prim raíz no tenga forma.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		Esta región no tiene habilitados los materiales de física.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		Solo se pueden ajustar los materiales de física de las prims raíces.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		Aun no es posible configurar materiales de física para los personajes.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Una o varias de las propiedades de los materiales de física especificados no son válidas.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		No se puede cambiar el tipo de unión de un objeto de la malla.
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		No se puede cambiar la forma de un objeto de la malla
+	</notification>
+	<notification name="FullRegionCantEnter">
+		No puedes entrar en esta región porque \nla región está llena.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Error de vínculo: los propietarios son diferentes
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Error de vínculo: no se puede modificar el navmesh a través de límites de región.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Error de vínculo: no tienes permiso de edición.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Error de vínculo: demasiadas primitivas
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Error de vínculo: no se pueden vincular &apos;no copiable&apos; y &apos;no transferible&apos;
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Error de vínculo: no hay objetos que se puedan vincular.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Error de vínculo: demasiados personajes de pathfinding
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Error de vínculo: recursos de terreno insuficientes
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		El objeto utiliza una cantidad excesiva de recursos de física; se ha desactivado su dinámica.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		Has sido teleportado al origen por el objeto &apos;[OBJECT_NAME]&apos; de la parcela &apos;[PARCEL_NAME]&apos;
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		Has sido teleportado a tu origen por el objeto &apos;[OBJECT_NAME]&apos;
+	</notification>
+	<notification name="TeleportedByAttachment">
+		Has sido teleportado por un anexo de [ITEM_ID]
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		Has sido teleportado por el objeto &apos;[OBJECT_NAME]&apos; de la parcela &apos;[PARCEL_NAME]&apos;
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Has sido teleportado por el objeto &apos;[OBJECT_NAME]&apos; que es propiedad de [OWNER_ID]
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Has sido teleportado por el objeto &apos;[OBJECT_NAME]&apos; cuyo propietario es un usuario desconocido.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		No se puede crear el objeto solicitado. La región está llena.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		No puedes anexar varios objetos a un solo lugar.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Aquí no se pueden crear varios objetos.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		No se puede crear el objeto solicitado. El objeto no se encuentra en la base de datos.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		No se puede crear el objeto solicitado. Ha expirado el tiempo de la solicitud. Vuelve a intentarlo.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		No se puede crear el objeto solicitado. Vuelve a intentarlo.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Error al colocar: la carga del objeto solicitado ha tardado demasiado.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Error al colocar el objeto en el lugar especificado. Vuelve a intentarlo.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		No se pueden crear plantas en este terreno.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		No se puede restaurar el objeto. No se ha encontrado una posición del mundo.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		No se puede colocar el objeto porque sus datos de malla no son válidos.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		No se puede colocar el objeto porque la región ya contiene demasiados scripts.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Tus privilegios de acceso no te permiten crear objetos allí.
+	</notification>
+	<notification name="CantCreateObject">
+		Actualmente no tienes autorización para crear objetos.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Los parámetros de objeto no son válidos
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Tus privilegios de acceso no te permiten duplicar objetos aquí.
+	</notification>
+	<notification name="CantChangeShape">
+		No tienes permiso para cambiar esta forma.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Tus privilegios de acceso no te permiten reclamar objetos aquí.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		Error de transferencia: no tienes permiso para transferir objetos para tu grupo.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Tus privilegios de acceso no te autorizan a comprar objetos aquí.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		No se puede anexar el objeto porque un avatar está sentado en él.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		No te puedes poner árboles y hierba como anexos.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		No se pueden anexar objetos que son propiedad de grupos.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		No puedes anexar objetos de los que no eres propietario.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		No se pueden anexar objetos que contribuyen al navmesh.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		No se puede anexar el objeto porque no tienes permiso para moverlo.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		No hay suficientes recursos de script disponibles para anexar el objeto
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		No se pueden soltar objetos aquí; inténtalo en la zona de prueba gratuita.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		No se pueden soltar anexos de la malla. Quítalos en el inventario y después colócalos en el mundo.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		Error al soltar el anexo: no tienes permiso para soltarlo allí.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		Error al soltar el anexo: recurso de terreno disponible insuficiente.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Error al soltar los anexos: los recursos disponibles son insuficientes.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		No se puede soltar el objeto aquí. La parcela está llena.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		No puedes tocar/agarrar este objeto porque tienes prohibida la entrada en la parcela de terreno.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Acota los parámetros de eliminación.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		No se puede subir el activo.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		No se ha podido encontrar el usuario para teleportarlo al origen
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		error en la solicitud de superpoderes
+	</notification>
+	<notification name="GenericRequestFailed">
+		error de solicitud genérico
+	</notification>
+	<notification name="CantUploadPostcard">
+		No se puede subir la postal. Vuelve a intentarlo más tarde.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		No se pueden obtener los datos de inventario del aviso de grupo.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		No se puede enviar el aviso de grupo: no está permitido.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		No se puede enviar el aviso del grupo: el inventario no se puede construir.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		No se puede analizar el inventario del aviso.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Error al subir terreno.
+	</notification>
+	<notification name="TerrainFileWritten">
+		Se ha registrado el archivo de terreno.
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		Archivo de terreno registrado, iniciando la descarga...
+	</notification>
+	<notification name="TerrainBaked">
+		Terreno predeterminado.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Solamente se han desactivado los 10 primeros objetos seleccionados. Si es preciso, actualiza y selecciona otros objetos.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Para comprar esta parcela debes actualizar el visor.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Error al comprar: esta parcela no está en venta.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		No se puede comprar: el precio de venta o la superficie del terreno han cambiado.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		No eres el comprador autorizado de esta parcela.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		No puedes comprar esta parcela porque ya está en espera de una autorización de compra
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		No se pueden construir objetos aquí porque se desbordaría la parcela.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		Has seleccionado un terreno con propietarios diferentes. Selecciona un área más pequeña y repite la operación.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		La selección no contiene suficientes parcelas alquiladas para unirlas.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		No se puede dividir el terreno.\nHay varias parcelas seleccionadas.\nPrueba a seleccionar un terreno más pequeño.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		No se puede dividir el terreno.\nNo se encuentra la parcela.\nAvísanos con Ayuda -&gt; Notificar fallo...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		No se puede dividir el terreno. Está seleccionada la parcela completa.\nPrueba a seleccionar un terreno más pequeño.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		El terreno se ha dividido.
+	</notification>
+	<notification name="PassPurchased">
+		Has comprado un pase.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		La región no permite anuncios.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Tu pase para este terreno está a punto de caducar.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Esta superficie no es adecuada para sentarse, prueba en otro sitio.
+	</notification>
+	<notification name="CantSitNoRoom">
+		No hay sitio para sentarse aquí, prueba en otro lugar.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		Error al reclamar el objeto: no tienes permiso
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		Error al reclamar el objeto: no tienes suficientes L$.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		No se puede transferir un terreno propiedad de un grupo.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		Error al comprar el objeto, no tienes suficientes L$.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		Error al comprar el inventario: no tienes suficientes L$.
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		No tienes suficientes L$ para comprar un pase a este terreno.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		No se puede comprar el pase ahora mismo. Vuelve a intentarlo más tarde.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		No se puede crear el objeto porque \nla parcela está llena.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Error al colocar el objeto en el lugar especificado.  Vuelve a intentarlo.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		No se puede crear un hito para el evento.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		¡Tus superpoderes anulan la congelación!
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Error en la solicitud de poderes especiales. Esta solicitud se ha registrado.
+	</notification>
+	<notification name="ExpireExplanation">
+		El sistema actualmente no puede procesar tu solicitud. Ha expirado el tiempo de la solicitud.
+	</notification>
+	<notification name="DieExplanation">
+		El sistema no puede procesar tu solicitud.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		Dinero insuficiente para crear la primitiva.
+	</notification>
+	<notification name="RezObjectFailure">
+		Dinero insuficiente para crear el objeto.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Se ha restaurado la posición de origen, puesto que dicha posición no era válida.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		Actualmente no puedes invitar a nadie a tu ubicación, puesto que la región está llena. Vuelve a intentarlo más tarde.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Esta región no te permite configurar aquí tu lugar de origen.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		Tu &apos;Lugar de origen&apos; solo se puede configurar en tu terreno o en un punto de información del continente.
+	</notification>
+	<notification name="SetHomePosition">
+		Posición de origen ajustada.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		No se puede quitar el objeto por un error del inventario.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		No se puede crear el inventario solicitado.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		No se puede crear la carpeta de inventario solicitada.
+	</notification>
+	<notification name="CantCreateInventory">
+		No se puede crear el inventario.
+	</notification>
+	<notification name="CantCreateLandmark">
+		No se puede crear un hito.
+	</notification>
+	<notification name="CantCreateOutfit">
+		No se puede crear el vestuario en este momento. Prueba otra vez dentro de un minuto.
+	</notification>
+	<notification name="InventoryNotForSale">
+		El inventario no está en venta.
+	</notification>
+	<notification name="CantFindInvItem">
+		No se encuentra el objeto del inventario.
+	</notification>
+	<notification name="CantFindObject">
+		No se puede encontrar el objeto.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		En esta región actualmente no están activadas las transferencias de dinero a los objetos.
+	</notification>
+	<notification name="CantPayNoAgent">
+		No se ha averiguado a quién se debe pagar.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		No se pueden dar L$ a los objetos públicos.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Error al crear un inventario de objeto del mundo virtual.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Un error interno nos ha impedido actualizar tu visor correctamente. El saldo en L$ o las parcelas en propiedad presentadas en el visor podrían no coincidir con tu saldo real en los servidores.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		No se pueden crear prims grandes que intersectan a otros jugadores. Reinténtalo cuando se hayan movido otros jugadores.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Esto eliminará los registros de conversaciones anteriores y las copias de seguridad de ese archivo.
+		<usetemplate ignoretext="Confirmar antes de eliminar el registro de conversaciones anteriores." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Esta acción eliminará las transcripciones de todas las conversaciones anteriores. La lista de conversaciones pasadas no resultará afectada. Se eliminarán de la carpeta [FOLDER] todos los archivos que tengan el sufijo .txt y txt.backup.
+		<usetemplate ignoretext="Confirmar antes de eliminar transcripciones." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		No se pueden mover los archivos. Ruta anterior restaurada.
+		<usetemplate ignoretext="No se pueden mover los archivos. Ruta anterior restaurada." name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/es/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/es/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_active_object_row.xml b/indra/newview/skins/default/xui/es/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/es/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index 5220df5d21bed9b0c57510db2ba74ab7fe329eca..c73e34b299f8ef358d55c9844232a64227849bc9
--- a/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/es/panel_avatar_list_item.xml
@@ -26,5 +26,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Este amigo puede editar, eliminar o manipular tus objetos"/>
 	<icon name="permission_map_icon" tool_tip="Este amigo puede encontrarte en el mapa"/>
 	<icon name="permission_online_icon" tool_tip="Este amigo puede ver cuándo estás conectado"/>
+	<button name="info_btn" tool_tip="Más información"/>
 	<button name="profile_btn" tool_tip="Ver el perfil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index cddbad1195c4bbce67cd05c5ce412b63efb729c4..a3de14ae6709c714d2758203c125393a6e08a22c
--- a/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/es/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		Lista de ignorados
-	</text>
-	<scroll_list name="blocked" tool_tip="Lista de los residentes ignorados actualmente"/>
-	<button label="Ignorar al residente..." label_selected="Ignorar al residente..." name="Block resident..." tool_tip="Elige a un Residente para ignorarle"/>
-	<button label="Ignorar objetos según el nombre..." label_selected="Ignorar objetos según el nombre..." name="Block object by name..."/>
-	<button label="No ignorar" label_selected="No ignorar" name="Unblock" tool_tip="Quita al Residente o al objeto de la lista de ignorados"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Filtro" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Acciones en la persona o el objeto seleccionado"/>
+		<menu_button name="view_btn" tool_tip="Opciones de clasificación"/>
+		<menu_button name="plus_btn" tool_tip="Elige un residente o un objeto para ignorarlo"/>
+		<button name="unblock_btn" tool_tip="Quita al Residente o al objeto de la lista de ignorados"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Lista de los residentes ignorados actualmente"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/es/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/es/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/es/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_classified_info.xml b/indra/newview/skins/default/xui/es/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_cof_wearables.xml b/indra/newview/skins/default/xui/es/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/es/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc4a7e951d541e17bd12fbc1dd98915dc3d9e9d2
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(cargando)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/es/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2fc8cd3affc5349dc96b065df9561fac9f6537f9
--- /dev/null
+++ b/indra/newview/skins/default/xui/es/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="La conversación incluía voz"/>
+	<icon name="unread_ims_icon" tool_tip="Han llegado mensajes mientras no tenías conexión"/>
+	<button name="delete_btn" tool_tip="Quitar esta entrada"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/es/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/es/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_alpha.xml b/indra/newview/skins/default/xui/es/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_classified.xml b/indra/newview/skins/default/xui/es/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_eyes.xml b/indra/newview/skins/default/xui/es/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_gloves.xml b/indra/newview/skins/default/xui/es/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_hair.xml b/indra/newview/skins/default/xui/es/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_jacket.xml b/indra/newview/skins/default/xui/es/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_pants.xml b/indra/newview/skins/default/xui/es/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_physics.xml b/indra/newview/skins/default/xui/es/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_pick.xml b/indra/newview/skins/default/xui/es/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_profile.xml b/indra/newview/skins/default/xui/es/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_shape.xml b/indra/newview/skins/default/xui/es/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_shirt.xml b/indra/newview/skins/default/xui/es/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_shoes.xml b/indra/newview/skins/default/xui/es/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_skin.xml b/indra/newview/skins/default/xui/es/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_skirt.xml b/indra/newview/skins/default/xui/es/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_socks.xml b/indra/newview/skins/default/xui/es/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/es/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_underpants.xml b/indra/newview/skins/default/xui/es/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/es/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_edit_wearable.xml b/indra/newview/skins/default/xui/es/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_control_panel.xml b/indra/newview/skins/default/xui/es/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_general.xml b/indra/newview/skins/default/xui/es/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/es/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_invite.xml b/indra/newview/skins/default/xui/es/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_land_money.xml b/indra/newview/skins/default/xui/es/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_list_item.xml b/indra/newview/skins/default/xui/es/panel_group_list_item.xml
old mode 100644
new mode 100755
index 5c9f1c3688c17b6347f6c6afb672fa31ba91e362..4d682068d78ecdedc09fa7756687394c9837e79c
--- a/indra/newview/skins/default/xui/es/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/es/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Desconocido"/>
+	<button name="info_btn" tool_tip="Más información"/>
 	<button name="profile_btn" tool_tip="Ver el perfil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_group_notices.xml b/indra/newview/skins/default/xui/es/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_notify.xml b/indra/newview/skins/default/xui/es/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_group_roles.xml b/indra/newview/skins/default/xui/es/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_im_control_panel.xml b/indra/newview/skins/default/xui/es/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_inventory_item.xml b/indra/newview/skins/default/xui/es/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_landmark_info.xml b/indra/newview/skins/default/xui/es/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_landmarks.xml b/indra/newview/skins/default/xui/es/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_login.xml b/indra/newview/skins/default/xui/es/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_main_inventory.xml b/indra/newview/skins/default/xui/es/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_me.xml b/indra/newview/skins/default/xui/es/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_general.xml b/indra/newview/skins/default/xui/es/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/es/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_media_settings_security.xml b/indra/newview/skins/default/xui/es/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_navigation_bar.xml b/indra/newview/skins/default/xui/es/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/es/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_nearby_media.xml b/indra/newview/skins/default/xui/es/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_notify_textbox.xml b/indra/newview/skins/default/xui/es/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_online_status_toast.xml b/indra/newview/skins/default/xui/es/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/es/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_outfit_edit.xml b/indra/newview/skins/default/xui/es/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/es/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_list.xml b/indra/newview/skins/default/xui/es/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/es/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_people.xml b/indra/newview/skins/default/xui/es/panel_people.xml
old mode 100644
new mode 100755
index a9d38dca2502807bae6ed8b37651ad1bf088cdbd..7a7dfca0b8eb1bc6fab1245fbe76bc31a37bbaad
--- a/indra/newview/skins/default/xui/es/panel_people.xml
+++ b/indra/newview/skins/default/xui/es/panel_people.xml
@@ -14,81 +14,53 @@
 	<string name="no_filtered_friends_msg">
 		¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/people/[SEARCH_TERM] Buscar].
 	</string>
-	<string name="people_filter_label" value="Filtrar a la gente"/>
-	<string name="groups_filter_label" value="Filtrar a los grupos"/>
 	<string name="no_filtered_groups_msg" value="¿No encuentras lo que buscas? Prueba con [secondlife:///app/search/groups/[SEARCH_TERM] Buscar]."/>
 	<string name="no_groups_msg" value="¿Buscas grupos en que participar? Prueba la [secondlife:///app/search/groups Búsqueda]."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Pulsa dos veces para abrir el mapa, pulsa mayús y arrastra para obtener una panorámica)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Pulsa dos veces para teleportarte, pulsa mayús y arrastra para obtener una panorámica)"/>
-	<filter_editor label="Filtrar" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="CERCANA" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Opciones"/>
-				<button name="add_friend_btn" tool_tip="Añadir al Residente seleccionado a la lista de tus amigos"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="Filtrar la gente" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Acciones en la persona seleccionada"/>
+				<menu_button name="nearby_view_btn" tool_tip="Opciones de vista/orden"/>
+				<button name="add_friend_btn" tool_tip="Ofrecer amistad a un residente"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Quitar la persona seleccionada de la lista de amigos"/>
 			</panel>
 		</panel>
-		<panel label="MIS AMIGOS" name="friends_panel">
+		<panel label="AMIGOS" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="Filtrar la gente" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Acciones en la persona seleccionada"/>
+				<menu_button name="friends_view_btn" tool_tip="Opciones de vista/orden"/>
+				<button name="friends_add_btn" tool_tip="Ofrecer amistad a un residente"/>
+				<dnd_button name="friends_del_btn" tool_tip="Quitar la persona seleccionada de la lista de amigos"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="Conectado"/>
 				<accordion_tab name="tab_all" title="Todos"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="Ver más opciones"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Ofrecer amistad a un Residente"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Quitar a la persona seleccionada de tu lista de amigos"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="MIS GRUPOS" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Opciones"/>
-				<button name="plus_btn" tool_tip="Entrar en un grupo o crear uno"/>
-				<button name="activate_btn" tool_tip="Activar el grupo seleccionado"/>
+		<panel label="GRUPOS" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Filtrar los grupos" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Acciones en el grupo seleccionado"/>
+				<menu_button name="groups_view_btn" tool_tip="Opciones de vista/orden"/>
+				<menu_button name="plus_btn" tool_tip="Entrar en un grupo o crear uno"/>
+				<dnd_button name="minus_btn" tool_tip="Dejar el grupo seleccionado"/>
 			</panel>
 		</panel>
 		<panel label="RECIENTE" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Opciones"/>
-				<button name="add_friend_btn" tool_tip="Añadir al Residente seleccionado a la lista de tus amigos"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="Filtrar la gente" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Acciones en la persona seleccionada"/>
+				<menu_button name="recent_view_btn" tool_tip="Opciones de vista/orden"/>
+				<button name="add_friend_btn" tool_tip="Ofrecer amistad a un residente"/>
+				<dnd_button name="recent_del_btn" tool_tip="Quitar la persona seleccionada de la lista de amigos"/>
 			</panel>
 		</panel>
+		<panel label="BLOQUEADO" name="blocked_panel">
+			<panel label="Residentes y objetos ignorados" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Perfil" name="view_profile_btn" tool_tip="Mostrar imágenes, grupos y otra información del Residente"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="MI" name="im_btn" tool_tip="Abrir una sesión de mensajes instantáneos"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Llamar" name="call_btn" tool_tip="Llamar a este Residente"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Compartir" name="share_btn" tool_tip="Compartir un objeto del inventario"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Teleporte" name="teleport_btn" tool_tip="Ofrecer teleporte"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Perfil del grupo" name="group_info_btn" tool_tip="Ver la información del grupo"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Chat de grupo" name="chat_btn" tool_tip="Abrir el chat"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Llamar al grupo" name="group_call_btn" tool_tip="Llama a este grupo"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_pick_info.xml b/indra/newview/skins/default/xui/es/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_picks.xml b/indra/newview/skins/default/xui/es/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_place_profile.xml b/indra/newview/skins/default/xui/es/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_places.xml b/indra/newview/skins/default/xui/es/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_postcard_message.xml b/indra/newview/skins/default/xui/es/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_postcard_settings.xml b/indra/newview/skins/default/xui/es/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/es/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/es/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
old mode 100644
new mode 100755
index b0b6114e88e95c2f25cc42057a58ce8fc5242423..28bc98f9885451c4896a379d0bf633dc54586334
--- a/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Chat de texto" name="chat">
-	<text name="font_size">
-		Tamaño de la fuente:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Disminuir" name="radio" value="0"/>
-		<radio_item label="Medio" name="radio2" value="1"/>
-		<radio_item label="Aumentar" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/>
-	<check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/>
-	<check_box label="Permitir el historial de MI y chat en texto sin formato" name="plain_text_chat_history"/>
-	<check_box label="Bocadillos del chat" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		Mostrar los MI en:
-	</text>
-	<text name="requires_restart_label">
-		(requiere reiniciar)
-	</text>
-	<radio_group name="chat_window" tool_tip="Muestra tus mensajes instantáneos en varias ventanas flotantes o en una sola con varias pestañas (requiere que reinicies)">
-		<radio_item label="Ventanas distintas" name="radio" value="0"/>
-		<radio_item label="Pestañas" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Permitir ventanas de chat emergentes:
-	</text>
-	<check_box label="Chats de grupo" name="EnableGroupChatPopups" tool_tip="Activa esta casilla para ver una ventana emergente cada vez que recibas un mensaje de un grupo de chat"/>
-	<check_box label="Chats de MI" name="EnableIMChatPopups" tool_tip="Activa esta casilla para ver una ventana emergente cada vez que recibas un mensaje instantáneo"/>
-	<spinner label="Duración de los interlocutores favoritos:" name="nearby_toasts_lifetime"/>
-	<spinner label="Tiempo de los otros interlocutores:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="Ejecutar la animación de escribir al hacerlo en el chat" name="play_typing_animation"/>
+		<check_box label="Cuando estoy desconectado, enviarme los MI al correo-e" name="send_im_to_email"/>
+		<check_box label="Sólo pueden llamarme o mandarme un MI mis amigos y grupos" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Tamaño de la fuente:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Pequeña" name="Small" value="0"/>
+			<item label="Mediana" name="Medium" value="1"/>
+			<item label="Grande" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Bocadillos del chat" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Notificaciones
+		</text>
+		<text name="friend_ims">
+			MI de amigos:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+			<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Ninguno" name="None" value="ninguno"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			MI de no amigos:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+			<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Ninguno" name="None" value="ninguno"/>
+		</combo_box>
+		<text name="conference_ims">
+			MI de conferencia:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+			<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Ninguno" name="None" value="ninguno"/>
+		</combo_box>
+		<text name="group_chat">
+			Chat de grupo:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+			<item label="Botón de la barra de herramientas de Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Ninguno" name="None" value="ninguno"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Chat:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Ventana Conversaciones abiertas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mensaje en ventana emergente" name="PopUpMessage" value="toast"/>
+			<item label="Botón de la barra de herramientas de Flash" name="FlashToolBarButton" value="flash"/>
+			<item label="Ninguno" name="None" value="ninguno"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Para suspender provisionalmente todas las notificaciones, usa Comunicarme &gt; No molestar.
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Reproducir sonido:
+		</text>
+		<check_box label="Nueva conversación" name="new_conversation"/>
+		<check_box label="Llamada de voz entrante" name="incoming_voice_call"/>
+		<check_box label="Oferta de teleporte" name="teleport_offer"/>
+		<check_box label="Oferta de inventario" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Limpiar el registro..." name="clear_log"/>
+		<button label="Eliminar transcripciones..." name="delete_transcripts"/>
+		<button label="Examinar..." label_selected="Examinar" name="log_path_button"/>
+	</panel>
 	<button label="Traducción…" name="ok_btn"/>
 	<button label="Reemplazo automático..." name="autoreplace_showgui"/>
 	<button label="Revisión ortográfica..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_colors.xml b/indra/newview/skins/default/xui/es/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_general.xml b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
old mode 100644
new mode 100755
index 4fc163f5b67e02c5bed29c213356842c7e0844e9..98b0081da9207772ef59db9a353067918191d09c
--- a/indra/newview/skins/default/xui/es/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/es/panel_preferences_general.xml
@@ -69,6 +69,9 @@
 		<combo_box.item label="nunca" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Respuesta cuando estoy en modo ocupado:
+		Respuesta de No molestar:
 	</text>
+	<text_editor name="do_not_disturb_response">
+		log_in_to_change
+	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/es/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_move.xml b/indra/newview/skins/default/xui/es/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/es/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_setup.xml b/indra/newview/skins/default/xui/es/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_preferences_sound.xml b/indra/newview/skins/default/xui/es/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/es/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_region_covenant.xml b/indra/newview/skins/default/xui/es/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_region_debug.xml b/indra/newview/skins/default/xui/es/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_region_environment.xml b/indra/newview/skins/default/xui/es/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_region_estate.xml b/indra/newview/skins/default/xui/es/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_region_general.xml b/indra/newview/skins/default/xui/es/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_region_terrain.xml b/indra/newview/skins/default/xui/es/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_script_ed.xml b/indra/newview/skins/default/xui/es/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/es/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/es/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_script_question_toast.xml b/indra/newview/skins/default/xui/es/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_scrolling_param.xml b/indra/newview/skins/default/xui/es/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/es/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/es/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/es/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_local.xml b/indra/newview/skins/default/xui/es/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_options.xml b/indra/newview/skins/default/xui/es/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/es/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/es/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_sound_devices.xml b/indra/newview/skins/default/xui/es/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/es/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_status_bar.xml b/indra/newview/skins/default/xui/es/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history.xml b/indra/newview/skins/default/xui/es/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/es/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_voice_effect.xml b/indra/newview/skins/default/xui/es/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/es/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/panel_world_map.xml b/indra/newview/skins/default/xui/es/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/role_actions.xml b/indra/newview/skins/default/xui/es/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/sidepanel_appearance.xml b/indra/newview/skins/default/xui/es/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/sidepanel_inventory.xml b/indra/newview/skins/default/xui/es/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/sidepanel_item_info.xml b/indra/newview/skins/default/xui/es/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
old mode 100644
new mode 100755
index 9da29589536c1eebddfd852820772a9c6cd7837c..cb061796e7917ced1ffe92cbe658635311bd8a42
--- a/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/es/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Comprar el objeto" name="Buyobject"/>
 			<combo_box.item label="Pagar el objeto" name="Payobject"/>
 			<combo_box.item label="Abrir" name="Open"/>
+			<combo_box.item label="Zoom" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/es/strings.xml b/indra/newview/skins/default/xui/es/strings.xml
old mode 100644
new mode 100755
index 52bcab54e58fc89081b9bf376393a35e6ee8b130..937433e210ff18645f441e184bd9b520a575e3b0
--- a/indra/newview/skins/default/xui/es/strings.xml
+++ b/indra/newview/skins/default/xui/es/strings.xml
@@ -128,7 +128,7 @@
 		Salir
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=es-ES&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		Ya no puedes acceder a Second Life con el visor que estás utilizando. Visita la siguiente página para descargar un nuevo visor:
@@ -610,8 +610,8 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="AvatarAway">
 		Ausente
 	</string>
-	<string name="AvatarBusy">
-		Ocupado
+	<string name="AvatarDoNotDisturb">
+		No molestar
 	</string>
 	<string name="AvatarMuted">
 		Ignorado
@@ -844,6 +844,12 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="ST_NO_JOINT">
 		No se puede encontrar ROOT o JOINT.
 	</string>
+	<string name="NearbyChatTitle">
+		Chat
+	</string>
+	<string name="NearbyChatLabel">
+		(Chat)
+	</string>
 	<string name="whisper">
 		susurra:
 	</string>
@@ -907,6 +913,9 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="ControlYourCamera">
 		Controlar su cámara
 	</string>
+	<string name="AgentNameSubst">
+		(Tú)
+	</string>
 	<string name="TeleportYourAgent">
 		Teleportarte
 	</string>
@@ -991,18 +1000,6 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="dictionary_files">
 		Diccionarios
 	</string>
-	<string name="AvatarSetNotAway">
-		Salir del estado ausente
-	</string>
-	<string name="AvatarSetAway">
-		Pasar al estado ausente
-	</string>
-	<string name="AvatarSetNotBusy">
-		Salir del estado ocupado
-	</string>
-	<string name="AvatarSetBusy">
-		Pasar al estado ocupado
-	</string>
 	<string name="shape">
 		Forma
 	</string>
@@ -1959,8 +1956,8 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="PanelContentsNewScript">
 		Script nuevo
 	</string>
-	<string name="BusyModeResponseDefault">
-		El Residente al que has enviado un mensaje ha solicitado que no se le moleste porque está en modo ocupado. Podrá ver tu mensaje más adelante, ya que éste aparecerá en su panel de MI.
+	<string name="DoNotDisturbModeResponseDefault">
+		Este residente tiene activado &apos;No molestar&apos; y verá tu mensaje más tarde.
 	</string>
 	<string name="MuteByName">
 		(Por el nombre)
@@ -2073,9 +2070,6 @@ Intenta iniciar sesión de nuevo en unos instantes.
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		Contenidos
-	</string>
 	<string name="AcquiredItems">
 		Artículos adquiridos
 	</string>
@@ -3793,7 +3787,7 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 		Región General
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Los avatares están visibles y está permitido el chat fuera de esta parcela
+		Los avatares que están en esta parcela no pueden ser vistos ni escuchados por los que están fuera de ella
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Los objetos que se mueven pueden presentar un comportamiento incorrecto en la región hasta que ésta se recargue.
@@ -3867,6 +3861,12 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="Saved_message">
 		(Guardado [LONG_TIMESTAMP])
 	</string>
+	<string name="OnlineStatus">
+		Conectado/a
+	</string>
+	<string name="OfflineStatus">
+		Desconectado/a
+	</string>
 	<string name="answered_call">
 		Han respondido a tu llamada
 	</string>
@@ -3876,6 +3876,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="you_joined_call">
 		Has entrado en la llamada de voz
 	</string>
+	<string name="you_auto_rejected_call-im">
+		Rechazaste la llamada de voz automáticamente porque estaba activado &apos;No molestar&apos;.
+	</string>
 	<string name="name_started_call">
 		[NAME] inició una llamada de voz
 	</string>
@@ -3888,6 +3891,9 @@ Si sigues recibiendo este mensaje, contacta con [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Se colgó la llamada de voz
 	</string>
+	<string name="conference-title">
+		Chat multi-persona
+	</string>
 	<string name="conference-title-incoming">
 		Conferencia con [AGENT_NAME]
 	</string>
@@ -4766,6 +4772,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
 	<string name="Command_Chat_Label">
 		Chat
 	</string>
+	<string name="Command_Conversations_Label">
+		Conversaciones
+	</string>
 	<string name="Command_Compass_Label">
 		Brújula
 	</string>
@@ -4841,6 +4850,9 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
 	<string name="Command_Chat_Tooltip">
 		Habla por chat de texto con las personas próximas
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Conversar con todos
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Brújula
 	</string>
@@ -4970,4 +4982,13 @@ Inténtalo incluyendo la ruta de acceso al editor entre comillas
 	<string name="UserDictionary">
 		[Usuario]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		No se están registrando las conversaciones. Para empezar a grabar un registro, elige &quot;Guardar: Solo registro&quot; o &quot;Guardar: Registro y transcripciones&quot; en Preferencias &gt; Chat.
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		No se registrarán más conversaciones. Para reanudar la grabación de un registro, elige &quot;Guardar: Solo registro&quot; o &quot;Guardar: Registro y transcripciones&quot; en Preferencias &gt; Chat.
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		No hay conversaciones grabadas. Después de contactar con una persona, o de que alguien contacte contigo, aquí se mostrará una entrada de registro.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/es/teleport_strings.xml b/indra/newview/skins/default/xui/es/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/es/xui_version.xml b/indra/newview/skins/default/xui/es/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_about.xml b/indra/newview/skins/default/xui/fr/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_about_land.xml b/indra/newview/skins/default/xui/fr/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_activeim.xml b/indra/newview/skins/default/xui/fr/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/fr/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_auction.xml b/indra/newview/skins/default/xui/fr/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_autoreplace.xml b/indra/newview/skins/default/xui/fr/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar.xml b/indra/newview/skins/default/xui/fr/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/fr/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/fr/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_beacons.xml b/indra/newview/skins/default/xui/fr/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_build_options.xml b/indra/newview/skins/default/xui/fr/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/fr/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_bumps.xml b/indra/newview/skins/default/xui/fr/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_contents.xml b/indra/newview/skins/default/xui/fr/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/fr/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_land.xml b/indra/newview/skins/default/xui/fr/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_buy_object.xml b/indra/newview/skins/default/xui/fr/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_camera.xml b/indra/newview/skins/default/xui/fr/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_chat_bar.xml b/indra/newview/skins/default/xui/fr/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_choose_group.xml b/indra/newview/skins/default/xui/fr/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_color_picker.xml b/indra/newview/skins/default/xui/fr/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_conversation_log.xml b/indra/newview/skins/default/xui/fr/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9017c79b1fde44c4679c549197e98a32bbe947f
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="JOURNAL DES CONVERSATIONS">
+	<panel name="buttons_panel">
+		<filter_editor label="Filtrer les personnes" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Options d&apos;affichage/de tri"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Actions sur la personne ou le groupe sélectionné"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_conversation_preview.xml b/indra/newview/skins/default/xui/fr/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a486a84c65ac4e06318dde38076c08962a29b43
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="CONVERSATION:">
+	<floater.string name="Title">
+		CONVERSATION: [NAME]
+	</floater.string>
+	<text name="page_label" value="Page"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_critical.xml b/indra/newview/skins/default/xui/fr/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/fr/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_destinations.xml b/indra/newview/skins/default/xui/fr/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_display_name.xml b/indra/newview/skins/default/xui/fr/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/fr/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/fr/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/fr/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_environment_settings.xml b/indra/newview/skins/default/xui/fr/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_event.xml b/indra/newview/skins/default/xui/fr/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_fast_timers.xml b/indra/newview/skins/default/xui/fr/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_font_test.xml b/indra/newview/skins/default/xui/fr/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_gesture.xml b/indra/newview/skins/default/xui/fr/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_god_tools.xml b/indra/newview/skins/default/xui/fr/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/fr/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_help_browser.xml b/indra/newview/skins/default/xui/fr/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_how_to.xml b/indra/newview/skins/default/xui/fr/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_hud.xml b/indra/newview/skins/default/xui/fr/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_im_container.xml b/indra/newview/skins/default/xui/fr/floater_im_container.xml
old mode 100644
new mode 100755
index 5ea073365e3422546ce9aa0216190203aa3e727d..f0b17e84373eb68bf564282a45f80e49e53f165f
--- a/indra/newview/skins/default/xui/fr/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="CONVERSATIONS"/>
+<multi_floater name="floater_im_box" title="CONVERSATIONS">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Options d&apos;affichage/de tri"/>
+					<button name="add_btn" tool_tip="Commencer une nouvelle conversation"/>
+					<button name="speak_btn" tool_tip="Parler aux personnes en utilisant votre micro"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Réduire/Développer cette liste"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Réduire ce panneau"/>
+					<text name="stub_textbox">
+						Cette conversation s&apos;affiche dans une fenêtre distincte.   [secondlife:/// la rattacher.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_im_session.xml b/indra/newview/skins/default/xui/fr/floater_im_session.xml
old mode 100644
new mode 100755
index 516eb41362f37960d6208c839fbd8ecb5846bc97..8ab98b8e4ead695ec0426cf2c15754c10de1a22c
--- a/indra/newview/skins/default/xui/fr/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/fr/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="À" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] a été invité à la conversation."/>
+	<floater.string name="multiple_participants_added" value="[NAME] ont été invités à la conversation."/>
+	<floater.string name="tooltip_to_separate_window" value="Déplacer cette conversation dans une fenêtre distincte"/>
+	<floater.string name="tooltip_to_main_window" value="Replacer cette conversation dans la fenêtre principale"/>
+	<floater.string name="start_call_button_tooltip" value="Ouvrir une connexion vocale"/>
+	<floater.string name="end_call_button_tooltip" value="Fermer la connexion vocale"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Réduire ce panneau"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Réduire la liste des participants"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Développer la liste des participants"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Options d&apos;affichage/de tri"/>
+				<menu_button name="gear_btn" tool_tip="Actions sur la personne sélectionnée"/>
+				<button name="add_btn" tool_tip="Ajouter un participant à cette conversation"/>
+				<button name="voice_call_btn" tool_tip="Ouvrir une connexion vocale"/>
+				<button name="close_btn" tool_tip="Mettre fin à cette conversation"/>
+				<button name="expand_collapse_btn" tool_tip="Réduire/Développer ce panneau"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Traduire le chat" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="À" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Affiche/Masque le panneau des messages"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_image_preview.xml b/indra/newview/skins/default/xui/fr/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_import_collada.xml b/indra/newview/skins/default/xui/fr/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
old mode 100644
new mode 100755
index 7594eec5f2f190059e8cc33f2611b224faf8656b..9e6946ba9e42acda9e12db38ca4c0b3cc0ea604d
--- a/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/fr/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		anonyme
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		appelle.
+		vous appelle.
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		a rejoint un chat vocal avec conférence.
@@ -25,9 +25,9 @@
 		Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ?
 	</floater.string>
 	<text name="question">
-		Voulez-vous quitter [CURRENT_CHAT] et rejoindre ce chat vocal ?
+		Si vous répondez, vous serez déconnecté de votre conversation vocale actuelle.
 	</text>
-	<button label="Accepter" label_selected="Accepter" name="Accept"/>
-	<button label="Refuser" label_selected="Refuser" name="Reject"/>
-	<button label="Lancer IM" name="Start IM"/>
+	<button label="Répondre" label_selected="Répondre" name="Accept"/>
+	<button label="Ignorer" label_selected="Ignorer" name="Reject"/>
+	<button label="Ouvrir IM à la place" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_inspect.xml b/indra/newview/skins/default/xui/fr/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/fr/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/fr/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_joystick.xml b/indra/newview/skins/default/xui/fr/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_lagmeter.xml b/indra/newview/skins/default/xui/fr/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_land_holdings.xml b/indra/newview/skins/default/xui/fr/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/fr/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/fr/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_map.xml b/indra/newview/skins/default/xui/fr/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_media_browser.xml b/indra/newview/skins/default/xui/fr/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_media_settings.xml b/indra/newview/skins/default/xui/fr/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/fr/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/fr/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_model_preview.xml b/indra/newview/skins/default/xui/fr/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_moveview.xml b/indra/newview/skins/default/xui/fr/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_mute_object.xml b/indra/newview/skins/default/xui/fr/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_my_appearance.xml b/indra/newview/skins/default/xui/fr/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_my_inventory.xml b/indra/newview/skins/default/xui/fr/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_notification.xml b/indra/newview/skins/default/xui/fr/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_notifications_console.xml b/indra/newview/skins/default/xui/fr/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_object_weights.xml b/indra/newview/skins/default/xui/fr/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_openobject.xml b/indra/newview/skins/default/xui/fr/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/fr/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_outgoing_call.xml b/indra/newview/skins/default/xui/fr/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index 02d969dc0896734ede6fabdf4e77e81cfbfd1a7d..0bcf55aba5965bde8c7f436cef0c7f9d684dd9fa
--- a/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/fr/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Afficher :
 			</text>
-			<check_box label="Monde" name="show_world"/>
+			<check_box label="Test" name="show_world"/>
 			<check_box label="Mobiles uniquement" name="show_world_movables_only"/>
 			<check_box label="Maillage de navigation" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/fr/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/fr/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_pay.xml b/indra/newview/skins/default/xui/fr/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_pay_object.xml b/indra/newview/skins/default/xui/fr/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_people.xml b/indra/newview/skins/default/xui/fr/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/fr/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_picks.xml b/indra/newview/skins/default/xui/fr/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_places.xml b/indra/newview/skins/default/xui/fr/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_post_process.xml b/indra/newview/skins/default/xui/fr/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences.xml b/indra/newview/skins/default/xui/fr/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/fr/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_animation.xml b/indra/newview/skins/default/xui/fr/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/fr/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/fr/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_sound.xml b/indra/newview/skins/default/xui/fr/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_preview_texture.xml b/indra/newview/skins/default/xui/fr/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml b/indra/newview/skins/default/xui/fr/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_publish_classified.xml b/indra/newview/skins/default/xui/fr/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_region_debug_console.xml b/indra/newview/skins/default/xui/fr/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_region_info.xml b/indra/newview/skins/default/xui/fr/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_report_abuse.xml b/indra/newview/skins/default/xui/fr/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug.xml b/indra/newview/skins/default/xui/fr/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/fr/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_script_limits.xml b/indra/newview/skins/default/xui/fr/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_script_preview.xml b/indra/newview/skins/default/xui/fr/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_script_queue.xml b/indra/newview/skins/default/xui/fr/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_script_search.xml b/indra/newview/skins/default/xui/fr/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_search.xml b/indra/newview/skins/default/xui/fr/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_select_key.xml b/indra/newview/skins/default/xui/fr/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_sell_land.xml b/indra/newview/skins/default/xui/fr/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_settings_debug.xml b/indra/newview/skins/default/xui/fr/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_snapshot.xml b/indra/newview/skins/default/xui/fr/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_sound_devices.xml b/indra/newview/skins/default/xui/fr/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_sound_preview.xml b/indra/newview/skins/default/xui/fr/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_spellcheck.xml b/indra/newview/skins/default/xui/fr/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/fr/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_stats.xml b/indra/newview/skins/default/xui/fr/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_sys_well.xml b/indra/newview/skins/default/xui/fr/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_telehub.xml b/indra/newview/skins/default/xui/fr/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/fr/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/fr/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index f86c1a42171e6df30fbb35bebe340bd85b17a38c..eace67026c8dc463e4a6f151463834f8f1040807
--- a/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/fr/floater_texture_ctrl.xml
@@ -20,7 +20,7 @@
 	<button label="Vierge" label_selected="Vierge" name="Blank" width="60"/>
 	<button label="Aucune" label_selected="Aucune" left="68" name="None" width="60"/>
 	<button bottom="-240" label="" label_selected="" name="Pipette"/>
-	<check_box initial_value="true" label="Aperçu direct" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="Appliquer maintenant" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Aperçu désactivé"/>
 	<filter_editor label="Filtrer les textures" name="inventory search editor"/>
 	<check_box initial_value="false" label="Afficher les dossiers" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/fr/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/fr/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_tools.xml b/indra/newview/skins/default/xui/fr/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_top_objects.xml b/indra/newview/skins/default/xui/fr/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_tos.xml b/indra/newview/skins/default/xui/fr/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_toybox.xml b/indra/newview/skins/default/xui/fr/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_translation_settings.xml b/indra/newview/skins/default/xui/fr/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_url_entry.xml b/indra/newview/skins/default/xui/fr/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/fr/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f4f452eea7ec124cbca29cd981211b09830faa7d
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="VOLUME DU CHAT VOCAL">
+	<slider label="Chat vocal" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_controls.xml b/indra/newview/skins/default/xui/fr/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
old mode 100644
new mode 100755
index 671fb5c14db16b31120104fe2ba635538e8a4172..f9a76d127e2d3ce169cdfdbbf7b09f787e695659
--- a/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/fr/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Endroits" name="voice_effects" title="EFFET DE VOIX">
+<floater label="Endroits" name="voice_effects" title="APERÇU DES EFFETS DE VOIX">
 	<string name="no_voice_effect">
 		(Aucun effet de voix)
 	</string>
diff --git a/indra/newview/skins/default/xui/fr/floater_voice_volume.xml b/indra/newview/skins/default/xui/fr/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bf91a5bb799966cab5f0c3acdbf5d9671e80e406
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="VOLUME DE LA VOIX">
+	<slider name="volume_slider" tool_tip="Volume de la voix" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/fr/floater_web_content.xml b/indra/newview/skins/default/xui/fr/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/fr/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_window_size.xml b/indra/newview/skins/default/xui/fr/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/floater_world_map.xml b/indra/newview/skins/default/xui/fr/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/fonts.xml b/indra/newview/skins/default/xui/fr/fonts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/inspect_avatar.xml b/indra/newview/skins/default/xui/fr/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/inspect_group.xml b/indra/newview/skins/default/xui/fr/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/inspect_object.xml b/indra/newview/skins/default/xui/fr/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/inspect_remote_object.xml b/indra/newview/skins/default/xui/fr/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/language_settings.xml b/indra/newview/skins/default/xui/fr/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/fr/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_other.xml b/indra/newview/skins/default/xui/fr/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_attachment_self.xml b/indra/newview/skins/default/xui/fr/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/fr/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_other.xml b/indra/newview/skins/default/xui/fr/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_avatar_self.xml b/indra/newview/skins/default/xui/fr/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml b/indra/newview/skins/default/xui/fr/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml b/indra/newview/skins/default/xui/fr/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml b/indra/newview/skins/default/xui/fr/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_cof_gear.xml b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
old mode 100644
new mode 100755
index 8276d570259774f7b543165aedf107842c5cd2a1..fea0486d8ac4376d4510fa27910055c15113f103
--- a/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear COF">
+<toggleable_menu name="Gear COF">
 	<menu label="Nouveaux habits" name="COF.Gear.New_Clothes"/>
-	<menu label="Nouvelles parties du corps" name="COF.Geear.New_Body_Parts"/>
-</menu>
+	<menu label="Nouvelles parties du corps" name="COF.Gear.New_Body_Parts"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_conversation.xml b/indra/newview/skins/default/xui/fr/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..857ead603b55e9f77154e5676315eaf8f62b99d8
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Fermer la conversation" name="close_conversation"/>
+	<menu_item_call label="Ouvrir une conversation vocale" name="open_voice_conversation"/>
+	<menu_item_call label="Se déconnecter de la conversation et du canal vocal" name="disconnect_from_voice"/>
+	<menu_item_call label="Voir le profil" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Proposer une téléportation." name="offer_teleport"/>
+	<menu_item_call label="Appel" name="voice_call"/>
+	<menu_item_call label="Historique du chat..." name="chat_history"/>
+	<menu_item_call label="Devenir amis" name="add_friend"/>
+	<menu_item_call label="Supprimer cet ami" name="remove_friend"/>
+	<menu_item_call label="Supprimer ces amis" name="remove_friends"/>
+	<menu_item_call label="Inviter dans le groupe..." name="invite_to_group"/>
+	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
+	<menu_item_call label="Carte" name="map"/>
+	<menu_item_call label="Partager" name="share"/>
+	<menu_item_call label="Payer" name="pay"/>
+	<menu_item_check label="Bloquer le chat vocal" name="block_unblock"/>
+	<menu_item_check label="Ignorer le texte" name="MuteText"/>
+	<menu_item_call label="Profil du groupe" name="group_profile"/>
+	<menu_item_call label="Activer le groupe" name="activate_group"/>
+	<menu_item_call label="Quitter le groupe" name="leave_group"/>
+	<context_menu label="Options du modérateur" name="Moderator Options">
+		<menu_item_check label="Autoriser les chats écrits" name="AllowTextChat"/>
+		<menu_item_call label="Ignorer ce participant" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Ne plus ignorer ce participant" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Ignorer les autres" name="ModerateVoiceMute"/>
+		<menu_item_call label="Ne plus ignorer les autres" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/fr/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e7e84199dbeb10006fb7b5b4a72f053d32e00c0
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="IM..." name="IM"/>
+	<menu_item_call label="Appel..." name="Call"/>
+	<menu_item_call label="Ouvrir l&apos;historique du chat..." name="Chat history"/>
+	<menu_item_call label="Voir le profil" name="View Profile"/>
+	<menu_item_call label="Téléporter" name="teleport"/>
+	<menu_item_call label="Devenir amis" name="add_friend"/>
+	<menu_item_call label="Supprimer cet ami" name="remove_friend"/>
+	<menu_item_call label="Inviter dans le groupe..." name="Invite"/>
+	<menu_item_call label="Carte" name="Map"/>
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Payer" name="Pay"/>
+	<menu_item_check label="Ignorer/Ne plus ignorer" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/fr/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c515a8e8e55cd341e0105848e245c6f20dd01d43
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Trier par nom" name="sort_by_name"/>
+	<menu_item_check label="Trier par date" name="sort_by_date"/>
+	<menu_item_check label="Trier avec les amis en haut" name="sort_by_friends"/>
+	<menu_item_call label="Afficher l&apos;historique du Chat près de moi" name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_edit.xml b/indra/newview/skins/default/xui/fr/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_favorites.xml b/indra/newview/skins/default/xui/fr/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml b/indra/newview/skins/default/xui/fr/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_group_plus.xml b/indra/newview/skins/default/xui/fr/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/fr/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_im_conversation.xml b/indra/newview/skins/default/xui/fr/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1ec5910c8feccc175bc7685f7f178bc506490726
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Voir le profil" name="View Profile"/>
+	<menu_item_call label="Devenir amis" name="Add Friend"/>
+	<menu_item_call label="Supprimer cet ami" name="remove_friend"/>
+	<menu_item_call label="Proposer une téléportation." name="offer_teleport"/>
+	<menu_item_call label="Inviter dans le groupe..." name="invite_to_group"/>
+	<menu_item_call label="Historique du chat..." name="chat_history"/>
+	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
+	<menu_item_call label="Carte" name="map"/>
+	<menu_item_call label="Partager" name="Share"/>
+	<menu_item_call label="Payer" name="Pay"/>
+	<menu_item_check label="Bloquer le chat vocal" name="Block/Unblock"/>
+	<menu_item_check label="Ignorer le texte" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/fr/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..03a091d1cccb3a61cb812b05646bb958186bdafb
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Vue compacte" name="compact_view"/>
+	<menu_item_check label="Vue développée" name="expanded_view"/>
+	<menu_item_check label="Afficher l’heure" name="IMShowTime"/>
+	<menu_item_check label="Afficher les noms dans les conversations privées" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/fr/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/fr/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/fr/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/fr/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/fr/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory.xml b/indra/newview/skins/default/xui/fr/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_add.xml b/indra/newview/skins/default/xui/fr/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_land.xml b/indra/newview/skins/default/xui/fr/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_landmark.xml b/indra/newview/skins/default/xui/fr/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_login.xml b/indra/newview/skins/default/xui/fr/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml b/indra/newview/skins/default/xui/fr/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_mini_map.xml b/indra/newview/skins/default/xui/fr/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/fr/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_navbar.xml b/indra/newview/skins/default/xui/fr/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_nearby_chat.xml b/indra/newview/skins/default/xui/fr/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_notification_well_button.xml b/indra/newview/skins/default/xui/fr/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_object.xml b/indra/newview/skins/default/xui/fr/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_object_icon.xml b/indra/newview/skins/default/xui/fr/menu_object_icon.xml
old mode 100644
new mode 100755
index 69f8e88a0deb4f58475dab5c7850beaf115d00de..7c949301600b36768db7f7c5b0618d262402defc
--- a/indra/newview/skins/default/xui/fr/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/fr/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Profil de l&apos;objet..." name="Object Profile"/>
 	<menu_item_call label="Ignorer..." name="Block"/>
+	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
+	<menu_item_call label="Me téléporter à l’emplacement de l&apos;objet" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
old mode 100644
new mode 100755
index b5181f4f82efcb5213ebb781525cff7e1c83855c..21b19eded6327be4027dd8fedf7b676443cb44fb
--- a/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/fr/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Nouveaux cheveux" name="New Hair"/>
 		<menu_item_call label="Nouveaux yeux" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Développer tous les dossiers" name="expand"/>
+	<menu_item_call label="Réduire tous les dossiers" name="collapse"/>
 	<menu_item_call label="Renommer la tenue" name="rename"/>
 	<menu_item_call label="Supprimer la tenue" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml b/indra/newview/skins/default/xui/fr/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_participant_list.xml b/indra/newview/skins/default/xui/fr/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_participant_view.xml b/indra/newview/skins/default/xui/fr/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1811082c841e115046b8513a014878793af6dd55
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Trier les conversations par type" name="sort_sessions_by_type"/>
+	<menu_item_check label="Trier les conversations par nom" name="sort_sessions_by_name"/>
+	<menu_item_check label="Trier les conversations par activité récente" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Trier les participants par nom" name="sort_participants_by_name"/>
+	<menu_item_check label="Trier les participants par activité récente" name="sort_participants_by_recent"/>
+	<menu_item_call label="Préférences pour le chat..." name="chat_preferences"/>
+	<menu_item_call label="Préférences pour la confidentialité" name="privacy_preferences"/>
+	<menu_item_check label="Journal des conversations..." name="Conversation"/>
+	<menu_item_check label="Traduire le Chat près de moi" name="Translate_chat"/>
+	<menu_item_check label="Paramètres de traduction" name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..47589572c25229b9dc0693a92075c0b500edfc54
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="Ne plus ignorer" name="unblock"/>
+	<menu_item_call label="Profil..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/fr/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79880dd16d9f4eba17a42d3153928c362ccf2773
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Ignorer un résident par son nom…" name="block_resident_by_name"/>
+	<menu_item_call label="Ignorer un objet par son nom" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/fr/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..13f15750909ac442e7f9817112950b6461a30a06
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Trier par nom" name="sort_by_name"/>
+	<menu_item_check label="Trier par type" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_friends_view.xml b/indra/newview/skins/default/xui/fr/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cc81172462f611206f64fd781958e8b8a07dcbe0
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Trier par nom" name="sort_name"/>
+	<menu_item_check label="Trier par statut" name="sort_status"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+	<menu_item_check label="Afficher les droits octroyés" name="view_permissions"/>
+	<menu_item_check label="Afficher le journal des conversations..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups.xml b/indra/newview/skins/default/xui/fr/menu_people_groups.xml
old mode 100644
new mode 100755
index eb51b4cf7e8b485062e98ebf229f1ef3e624c589..8e32f065fae1026672a7b2b50dd5617c92889d55
--- a/indra/newview/skins/default/xui/fr/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Afficher les infos" name="View Info"/>
 	<menu_item_call label="Chat" name="Chat"/>
-	<menu_item_call label="Appeler" name="Call"/>
+	<menu_item_call label="Appel" name="Call"/>
 	<menu_item_call label="Activer" name="Activate"/>
 	<menu_item_call label="Quitter" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups_view.xml b/indra/newview/skins/default/xui/fr/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79ede5e22df3b33958202b478201d61db2b8a363
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Afficher les icônes des groupes" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby.xml
old mode 100644
new mode 100755
index 26bd3978a9bd08581bade90e0ada568019f19a48..6f7d02ef74305950fa016e32bf76b9bf4da92141
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Voir le profil" name="View Profile"/>
-	<menu_item_call label="Devenir amis" name="Add Friend"/>
-	<menu_item_call label="Supprimer cet ami" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Appeler" name="Call"/>
-	<menu_item_call label="Carte" name="Map"/>
-	<menu_item_call label="Partager" name="Share"/>
-	<menu_item_call label="Payer" name="Pay"/>
-	<menu_item_check label="Ignorer/Ne plus ignorer" name="Block/Unblock"/>
-	<menu_item_call label="Proposer une téléportation" name="teleport"/>
+	<menu_item_call label="Voir le profil" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Téléporter" name="offer_teleport"/>
+	<menu_item_call label="Appel" name="voice_call"/>
+	<menu_item_call label="Afficher l&apos;historique du chat..." name="chat_history"/>
+	<menu_item_call label="Devenir amis" name="add_friend"/>
+	<menu_item_call label="Supprimer cet ami" name="remove_friend"/>
+	<menu_item_call label="Inviter dans le groupe..." name="invite_to_group"/>
+	<menu_item_call label="Zoomer en avant" name="zoom_in"/>
+	<menu_item_call label="Carte" name="map"/>
+	<menu_item_call label="Partager" name="share"/>
+	<menu_item_call label="Payer" name="pay"/>
+	<menu_item_check label="Ignorer/Ne plus ignorer" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 8400ec0a14dcfe89812b4ecf7c0d4c6b92b39b8d..37abf831c2fd636977b8837e20aed417440f19e3
--- a/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Devenir amis" name="Add Friends"/>
-	<menu_item_call label="Supprimer des amis" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Appeler" name="Call"/>
-	<menu_item_call label="Partager" name="Share"/>
-	<menu_item_call label="Payer" name="Pay"/>
-	<menu_item_call label="Proposer une téléportation" name="teleport"/>
+	<menu_item_call label="Devenir amis" name="add_friends"/>
+	<menu_item_call label="Supprimer des amis" name="remove_friends"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Appeler" name="call"/>
+	<menu_item_call label="Partager" name="share"/>
+	<menu_item_call label="Payer" name="pay"/>
+	<menu_item_call label="Téléporter" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..086002dce5e7f3767889a8761e05990744644ab2
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Trier par intervenants récents" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Trier par nom" name="sort_name"/>
+	<menu_item_check label="Trier par distance" name="sort_distance"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+	<menu_item_check label="Afficher la carte" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_people_recent_view.xml b/indra/newview/skins/default/xui/fr/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a7d698ab7c74828b650579c2b38446191a52ed72
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Trier en commençant par le plus récent" name="sort_most"/>
+	<menu_item_check label="Trier par nom" name="sort_name"/>
+	<menu_item_check label="Afficher les icônes des résidents" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/fr/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_picks.xml b/indra/newview/skins/default/xui/fr/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_picks_plus.xml b/indra/newview/skins/default/xui/fr/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_place.xml b/indra/newview/skins/default/xui/fr/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_place_add_button.xml b/indra/newview/skins/default/xui/fr/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/fr/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/fr/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml b/indra/newview/skins/default/xui/fr/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_save_outfit.xml b/indra/newview/skins/default/xui/fr/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_script_chiclet.xml b/indra/newview/skins/default/xui/fr/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_slurl.xml b/indra/newview/skins/default/xui/fr/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/fr/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_text_editor.xml b/indra/newview/skins/default/xui/fr/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_toolbars.xml b/indra/newview/skins/default/xui/fr/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_topinfobar.xml b/indra/newview/skins/default/xui/fr/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_agent.xml b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
old mode 100644
new mode 100755
index 5ed627fbc336da58bbcd1bf9bcf89f55eeb66f4e..d701b3a41431248e1dc350b9ed13a9e71c6d4cc5
--- a/indra/newview/skins/default/xui/fr/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/fr/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Voir le profil du résident" name="show_agent"/>
+	<menu_item_call label="Voir le profil" name="show_agent"/>
+	<menu_item_call label="Envoyer IM..." name="send_im"/>
+	<menu_item_call label="Devenir amis..." name="add_friend"/>
 	<menu_item_call label="Copier le nom dans le presse-papiers" name="url_copy_label"/>
 	<menu_item_call label="Copier la SLurl dans le presse-papiers" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_group.xml b/indra/newview/skins/default/xui/fr/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_http.xml b/indra/newview/skins/default/xui/fr/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_inventory.xml b/indra/newview/skins/default/xui/fr/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_map.xml b/indra/newview/skins/default/xui/fr/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
old mode 100644
new mode 100755
index f581c3ef9d8f24d51215f3f1fe9de5cd6736af2f..0a934d3e69c2842a20680ea471749b3e7fc5e6a4
--- a/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/fr/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Afficher les informations sur l&apos;objet" name="show_object"/>
+	<menu_item_call label="Profil de l&apos;objet…" name="show_object"/>
 	<menu_item_call label="Voir sur la carte" name="show_on_map"/>
 	<menu_item_call label="Me téléporter à l&apos;emplacement de l&apos;objet" name="teleport_to_object"/>
 	<menu_item_call label="Copier le nom de l&apos;objet dans le presse-papiers" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_url_parcel.xml b/indra/newview/skins/default/xui/fr/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_slapp.xml b/indra/newview/skins/default/xui/fr/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_slurl.xml b/indra/newview/skins/default/xui/fr/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_url_teleport.xml b/indra/newview/skins/default/xui/fr/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_viewer.xml b/indra/newview/skins/default/xui/fr/menu_viewer.xml
old mode 100644
new mode 100755
index 85020afe252b645cbfbc2c66a1968f270319337c..548f144742e6026a0cacd38dc2cb80ea839cdcfe
--- a/indra/newview/skins/default/xui/fr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/fr/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Arrêter mon animation" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Marcher / Courir / Voler..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Statut" name="Status">
-			<menu_item_call label="Absent" name="Set Away"/>
-			<menu_item_call label="Occupé" name="Set Busy"/>
-		</menu>
+		<menu label="Statut" name="Status"/>
 		<menu_item_call label="Acheter des L$..." name="Buy and Sell L$"/>
 		<menu_item_call label="Boîte d&apos;envoi vendeur..." name="MerchantOutbox"/>
 		<menu_item_call label="Page d&apos;accueil du compte..." name="Manage My Account">
@@ -32,14 +29,18 @@
 		<menu_item_call label="Quitter [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Communiquer" name="Communicate">
-		<menu_item_check label="Chat..." name="Nearby Chat"/>
+		<menu_item_check label="Conversations..." name="Conversations"/>
+		<menu_item_check label="Chat près de moi..." name="Nearby Chat"/>
 		<menu_item_check label="Parler" name="Speak"/>
-		<menu_item_check label="Paramètres vocaux..." name="Nearby Voice"/>
-		<menu_item_check label="Effet de voix..." name="ShowVoice"/>
+		<menu label="Effet de voix" name="VoiceMorphing">
+			<menu_item_check label="Aucun effet de voix" name="NoVoiceMorphing"/>
+			<menu_item_check label="Aperçu..." name="Preview"/>
+			<menu_item_call label="S&apos;abonner..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Gestes..." name="Gestures"/>
-		<menu_item_call label="Amis" name="My Friends"/>
-		<menu_item_call label="Groupes" name="My Groups"/>
-		<menu_item_call label="Personnes près de vous" name="Active Speakers"/>
+		<menu_item_check label="Amis" name="My Friends"/>
+		<menu_item_check label="Groupes" name="My Groups"/>
+		<menu_item_check label="Personnes près de vous" name="Active Speakers"/>
 		<menu_item_call label="Liste des ignorés" name="Block List"/>
 	</menu>
 	<menu label="Monde" name="World">
@@ -115,7 +116,6 @@
 			<menu_item_call label="Acheter" name="Menu Object Buy"/>
 			<menu_item_call label="Prendre" name="Menu Object Take"/>
 			<menu_item_call label="Prendre une copie" name="Take Copy"/>
-			<menu_item_call label="Enregistrer dans mon inventaire" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Enregistrer dans le contenu des objets" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="Renvoi de l&apos;objet" name="Return Object back to Owner"/>
 		</menu>
@@ -130,6 +130,7 @@
 			<menu_item_call label="Groupes de liens..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="Personnages..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="Vue / test..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="Refiger la région" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="Options" name="Options">
 			<menu_item_check label="Afficher les droits avancés" name="DebugPermissions"/>
@@ -159,6 +160,13 @@
 	<menu label="Aide" name="Help">
 		<menu_item_call label="Aide rapide..." name="How To"/>
 		<menu_item_call label="Aide de [SECOND_LIFE]" name="Second Life Help"/>
+		<menu_item_call label="Guide de l&apos;utilisateur" name="User’s guide"/>
+		<menu_item_call label="Base de connaissances" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="Forums de la communauté" name="Community Forums"/>
+		<menu_item_call label="Portail d&apos;assistance" name="Support portal"/>
+		<menu_item_call label="Actualités [SECOND_LIFE]" name="Second Life News"/>
+		<menu_item_call label="Blogs [SECOND_LIFE]" name="Second Life Blogs"/>
 		<menu_item_call label="Signaler une infraction" name="Report Abuse"/>
 		<menu_item_call label="Signaler un bug" name="Report Bug"/>
 		<menu_item_call label="À propos de [APP_NAME]" name="About Second Life"/>
@@ -307,7 +315,7 @@
 			<menu_item_call label="Base des infos de la texture sélectionnée" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Filaire" name="Wireframe"/>
 			<menu_item_check label="Occlusion objet-objet" name="Object-Object Occlusion"/>
-			<menu_item_check label="Éclairage et ombres" name="Lighting and Shadows"/>
+			<menu_item_check label="Éclairage et ombres" name="Advanced Lighting Model"/>
 			<menu_item_check label="Ombres du soleil/de la lune/des projecteurs" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO et lissage des ombres" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Débogage GL" name="Debug GL"/>
@@ -385,9 +393,14 @@
 				<menu_item_call label="Test femme" name="Test Female"/>
 				<menu_item_check label="Autoriser la sélection de l&apos;avatar" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="Vitesse d&apos;animation" name="Animation Speed">
+				<menu_item_call label="Toutes les animations 10 % plus rapides" name="All Animations 10 Faster"/>
+				<menu_item_call label="Toutes les animations 10 % plus lentes" name="All Animations 10 Slower"/>
+				<menu_item_call label="Réinitialiser la vitesse de toutes les animations" name="Reset All Animation Speed"/>
+				<menu_item_check label="Animations au ralenti" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="Forcer les paramètres par défaut" name="Force Params to Default"/>
 			<menu_item_check label="Infos sur l&apos;animation" name="Animation Info"/>
-			<menu_item_check label="Animations au ralenti" name="Slow Motion Animations"/>
 			<menu_item_check label="Afficher la direction du regard" name="Show Look At"/>
 			<menu_item_check label="Afficher la direction du pointeur" name="Show Point At"/>
 			<menu_item_check label="Débogages des mises à jour" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml b/indra/newview/skins/default/xui/fr/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml b/indra/newview/skins/default/xui/fr/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/mime_types.xml b/indra/newview/skins/default/xui/fr/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/mime_types_linux.xml b/indra/newview/skins/default/xui/fr/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/mime_types_mac.xml b/indra/newview/skins/default/xui/fr/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/notifications.xml b/indra/newview/skins/default/xui/fr/notifications.xml
old mode 100644
new mode 100755
index 30154d18730a32dad1026c5176b3660b0943b1e1..e73cc6e6e040501d12097b956676dd771caf3760
--- a/indra/newview/skins/default/xui/fr/notifications.xml
+++ b/indra/newview/skins/default/xui/fr/notifications.xml
@@ -515,6 +515,24 @@ Consulter [_URL] pour en savoir plus ?
 		</url>
 		<usetemplate ignoretext="Mon pilote graphique est obsolète." name="okcancelignore" notext="Non" yestext="Oui"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		Il existe probablement un pilote plus récent pour votre puce graphique.  La mise à jour des pilotes graphiques est susceptible d&apos;améliorer considérablement les performances.
+
+    Visiter la page [_URL] pour rechercher d&apos;éventuelles mises à jour de pilotes ?
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Mon pilote graphique est obsolète." name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		Il existe probablement un pilote plus récent pour votre puce graphique.  La mise à jour des pilotes graphiques est susceptible d&apos;améliorer considérablement les performances.
+
+    Visiter la page [_URL] pour rechercher d&apos;éventuelles mises à jour de pilotes ?
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=fr
+		</url>
+		<usetemplate ignoretext="Mon pilote graphique est obsolète." name="okcancelignore" notext="Non" yestext="Oui"/>
+	</notification>
 	<notification name="UnknownGPU">
 		Votre système contient une carte graphique que [APP_NAME] ne reconnaît pas.
 Cela est souvent le cas avec le nouveau matériel qui n&apos;a pas encore été testé avec [APP_NAME].  Cela ne posera probablement pas de problème, mais vous devrez peut-être ajuster vos paramètres graphiques.
@@ -1543,10 +1561,13 @@ Quitter le groupe ?
 		Impossible de proposer votre amitié actuellement. Veuillez réessayer dans un moment.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		Le mode Occupé est sélectionné.
-Les chats et les messages instantanés ne s&apos;afficheront pas. Les messages instantanés génèreront la réponse en mode occupé que vous avez créée. Toutes les offres de téléportation seront refusées. Toutes les offres d&apos;inventaire iront dans la corbeille.
-		<usetemplate ignoretext="Je change mon statut en mode Occupé" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		Ne pas déranger est activé.  Vous ne recevrez pas les notifications de communications entrantes.
+
+- Les autres résidents recevront votre réponse Ne pas déranger (définie dans Préférences &gt; Général).
+- Toutes les offres de téléportation seront refusées.
+- Les appels vocaux seront refusés.
+		<usetemplate ignoretext="J&apos;ai changé mon statut et suis désormais en mode Ne pas déranger." name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Vous avez atteint le nombre de groupes maximum. Avant de pouvoir rejoindre ce groupe, vous devez en quitter un ou refuser cette offre.
@@ -2033,6 +2054,10 @@ Déplacer les objets de l&apos;inventaire ?
 		Accéder à votre [http://secondlife.com/account/ Page d&apos;accueil] pour consulter l&apos;historique de votre compte ?
 		<usetemplate ignoretext="Lancer mon navigateur pour consulter l&apos;historique de mon compte" name="okcancelignore" notext="Annuler" yestext="Aller sur cette page"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		Quand vous ajoutez une personne à une conversation existante, une nouvelle conversation est créée.  Tous les participants recevront les notifications de nouvelle conversation.
+		<usetemplate ignoretext="Confirmer l&apos;ajout de participants au chat" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		Êtes-vous certain de vouloir quitter ?
 		<usetemplate ignoretext="Confirmer avant de quitter" name="okcancelignore" notext="Ne pas quitter" yestext="Quitter"/>
@@ -2107,14 +2132,14 @@ Voulez-vous le remplacer par l&apos;objet sélectionné ?
 			<button ignore="Ne jamais remplacer" name="No" text="Annuler"/>
 		</form>
 	</notification>
-	<notification label="Réponse si occupé(e)" name="BusyModePay">
-		Vous êtes en mode occupé et vous ne recevrez donc aucun objet en échange de ce paiement.
+	<notification label="Avertissement de mode Ne pas déranger" name="DoNotDisturbModePay">
+		Vous avez activé Ne pas déranger. Vous ne recevrez aucun article proposé en échange de ce paiement.
 
-Souhaitez-vous quitter le mode occupé avant de terminer cette transaction ?
+Voulez-vous désactiver Ne pas déranger avant de terminer cette transaction ?
 		<form name="form">
-			<ignore name="ignore" save_option="true" text="Je suis sur le point de payer une personne ou un objet mais suis en mode Occupé"/>
-			<button ignore="Toujours quitter le mode occupé" name="Yes" text="OK"/>
-			<button ignore="Ne jamais quitter le mode occupé" name="No" text="Annuler"/>
+			<ignore name="ignore" text="Je suis sur le point de payer une personne ou un objet mais suis en mode Ne pas déranger"/>
+			<button ignore="Toujours quitter le mode Ne pas déranger" name="Yes" text="OK"/>
+			<button ignore="Ne jamais quitter le mode Ne pas déranger" name="No" text="Annuler"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2249,11 +2274,8 @@ Liez-la à partir d&apos;une page web pour permettre aux autres résidents d&apo
 	<notification name="GroupNotice">
 		Sujet : [SUBJECT], Message : [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; est en ligne
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; est hors ligne
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; est [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Même si vous êtes extrêmement sympathique, vous ne pouvez pas devenir ami avec vous-même.
@@ -2482,13 +2504,6 @@ Vous ne pouvez pas voler ici.
 	<notification name="DynamicPathfindingDisabled">
 		La recherche de chemin dynamique n&apos;est pas activée dans cette région. Il se peut que les objets scriptés utilisant des appels LSL de recherche de chemin ne fonctionnent pas comme prévu pour cette région.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		La modification de certains objets de cette région risque d&apos;entraîner un comportement incorrect des autres objets mobiles. Pour que les objets mobiles se comportent correctement, cliquez sur Refiger la région. Pour plus d&apos;informations, choisissez Aide.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Aide" ignoretext="La modification de certains objets de cette région risque d&apos;entraîner un comportement incorrect des autres objets mobiles." name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Une erreur est survenue. Un problème réseau ou serveur s&apos;est peut-être produit ou vous ne disposez pas de droits de construction. Se déconnecter puis se reconnecter permet parfois de résoudre le problème.
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2751,7 +2766,7 @@ Acceptez-vous ?
 	<notification name="ScriptQuestionCaution">
 		Avertissement : l&apos;objet &lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt; souhaite un accès total à votre compte en Linden dollars. Si vous autorisez cet accès, il pourra supprimer des fonds de votre compte à tout moment ou le vider entièrement de façon continue sans avis préalable.
   
-Il est rare qu&apos;une telle demande soit légitime. N&apos;autorisez pas cet accès si vous ne comprenez pas entièrement pourquoi l&apos;objet souhaite accéder à votre compte.
+N&apos;autorisez pas cet accès si vous ne comprenez pas entièrement pourquoi l&apos;objet souhaite accéder à votre compte.
 		<form name="form">
 			<button name="Grant" text="Permettre un accès total"/>
 			<button name="Deny" text="Refuser"/>
@@ -3332,4 +3347,633 @@ Désactivation des mises à jour futures de ce fichier...
 		Vous allez supprimer [NUM_ITEMS] articles. Voulez-vous vraiment continuer ?
 		<usetemplate ignoretext="Voulez-vous vraiment supprimer plusieurs articles ?" name="okcancelignore" notext="Non" yestext="Oui"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] vous a figé. Vous ne pouvez pas bouger ni interagir avec le monde.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] vous a figé pour une durée de [AV_FREEZE_TIME] secondes. Vous ne pouvez pas bouger ni interagir avec le monde.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Avatar figé.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] vous a libéré.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Avatar libéré.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		Vous n&apos;avez pas pu figer ce que vous vouliez car vous ne disposez pas des droits d&apos;admin pour cette parcelle.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		Vous n&apos;êtes plus figé, vous pouvez reprendre votre vie.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Impossible de figer cet utilisateur.
+	</notification>
+	<notification name="NowOwnObject">
+		Vous êtes désormais le propriétaire de l&apos;objet [OBJECT_NAME].
+	</notification>
+	<notification name="CantRezOnLand">
+		Impossible de rezzer l&apos;objet à [OBJECT_POS] car le propriétaire de ce terrain de l&apos;autorise pas.  Utilisez l&apos;outil Terrain pour voir à qui appartiennent les terrains.
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		Impossible de rezzer l&apos;objet car il y a trop de demandes.
+	</notification>
+	<notification name="SitFailCantMove">
+		Vous ne pouvez pas vous asseoir car vous ne pouvez actuellement pas bouger.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		Vous ne pouvez pas vous asseoir car votre présence sur ce terrain n&apos;est pas autorisée.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Essayez de vous rapprocher.  Impossible de vous asseoir sur l&apos;objet car
+il ne se trouve pas dans la même région que vous.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		Création d&apos;un nouvel objet impossible. La région est pleine.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Échec du placement de l&apos;objet à l&apos;emplacement spécifié.  Veuillez réessayer.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		Vous ne pouvez pas créer d&apos;arbres ni d&apos;herbe sur un terrain qui ne vous appartient pas.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		Échec de la copie car vous ne disposez pas des droits requis pour copier l&apos;objet [OBJ_NAME].
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		Échec de la copie car l&apos;objet [OBJ_NAME] ne peut pas vous être transféré.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		Échec de la copie car l&apos;objet [OBJ_NAME] contribue au maillage de navigation.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Dupliquer sans objet racine sélectionné
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		Impossible de dupliquer les objets car la région est pleine.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		Impossible de dupliquer les objets - la parcelle sur laquelle ils sont est introuvable.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		Création de l&apos;objet impossible car 
+la parcelle est pleine.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Échec d&apos;une tentative pour rezzer un objet.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		Impossible de créer l&apos;article qui a provoqué des problèmes pour cette région.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		Cet article d&apos;inventaire a été placé sur liste noire.
+	</notification>
+	<notification name="NoCanRezObjects">
+		Vous n&apos;êtes actuellement pas autorisé à créer des objets.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Recherche de terrain bloquée.
+Vous avez effectué trop de recherches de terrain trop rapidement.
+Veuillez réessayer dans une minute.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		Ressources de script insuffisantes pour attacher cet objet.
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Vous êtes mort et avez été téléporté à votre domicile.
+	</notification>
+	<notification name="EjectComingSoon">
+		Votre présence ici n&apos;est plus autorisée et vous disposez de [EJECT_TIME] secondes pour partir.
+	</notification>
+	<notification name="NoEnterServerFull">
+		Vous ne pouvez pas pénétrer dans cette région car 
+le serveur est plein.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Le réenregistrement dans l&apos;inventaire a été désactivé.
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		Impossible d&apos;enregistrer [OBJ_NAME] dans le contenu des objets car l&apos;objet à partir duquel il a été rezzé n&apos;existe plus.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		Impossible d&apos;enregistrer [OBJ_NAME] dans le contenu des objets car vous ne disposez pas des droits requis pour modifier l&apos;objet [DEST_NAME].
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		Impossible de réenregistrer [OBJ_NAME] dans l&apos;inventaire -- cette opération a été désactivée.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		Vous ne pouvez pas copier votre sélection car vous n&apos;avez pas le droit de copier l&apos;objet [OBJ_NAME].
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		Vous ne pouvez pas copier votre sélection car l&apos;objet [OBJ_NAME] n&apos;est pas transférable.
+	</notification>
+	<notification name="NoTransNoCopy">
+		Vous ne pouvez pas copier votre sélection car l&apos;objet [OBJ_NAME] n&apos;est pas transférable.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		La suppression de l&apos;objet [OBJ_NAME] du simulateur n&apos;est pas autorisée par le système de droits.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		Vous ne pouvez pas enregistrer votre sélection car vous n&apos;avez pas le droit de modifier l&apos;objet [OBJ_NAME].
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		Vous ne pouvez pas enregistrer votre sélection car l&apos;objet [OBJ_NAME] ne peut pas être copié.
+	</notification>
+	<notification name="NoModNoTaking">
+		Vous ne pouvez pas prendre votre sélection car vous n&apos;avez pas le droit de modifier l&apos;objet [OBJ_NAME].
+	</notification>
+	<notification name="RezDestInternalError">
+		Erreur interne : type de destination inconnue.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		Échec de la suppression car l&apos;objet est introuvable
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Exclusion de cet utilisateur impossible.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Cette région ne vous permet pas d&apos;y définir votre domicile.
+	</notification>
+	<notification name="HomeLocationLimits">
+		Vous ne pouvez définir votre domicile que sur votre terrain ou un infohub du continent.
+	</notification>
+	<notification name="HomePositionSet">
+		Emplacement du domicile défini.
+	</notification>
+	<notification name="AvatarEjected">
+		Avatar expulsé.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		Vous n&apos;avez pas pu réaliser l&apos;exclusion car vous ne disposez pas des droits d&apos;admin pour cette parcelle.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		Impossible de déplacer [OBJECT_NAME] jusqu&apos;à
+[OBJ_POSITION] dans la région [REGION_NAME] car la parcelle est pleine.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		Impossible de déplacer [OBJECT_NAME] jusqu&apos;à
+[OBJ_POSITION] dans la région [REGION_NAME] car vos objets ne sont pas autorisés sur cette parcelle.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		Impossible de déplacer [OBJECT_NAME] jusqu&apos;à
+[OBJ_POSITION] dans la région [REGION_NAME] car il n&apos;y a pas suffisamment de ressources pour cet objet sur cette parcelle.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		Impossible de déplacer [OBJECT_NAME] jusqu&apos;à
+[OBJ_POSITION] dans la région [REGION_NAME] car l&apos;autre région exécute une version plus ancienne qui ne prend pas en charge la réception de cet objet via le passage à une autre région.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		Impossible de déplacer [OBJECT_NAME] jusqu&apos;à
+[OBJ_POSITION] dans la région [REGION_NAME] car vous ne pouvez pas modifier le maillage de navigation d&apos;une région à une autre.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		Impossible de déplacer [OBJECT_NAME] jusqu&apos;à
+[OBJ_POSITION] dans la région [REGION_NAME] pour une raison inconnue. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		Vous n&apos;êtes pas autorisé à modifier cet objet.
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		Impossible d&apos;activer les propriétés physiques pour un objet qui contribue au maillage de navigation.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		Impossible d&apos;activer les propriétés physiques pour les objets avec images-clés.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		Impossible d&apos;activer les propriétés physiques pour l&apos;objet -- ressources de terrain insuffisantes.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		Impossible d&apos;activer les propriétés physiques pour les objets avec un coût de ressources physiques supérieur à [MAX_OBJECTS]
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Cet objet ne peut pas contenir de morceau concave car c&apos;est un fantôme qui contribue au maillage de navigation.
+	</notification>
+	<notification name="UnableAddItem">
+		Ajout de l&apos;article impossible.
+	</notification>
+	<notification name="UnableEditItem">
+		Modification impossible
+	</notification>
+	<notification name="NoPermToEdit">
+		Modification interdite.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		Pas autorisé à copier cet inventaire.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		Impossible d&apos;enregistrer dans le contenu des objets : L&apos;article n&apos;existe plus.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		Impossible d&apos;enregistrer dans le contenu des objets : Un article avec ce nom existe déjà dans l&apos;inventaire.
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		Impossible d&apos;enregistrer dans le contenu des objets : cela modifierait les droits d&apos;attache.
+	</notification>
+	<notification name="TooManyScripts">
+		Trop de scripts.
+	</notification>
+	<notification name="UnableAddScript">
+		Ajout du script impossible.
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		Le serveur d&apos;actifs n&apos;a pas répondu assez vite.  Objet renvoyé dans le sim.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		Les formes physiques ne sont pas activées pour cette région.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		Vous ne pouvez pas modifier le maillage de navigation d&apos;une région à une autre.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		Impossible de définir les propriétés physiques pour ce type d&apos;objet.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		Vous devenez définir une forme pour la prim racine.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		Les matériaux physiques ne sont pas activés pour cette région.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		Les matériaux physiques ne peuvent être ajustés que pour les prims racines.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		La configuration de matériaux physiques sur les personnages n&apos;est pas prise en charge actuellement.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Une ou plusieurs propriétés des ressources physiques spécifiées n&apos;étaient pas valides.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		Vous ne pouvez pas changer le type de raccord d&apos;un objet avec maillage.
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		Vous ne pouvez pas changer la forme d&apos;un objet avec maillage.
+	</notification>
+	<notification name="FullRegionCantEnter">
+		Vous ne pouvez pas pénétrer dans cette région car \ncar la région est pleine.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Échec du lien -- les propriétaires sont différents
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Échec du lien -- vous ne pouvez pas modifier le maillage de navigation d&apos;une région à une autre.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Échec du lien car vous ne disposez pas des droits de modification.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Échec du lien -- trop de primitives
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Échec du lien -- impossible de lier pas de copie et pas de transfert
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Échec du lien - il n&apos;y a rien qui puisse être lié.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Échec du lien -- trop de personnages de recherche de chemin
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Échec du lien -- ressources de terrain insuffisantes
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		Cet objet utilise trop de ressources physiques - sa dynamique a été désactivée.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		Vous avez été téléporté chez vous par l&apos;objet [OBJECT_NAME] sur la parcelle [PARCEL_NAME].
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		Vous avez été téléporté chez vous par l&apos;objet [OBJECT_NAME].
+	</notification>
+	<notification name="TeleportedByAttachment">
+		Vous avez été téléporté par un élément sur [ITEM_ID]
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		Vous avez été téléporté par l&apos;objet [OBJECT_NAME] sur la parcelle [PARCEL_NAME].
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Vous avez été téléporté par l&apos;objet [OBJECT_NAME] appartenant à [OWNER_ID].
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Vous avez été téléporté par l&apos;objet [OBJECT_NAME] appartenant à un utilisateur inconnu.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		Création de l&apos;objet demandé impossible. La région est pleine.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		Vous ne pouvez pas attacher plusieurs objets au même endroit.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Vous ne pouvez pas créer plusieurs objets ici.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		Création de l&apos;objet demandé impossible. Objet absent de la base de données.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		Création de l&apos;objet demandé impossible. Délai d&apos;attente dépassé. Veuillez réessayer.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		Création de l&apos;objet demandé impossible. Veuillez réessayer.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Échec de l&apos;action « rezzer », le chargement de l&apos;objet demandé a pris trop longtemps.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Échec du placement de l&apos;objet à l&apos;emplacement spécifié.  Veuillez réessayer.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		Vous ne pouvez pas créer de plantes sur ce terrain.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		Impossible de restaurer l&apos;objet. Position dans le monde introuvable.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		Impossible de rezzer l&apos;objet car ses données de maillage ne sont pas valides.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		Impossible de rezzer l&apos;objet car il y a déjà trop de scripts dans cette région.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Vos privilèges d&apos;accès ne vous autorisent pas à créer des objets à cet endroit.
+	</notification>
+	<notification name="CantCreateObject">
+		Vous n&apos;êtes actuellement pas autorisé à créer des objets.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Paramètres d&apos;objet non valides
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Vos privilèges d&apos;accès ne vous autorisent pas à dupliquer des objets ici.
+	</notification>
+	<notification name="CantChangeShape">
+		Vous n’êtes pas autorisé à modifier cette forme.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Vos privilèges d&apos;accès ne vous autorisent pas à revendiquer des objets ici.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		Échec de la cession car vous de disposez pas des droits de cession des objets pour votre groupe.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Vos privilèges d&apos;accès ne vous autorisent pas à acheter des objets ici.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		Impossible d&apos;attacher l&apos;objet car un avatar est assis dessus.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		Les arbres et les plantes ne peuvent pas être portés sous forme d&apos;éléments attachés.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		Impossible d&apos;attacher les objets appartenant au groupe.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		Vous ne pouvez pas attacher des objets qui ne vous appartiennent pas.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		Impossible d&apos;attacher les objets contribuant au maillage de navigation.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		Impossible d&apos;attacher l&apos;objet car vous n&apos;avez pas le droit de le déplacer.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		Ressources de script insuffisantes pour attacher cet objet.
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		Vous ne pouvez pas déposer d&apos;objets ici. Essayez la zone de période d&apos;essai gratuite.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		Vous ne pouvez pas déposer les éléments attachés avec maillage. Détachez-les dans l&apos;inventaire puis rezzez-les dans le monde.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		L&apos;élément n&apos;a pas pu être déposé : vous n&apos;avez pas le droit de déposer des éléments à cet endroit.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		L&apos;élément n&apos;a pas pu être déposé : ressources de terrain disponibles insuffisantes.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Les éléments n&apos;ont pas pu être déposés : ressources disponibles insuffisantes.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		Impossible de déposer l&apos;objet ici.  La parcelle est pleine.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		Vous ne pouvez pas toucher/attraper cet objet car vous êtes banni de cette parcelle de terrain.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Veuillez affiner vos paramètres de suppression.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		Chargement de l&apos;actif impossible.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		Impossible de trouver l&apos;utilisateur à téléporter chez lui
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		échec de la demande de type divine
+	</notification>
+	<notification name="GenericRequestFailed">
+		échec de la demande générique
+	</notification>
+	<notification name="CantUploadPostcard">
+		Chargement de la carte postale impossible.  Réessayez ultérieurement.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		Impossible récupérer les détails de l&apos;inventaire pour la notice au groupe.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		Impossible d&apos;envoyer une notice au groupe -- ce n&apos;est pas autorisé.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		Impossible d&apos;envoyer une notice au groupe - échec de la construction de l&apos;inventaire.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		Impossible d&apos;analyser l&apos;inventaire dans la notice.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Échec du chargement du terrain.
+	</notification>
+	<notification name="TerrainFileWritten">
+		Fichier de terrain écrit
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		Fichier de terrain écrit, lancement du téléchargement...
+	</notification>
+	<notification name="TerrainBaked">
+		Terrain figé.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Seuls les 10 premiers objets sélectionnés ont été désactivés. Actualisez et effectuez des sélections supplémentaires si nécessaire.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Vous devez mettre votre client à jour pour acheter cette parcelle.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Achat impossible, cette parcelle n&apos;est pas à vendre.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		Achat impossible, le prix de vente ou la zone de terrain a changé.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		Vous n&apos;êtes pas un acheteur autorisé pour cette parcelle.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		Vous ne pouvez pas acheter cette parcelle car elle est déjà en attente d&apos;une autorisation d&apos;achat.
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		Vous ne pouvez pas construire d&apos;objets ici car cela saturerait la parcelle.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		Vous avez sélectionné des terrains avec des propriétaires différents. Sélectionnez une zone plus petite et réessayez.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		Pas suffisamment de parcelles louées dans la sélection pour effectuer la fusion.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		Division du terrain impossible.\nPlusieurs parcelles sont sélectionnées.\nVeuillez sélectionner un terrain plus petit.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		Division du terrain impossible.\nParcelle introuvable.\nSignalez-le en allant à Aide -&gt; Signaler un bug...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		Division du terrain impossible. Toute la parcelle est sélectionnée.\nVeuillez sélectionner un terrain plus petit.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		Le terrain a été divisé.
+	</notification>
+	<notification name="PassPurchased">
+		Vous avez acheté un pass.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		Cette région n&apos;autorise pas les petites annonces.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Votre pass pour ce terrain arrive à expiration.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Il n&apos;y a pas de surface appropriée sur laquelle s&apos;asseoir, essayez un autre endroit.
+	</notification>
+	<notification name="CantSitNoRoom">
+		Pas de place pour s&apos;asseoir ici, essayez un autre endroit.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		Échec de la revendication de l&apos;objet car vous ne disposez pas des droits requis.
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		Échec de la revendication de l&apos;objet car vous ne disposez pas de suffisamment de L$.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		Impossible de céder un terrain appartenant au groupe.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		Échec de l&apos;achat de l&apos;objet car vous ne disposez pas de suffisamment de L$.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		Échec de l&apos;achat d&apos;inventaire car vous ne disposez pas de suffisamment de L$.
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		Vous ne disposez pas de suffisamment de L$ pour acheter un pass pour ce terrain.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		Impossible d&apos;acheter le pass actuellement.  Réessayez ultérieurement.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		Création de l&apos;objet impossible car \nla parcelle est pleine.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Échec du placement de l&apos;objet à l&apos;emplacement spécifié.  Veuillez réessayer.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		Impossible de créer le repère pour l&apos;événement.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		Grâce à vos pouvoirs de type divin, vous n&apos;êtes plus figé.
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Échec de la demande de pouvoirs spéciaux. Cette demande a été archivée.
+	</notification>
+	<notification name="ExpireExplanation">
+		Le système ne peut pas traiter votre demande actuellement. Délai d&apos;attente dépassé.
+	</notification>
+	<notification name="DieExplanation">
+		Le système ne peut pas traiter votre demande.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		Fonds insuffisants pour créer la primitive.
+	</notification>
+	<notification name="RezObjectFailure">
+		Fonds insuffisants pour créer l&apos;objet.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Réinitialiser l&apos;emplacement du domicile car il n&apos;était pas légal.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		Vous ne pouvez pas inviter quiconque là où vous vous trouvez actuellement car la région est pleine. Réessayez ultérieurement.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Cette région ne vous permet pas d&apos;y définir votre domicile.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		Vous ne pouvez définir votre domicile que sur votre terrain ou un infohub du continent.
+	</notification>
+	<notification name="SetHomePosition">
+		Emplacement du domicile défini.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		Impossible de dérezzer l&apos;objet à cause d&apos;un défaut d&apos;inventaire.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		Création de l&apos;inventaire demandé impossible.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		Création du dossier d&apos;inventaire demandé impossible.
+	</notification>
+	<notification name="CantCreateInventory">
+		Création de cet inventaire impossible.
+	</notification>
+	<notification name="CantCreateLandmark">
+		Création du repère impossible.
+	</notification>
+	<notification name="CantCreateOutfit">
+		Création de la tenue impossible. Veuillez réessayer dans une minute.
+	</notification>
+	<notification name="InventoryNotForSale">
+		L&apos;inventaire n&apos;est pas à vendre.
+	</notification>
+	<notification name="CantFindInvItem">
+		Objet de l&apos;inventaire introuvable.
+	</notification>
+	<notification name="CantFindObject">
+		Objet introuvable.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		Les transferts d&apos;argent aux objets sont actuellement désactivés dans cette région.
+	</notification>
+	<notification name="CantPayNoAgent">
+		Impossible de savoir qui payer.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		Vous ne pouvez pas donner de L$ à des objets publics.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Échec de la création d&apos;inventaire sur l&apos;objet Second Life.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Une erreur interne nous a empêchés de mettre votre client à jour correctement.  Le solde de L$ et le patrimoine affichés dans votre client peuvent ne pas correspondre à votre solde réel sur les serveurs.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		Impossible de créer de grandes prims qui coupent d&apos;autres joueurs.  Réessayez une fois que les autres joueurs se seront déplacés.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Cela supprimera les journaux des conversations précédentes, ainsi que toute copie de sauvegarde de ce fichier.
+		<usetemplate ignoretext="Confirmer avant de supprimer le journal des conversations précédentes" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Cela supprimera les transcriptions de toutes les conversations précédentes. La liste des conversations passées ne sera pas affectée. Tous les fichiers avec les suffixes .txt et txt.backup dans le dossier [FOLDER] seront supprimés.
+		<usetemplate ignoretext="Confirmer avant la suppression des transcriptions" name="okcancelignore" notext="Annuler" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		Impossible de déplacer les fichiers. Chemin précédent rétabli.
+		<usetemplate ignoretext="Impossible de déplacer les fichiers. Chemin précédent rétabli." name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/fr/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/fr/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_active_object_row.xml b/indra/newview/skins/default/xui/fr/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index 54b8f53e59ba49b08242310e835d0810743a6f11..c8fa9f340f96f5be1e166437fe2facbdacee1a9e
--- a/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/fr/panel_avatar_list_item.xml
@@ -27,5 +27,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Cet(te) ami(e) peut modifier, supprimer ou prendre vos objets."/>
 	<icon name="permission_map_icon" tool_tip="Cet(te) ami(e) peut vous localiser sur la carte."/>
 	<icon name="permission_online_icon" tool_tip="Cet(te) ami(e) peut voir lorsque vous êtes en ligne."/>
+	<button name="info_btn" tool_tip="En savoir plus"/>
 	<button name="profile_btn" tool_tip="Voir le profil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_avatar_tag.xml b/indra/newview/skins/default/xui/fr/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 96add2a74b1d226bb326bda94eadce3278b8739f..0e2b5a9c93a098a48651d5fbbca15282db27a5db
--- a/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/fr/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		Liste des ignorés
-	</text>
-	<scroll_list name="blocked" tool_tip="Liste des résidents actuellement ignorés"/>
-	<button label="Ignorer une personne" label_selected="Ignorer le résident..." name="Block resident..." tool_tip="Choisir un résident à ignorer"/>
-	<button label="Ignorer un objet par son nom" label_selected="Ignorer un objet par son nom..." name="Block object by name..." tool_tip="Choisir un objet à ignorer par nom"/>
-	<button label="Ne plus ignorer" label_selected="Ne plus ignorer" name="Unblock" tool_tip="Enlever le résident ou l&apos;objet de la liste des ignorés"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Filtrer" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Actions sur la personne ou l&apos;objet sélectionné"/>
+		<menu_button name="view_btn" tool_tip="Options de tri"/>
+		<menu_button name="plus_btn" tool_tip="Choisir un résident ou un objet à ignorer"/>
+		<button name="unblock_btn" tool_tip="Enlever le résident ou l’objet de la liste des ignorés"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Liste des résidents actuellement ignorés"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/fr/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/fr/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/fr/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_chat_header.xml b/indra/newview/skins/default/xui/fr/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/fr/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_classified_info.xml b/indra/newview/skins/default/xui/fr/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/fr/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/fr/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml b/indra/newview/skins/default/xui/fr/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/fr/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ebf18f64832585f0f72e9508ab941839d3b4e018
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(chargement)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/fr/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9c277842b5a5082cecc6360f705045e0d871649a
--- /dev/null
+++ b/indra/newview/skins/default/xui/fr/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="Incluait une conversation vocale"/>
+	<icon name="unread_ims_icon" tool_tip="Des messages sont arrivés pendant que vous étiez déconnecté."/>
+	<button name="delete_btn" tool_tip="Supprimer cette entrée"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/fr/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/fr/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml b/indra/newview/skins/default/xui/fr/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_classified.xml b/indra/newview/skins/default/xui/fr/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_eyes.xml b/indra/newview/skins/default/xui/fr/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml b/indra/newview/skins/default/xui/fr/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_hair.xml b/indra/newview/skins/default/xui/fr/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml b/indra/newview/skins/default/xui/fr/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pants.xml b/indra/newview/skins/default/xui/fr/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_physics.xml b/indra/newview/skins/default/xui/fr/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_pick.xml b/indra/newview/skins/default/xui/fr/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_profile.xml b/indra/newview/skins/default/xui/fr/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shape.xml b/indra/newview/skins/default/xui/fr/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml b/indra/newview/skins/default/xui/fr/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skin.xml b/indra/newview/skins/default/xui/fr/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_socks.xml b/indra/newview/skins/default/xui/fr/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/fr/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml b/indra/newview/skins/default/xui/fr/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/fr/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/fr/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_general.xml b/indra/newview/skins/default/xui/fr/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/fr/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_invite.xml b/indra/newview/skins/default/xui/fr/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_land_money.xml b/indra/newview/skins/default/xui/fr/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_list_item.xml b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
old mode 100644
new mode 100755
index 5fb69d19893c03dbd38386a69b5e81f05f67a302..b1b32af7c68d3d160c52be8c48444f5fa2af2531
--- a/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/fr/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Inconnu"/>
+	<button name="info_btn" tool_tip="En savoir plus"/>
 	<button name="profile_btn" tool_tip="Voir le profil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notices.xml b/indra/newview/skins/default/xui/fr/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_notify.xml b/indra/newview/skins/default/xui/fr/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_group_roles.xml b/indra/newview/skins/default/xui/fr/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/fr/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_instant_message.xml b/indra/newview/skins/default/xui/fr/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_inventory_item.xml b/indra/newview/skins/default/xui/fr/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_landmark_info.xml b/indra/newview/skins/default/xui/fr/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_landmarks.xml b/indra/newview/skins/default/xui/fr/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_login.xml b/indra/newview/skins/default/xui/fr/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_main_inventory.xml b/indra/newview/skins/default/xui/fr/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_me.xml b/indra/newview/skins/default/xui/fr/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml b/indra/newview/skins/default/xui/fr/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml b/indra/newview/skins/default/xui/fr/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/fr/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_nearby_media.xml b/indra/newview/skins/default/xui/fr/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml b/indra/newview/skins/default/xui/fr/panel_notifications_channel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_notify_textbox.xml b/indra/newview/skins/default/xui/fr/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml b/indra/newview/skins/default/xui/fr/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/fr/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/fr/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_list.xml b/indra/newview/skins/default/xui/fr/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/fr/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_people.xml b/indra/newview/skins/default/xui/fr/panel_people.xml
old mode 100644
new mode 100755
index f035853efcdb1691bd0c5c0dbbddfed37549e393..227ce26df729b368d0260b01ffa0b3518399b14c
--- a/indra/newview/skins/default/xui/fr/panel_people.xml
+++ b/indra/newview/skins/default/xui/fr/panel_people.xml
@@ -14,81 +14,53 @@ Pour rechercher des résidents avec qui passer du temps, utilisez [secondlife://
 	<string name="no_filtered_friends_msg">
 		Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/people/[SEARCH_TERM] Rechercher].
 	</string>
-	<string name="people_filter_label" value="Filtrer les personnes"/>
-	<string name="groups_filter_label" value="Filtrer les groupes"/>
 	<string name="no_filtered_groups_msg" value="Vous n&apos;avez pas trouvé ce que vous cherchiez ? Essayez [secondlife:///app/search/groups/[SEARCH_TERM] Rechercher]."/>
 	<string name="no_groups_msg" value="Vous souhaitez trouver des groupes à rejoindre ? Utilisez [secondlife:///app/search/groups Rechercher]."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Carte : double-clic ; Panoramique : Maj + faire glisser)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Téléportation : double-clic ; Panoramique : Maj + faire glisser)"/>
-	<filter_editor label="Filtre" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="PRÈS DE VOUS" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Options"/>
-				<button name="add_friend_btn" tool_tip="Ajouter le résident sélectionné à votre liste d&apos;amis"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="Filtrer les personnes" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Actions sur la personne sélectionnée"/>
+				<menu_button name="nearby_view_btn" tool_tip="Options d&apos;affichage/de tri"/>
+				<button name="add_friend_btn" tool_tip="Proposer à ce résident de devenir votre ami"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Supprimer la personne sélectionnée des amis"/>
 			</panel>
 		</panel>
-		<panel label="MES AMIS" name="friends_panel">
+		<panel label="AMIS" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="Filtrer les personnes" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Actions sur la personne sélectionnée"/>
+				<menu_button name="friends_view_btn" tool_tip="Options d&apos;affichage/de tri"/>
+				<button name="friends_add_btn" tool_tip="Proposer à ce résident de devenir votre ami"/>
+				<dnd_button name="friends_del_btn" tool_tip="Supprimer la personne sélectionnée des amis"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="En ligne"/>
 				<accordion_tab name="tab_all" title="Tout"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="Afficher d&apos;autres options"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Proposer à un résident de devenir votre ami"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Supprimer le résident sélectionné de votre liste d&apos;amis."/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="MES GROUPES" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Options"/>
-				<button name="plus_btn" tool_tip="Rejoindre/créer un nouveau groupe"/>
-				<button name="activate_btn" tool_tip="Activer le groupe sélectionné"/>
+		<panel label="GROUPES" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Filtrer les groupes" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Actions sur le groupe sélectionné"/>
+				<menu_button name="groups_view_btn" tool_tip="Options d&apos;affichage/de tri"/>
+				<menu_button name="plus_btn" tool_tip="Rejoindre/créer un nouveau groupe"/>
+				<dnd_button name="minus_btn" tool_tip="Quitter le groupe sélectionné"/>
 			</panel>
 		</panel>
 		<panel label="RÉCENT" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Options"/>
-				<button name="add_friend_btn" tool_tip="Ajouter le résident sélectionné à votre liste d&apos;amis"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="Filtrer les personnes" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Actions sur la personne sélectionnée"/>
+				<menu_button name="recent_view_btn" tool_tip="Options d&apos;affichage/de tri"/>
+				<button name="add_friend_btn" tool_tip="Proposer à ce résident de devenir votre ami"/>
+				<dnd_button name="recent_del_btn" tool_tip="Supprimer la personne sélectionnée des amis"/>
 			</panel>
 		</panel>
+		<panel label="BLOQUÉ" name="blocked_panel">
+			<panel label="Résidents et objets ignorés" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Profil" name="view_profile_btn" tool_tip="Afficher la photo, les groupes et autres infos des résidents"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="IM" name="im_btn" tool_tip="Ouvrir une session IM."/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Appel" name="call_btn" tool_tip="Appeler ce résident."/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Partager" name="share_btn" tool_tip="Partager un article de l&apos;inventaire."/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Téléporter" name="teleport_btn" tool_tip="Proposer une téléportation."/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Profil du groupe" name="group_info_btn" tool_tip="Afficher les informations sur le groupe"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Chat de groupe" name="chat_btn" tool_tip="Ouvrir une session de chat"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Appel de groupe" name="group_call_btn" tool_tip="Appeler ce groupe"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_pick_info.xml b/indra/newview/skins/default/xui/fr/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_picks.xml b/indra/newview/skins/default/xui/fr/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_place_profile.xml b/indra/newview/skins/default/xui/fr/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_places.xml b/indra/newview/skins/default/xui/fr/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_postcard_message.xml b/indra/newview/skins/default/xui/fr/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml b/indra/newview/skins/default/xui/fr/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/fr/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/fr/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
old mode 100644
new mode 100755
index 550beb653ed691b12eea7bc8fe44587892c39155..972190dc159c9528ba7715d8af834eacaa1c980c
--- a/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Chat écrit" name="chat">
-	<text name="font_size">
-		Taille de la police :
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Petite" name="radio" value="0"/>
-		<radio_item label="Moyenne" name="radio2" value="1"/>
-		<radio_item label="Grande" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="Exécuter l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
-	<check_box label="M&apos;envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
-	<check_box label="Activer l&apos;historique des chats et des IM en texte brut" name="plain_text_chat_history"/>
-	<check_box label="Bulles de chat" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		Afficher les IM dans :
-	</text>
-	<text name="requires_restart_label">
-		(redémarrage requis)
-	</text>
-	<radio_group name="chat_window" tool_tip="Afficher vos messages instantanés dans plusieurs fenêtres ou dans une seule fenêtre avec plusieurs onglets (redémarrage requis)">
-		<radio_item label="Plusieurs fenêtres" name="radio" value="0"/>
-		<radio_item label="Onglets" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Activer les popups de chat entrant :
-	</text>
-	<check_box label="Chats de groupe" name="EnableGroupChatPopups" tool_tip="Cocher cette case pour qu&apos;un popup s&apos;affiche à réception d&apos;un message de chat de groupe."/>
-	<check_box label="Chats IM" name="EnableIMChatPopups" tool_tip="Cocher cette case pour qu&apos;un popup s&apos;affiche à réception d&apos;un message instantané."/>
-	<spinner label="Durée de vie du popup Chat près de moi :" name="nearby_toasts_lifetime"/>
-	<spinner label="Disparition progressive du popup Chat près de moi :" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="Exécuter l&apos;animation clavier quand vous écrivez" name="play_typing_animation"/>
+		<check_box label="M&apos;envoyer les IM par e-mail une fois déconnecté" name="send_im_to_email"/>
+		<check_box label="Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Taille de la police :
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Petite" name="Small" value="0"/>
+			<item label="Moyenne" name="Medium" value="1"/>
+			<item label="Grande" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Bulles de chat" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Notifications
+		</text>
+		<text name="friend_ims">
+			IM amis :
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
+			<item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
+			<item label="Aucun(e)" name="None" value="aucun(e)"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			IM non amis :
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
+			<item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
+			<item label="Aucun(e)" name="None" value="aucun(e)"/>
+		</combo_box>
+		<text name="conference_ims">
+			IM conférence :
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
+			<item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
+			<item label="Aucun(e)" name="None" value="aucun(e)"/>
+		</combo_box>
+		<text name="group_chat">
+			Chat de groupe :
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
+			<item label="Bouton de la barre d&apos;outils Flash" name="FlashToolbarButton" value="clignote"/>
+			<item label="Aucun(e)" name="None" value="aucun(e)"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Chat près de moi :
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Ouvrir la fenêtre Conversation" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Afficher le message dans une fenêtre popup" name="PopUpMessage" value="toast"/>
+			<item label="Bouton de la barre d&apos;outils Flash" name="FlashToolBarButton" value="clignote"/>
+			<item label="Aucun(e)" name="None" value="aucun(e)"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Pour suspendre temporairement toutes les notifications, utilisez Communication &gt; Ne pas déranger.
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Écouter le son :
+		</text>
+		<check_box label="Nouvelle conversation" name="new_conversation"/>
+		<check_box label="Appel entrant" name="incoming_voice_call"/>
+		<check_box label="Offre de téléportation" name="teleport_offer"/>
+		<check_box label="Offre d&apos;inventaire" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Effacer le journal..." name="clear_log"/>
+		<button label="Supprimer les transcriptions..." name="delete_transcripts"/>
+		<button label="Parcourir..." label_selected="Parcourir" name="log_path_button"/>
+	</panel>
 	<button label="Traduction..." name="ok_btn"/>
 	<button label="Rechercher/Remplacer..." name="autoreplace_showgui"/>
 	<button label="Orthographe..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_colors.xml b/indra/newview/skins/default/xui/fr/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
old mode 100644
new mode 100755
index 66b84af3aa57168c81a6468b94cbde0052c2423e..533c392d6b9a26d8483d9696b7b166bc058fa63c
--- a/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/fr/panel_preferences_general.xml
@@ -69,9 +69,9 @@
 		<combo_box.item label="Jamais" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Réponse si occupé(e) :
+		Réponse Ne pas déranger
 	</text>
-	<text_editor name="busy_response">
+	<text_editor name="do_not_disturb_response">
 		log_in_to_change
 	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/fr/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_move.xml b/indra/newview/skins/default/xui/fr/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/fr/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/fr/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/fr/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/fr/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_region_covenant.xml b/indra/newview/skins/default/xui/fr/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_region_debug.xml b/indra/newview/skins/default/xui/fr/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_region_environment.xml b/indra/newview/skins/default/xui/fr/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_region_estate.xml b/indra/newview/skins/default/xui/fr/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_region_general.xml b/indra/newview/skins/default/xui/fr/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_region_terrain.xml b/indra/newview/skins/default/xui/fr/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_script_ed.xml b/indra/newview/skins/default/xui/fr/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/fr/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/fr/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_script_question_toast.xml b/indra/newview/skins/default/xui/fr/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml b/indra/newview/skins/default/xui/fr/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/fr/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/fr/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/fr/panel_sidetray_home_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/fr/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_sound_devices.xml b/indra/newview/skins/default/xui/fr/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/fr/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_status_bar.xml b/indra/newview/skins/default/xui/fr/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_sys_well_item.xml b/indra/newview/skins/default/xui/fr/panel_sys_well_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/fr/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_voice_effect.xml b/indra/newview/skins/default/xui/fr/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/fr/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/panel_world_map.xml b/indra/newview/skins/default/xui/fr/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/role_actions.xml b/indra/newview/skins/default/xui/fr/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml b/indra/newview/skins/default/xui/fr/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/fr/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
old mode 100644
new mode 100755
index 60027d41cb679b529f65231c6508554597ac6e37..896dd932e38b4828a8c00c4587ccb91427f3490b
--- a/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/fr/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Acheter l&apos;objet" name="Buyobject"/>
 			<combo_box.item label="Payer l&apos;objet" name="Payobject"/>
 			<combo_box.item label="Ouvrir" name="Open"/>
+			<combo_box.item label="Zoom" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/fr/strings.xml b/indra/newview/skins/default/xui/fr/strings.xml
old mode 100644
new mode 100755
index 6a2a3f559a52efdefb23d4da5d43f3712bcaca2e..69ed20f3764542ca6116e13db152a989b84418c6
--- a/indra/newview/skins/default/xui/fr/strings.xml
+++ b/indra/newview/skins/default/xui/fr/strings.xml
@@ -137,7 +137,7 @@
 		Quitter
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=fr-FR&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		Le client que vous utilisez ne permet plus d&apos;accéder à Second Life. Téléchargez un nouveau client à la page suivante :
@@ -622,8 +622,8 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="AvatarAway">
 		Absent
 	</string>
-	<string name="AvatarBusy">
-		Occupé
+	<string name="AvatarDoNotDisturb">
+		Ne pas déranger
 	</string>
 	<string name="AvatarMuted">
 		Bloqué(e)
@@ -859,6 +859,12 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="ST_NO_JOINT">
 		Impossible de trouver ROOT ou JOINT.
 	</string>
+	<string name="NearbyChatTitle">
+		Chat près de moi
+	</string>
+	<string name="NearbyChatLabel">
+		(Chat près de moi)
+	</string>
 	<string name="whisper">
 		chuchote :
 	</string>
@@ -922,12 +928,15 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="ControlYourCamera">
 		Contrôler votre caméra
 	</string>
-	<string name="TeleportYourAgent">
-		Vous téléporter
-	</string>
 	<string name="NotConnected">
 		Pas connecté(e)
 	</string>
+	<string name="AgentNameSubst">
+		(Vous)
+	</string>
+	<string name="TeleportYourAgent">
+		Vous téléporter
+	</string>
 	<string name="SIM_ACCESS_PG">
 		Général
 	</string>
@@ -1009,18 +1018,6 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="dictionary_files">
 		Dictionnaires
 	</string>
-	<string name="AvatarSetNotAway">
-		Présent
-	</string>
-	<string name="AvatarSetAway">
-		Absent
-	</string>
-	<string name="AvatarSetNotBusy">
-		Pas occupé
-	</string>
-	<string name="AvatarSetBusy">
-		Occupé
-	</string>
 	<string name="shape">
 		Silhouette
 	</string>
@@ -1989,8 +1986,8 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="PanelContentsNewScript">
 		Nouveau script
 	</string>
-	<string name="BusyModeResponseDefault">
-		Le résident auquel vous avez envoyé un message est en mode Occupé, ce qui signifie qu&apos;il a demandé à ne pas être dérangé.  Votre message restera affiché dans son panneau IM afin qu&apos;il puisse le lire ultérieurement.
+	<string name="DoNotDisturbModeResponseDefault">
+		Ce résident a activé Ne pas déranger et verra votre message plus tard.
 	</string>
 	<string name="MuteByName">
 		(par nom)
@@ -2103,9 +2100,6 @@ Veuillez réessayer de vous connecter dans une minute.
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [day,datetime,utc] [mth,datetime,utc] [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		Contenus
-	</string>
 	<string name="AcquiredItems">
 		Objets acquis
 	</string>
@@ -3877,7 +3871,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Région de type Général
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Avatars visibles et chat autorisé en dehors de cette parcelle
+		Les avatars à l&apos;extérieur de cette parcelle ne peuvent pas voir ni entendre les avatars qui se trouvent à l&apos;intérieur.
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Les objets mobiles risquent de ne pas se comporter correctement dans cette région tant qu&apos;elle n&apos;est pas refigée.
@@ -3954,6 +3948,12 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="IM_unblock_only_groups_friends">
 		Pour afficher ce message, vous devez désactiver la case Seuls mes amis et groupes peuvent m&apos;appeler ou m&apos;envoyer un IM, sous Préférences/Confidentialité.
 	</string>
+	<string name="OnlineStatus">
+		En ligne
+	</string>
+	<string name="OfflineStatus">
+		Hors ligne
+	</string>
 	<string name="answered_call">
 		Votre appel a fait l&apos;objet d&apos;une réponse
 	</string>
@@ -3963,6 +3963,9 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 	<string name="you_joined_call">
 		Vous avez rejoint l&apos;appel
 	</string>
+	<string name="you_auto_rejected_call-im">
+		Vous avez automatiquement refusé l&apos;appel vocal quand le mode Ne pas déranger était activé.
+	</string>
 	<string name="name_started_call">
 		[NAME] appelle.
 	</string>
@@ -3979,7 +3982,7 @@ Si ce message persiste, veuillez aller sur la page [SUPPORT_SITE].
 		Connexion en cours...
 	</string>
 	<string name="conference-title">
-		Conférence ad-hoc
+		Chat à plusieurs
 	</string>
 	<string name="conference-title-incoming">
 		Conférence avec [AGENT_NAME]
@@ -4859,6 +4862,9 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
 	<string name="Command_Chat_Label">
 		Chat
 	</string>
+	<string name="Command_Conversations_Label">
+		Conversations
+	</string>
 	<string name="Command_Compass_Label">
 		Boussole
 	</string>
@@ -4934,6 +4940,9 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
 	<string name="Command_Chat_Tooltip">
 		Parler aux personnes près de vous par chat écrit
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Parler à quelqu&apos;un
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Boussole
 	</string>
@@ -5063,4 +5072,13 @@ Essayez avec le chemin d&apos;accès à l&apos;éditeur entre guillemets doubles
 	<string name="UserDictionary">
 		[User]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		Les conversations ne sont pas archivées. Pour commencer à tenir un journal, choisissez Enregistrer : Journal seul ou Enregistrer : Journal et transcriptions sous Préférences &gt; Chat.
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		Aucune conversation ne sera plus enregistrée. Pour recommencer à tenir un journal, choisissez Enregistrer : Journal seul ou Enregistrer : Journal et transcriptions sous Préférences &gt; Chat.
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		Il n&apos;y a aucune conversation enregistrée. Quand quelqu&apos;un vous contacte ou quand vous contactez quelqu&apos;un, une entrée de journal s&apos;affiche ici.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/fr/teleport_strings.xml b/indra/newview/skins/default/xui/fr/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/fr/xui_version.xml b/indra/newview/skins/default/xui/fr/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_about.xml b/indra/newview/skins/default/xui/it/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_about_land.xml b/indra/newview/skins/default/xui/it/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_activeim.xml b/indra/newview/skins/default/xui/it/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/it/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_auction.xml b/indra/newview/skins/default/xui/it/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_autoreplace.xml b/indra/newview/skins/default/xui/it/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_avatar.xml b/indra/newview/skins/default/xui/it/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_picker.xml b/indra/newview/skins/default/xui/it/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_avatar_textures.xml b/indra/newview/skins/default/xui/it/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_beacons.xml b/indra/newview/skins/default/xui/it/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_build_options.xml b/indra/newview/skins/default/xui/it/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_bulk_perms.xml b/indra/newview/skins/default/xui/it/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_bumps.xml b/indra/newview/skins/default/xui/it/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_buy_contents.xml b/indra/newview/skins/default/xui/it/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency.xml b/indra/newview/skins/default/xui/it/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/it/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_buy_land.xml b/indra/newview/skins/default/xui/it/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_buy_object.xml b/indra/newview/skins/default/xui/it/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_camera.xml b/indra/newview/skins/default/xui/it/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_chat_bar.xml b/indra/newview/skins/default/xui/it/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_choose_group.xml b/indra/newview/skins/default/xui/it/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_color_picker.xml b/indra/newview/skins/default/xui/it/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_conversation_log.xml b/indra/newview/skins/default/xui/it/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8354824ed142d101b64fcca67cc8b0364a8d973e
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="REGISTRO CONVERSAZIONI">
+	<panel name="buttons_panel">
+		<filter_editor label="Filtro persone" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Opzioni Mostra/Ordina"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Azioni sulla persona o gruppo selezionato"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_conversation_preview.xml b/indra/newview/skins/default/xui/it/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0e9c8ee0e389c72bc1354b5888402925187e3ea
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="CONVERSAZIONE:">
+	<floater.string name="Title">
+		CONVERSAZIONE: [NAME]
+	</floater.string>
+	<text name="page_label" value="Pagina"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_critical.xml b/indra/newview/skins/default/xui/it/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/it/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_destinations.xml b/indra/newview/skins/default/xui/it/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_display_name.xml b/indra/newview/skins/default/xui/it/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/it/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/it/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/it/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_environment_settings.xml b/indra/newview/skins/default/xui/it/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_event.xml b/indra/newview/skins/default/xui/it/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_fast_timers.xml b/indra/newview/skins/default/xui/it/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_font_test.xml b/indra/newview/skins/default/xui/it/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_gesture.xml b/indra/newview/skins/default/xui/it/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_god_tools.xml b/indra/newview/skins/default/xui/it/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_hardware_settings.xml b/indra/newview/skins/default/xui/it/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_help_browser.xml b/indra/newview/skins/default/xui/it/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_how_to.xml b/indra/newview/skins/default/xui/it/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_hud.xml b/indra/newview/skins/default/xui/it/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_im_container.xml b/indra/newview/skins/default/xui/it/floater_im_container.xml
old mode 100644
new mode 100755
index fb8e77b32fe48fcc55b22a51ab578d753100598d..10cf1b7f7ed57ee82e08ad9abe62138b7bf6849b
--- a/indra/newview/skins/default/xui/it/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="CONVERSAZIONI"/>
+<multi_floater name="floater_im_box" title="CONVERSAZIONI">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Opzioni Mostra/Ordina"/>
+					<button name="add_btn" tool_tip="Avvia una nuova conversazione"/>
+					<button name="speak_btn" tool_tip="Parla con le persone usando il microfono"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Minimizza/espandi questo elenco"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Minimizza questo pannello"/>
+					<text name="stub_textbox">
+						Questa conversazione in una finestra separata.   [secondlife:/// Ripristina conversazione.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/it/floater_im_session.xml b/indra/newview/skins/default/xui/it/floater_im_session.xml
old mode 100644
new mode 100755
index 3d9d17fc81ada808766e00cd9c8bb4b0bf33ad78..d38ec7a5fe5098f311acad2d8d44f652b002470b
--- a/indra/newview/skins/default/xui/it/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/it/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="A" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] è stato invitato alla conversazione."/>
+	<floater.string name="multiple_participants_added" value="[NAME] sono stati invitati alla conversazione."/>
+	<floater.string name="tooltip_to_separate_window" value="Sposta questa conversazione in una finestra separata."/>
+	<floater.string name="tooltip_to_main_window" value="Sposta questa conversazione di nuovo nella finestra principale"/>
+	<floater.string name="start_call_button_tooltip" value="Apri collegamento voce"/>
+	<floater.string name="end_call_button_tooltip" value="Chiudi collegamento voce"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Minimizza questo pannello"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Minimizza elenco partecipanti"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Espandi l&apos;elenco dei partecipanti"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Opzioni Mostra/Ordina"/>
+				<menu_button name="gear_btn" tool_tip="Azioni per la persona selezionata:"/>
+				<button name="add_btn" tool_tip="Aggiungi qualcuno a questa conversazione"/>
+				<button name="voice_call_btn" tool_tip="Apri collegamento voce"/>
+				<button name="close_btn" tool_tip="Termina questa conversazione"/>
+				<button name="expand_collapse_btn" tool_tip="Minimizza/espandi questo pannello"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Traduci chat" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="A" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Mostra/nascondi pannello messaggi"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/it/floater_image_preview.xml b/indra/newview/skins/default/xui/it/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_import_collada.xml b/indra/newview/skins/default/xui/it/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_incoming_call.xml b/indra/newview/skins/default/xui/it/floater_incoming_call.xml
old mode 100644
new mode 100755
index a95ed44662c2702f9a5b5e1c173fe0cfa824d18d..566920209d0b3d7ed89619d09a43cc45e2aec162
--- a/indra/newview/skins/default/xui/it/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/it/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		anonimo
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		sta chiamando.
+		ti sta chiamando.
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		ha aderito ad una chiamata in chat vocale in conferenza.
@@ -25,9 +25,9 @@
 		Vuoi abbandonare [CURRENT_CHAT] e aderire a questa voice chat?
 	</floater.string>
 	<text name="question">
-		Vuoi abbandonare [CURRENT_CHAT] e aderire a questa voice chat?
+		Se rispondi, verrà interrotto il collegamento dalla conversazione a voce corrente.
 	</text>
-	<button label="Accetta" label_selected="Accetta" name="Accept"/>
-	<button label="Rifiuta" label_selected="Rifiuta" name="Reject"/>
-	<button label="Inizia IM" name="Start IM"/>
+	<button label="Risposta" label_selected="Risposta" name="Accept"/>
+	<button label="Ignora" label_selected="Ignora" name="Reject"/>
+	<button label="Apri invece IM" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/it/floater_inspect.xml b/indra/newview/skins/default/xui/it/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/it/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/it/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_joystick.xml b/indra/newview/skins/default/xui/it/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_lagmeter.xml b/indra/newview/skins/default/xui/it/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_land_holdings.xml b/indra/newview/skins/default/xui/it/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/it/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_lsl_guide.xml b/indra/newview/skins/default/xui/it/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_map.xml b/indra/newview/skins/default/xui/it/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_media_browser.xml b/indra/newview/skins/default/xui/it/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_media_settings.xml b/indra/newview/skins/default/xui/it/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_mem_leaking.xml b/indra/newview/skins/default/xui/it/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/it/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_model_preview.xml b/indra/newview/skins/default/xui/it/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_moveview.xml b/indra/newview/skins/default/xui/it/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_mute_object.xml b/indra/newview/skins/default/xui/it/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_my_appearance.xml b/indra/newview/skins/default/xui/it/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_my_inventory.xml b/indra/newview/skins/default/xui/it/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_object_weights.xml b/indra/newview/skins/default/xui/it/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_openobject.xml b/indra/newview/skins/default/xui/it/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/it/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_outgoing_call.xml b/indra/newview/skins/default/xui/it/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/it/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index 77be220a2acafce137b19b31e0852f2665b9f394..7777444161266ed813342aaa5238bb880da40707
--- a/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/it/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Mostra:
 			</text>
-			<check_box label="Mondo" name="show_world"/>
+			<check_box label="Test" name="show_world"/>
 			<check_box label="Solo elementi spostabili" name="show_world_movables_only"/>
 			<check_box label="Navmesh" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/it/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/it/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_pay.xml b/indra/newview/skins/default/xui/it/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_pay_object.xml b/indra/newview/skins/default/xui/it/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_people.xml b/indra/newview/skins/default/xui/it/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_perm_prefs.xml b/indra/newview/skins/default/xui/it/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_picks.xml b/indra/newview/skins/default/xui/it/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_places.xml b/indra/newview/skins/default/xui/it/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_post_process.xml b/indra/newview/skins/default/xui/it/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preferences.xml b/indra/newview/skins/default/xui/it/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/it/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preview_animation.xml b/indra/newview/skins/default/xui/it/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preview_gesture.xml b/indra/newview/skins/default/xui/it/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preview_notecard.xml b/indra/newview/skins/default/xui/it/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preview_sound.xml b/indra/newview/skins/default/xui/it/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_preview_texture.xml b/indra/newview/skins/default/xui/it/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_price_for_listing.xml b/indra/newview/skins/default/xui/it/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_publish_classified.xml b/indra/newview/skins/default/xui/it/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_region_debug_console.xml b/indra/newview/skins/default/xui/it/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_region_info.xml b/indra/newview/skins/default/xui/it/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_report_abuse.xml b/indra/newview/skins/default/xui/it/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_script_debug.xml b/indra/newview/skins/default/xui/it/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/it/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_script_limits.xml b/indra/newview/skins/default/xui/it/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_script_preview.xml b/indra/newview/skins/default/xui/it/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_script_queue.xml b/indra/newview/skins/default/xui/it/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_script_search.xml b/indra/newview/skins/default/xui/it/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_search.xml b/indra/newview/skins/default/xui/it/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_select_key.xml b/indra/newview/skins/default/xui/it/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_sell_land.xml b/indra/newview/skins/default/xui/it/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_settings_debug.xml b/indra/newview/skins/default/xui/it/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_snapshot.xml b/indra/newview/skins/default/xui/it/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_sound_devices.xml b/indra/newview/skins/default/xui/it/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_sound_preview.xml b/indra/newview/skins/default/xui/it/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_spellcheck.xml b/indra/newview/skins/default/xui/it/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/it/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_stats.xml b/indra/newview/skins/default/xui/it/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_sys_well.xml b/indra/newview/skins/default/xui/it/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_telehub.xml b/indra/newview/skins/default/xui/it/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/it/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/it/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index c97a91bb3fb339937f378c4f284bb004facccaac..27a17868a76712ec55b5ecfbbf33cf05623cf1f6
--- a/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/it/floater_texture_ctrl.xml
@@ -19,7 +19,7 @@
 	<button label="Default" label_selected="Default" name="Default"/>
 	<button label="Vuoto" label_selected="Vuoto" name="Blank"/>
 	<button label="Niente" label_selected="Niente" name="None"/>
-	<check_box initial_value="true" label="Anteprima dal vivo" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="Applica adesso" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Anteprima disattivata"/>
 	<filter_editor label="Filtro texture" name="inventory search editor"/>
 	<check_box initial_value="false" label="Mostra cartelle" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/it/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/it/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_tools.xml b/indra/newview/skins/default/xui/it/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_top_objects.xml b/indra/newview/skins/default/xui/it/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_tos.xml b/indra/newview/skins/default/xui/it/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_toybox.xml b/indra/newview/skins/default/xui/it/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_translation_settings.xml b/indra/newview/skins/default/xui/it/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_url_entry.xml b/indra/newview/skins/default/xui/it/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/it/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b168d067c2729627101643b3226c331c9666ba70
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="VOLUME CHAT VOCALE">
+	<slider label="Chat vocale" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_controls.xml b/indra/newview/skins/default/xui/it/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_voice_effect.xml b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
old mode 100644
new mode 100755
index c83b11f698a2b4c08a54c04b32ff93fe9ea431a9..f102622f5d1f755c3c297a479e17b3eaf186539f
--- a/indra/newview/skins/default/xui/it/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/it/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Luoghi" name="voice_effects" title="MANIPOLAZIONE VOCE">
+<floater label="Luoghi" name="voice_effects" title="ANTEPRIMA MANIPOLAZIONE VOCE">
 	<string name="no_voice_effect">
 		(Nessuna manipolazione voce)
 	</string>
diff --git a/indra/newview/skins/default/xui/it/floater_voice_volume.xml b/indra/newview/skins/default/xui/it/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..eaeda7597f3c0767c26a9c0ddee50d3bc38944a0
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="VOLUME VOCE">
+	<slider name="volume_slider" tool_tip="Volume voce" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/it/floater_web_content.xml b/indra/newview/skins/default/xui/it/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/it/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_window_size.xml b/indra/newview/skins/default/xui/it/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/floater_world_map.xml b/indra/newview/skins/default/xui/it/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/inspect_avatar.xml b/indra/newview/skins/default/xui/it/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/inspect_group.xml b/indra/newview/skins/default/xui/it/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/inspect_object.xml b/indra/newview/skins/default/xui/it/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/inspect_remote_object.xml b/indra/newview/skins/default/xui/it/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/language_settings.xml b/indra/newview/skins/default/xui/it/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/it/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_other.xml b/indra/newview/skins/default/xui/it/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_attachment_self.xml b/indra/newview/skins/default/xui/it/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_icon.xml b/indra/newview/skins/default/xui/it/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_other.xml b/indra/newview/skins/default/xui/it/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_avatar_self.xml b/indra/newview/skins/default/xui/it/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_cof_attachment.xml b/indra/newview/skins/default/xui/it/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_cof_body_part.xml b/indra/newview/skins/default/xui/it/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_cof_clothing.xml b/indra/newview/skins/default/xui/it/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_cof_gear.xml b/indra/newview/skins/default/xui/it/menu_cof_gear.xml
old mode 100644
new mode 100755
index 10524ba92d09d7823161239269452d87b79ce628..984e4a16112659b3121cc446df5a4224082ddd46
--- a/indra/newview/skins/default/xui/it/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear COF">
+<toggleable_menu name="Gear COF">
 	<menu label="Nuovi abiti" name="COF.Gear.New_Clothes"/>
-	<menu label="Nuove parti del corpo" name="COF.Geear.New_Body_Parts"/>
-</menu>
+	<menu label="Nuove parti del corpo" name="COF.Gear.New_Body_Parts"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_conversation.xml b/indra/newview/skins/default/xui/it/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46ced93f1df1fd8d74c62c25919db92e631bd07f
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Chiudi la conversazione" name="close_conversation"/>
+	<menu_item_call label="Apri conversazione a voce" name="open_voice_conversation"/>
+	<menu_item_call label="Interrompi collegamento a voce" name="disconnect_from_voice"/>
+	<menu_item_call label="Vedi profilo" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Offri teleport" name="offer_teleport"/>
+	<menu_item_call label="Chiamata a voce" name="voice_call"/>
+	<menu_item_call label="Cronologia chat..." name="chat_history"/>
+	<menu_item_call label="Aggiungi amico" name="add_friend"/>
+	<menu_item_call label="Rimuovi amico" name="remove_friend"/>
+	<menu_item_call label="Rimuovi amici" name="remove_friends"/>
+	<menu_item_call label="Invita al gruppo..." name="invite_to_group"/>
+	<menu_item_call label="Zoom avanti" name="zoom_in"/>
+	<menu_item_call label="Mappa" name="map"/>
+	<menu_item_call label="Condividi" name="share"/>
+	<menu_item_call label="Paga" name="pay"/>
+	<menu_item_check label="Blocca voce" name="block_unblock"/>
+	<menu_item_check label="Blocca testo" name="MuteText"/>
+	<menu_item_call label="Profilo del gruppo" name="group_profile"/>
+	<menu_item_call label="Attiva gruppo" name="activate_group"/>
+	<menu_item_call label="Lascia il gruppo" name="leave_group"/>
+	<context_menu label="Opzioni moderatore" name="Moderator Options">
+		<menu_item_check label="Consenti chat di testo" name="AllowTextChat"/>
+		<menu_item_call label="Disattiva audio di questo partecipante" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Riattiva audio di questo partecipante" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Disattiva audio di tutti" name="ModerateVoiceMute"/>
+		<menu_item_call label="Riattiva audio di tutti" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/it/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5686a902eb2c6c47cdddfa771acb0e4541e4aec9
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="IM..." name="IM"/>
+	<menu_item_call label="Chiamata a voce..." name="Call"/>
+	<menu_item_call label="Apro la cronologia delle chat..." name="Chat history"/>
+	<menu_item_call label="Vedi profilo" name="View Profile"/>
+	<menu_item_call label="Offri Teleport" name="teleport"/>
+	<menu_item_call label="Aggiungi come amico" name="add_friend"/>
+	<menu_item_call label="Rimuovi amico" name="remove_friend"/>
+	<menu_item_call label="Invita al gruppo..." name="Invite"/>
+	<menu_item_call label="Mappa" name="Map"/>
+	<menu_item_call label="Condividi" name="Share"/>
+	<menu_item_call label="Paga" name="Pay"/>
+	<menu_item_check label="Blocca/Sblocca" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/it/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..73b05831ef39f17b37f56f9f56cef7f5d87cf4ac
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Ordina in base al nome" name="sort_by_name"/>
+	<menu_item_check label="Ordina in base alla data" name="sort_by_date"/>
+	<menu_item_check label="Ordina con gli amici in alto" name="sort_by_friends"/>
+	<menu_item_call label="Mostra la cronologia delle chat vicine..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_edit.xml b/indra/newview/skins/default/xui/it/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_favorites.xml b/indra/newview/skins/default/xui/it/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_gesture_gear.xml b/indra/newview/skins/default/xui/it/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_group_plus.xml b/indra/newview/skins/default/xui/it/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_hide_navbar.xml b/indra/newview/skins/default/xui/it/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_im_conversation.xml b/indra/newview/skins/default/xui/it/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1621d57e12b5d128a6f4d2d40870168bdb2cbab7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Vedi profilo" name="View Profile"/>
+	<menu_item_call label="Aggiungi come amico" name="Add Friend"/>
+	<menu_item_call label="Rimuovi amico" name="remove_friend"/>
+	<menu_item_call label="Offri teleport" name="offer_teleport"/>
+	<menu_item_call label="Invita al gruppo..." name="invite_to_group"/>
+	<menu_item_call label="Cronologia chat..." name="chat_history"/>
+	<menu_item_call label="Zoom avanti" name="zoom_in"/>
+	<menu_item_call label="Mappa" name="map"/>
+	<menu_item_call label="Condividi" name="Share"/>
+	<menu_item_call label="Paga" name="Pay"/>
+	<menu_item_check label="Blocca voce" name="Block/Unblock"/>
+	<menu_item_check label="Blocca testo" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/it/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..350fbc5c6f658852b213f430fb8320b62d5f824d
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Vista compatta" name="compact_view"/>
+	<menu_item_check label="Vista espansa" name="expanded_view"/>
+	<menu_item_check label="Mostra orario" name="IMShowTime"/>
+	<menu_item_check label="Mostra i nomi nelle conversazioni individuali" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/it/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/it/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/it/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inventory.xml b/indra/newview/skins/default/xui/it/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inventory_add.xml b/indra/newview/skins/default/xui/it/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_land.xml b/indra/newview/skins/default/xui/it/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_landmark.xml b/indra/newview/skins/default/xui/it/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_login.xml b/indra/newview/skins/default/xui/it/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_media_ctrl.xml b/indra/newview/skins/default/xui/it/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_mini_map.xml b/indra/newview/skins/default/xui/it/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/it/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_navbar.xml b/indra/newview/skins/default/xui/it/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_nearby_chat.xml b/indra/newview/skins/default/xui/it/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_notification_well_button.xml b/indra/newview/skins/default/xui/it/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_object.xml b/indra/newview/skins/default/xui/it/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_object_icon.xml b/indra/newview/skins/default/xui/it/menu_object_icon.xml
old mode 100644
new mode 100755
index 0f347b1a909d806e0194e9f6be727561aaa3896f..9623775af46e63a796bae942d1946b51241b1532
--- a/indra/newview/skins/default/xui/it/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/it/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Profilo oggetto..." name="Object Profile"/>
 	<menu_item_call label="Blocca..." name="Block"/>
+	<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
+	<menu_item_call label="Teleport sul luogo dell&apos;oggetto" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/it/menu_outfit_gear.xml b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
old mode 100644
new mode 100755
index 09fc867d7c40a29614b89775482b74114dffc4dc..3ac0c5ce698169615911f2089294b734d6002474
--- a/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/it/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Nuovi capelli" name="New Hair"/>
 		<menu_item_call label="Nuovi occhi" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Apri tutte le cartelle" name="expand"/>
+	<menu_item_call label="Chiudi tutte le cartelle" name="collapse"/>
 	<menu_item_call label="Cambia nome del vestiario" name="rename"/>
 	<menu_item_call label="Elimina vestito" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_outfit_tab.xml b/indra/newview/skins/default/xui/it/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_participant_list.xml b/indra/newview/skins/default/xui/it/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_participant_view.xml b/indra/newview/skins/default/xui/it/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c87cda57bfd887f4e4ff0cc7aa5f34b4e34cb3e2
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Ordina le conversazioni in base al tipo" name="sort_sessions_by_type"/>
+	<menu_item_check label="Ordina le conversazioni in base al nome" name="sort_sessions_by_name"/>
+	<menu_item_check label="Ordina le conversazioni in base alle attività più recenti" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Ordina i partecipanti in base al nome" name="sort_participants_by_name"/>
+	<menu_item_check label="Ordina i partecipanti in base alle attività più recenti" name="sort_participants_by_recent"/>
+	<menu_item_call label="Preferenze chat..." name="chat_preferences"/>
+	<menu_item_call label="Preferenze privacy..." name="privacy_preferences"/>
+	<menu_item_check label="Registro conversazioni..." name="Conversation"/>
+	<menu_item_check label="Traduci chat vicina" name="Translate_chat"/>
+	<menu_item_check label="Impostazioni traduzione..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9955923b258c1a2de4e5bf9ca5070768a1888a8
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="Sblocca" name="unblock"/>
+	<menu_item_call label="Profilo..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/it/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cbcf084b86bc4937de8f05e445c9291740a1ac1b
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Blocca residente per nome..." name="block_resident_by_name"/>
+	<menu_item_call label="Blocca oggetto per nome" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/it/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc80c73ae3099b911043eb17cb663d088cee6d3e
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Ordina in base al nome" name="sort_by_name"/>
+	<menu_item_check label="Ordina in base al tipo" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..972e359cfe567f7c7e60c966a305ae7f54fe8827
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordina in base al nome" name="sort_name"/>
+	<menu_item_check label="Ordina in base allo stato" name="sort_status"/>
+	<menu_item_check label="Mostra le icone delle persone" name="view_icons"/>
+	<menu_item_check label="Mostra le autorizzazioni concesse" name="view_permissions"/>
+	<menu_item_check label="Mostra il registro conversazioni..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_people_groups.xml b/indra/newview/skins/default/xui/it/menu_people_groups.xml
old mode 100644
new mode 100755
index 30a97a1c7246d21a9c79adbe73685245c5ed2827..8ca7537ee0f4eba34aab4b606621bfc7a44b6e5e
--- a/indra/newview/skins/default/xui/it/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Mostra informazioni" name="View Info"/>
 	<menu_item_call label="Chat" name="Chat"/>
-	<menu_item_call label="Chiama" name="Call"/>
+	<menu_item_call label="Chiamata a voce" name="Call"/>
 	<menu_item_call label="Attiva" name="Activate"/>
 	<menu_item_call label="Chiudi" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_groups_view.xml b/indra/newview/skins/default/xui/it/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..56b9abbd3ae9569d1f74dc92f7c90c3ba2eadf4f
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Mostra le icone di gruppo" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby.xml b/indra/newview/skins/default/xui/it/menu_people_nearby.xml
old mode 100644
new mode 100755
index a974bd181df5ab2f43c13f4451cf913c6ad178be..1c09b1cfe25686d03840b42a2a4b3c787b3a96d5
--- a/indra/newview/skins/default/xui/it/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Vedi profilo" name="View Profile"/>
-	<menu_item_call label="Aggiungi amico" name="Add Friend"/>
-	<menu_item_call label="Rimuovi amico" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Chiama" name="Call"/>
-	<menu_item_call label="Mappa" name="Map"/>
-	<menu_item_call label="Condividi" name="Share"/>
-	<menu_item_call label="Paga" name="Pay"/>
-	<menu_item_check label="Blocca/Sblocca" name="Block/Unblock"/>
-	<menu_item_call label="Offri Teleport" name="teleport"/>
+	<menu_item_call label="Vedi profilo" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Offri Teleport" name="offer_teleport"/>
+	<menu_item_call label="Chiamata a voce" name="voice_call"/>
+	<menu_item_call label="Mostra la cronologia delle chat..." name="chat_history"/>
+	<menu_item_call label="Aggiungi come amico" name="add_friend"/>
+	<menu_item_call label="Rimuovi amico" name="remove_friend"/>
+	<menu_item_call label="Invita al gruppo..." name="invite_to_group"/>
+	<menu_item_call label="Zoom avanti" name="zoom_in"/>
+	<menu_item_call label="Mappa" name="map"/>
+	<menu_item_call label="Condividi" name="share"/>
+	<menu_item_call label="Paga" name="pay"/>
+	<menu_item_check label="Blocca/Sblocca" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index e0b9ceb63d8561b1d3ff7710c3525ebae454e7a3..b9ce70167f4df33278a298aadda0851a0ee279f1
--- a/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Aggiungi amici" name="Add Friends"/>
-	<menu_item_call label="Rimuovi amici" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Chiama" name="Call"/>
-	<menu_item_call label="Condividi" name="Share"/>
-	<menu_item_call label="Paga" name="Pay"/>
-	<menu_item_call label="Offri Teleport" name="teleport"/>
+	<menu_item_call label="Aggiungi amici" name="add_friends"/>
+	<menu_item_call label="Rimuovi amici" name="remove_friends"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Chiama" name="call"/>
+	<menu_item_call label="Condividi" name="share"/>
+	<menu_item_call label="Paga" name="pay"/>
+	<menu_item_call label="Offri Teleport" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..223d88fee1c7ac37dd692b355e0d13de74629132
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordina in base a intervenuti recenti" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Ordina in base al nome" name="sort_name"/>
+	<menu_item_check label="Ordina in base alla distanza" name="sort_distance"/>
+	<menu_item_check label="Mostra le icone delle persone" name="view_icons"/>
+	<menu_item_check label="Mostra mappa" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fc6213bd0853b29de4efd1f4f19eb1d7c4bb3903
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Mostra prima i più recenti" name="sort_most"/>
+	<menu_item_check label="Ordina in base al nome" name="sort_name"/>
+	<menu_item_check label="Mostra le icone delle persone" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/it/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_picks.xml b/indra/newview/skins/default/xui/it/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_picks_plus.xml b/indra/newview/skins/default/xui/it/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_place.xml b/indra/newview/skins/default/xui/it/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_place_add_button.xml b/indra/newview/skins/default/xui/it/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/it/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/it/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_profile_overflow.xml b/indra/newview/skins/default/xui/it/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_save_outfit.xml b/indra/newview/skins/default/xui/it/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_script_chiclet.xml b/indra/newview/skins/default/xui/it/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_slurl.xml b/indra/newview/skins/default/xui/it/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/it/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_text_editor.xml b/indra/newview/skins/default/xui/it/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_toolbars.xml b/indra/newview/skins/default/xui/it/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_topinfobar.xml b/indra/newview/skins/default/xui/it/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_agent.xml b/indra/newview/skins/default/xui/it/menu_url_agent.xml
old mode 100644
new mode 100755
index 37755d5749c8a98290c90ca928a43e0062ef4d63..abfbab35a34bd41855caed60ff639a58f4550901
--- a/indra/newview/skins/default/xui/it/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Mostra profilo residente" name="show_agent"/>
+	<menu_item_call label="Vedi profilo" name="show_agent"/>
+	<menu_item_call label="Manda IM..." name="send_im"/>
+	<menu_item_call label="Aggiungi come amico..." name="add_friend"/>
 	<menu_item_call label="Copia nome negli Appunti" name="url_copy_label"/>
 	<menu_item_call label="Copia SLurl negli Appunti" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/it/menu_url_group.xml b/indra/newview/skins/default/xui/it/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_http.xml b/indra/newview/skins/default/xui/it/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_inventory.xml b/indra/newview/skins/default/xui/it/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_map.xml b/indra/newview/skins/default/xui/it/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_objectim.xml b/indra/newview/skins/default/xui/it/menu_url_objectim.xml
old mode 100644
new mode 100755
index 763e65f17c0bb9e0bae5c84f7b4cae7c0db08aac..8456d14b63e485190c05424fc1d47814487d08a3
--- a/indra/newview/skins/default/xui/it/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/it/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Mostra informazioni oggetto" name="show_object"/>
+	<menu_item_call label="Profilo oggetto..." name="show_object"/>
 	<menu_item_call label="Mostra sulla mappa" name="show_on_map"/>
 	<menu_item_call label="Teleport sul luogo dell&apos;oggetto" name="teleport_to_object"/>
 	<menu_item_call label="Copia nome oggetto negli Appunti" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/it/menu_url_parcel.xml b/indra/newview/skins/default/xui/it/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_slapp.xml b/indra/newview/skins/default/xui/it/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_slurl.xml b/indra/newview/skins/default/xui/it/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_url_teleport.xml b/indra/newview/skins/default/xui/it/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_viewer.xml b/indra/newview/skins/default/xui/it/menu_viewer.xml
old mode 100644
new mode 100755
index 547c5a9b73ced3dcef6db6eab555a3b71f401996..2b7bc71df799080eb96c48bc60034595e5d92267
--- a/indra/newview/skins/default/xui/it/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/it/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Ferma animazione" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Cammina / corri / vola..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Stato" name="Status">
-			<menu_item_call label="Assente" name="Set Away"/>
-			<menu_item_call label="Non disponibile" name="Set Busy"/>
-		</menu>
+		<menu label="Stato" name="Status"/>
 		<menu_item_call label="Acquista L$..." name="Buy and Sell L$"/>
 		<menu_item_call label="Casella venditore in uscita..." name="MerchantOutbox"/>
 		<menu_item_call label="Dashboard dell&apos;account..." name="Manage My Account">
@@ -32,14 +29,18 @@
 		<menu_item_call label="Esci da [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Comunica" name="Communicate">
-		<menu_item_check label="Chat..." name="Nearby Chat"/>
+		<menu_item_check label="Conversazioni..." name="Conversations"/>
+		<menu_item_check label="Chat nei dintorni..." name="Nearby Chat"/>
 		<menu_item_check label="Parla" name="Speak"/>
-		<menu_item_check label="Impostazioni voce..." name="Nearby Voice"/>
-		<menu_item_check label="Manipolazione voce..." name="ShowVoice"/>
+		<menu label="Manipolazione voce" name="VoiceMorphing">
+			<menu_item_check label="Nessuna manipolazione voce" name="NoVoiceMorphing"/>
+			<menu_item_check label="Anteprima..." name="Preview"/>
+			<menu_item_call label="Abbonati..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Gesture..." name="Gestures"/>
-		<menu_item_call label="Amici" name="My Friends"/>
-		<menu_item_call label="Gruppi" name="My Groups"/>
-		<menu_item_call label="Persone vicine" name="Active Speakers"/>
+		<menu_item_check label="Amici" name="My Friends"/>
+		<menu_item_check label="Gruppi" name="My Groups"/>
+		<menu_item_check label="Persone vicine" name="Active Speakers"/>
 		<menu_item_call label="Blocca lista" name="Block List"/>
 	</menu>
 	<menu label="Mondo" name="World">
@@ -115,7 +116,6 @@
 			<menu_item_call label="Acquista" name="Menu Object Buy"/>
 			<menu_item_call label="Prendi" name="Menu Object Take"/>
 			<menu_item_call label="Prendi copia" name="Take Copy"/>
-			<menu_item_call label="Salva nell&apos;inventario" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Salva nei contenuti oggetto" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="Restituisci oggetto" name="Return Object back to Owner"/>
 		</menu>
@@ -130,6 +130,7 @@
 			<menu_item_call label="Set collegati..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="Personaggi..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="Visualizza / test..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="Rebake regione" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="Opzioni" name="Options">
 			<menu_item_check label="Mostra autorizzazioni avanzate" name="DebugPermissions"/>
@@ -159,6 +160,13 @@
 	<menu label="Aiuto" name="Help">
 		<menu_item_call label="Istruzioni..." name="How To"/>
 		<menu_item_call label="Aiuto di [SECOND_LIFE]" name="Second Life Help"/>
+		<menu_item_call label="Guida dell&apos;utente" name="User’s guide"/>
+		<menu_item_call label="Base di conoscenza" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="Forum della comunità" name="Community Forums"/>
+		<menu_item_call label="Portale assistenza" name="Support portal"/>
+		<menu_item_call label="[SECOND_LIFE] Notizie" name="Second Life News"/>
+		<menu_item_call label="[SECOND_LIFE] Blog" name="Second Life Blogs"/>
 		<menu_item_call label="Segnala abuso" name="Report Abuse"/>
 		<menu_item_call label="Segnala bug" name="Report Bug"/>
 		<menu_item_call label="Informazioni su [APP_NAME]" name="About Second Life"/>
@@ -286,7 +294,7 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Assi" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Luci e ombre" name="Lighting and Shadows"/>
+			<menu_item_check label="Luci e ombre" name="Advanced Lighting Model"/>
 			<menu_item_check label="Ombra dal sole, dalla luna e dai proiettori" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO e ombre fluide" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Maschera alfa automatica (differita)" name="Automatic Alpha Masks (deferred)"/>
@@ -336,9 +344,14 @@
 				<menu_item_call label="Alterna la geometria dei personaggi" name="Toggle Character Geometry"/>
 				<menu_item_check label="Consenti selezione avatar" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="Velocità animazione" name="Animation Speed">
+				<menu_item_call label="Accelera tutte le animazioni del 10%" name="All Animations 10 Faster"/>
+				<menu_item_call label="Rallenta tutte le animazioni del 10%" name="All Animations 10 Slower"/>
+				<menu_item_call label="Ripristina la velocità di tutte le animazioni" name="Reset All Animation Speed"/>
+				<menu_item_check label="Animazioni lente" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="Forza i parametri sui valori predefiniti" name="Force Params to Default"/>
 			<menu_item_check label="Informazioni sull&apos;animazione" name="Animation Info"/>
-			<menu_item_check label="Animazioni lente" name="Slow Motion Animations"/>
 			<menu_item_check label="Disabilita livello di dettaglio" name="Disable LOD"/>
 			<menu_item_check label="Mostra schemi collisione" name="Show Collision Skeleton"/>
 			<menu_item_check label="Mostra bersaglio" name="Display Agent Target"/>
diff --git a/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/it/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_wearing_gear.xml b/indra/newview/skins/default/xui/it/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/menu_wearing_tab.xml b/indra/newview/skins/default/xui/it/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/mime_types.xml b/indra/newview/skins/default/xui/it/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/mime_types_linux.xml b/indra/newview/skins/default/xui/it/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/mime_types_mac.xml b/indra/newview/skins/default/xui/it/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/notifications.xml b/indra/newview/skins/default/xui/it/notifications.xml
old mode 100644
new mode 100755
index d5fdde4e7de8452e44c41e6d6f35116dfbedac49..8adbebb62acf4a72b8bd0616820cc6e4597283b0
--- a/indra/newview/skins/default/xui/it/notifications.xml
+++ b/indra/newview/skins/default/xui/it/notifications.xml
@@ -513,6 +513,24 @@ Visitare [_URL] per ulteriori informazioni?
 		</url>
 		<usetemplate ignoretext="Driver grafica obsoleto" name="okcancelignore" notext="No" yestext="Sì"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		È probabile che ci sia un driver aggiornato per il processore grafico.  L&apos;aggiornamento dei driver della grafica può migliorare le prestazioni in maniera significativa.
+
+    Visitare [_URL] per cercare un aggiornamento del driver?
+		<url name="url">
+			http://support.amd.com/it/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Driver grafica obsoleto" name="okcancelignore" notext="No" yestext="Sì"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		È probabile che ci sia un driver aggiornato per il processore grafico.  L&apos;aggiornamento dei driver della grafica può migliorare le prestazioni in maniera significativa.
+
+    Visitare [_URL] per cercare un aggiornamento del driver?
+		<url name="url">
+			http://www.nvidia.it/Download/index.aspx?lang=it
+		</url>
+		<usetemplate ignoretext="Driver grafica obsoleto" name="okcancelignore" notext="No" yestext="Sì"/>
+	</notification>
 	<notification name="UnknownGPU">
 		Il tuo sistema utilizza una scheda grafica che [APP_NAME] non riconosce.
 Questo succede spesso con un nuovo hardware che non è stato ancora testato con [APP_NAME].  Probabilmente tutto andrà bene, ma devi riconfigurare le tue impostazioni grafiche.
@@ -1548,10 +1566,13 @@ Vuoi cancellare quell&apos;elemento?
 		Impossibile offrire l&apos;amicizia in questo momento. Riprova fra poco.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		È stata impostata la modalità Non disponibile.
-La chat e gli IM verranno nascosti. Gli IM riceveranno la tua risposta di Non disponibile. Tutte le offerte di teleport verranno rifiutate. Tutte le offerte di Inventario andranno nel Cestino.
-		<usetemplate ignoretext="Cambio il mio stato sulla modalità Non disponibile" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		Non disturbare è attivo.  Non riceverai la notifica delle comunicazioni in arrivo.
+
+- Gli altri residenti riceveranno la tua risposta Non disturbare (impostata in Preferenze &gt; Generali).
+- Le offerte di teleport verranno rifiutate.
+- Le chiamate voce verranno rifiutate.
+		<usetemplate ignoretext="Io cambio il mio stato alla modalità Non disturbare." name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Hai raggiunto il numero massimo di gruppi. Per favore abbandona almeno un gruppo prima di aderire a questo, oppure declina l&apos;offerta.
@@ -2039,6 +2060,10 @@ Trasferisci gli elementi nell&apos;inventario?
 		Vai al [http://secondlife.com/account/ Dashboard] per vedere la cronologia del tuo account?
 		<usetemplate ignoretext="Lancia il browser per vedere la cronologia del mio account" name="okcancelignore" notext="Annulla" yestext="Vai alla pagina"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		Quando aggiungi una persona a una conversazione esistente, viene creata una nuova conversazione.  Tutti i partecipanti riceveranno notifiche per la nuova conversazione.
+		<usetemplate ignoretext="Conferma l&apos;aggiunta dei partecipanti alla chat" name="okcancelignore" notext="Annulla" yestext="Ok"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		Confermi di voler uscire?
 		<usetemplate ignoretext="Conferma prima di uscire" name="okcancelignore" notext="Non uscire" yestext="Esci"/>
@@ -2113,14 +2138,14 @@ Vuoi sostituirlo con l&apos;oggetto selezionato?
 			<button ignore="Never Replace" name="No" text="Annulla"/>
 		</form>
 	</notification>
-	<notification label="Avviso di &apos;Occupato&apos;" name="BusyModePay">
-		Sei in modalità &apos;Occupato&apos;, ciò significa che non riceverai ciò che attendi per questo pagamento.
+	<notification label="Avviso modalità Non disturbare" name="DoNotDisturbModePay">
+		Hai attivato la modalità Non disturbare. Non riceverai alcun oggetto offerto in cambio di questo pagamento.
 
-Desideri abbandonare la modalità &apos;Occupato&apos; prima di completare questa transazione?
+Vuoi disattivare la modalità Non disturbare prima di completare questa transazione?
 		<form name="form">
-			<ignore name="ignore" save_option="true" text="Sto per pagare una persona o un oggetto mentro sono in modalià Non disponibile"/>
-			<button ignore="Always leave Busy Mode" name="Yes" text="OK"/>
-			<button ignore="Never leave Busy Mode" name="No" text="Abbandona"/>
+			<ignore name="ignore" text="Sto per pagare una persona o un oggetto mentre sono in modalità Non disturbare"/>
+			<button ignore="Lascia sempre la modalità Non disturbare" name="Yes" text="OK"/>
+			<button ignore="Non lasciare mai la modalità Non disturbare" name="No" text="Annulla"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2255,11 +2280,8 @@ Inseriscilo in una pagina web per dare ad altri un accesso facile a questa ubica
 	<notification name="GroupNotice">
 		Oggetto: [SUBJECT], Messaggio: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; è online
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; è offline
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; è [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Anche se sei molto simpatico, non puoi aggiungere te stesso all&apos;elenco degli amici.
@@ -2487,13 +2509,6 @@ Qui non puoi volare.
 	<notification name="DynamicPathfindingDisabled">
 		Il pathfinding dinamico non è attivato in questa regione.  Gli oggetti scriptati che usano chiamate LSL di pathfinding potrebbero non funzionare come previsto in questa regione.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		Se modifichi alcuni oggetti in questa regione, ciò potrebbe causare il comportamento errato di altri oggetti in movimento.  Per fare in modo che gli oggetti in movimento si comportino correttamente, fai clic sul pulsante &quot;Rebake regione&quot;.  Per maggiori informazioni, seleziona la guida
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Guida" ignoretext="Se modifichi alcuni oggetti in questa regione, ciò potrebbe causare il comportamento errato di altri oggetti in movimento." name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Si è verificato un errore.  Potrebbe trattarsi di un problema di rete o del server, oppure potresti non avere le autorizzazioni necessarie per la costruzione.  A volte il problema viene risolto uscendo ed eseguendo nuovamente l&apos;accesso.
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2754,9 +2769,9 @@ OK?
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		Attenzione: L&apos;oggetto &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; ha richiesto accesso completo al tuo account in Dollari Linden. Se consenti l&apos;accesso, potrà rimuovere fondi dal tuo account in qalunque momento e anche svuotare completamente l&apos;account, per un periodo illimitato e senza ulteriori avvisi.
+		Avviso: L&apos;oggetto &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; ha richiesto accesso completo al tuo account in Dollari Linden. Se consenti l&apos;accesso, potrà rimuovere fondi dal tuo account in qualunque momento e anche svuotare completamente l&apos;account, per un periodo illimitato e senza ulteriori avvisi.
   
-Raramente questo tipo di richiesta è legittima. Non consentire l&apos;accesso se non comprendi perfettamente il motivo per cui desidera accedere al tuo account.
+Non consentire l&apos;accesso se non comprendi perfettamente il motivo per cui desidera accedere al tuo account.
 		<form name="form">
 			<button name="Grant" text="Consenti accesso totale"/>
 			<button name="Deny" text="Nega"/>
@@ -3338,4 +3353,633 @@ Tentativo annullato.
 		Stai per cancellare [NUM_ITEMS] elementi.  Vuoi continuare?
 		<usetemplate ignoretext="Sei sicuro di volere eliminare più oggetti?" name="okcancelignore" notext="No" yestext="Sì"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] ti ha congelato. Non ti puoi muovere o interagire con il mondo.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] ti ha congelato per [AV_FREEZE_TIME] secondi. Non ti puoi muovere o interagire con il mondo.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Avatar congelato.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] ti ha scongelato.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Avatar scongelato.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		La congelazione non ha avuto successo perché non hai le autorizzazioni dell&apos;amministratore per quel lotto.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		Non sei più congelato, puoi continuare.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Non puoi congelare quell&apos;utente.
+	</notification>
+	<notification name="NowOwnObject">
+		Sei ora il proprietario dell&apos;oggetto [OBJECT_NAME]
+	</notification>
+	<notification name="CantRezOnLand">
+		Non puoi rezzare l&apos;oggetto a [OBJECT_POS] perché non è consentito dal proprietario del terreno.  Usa lo strumento terreno per visualizzare a chi appartiene il terreno.
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		Oggetto non razzato perché ci sono troppe richieste.
+	</notification>
+	<notification name="SitFailCantMove">
+		Non puoi sederti perché al momento non puoi muoverti.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		Non puoi sederti perché non ti è consentito entrare in quel terreno.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Proba ad avvicinarti.  Non puoi sederti su un oggetto perché
+non è nella stessa regione in cui ti trovi.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		Impossibile creare il nuovo oggetto. La regione è piena.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Il posizionamento dell&apos;oggetto nella posizione specificata non è riuscito.  Riprova.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		Non puoi creare alberi ed erba su terreni che non sono di tua proprietà.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		Copia non riuscita perché non hai l&apos;autorizzazione necessaria per copiare l&apos;oggetto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		La copia non è riuscita perché &apos;[OBJ_NAME]&apos; non può essere trasferito a te.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		La copia non è riuscita perché &apos;[OBJ_NAME]&apos; contribuisce al navmesh.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Duplicato senza oggetto principale selezionato.
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		Impossibile duplicare gli oggetti perché la regione è piena.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		Impossibile duplicare gli oggetti - Impossibile trovare i lotti in cui si trovano.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		Impossibile creare l&apos;oggetto perché 
+il lotto è pieno.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Tentativo di rezzare un oggetto non riuscito.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		Impossibile creare un oggetto che ha causato problemi in questa regione.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		L&apos;oggetto dell&apos;inventario è stato aggiunto alla blacklist.
+	</notification>
+	<notification name="NoCanRezObjects">
+		Al momento non ti è consentito creare oggetti.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Ricerca terreno bloccata.
+Hai eseguito troppe ricerche terreno in un breve tempo.
+Riprova tra un minuto.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		Risorse di script non sufficienti per collegare l&apos;oggetto.
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Sei deceduto e sei stato teleportato alla tua posizione iniziale
+	</notification>
+	<notification name="EjectComingSoon">
+		Non sei più benvenuto qui e hai [EJECT_TIME] secondi per andartene.
+	</notification>
+	<notification name="NoEnterServerFull">
+		Non puoi entrare in questa regione perché 
+il server è pieno.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Opzione Salva nell&apos;inventario disattivata
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		Impossibile salvare &apos;[OBJ_NAME]&apos; nei contenuti dell&apos;oggetto perché l&apos;oggetto da cui è stato razzato non esiste più.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		Impossibile salvare &apos;[OBJ_NAME]&apos; nei contenuti dell&apos;oggetto perché non hai l&apos;autorizzazione necessaria per modificare l&apos;oggetto &apos;[DEST_NAME]&apos;.
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		Impossibile riportare &apos;[OBJ_NAME]&apos; nell&apos;inventario -- questa operazione è stata disattivata.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		Non puoi copiare l&apos;elemento selezionato perché non hai l&apos;autorizzazione necessaria per copiare l&apos;oggetto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		Non puoi copiare la selezione perché l&apos;oggetto &apos;[OBJ_NAME]&apos; non può essere trasferito.
+	</notification>
+	<notification name="NoTransNoCopy">
+		Non puoi copiare la selezione perché l&apos;oggetto &apos;[OBJ_NAME]&apos; non può essere trasferito.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		La rimozione dell&apos;oggetto &apos;[OBJ_NAME]&apos; dal simulatore non è consentita dal sistema delle autorizzazioni.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		Non puoi salvare l&apos;elemento selezionato perché non hai l&apos;autorizzazione necessaria per modificare l&apos;oggetto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		Non puoi salvare la selezione perché l&apos;oggetto &apos;[OBJ_NAME]&apos; non può essere copiato.
+	</notification>
+	<notification name="NoModNoTaking">
+		Non puoi prendere l&apos;elemento selezionato perché non hai l&apos;autorizzazione necessaria per modificare l&apos;oggetto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="RezDestInternalError">
+		Errore interno: Tipo di destinazione sconosciuto.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		Cancellazione non riuscita perché l&apos;oggetto non è stato trovato.
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Non puoi espellere quell&apos;utente.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Questa regione non ti consente di impostare qui la tua posizione iniziale.
+	</notification>
+	<notification name="HomeLocationLimits">
+		Puoi impostare la tua posizione iniziale nel tuo terreno o in un Infohub sulla terraferma.
+	</notification>
+	<notification name="HomePositionSet">
+		Posizione di base impostata.
+	</notification>
+	<notification name="AvatarEjected">
+		Avatar espulso.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		L&apos;espulsione non ha avuto successo perché non hai l&apos;autorizzazione dell&apos;amministratore del lotto.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		Impossibile muovere l&apos;oggetto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] nella regione [REGION_NAME] perché il lotto è pieno.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		Impossibile muovere l&apos;oggetto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] nella regione [REGION_NAME] perché i tuoi oggetti non sono ammessi su questo lotto.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		Impossibile muovere l&apos;oggetto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] nella regione [REGION_NAME] perché non ci sono risorse sufficienti per l&apos;oggetto su questo lotto.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		Impossibile muovere l&apos;oggetto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] nella regione [REGION_NAME] perché nell&apos;altra regione è in esecuzione una versione precedente che non consente la ricezione di questo oggetto attraverso i confini tra regioni.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		Impossibile muovere l&apos;oggetto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] nella regione [REGION_NAME] perché non puoi modificare il navmesh attraverso il confine tra regioni.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		Impossibile muovere l&apos;oggetto &apos;[OBJECT_NAME]&apos; a
+[OBJ_POSITION] nella regione [REGION_NAME] per un motivo sconosciuto. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		Non hai l&apos;autorizzazione necessaria per modificare questa immagine
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		Non è possibile attivare la fisica per un oggetto che contribuisce al navmesh.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		Impossibile attivare la fisica per oggetti keyframe.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		Impossibile attivare la fisica per l&apos;oggetto -- risorse di terreno insufficienti.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		Impossibile attivare la fisica per un oggetto con un costo delle risorse della fisica maggiore di [MAX_OBJECTS]
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Questo oggetto non può avere un pezzo concavo perché è un oggetto fantasma e contribuisce al navmesh.
+	</notification>
+	<notification name="UnableAddItem">
+		Aggiunta elemento non riuscita
+	</notification>
+	<notification name="UnableEditItem">
+		Impossibile modificare questo elemento.
+	</notification>
+	<notification name="NoPermToEdit">
+		Non sei autorizzato a modificare questo elemento.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		Non ti è permesso copiare quell&apos;inventario.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		Impossibile salvare i contenuti dell&apos;oggetto: L&apos;elemento non esiste più.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		Impossibile salvare i contenuti dell&apos;oggetto: Nell&apos;inventario esiste già un elemento con quel nome.
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		Impossibile salvare i contenuti dell&apos;oggetto: Verrebbero modificate le autorizzazioni per il collegamento.
+	</notification>
+	<notification name="TooManyScripts">
+		Troppi script.
+	</notification>
+	<notification name="UnableAddScript">
+		Aggiunta script non riuscita.
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		Il server degli asset non ha inviato una risposta entro il tempo massimo.  Oggetto restituito al sim.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		In questa regione non sono attivate le forme per la fisica.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		Non puoi modificare il navmesh attraverso il confine tra le regioni.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		Impossibile impostare le proprietà della fisica per quel tipo di oggetto.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		impossibile impostare un prim principale senza forma.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		In questa regione non sono attivati i materiali per la fisica.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		I materiali per la fisica possono essere modificati solo i prim principali.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		L&apos;impostazione dei materiali per la fisica nei caratteri non è ancora supportata.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Almeno una delle proprietà dei materiali per la fisica non è valida.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		Non puoi alterare il tipo di punto di un oggetto con reticolo
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		Non puoi alterare la forma di un oggetto con reticolo
+	</notification>
+	<notification name="FullRegionCantEnter">
+		Non puoi entrare in questa regione perché è piena.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Collegamento non riuscito -- i proprietari non corrispondono
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Collegamento non riuscito -- non puoi modificare il navmesh attraverso il confine tra le regioni.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Collegamento non riuscito perché non hai le autorizzazioni necessarie per la modifica.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Collegamento non riuscito -- troppe primitive.
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Collegamento non riuscito -- impossibile collegare elementi senza copia ed elementi senza trasferimento
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Collegamento non riuscito -- niente di collegabile.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Collegamento non riuscito -- troppi personaggi con pathfinding
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Collegamento non riuscito -- risorse terreno non sufficienti
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		L&apos;oggetto usa troppe risorse per la fisica -- le sue dinamiche sono state disattivate.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		Sei stato teleportato nella posizione iniziale dall&apos;oggetto &apos;[OBJECT_NAME]&apos; del lotto &apos;[PARCEL_NAME]&apos;
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		Sei stato teleportato nella tua posizione iniziale dall&apos;oggetto &apos;[OBJECT_NAME]&apos;
+	</notification>
+	<notification name="TeleportedByAttachment">
+		Sei stato teletrasportato da un elemento collegato a [ITEM_ID]
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		Sei stato teleportato dall&apos;oggetto &apos;[OBJECT_NAME]&apos; sul lotto &apos;[PARCEL_NAME]&apos;
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Sei stato teleportato dall&apos;oggetto &apos;[OBJECT_NAME]&apos; di proprietà di [OWNER_ID]
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Sei stato teleportato dall&apos;oggetto &apos;[OBJECT_NAME]&apos; di proprietà di un utente sconosciuto.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		Impossibile creare l&apos;oggetto richiesto. La regione è piena.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		Non puoi collegare più oggetti a un singolo luogo.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Non puoi creare oggetti multipli in questa posizione.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		Impossibile creare l&apos;oggetto richiesto. L&apos;oggetto non è presente nel database.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		Impossibile creare l&apos;oggetto richiesto. Tempo scaduto per la richiesta. Riprova.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		Impossibile creare l&apos;oggetto richiesto. Riprova.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Rezzing non riuscito. Il caricamento dell&apos;oggetto richiesto è durato troppo a lungo.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Il posizionamento dell&apos;oggetto nella posizione specificata non è riuscito.  Riprova.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		Non puoi creare piante su questo terreno.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		Impossibile ripristinare l&apos;oggetto. Nessuna posizione trovata nel mondo virtuale.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		Impossibile rezzare l&apos;oggetto perché i dati del reticolo non sono validi.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		Impossibile rezzare l&apos;oggetto perché ci sono già troppi script in questa regione.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Le tue autorizzazioni di accesso non ti permettono di creare oggetti in quella posizione.
+	</notification>
+	<notification name="CantCreateObject">
+		Al momento non ti è consentito creare oggetti.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Parametri oggetto non validi
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Le tue autorizzazioni di accesso non ti permettono di duplicare oggetti in questa posizione.
+	</notification>
+	<notification name="CantChangeShape">
+		Non ti è consentito modificare questa forma.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Le tue autorizzazioni di accesso non ti permettono di richiedere oggetti in questa posizione.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		Assegnazione non riuscita perché non hai l&apos;autorizzazione necessaria per assegnare oggetti per il tuo gruppo.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Le tue autorizzazioni di accesso non ti permettono di acquistare oggetti in questa posizione.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		Impossibile collegare l&apos;oggetto perché un avatar è seduto sopra.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		Alberi ed erba non possono essere indossati come collegati.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		Impossibile collegare oggetti di proprietà di un gruppo.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		Non puoi collegare oggetti che non sono di tua proprietà.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		Impossibile collegare oggetti che contribuiscono a navmesh.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		L&apos;oggetto non può essere collegato perché non sei autorizzato a muoverlo.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		Risorse di script non sufficienti per collegare l&apos;oggetto.
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		Non puoi lasciare oggetti qui, prova la zona Prova gratuita.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		Non puoi lasciare elementi collegati con reticolo. Separa nell&apos;inventario e quindi rezza nel mondo virtuale.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		Impossibile rimuovere l&apos;elemento collegato: non hai l&apos;autorizzazione necessaria per rimuoverlo qui.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		Impossibile rimuovere l&apos;elemento collegato: risorse terreno disponibili non sufficienti.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Impossibile rimuovere gli elementi collegati: risorse disponibili non sufficienti.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		Non puoi lasciare l&apos;oggetto qui.  Il lotto è pieno.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		Non puoi toccare/afferrare questo oggetto perché sei stato bandito dal lotto di terreno.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Limita i parametri per la cancellazione.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		Impossibile caricare l&apos;asset.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		Utente da teleportare alla posizione iniziale non trovato
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		richiesta superpoteri non riuscita
+	</notification>
+	<notification name="GenericRequestFailed">
+		richiesta generica non riuscita
+	</notification>
+	<notification name="CantUploadPostcard">
+		Impossibile caricare la cartolina.  Riprova più tardi.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		I dettagli dell&apos;inventario per la notifica di gruppo non sono stati trovati.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		Impossibile inviare la notifica di gruppo -- non consentita.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		Impossibile inviare la notifica di gruppo -- impossibile costruire l&apos;inventario.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		Impossibile analizzare l&apos;inventario nella notifica.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Caricamento terreno non riuscito.
+	</notification>
+	<notification name="TerrainFileWritten">
+		File terreno scritto.
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		File terreno generato, avvio del download...
+	</notification>
+	<notification name="TerrainBaked">
+		Baking terreno completata.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Sono stati disattivati solo i primi 10 oggetti. Se necessario, aggiorna e seleziona nuovamente.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Devi aggiornare il Viewer per poter acquistare questo lotto.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Impossibile acquistare, questo lotto non è in vendita.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		Impossibile acquistare. Il prezzo o l&apos;area del terreno sono stati cambiati.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		Non sei l&apos;acquirente autorizzato di questo lotto.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		Non puoi acquistare questo lotto perché è in attesa di autorizzazione all&apos;acquisto
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		Non puoi costruire oggetti qui perché si supererebbe il limite per il lotto.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		hai selezionato terreni con proprietari diversi. Seleziona un&apos;area più piccola e riprova.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		Non sono stati selezionati abbastanza lotti affittati da collegare.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		Terreno non divisibile.\nHai selezionato più di un lotto.\nProva a selezionare una quantità di terreno più piccola.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		impossibile suddividere il terreno.\nimpossibile trovare il lotto.\nInvia una segnalazione con Aiuto -&gt; Segnala bug...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		Impossibile suddividere il terreno. È stato selezionato l&apos;intero lotto.\nProva a selezionare un pezzo di terreno più piccolo.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		Il terreno è stato diviso.
+	</notification>
+	<notification name="PassPurchased">
+		Hai acquistato un pass.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		Nella regione non sono permessi gli annunci pubblicitari.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Il tuo pass per questo terreno è quasi scaduto.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Nessuna superficie adatta a sedersi, prova un altro luogo.
+	</notification>
+	<notification name="CantSitNoRoom">
+		Non c&apos;è posto per sedersi, prova un altro luogo.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		La richiesta dell&apos;oggetto non ha avuto successo perché non hai l&apos;autorizzazione necessaria.
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		La richiesta dell&apos;oggetto non ha avuto successo perché non hai L$ sufficienti.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		Non puoi assegnare terreno di proprietà di un gruppo.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		L&apos;acquisto dell&apos;oggetto non ha avuto successo perché non hai L$ sufficienti.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		L&apos;acquisto dell&apos;inventario non ha avuto successo perché non hai L$ sufficienti.
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		Non hai abbastanza L$ per acquistare un pass per questo terreno.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		Al momento non puoi acquistare un pass.  Riprova più tardi.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		Impossibile creare l&apos;oggetto perché il lotto è pieno.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Il posizionamento dell&apos;oggetto nella posizione specificata non è riuscito.  Riprova.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		Impossibile creare il punto di riferimento per l&apos;evento.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		I tuoi superpoteri hanno interrotto la congelazione.
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Richiesta di poteri speciali non riuscita. La richiesta è stata registrata.
+	</notification>
+	<notification name="ExpireExplanation">
+		Al momento il sistema non è in grado di elaborare la tua richiesta. Tempo scaduto per la richiesta.
+	</notification>
+	<notification name="DieExplanation">
+		Il sistema non è in grado di elaborare la tua richiesta.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		Denaro insufficiente per creare una primitiva.
+	</notification>
+	<notification name="RezObjectFailure">
+		Denaro insufficiente per creare un oggetto.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Posizione iniziale ripristinata perché non era valida.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		Al momento non puoi invitare nessuno alla tua posizione perché la regione è piena. Riprova più tardi.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Questa regione non ti consente di impostare qui la tua posizione iniziale.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		Puoi impostare la tua posizione iniziale nel tuo terreno o in un Infohub sulla terraferma.
+	</notification>
+	<notification name="SetHomePosition">
+		Posizione di base impostata.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		Impossibile derazzare l&apos;oggetto a causa di un errore nell&apos;inventario.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		Impossibile creare l&apos;inventario richiesto.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		Impossibile creare la cartella dell&apos;inventario richiesta.
+	</notification>
+	<notification name="CantCreateInventory">
+		Impossibile creare quell&apos;inventario.
+	</notification>
+	<notification name="CantCreateLandmark">
+		Impossibile creare il punto di riferimento.
+	</notification>
+	<notification name="CantCreateOutfit">
+		Il vestiario non può essere creato in questo momento. Riprova tra un minuto.
+	</notification>
+	<notification name="InventoryNotForSale">
+		L&apos;inventario non è in vendita.
+	</notification>
+	<notification name="CantFindInvItem">
+		Impossibile trovare l&apos;elemento nell&apos;inventario.
+	</notification>
+	<notification name="CantFindObject">
+		Impossibile trovare l&apos;oggetto.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		Il trasferimento di denaro agli oggetti è attualmente disattivato in questa regione.
+	</notification>
+	<notification name="CantPayNoAgent">
+		Non si capisce chi deve essere pagato.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		Non puoi dare L$ a oggetti pubblici.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Creazione inventario non riuscito per un oggetto nel mondo virtuale.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Un errore interno ha impedito l&apos;aggiornamento del Viewer.  Il saldo in L$ o i lotti posseduti mostrati nel Viewer potrebbero non corrispondere ai valori correnti sui server.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		Non puoi creare prim grandi che intersecano altri giocatori.  Riprova quando gli altri giocatori si sono spostati.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Verranno cancellati i registri delle conversazioni precedenti e tutti gli eventuali backup di quel file.
+		<usetemplate ignoretext="Conferma prima di cancellare il registro delle conversazioni precedenti." name="okcancelignore" notext="Annulla" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Verranno cancellate le trascrizioni di tutte le conversazioni precedenti. L&apos;elenco delle conversazioni passate non cambierà. Tutti i file con i suffissi .txt e txt.backup nella cartella [FOLDER] verranno cancellati.
+		<usetemplate ignoretext="Conferma prima di cancellare le trascrizioni." name="okcancelignore" notext="Annulla" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		Impossibile spostare i file. Il percorso precedente è stato ripristinato.
+		<usetemplate ignoretext="Impossibile spostare i file. Il percorso precedente è stato ripristinato." name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/it/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/it/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_active_object_row.xml b/indra/newview/skins/default/xui/it/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/it/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index ede19b9e5acd23efa2609650dc8471ea16fc9217..cfceb5b9822270ec4e3656ad5437492d0389a982
--- a/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/it/panel_avatar_list_item.xml
@@ -26,5 +26,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Questo amico può modificare, cancellare o prendere i tuoi oggetti"/>
 	<icon name="permission_map_icon" tool_tip="Questo amico può identificarti sulla mappa"/>
 	<icon name="permission_online_icon" tool_tip="Questo amico può vedere se sei online"/>
+	<button name="info_btn" tool_tip="Maggiori informazioni"/>
 	<button name="profile_btn" tool_tip="Vedi profilo"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 610f561a65a616773e7c463c910d7689e8ad5f02..7ca2d3b57b1692bd20eb13694e665f3fa296e724
--- a/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/it/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		Blocca lista
-	</text>
-	<scroll_list name="blocked" tool_tip="Lista degli attuali residenti bloccati"/>
-	<button label="Blocca il residente..." label_selected="Blocca il residente..." name="Block resident..." tool_tip="Scegli un residente da bloccare"/>
-	<button label="Blocca l&apos;oggetto per nome..." label_selected="Blocca l&apos;oggetto per nome..." name="Block object by name..."/>
-	<button label="Sblocca" label_selected="Sblocca" name="Unblock" tool_tip="Rimuovi un residente o un oggetto dalla lista bloccati"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Filtro" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Azioni sulla persona o oggetto selezionato"/>
+		<menu_button name="view_btn" tool_tip="Opzioni Ordina"/>
+		<menu_button name="plus_btn" tool_tip="Seleziona un residente o un oggetto da bloccare"/>
+		<button name="unblock_btn" tool_tip="Rimuovi un residente o un oggetto dalla lista bloccati"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Lista degli attuali residenti bloccati"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/it/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/it/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/it/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/it/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_classified_info.xml b/indra/newview/skins/default/xui/it/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/it/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/it/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_cof_wearables.xml b/indra/newview/skins/default/xui/it/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/it/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ca6b65300a0123b43793a4b9430b0127eb76e4b7
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(caricamento in corso)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/it/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..624eaa639c2e9ca637bc64aaf4fef49de058f0ff
--- /dev/null
+++ b/indra/newview/skins/default/xui/it/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="La conversazione includeva la voce"/>
+	<icon name="unread_ims_icon" tool_tip="Sono arrivati dei messaggi mentre eri via"/>
+	<button name="delete_btn" tool_tip="Elimina questo elemento"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/it/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/it/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/it/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_alpha.xml b/indra/newview/skins/default/xui/it/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_classified.xml b/indra/newview/skins/default/xui/it/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_eyes.xml b/indra/newview/skins/default/xui/it/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_gloves.xml b/indra/newview/skins/default/xui/it/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_hair.xml b/indra/newview/skins/default/xui/it/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_jacket.xml b/indra/newview/skins/default/xui/it/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_pants.xml b/indra/newview/skins/default/xui/it/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_physics.xml b/indra/newview/skins/default/xui/it/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_pick.xml b/indra/newview/skins/default/xui/it/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_profile.xml b/indra/newview/skins/default/xui/it/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_shape.xml b/indra/newview/skins/default/xui/it/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_shirt.xml b/indra/newview/skins/default/xui/it/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_shoes.xml b/indra/newview/skins/default/xui/it/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_skin.xml b/indra/newview/skins/default/xui/it/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_skirt.xml b/indra/newview/skins/default/xui/it/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_socks.xml b/indra/newview/skins/default/xui/it/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/it/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_underpants.xml b/indra/newview/skins/default/xui/it/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/it/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_edit_wearable.xml b/indra/newview/skins/default/xui/it/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_control_panel.xml b/indra/newview/skins/default/xui/it/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_general.xml b/indra/newview/skins/default/xui/it/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/it/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_invite.xml b/indra/newview/skins/default/xui/it/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_land_money.xml b/indra/newview/skins/default/xui/it/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_list_item.xml b/indra/newview/skins/default/xui/it/panel_group_list_item.xml
old mode 100644
new mode 100755
index 7cdc4c7ff64deac10b5ca29a04e35b385e6d7719..72e644008c9f8be4eb31521682a38de96d571f3a
--- a/indra/newview/skins/default/xui/it/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/it/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Sconosciuto"/>
+	<button name="info_btn" tool_tip="Maggiori informazioni"/>
 	<button name="profile_btn" tool_tip="Vedi profilo"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_group_notices.xml b/indra/newview/skins/default/xui/it/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_notify.xml b/indra/newview/skins/default/xui/it/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_group_roles.xml b/indra/newview/skins/default/xui/it/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_im_control_panel.xml b/indra/newview/skins/default/xui/it/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_inventory_item.xml b/indra/newview/skins/default/xui/it/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_landmark_info.xml b/indra/newview/skins/default/xui/it/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_landmarks.xml b/indra/newview/skins/default/xui/it/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_login.xml b/indra/newview/skins/default/xui/it/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_main_inventory.xml b/indra/newview/skins/default/xui/it/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_me.xml b/indra/newview/skins/default/xui/it/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_general.xml b/indra/newview/skins/default/xui/it/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/it/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_media_settings_security.xml b/indra/newview/skins/default/xui/it/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_navigation_bar.xml b/indra/newview/skins/default/xui/it/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/it/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_nearby_media.xml b/indra/newview/skins/default/xui/it/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_notify_textbox.xml b/indra/newview/skins/default/xui/it/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_online_status_toast.xml b/indra/newview/skins/default/xui/it/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/it/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_outfit_edit.xml b/indra/newview/skins/default/xui/it/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/it/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_list.xml b/indra/newview/skins/default/xui/it/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/it/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_people.xml b/indra/newview/skins/default/xui/it/panel_people.xml
old mode 100644
new mode 100755
index f903ae6e2c02a708e51f8bbc5ca8d5a35349b0a0..e1468db76ea048ec6e457eb240926b7539fb9239
--- a/indra/newview/skins/default/xui/it/panel_people.xml
+++ b/indra/newview/skins/default/xui/it/panel_people.xml
@@ -14,81 +14,53 @@ Stai cercando persone da frequentare? Prova la [secondlife:///app/worldmap Mappa
 	<string name="no_filtered_friends_msg">
 		Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/people/[SEARCH_TERM] Cerca].
 	</string>
-	<string name="people_filter_label" value="Filtro persone"/>
-	<string name="groups_filter_label" value="Filtro gruppi"/>
 	<string name="no_filtered_groups_msg" value="Non riesci a trovare quello che cerchi? Prova [secondlife:///app/search/groups/[SEARCH_TERM] Cerca]."/>
 	<string name="no_groups_msg" value="Stai cercando gruppi di cui far parte? Prova [secondlife:///app/search/groups Cerca]."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Fai doppio clic per aprire la Mappa, premi il tasto Maiusc e trascina per la panoramica)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Fai doppio clic per teleportarti, premi il tasto Maiusc e trascina per la panoramica)"/>
-	<filter_editor label="Filtro" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="NELLE VICINANZE" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Opzioni"/>
-				<button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista degli amici"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="Filtro persone" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Azioni per la persona selezionata:"/>
+				<menu_button name="nearby_view_btn" tool_tip="Opzioni Mostra/Ordina"/>
+				<button name="add_friend_btn" tool_tip="Offri amicizia a un residente"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Rimuovi la persona selezionata dagli amici"/>
 			</panel>
 		</panel>
-		<panel label="I MIEI AMICI" name="friends_panel">
+		<panel label="AMICI" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="Filtro persone" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Azioni per la persona selezionata:"/>
+				<menu_button name="friends_view_btn" tool_tip="Opzioni Mostra/Ordina"/>
+				<button name="friends_add_btn" tool_tip="Offri amicizia a un residente"/>
+				<dnd_button name="friends_del_btn" tool_tip="Rimuovi la persona selezionata dagli amici"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="Online"/>
 				<accordion_tab name="tab_all" title="Tutto"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="Mostra ulteriori opzioni"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Offri amicizia a un residente"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Rimuovi la persona selezionata dalla lista degli amici"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="I MIEI GRUPPI" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Opzioni"/>
-				<button name="plus_btn" tool_tip="Aderisci al gruppo/Crea nuovo gruppo"/>
-				<button name="activate_btn" tool_tip="Attiva il gruppo selezionato"/>
+		<panel label="GRUPPI" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Filtro gruppi" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Azioni per il gruppo selezionato:"/>
+				<menu_button name="groups_view_btn" tool_tip="Opzioni Mostra/Ordina"/>
+				<menu_button name="plus_btn" tool_tip="Aderisci al gruppo/Crea nuovo gruppo"/>
+				<dnd_button name="minus_btn" tool_tip="Lascia il gruppo selezionato"/>
 			</panel>
 		</panel>
 		<panel label="RECENTE" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Opzioni"/>
-				<button name="add_friend_btn" tool_tip="Aggiungi il residente selezionato alla tua lista degli amici"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="Filtro persone" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Azioni per la persona selezionata:"/>
+				<menu_button name="recent_view_btn" tool_tip="Opzioni Mostra/Ordina"/>
+				<button name="add_friend_btn" tool_tip="Offri amicizia a un residente"/>
+				<dnd_button name="recent_del_btn" tool_tip="Rimuovi la persona selezionata dagli amici"/>
 			</panel>
 		</panel>
+		<panel label="BLOCCATO" name="blocked_panel">
+			<panel label="Residenti e oggetti bloccati" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Profilo" name="view_profile_btn" tool_tip="Mostra immagine, gruppi e altre informazioni del residente"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="IM" name="im_btn" tool_tip="Apri una sessione messaggio istantaneo"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Chiama" name="call_btn" tool_tip="Chiama questo residente"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Condividi" name="share_btn" tool_tip="Condividi un oggetto dell&apos;inventario"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Teleport" name="teleport_btn" tool_tip="Offri teleport"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Profilo del gruppo" name="group_info_btn" tool_tip="Mostra informazioni gruppo"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Chat di gruppo" name="chat_btn" tool_tip="Apri sessione chat"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Chiamata al gruppo" name="group_call_btn" tool_tip="Chiama questo gruppo"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_pick_info.xml b/indra/newview/skins/default/xui/it/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_picks.xml b/indra/newview/skins/default/xui/it/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_place_profile.xml b/indra/newview/skins/default/xui/it/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_places.xml b/indra/newview/skins/default/xui/it/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_postcard_message.xml b/indra/newview/skins/default/xui/it/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_postcard_settings.xml b/indra/newview/skins/default/xui/it/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/it/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/it/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
old mode 100644
new mode 100755
index 0c9c4027e582af60c4898e89cbc60e2e9a567b96..c2ac6e97a9c53d580ef36117ded5362cdd73f6a2
--- a/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Text Chat" name="chat">
-	<text name="font_size">
-		Dimensioni caratteri:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Piccola" name="radio" value="0"/>
-		<radio_item label="Media" name="radio2" value="1"/>
-		<radio_item label="Grande" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="Simula la battitura tasti quando scrivi" name="play_typing_animation"/>
-	<check_box label="Quando sono OFF-LINE, spediscimi gli IM in una e-mail" name="send_im_to_email"/>
-	<check_box label="Attiva IM in testo semplice e cronologia chat" name="plain_text_chat_history"/>
-	<check_box label="Chat a vignetta" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		Mostra gli IM in:
-	</text>
-	<text name="requires_restart_label">
-		(richiede il riavvio)
-	</text>
-	<radio_group name="chat_window" tool_tip="Mostra i tuoi messaggi istantanei in diverse finestre, o in una finestra con più schede (richiede il riavvio)">
-		<radio_item label="Finestre separate" name="radio" value="0"/>
-		<radio_item label="Schede" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Attiva popup per chat in arrivo:
-	</text>
-	<check_box label="Chat di gruppo" name="EnableGroupChatPopups" tool_tip="Seleziona per vedere una finestra popup quando arriva una chat di gruppo"/>
-	<check_box label="Chat IM" name="EnableIMChatPopups" tool_tip="Seleziona per vedere una finestra popup quando arriva un messaggio IM"/>
-	<spinner label="Durata chat vicine:" name="nearby_toasts_lifetime"/>
-	<spinner label="Durata dissolvenza chat vicine:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="Simula la battitura tasti quando scrivi" name="play_typing_animation"/>
+		<check_box label="Quando sono OFF-LINE, spediscimi gli IM in una e-mail" name="send_im_to_email"/>
+		<check_box label="Solo amici e gruppi possono chiamarmi o mandarmi IM" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Dimensioni caratteri:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Piccolo" name="Small" value="0"/>
+			<item label="Medio" name="Medium" value="1"/>
+			<item label="Grande" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Chat a vignetta" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Notifiche
+		</text>
+		<text name="friend_ims">
+			IM degli amici:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
+			<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Nessuno" name="None" value="none"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			IM non di amici:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
+			<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Nessuno" name="None" value="none"/>
+		</combo_box>
+		<text name="conference_ims">
+			IM conferenza:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
+			<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Nessuno" name="None" value="none"/>
+		</combo_box>
+		<text name="group_chat">
+			Chat di gruppo:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
+			<item label="Pulsante barra strumenti Flash" name="FlashToolbarButton" value="flash"/>
+			<item label="Nessuno" name="None" value="none"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Chat nei dintorni:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Apri finestra Conversazioni" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mostra il messaggio in una finestra pop-up" name="PopUpMessage" value="toast"/>
+			<item label="Pulsante barra strumenti Flash" name="FlashToolBarButton" value="flash"/>
+			<item label="Nessuno" name="None" value="none"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Per interrompere temporaneamente le notifiche, usa Comunica &gt; Non disturbare.
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Riproduci suono:
+		</text>
+		<check_box label="Nuova conversazione" name="new_conversation"/>
+		<check_box label="Chiamata voce in arrivo" name="incoming_voice_call"/>
+		<check_box label="Offerta di Teleport" name="teleport_offer"/>
+		<check_box label="Offerta inventario" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Cancella registro..." name="clear_log"/>
+		<button label="Cancella trascrizioni..." name="delete_transcripts"/>
+		<button label="Sfoglia..." label_selected="Sfoglia" name="log_path_button"/>
+	</panel>
 	<button label="Traduzione..." name="ok_btn"/>
 	<button label="Sostituzione automatica..." name="autoreplace_showgui"/>
 	<button label="Correzione ortografica..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_colors.xml b/indra/newview/skins/default/xui/it/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_general.xml b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
old mode 100644
new mode 100755
index 90a833471ceb4a019974a91346eae64ffce6f8ff..45cc06c2eaeca47e4da03427b561a988b25fccd3
--- a/indra/newview/skins/default/xui/it/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/it/panel_preferences_general.xml
@@ -69,6 +69,9 @@
 		<combo_box.item label="mai" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Risposta in modalità occupato:
+		Risposta Non disturbare:
 	</text>
+	<text_editor name="do_not_disturb_response">
+		log_in_to_change
+	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/it/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_move.xml b/indra/newview/skins/default/xui/it/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/it/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_setup.xml b/indra/newview/skins/default/xui/it/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_preferences_sound.xml b/indra/newview/skins/default/xui/it/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/it/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_region_covenant.xml b/indra/newview/skins/default/xui/it/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_region_debug.xml b/indra/newview/skins/default/xui/it/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_region_environment.xml b/indra/newview/skins/default/xui/it/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_region_estate.xml b/indra/newview/skins/default/xui/it/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_region_general.xml b/indra/newview/skins/default/xui/it/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_region_terrain.xml b/indra/newview/skins/default/xui/it/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_script_ed.xml b/indra/newview/skins/default/xui/it/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/it/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/it/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_script_question_toast.xml b/indra/newview/skins/default/xui/it/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_scrolling_param.xml b/indra/newview/skins/default/xui/it/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/it/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/it/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/it/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_local.xml b/indra/newview/skins/default/xui/it/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_options.xml b/indra/newview/skins/default/xui/it/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/it/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/it/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_sound_devices.xml b/indra/newview/skins/default/xui/it/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/it/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_status_bar.xml b/indra/newview/skins/default/xui/it/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history.xml b/indra/newview/skins/default/xui/it/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/it/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_voice_effect.xml b/indra/newview/skins/default/xui/it/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/it/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/panel_world_map.xml b/indra/newview/skins/default/xui/it/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/role_actions.xml b/indra/newview/skins/default/xui/it/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/sidepanel_appearance.xml b/indra/newview/skins/default/xui/it/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/sidepanel_inventory.xml b/indra/newview/skins/default/xui/it/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/sidepanel_item_info.xml b/indra/newview/skins/default/xui/it/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
old mode 100644
new mode 100755
index 8a0f93e6509c5f8532413d36008904fc04f33ff3..5f912dd126e3e92511ca5ec0ddb9994542825c6d
--- a/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/it/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Acquista oggetto" name="Buyobject"/>
 			<combo_box.item label="Paga oggetto" name="Payobject"/>
 			<combo_box.item label="Apri" name="Open"/>
+			<combo_box.item label="Ingrandisci" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/it/strings.xml b/indra/newview/skins/default/xui/it/strings.xml
old mode 100644
new mode 100755
index fb1e3874682827ad420d37ba5e8956fba6b39791..f95318542b4c0e96b40b68e8213586fc02c75b54
--- a/indra/newview/skins/default/xui/it/strings.xml
+++ b/indra/newview/skins/default/xui/it/strings.xml
@@ -134,7 +134,7 @@
 		Esci
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=it-IT&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		Il viewer utilizzato non è più in grado di accedere a Second Life. Visita la parina seguente per scaricare un nuovo viewer:
@@ -616,8 +616,8 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="AvatarAway">
 		Assente
 	</string>
-	<string name="AvatarBusy">
-		Occupato
+	<string name="AvatarDoNotDisturb">
+		Non disturbare
 	</string>
 	<string name="AvatarMuted">
 		Mutato
@@ -853,6 +853,12 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="ST_NO_JOINT">
 		Impossibile trovare ROOT o JOINT.
 	</string>
+	<string name="NearbyChatTitle">
+		Chat nei dintorni
+	</string>
+	<string name="NearbyChatLabel">
+		(Chat nei dintorni)
+	</string>
 	<string name="whisper">
 		sussurra:
 	</string>
@@ -916,6 +922,9 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="ControlYourCamera">
 		Controllare la tua fotocamera
 	</string>
+	<string name="AgentNameSubst">
+		(Tu)
+	</string>
 	<string name="TeleportYourAgent">
 		Teleportarti
 	</string>
@@ -1000,18 +1009,6 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="dictionary_files">
 		Dizionari
 	</string>
-	<string name="AvatarSetNotAway">
-		Imposta come non assente
-	</string>
-	<string name="AvatarSetAway">
-		Imposta come assente
-	</string>
-	<string name="AvatarSetNotBusy">
-		Imposta come non occupato
-	</string>
-	<string name="AvatarSetBusy">
-		Imposta come occupato
-	</string>
 	<string name="shape">
 		Figura corporea
 	</string>
@@ -1968,8 +1965,8 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="PanelContentsNewScript">
 		Nuovo script
 	</string>
-	<string name="BusyModeResponseDefault">
-		Il residente al quale hai inviato un messaggio è in modalità &apos;occupato&apos;, ovvero ha chiesto di non essere disturbato.  Il tuo messaggio comparirà nel suo pannello IM, dove potrà essere letto in un secondo momento.
+	<string name="DoNotDisturbModeResponseDefault">
+		Questo residente ha attivato la modalità &apos;Non disturbare&apos; e vedrà il tuo messaggio più tardi.
 	</string>
 	<string name="MuteByName">
 		(In base al nome)
@@ -2082,9 +2079,6 @@ Prova ad accedere nuovamente tra un minuto.
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		Contenuto
-	</string>
 	<string name="AcquiredItems">
 		Oggetti acquisiti
 	</string>
@@ -3799,7 +3793,7 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 		Regione generale
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Avatar visibili e chat consentita fuori di questo lotto
+		Gli avatar in questo lotto non possono essere visti o sentiti da avatar all&apos;esterno del lotto
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Gli oggetti che si muovono potrebbero non comportarsi correttamente in questa regione fino a quando non viene eseguito il rebake della regione.
@@ -3876,6 +3870,12 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 	<string name="IM_unblock_only_groups_friends">
 		Per vedere questo messaggio, devi deselezionare &apos;Solo amici e gruppi possono chiamarmi o mandarmi IM&apos; in Preferenze/Privacy.
 	</string>
+	<string name="OnlineStatus">
+		Online
+	</string>
+	<string name="OfflineStatus">
+		Offline
+	</string>
 	<string name="answered_call">
 		Risposto alla chiamata
 	</string>
@@ -3885,6 +3885,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 	<string name="you_joined_call">
 		Ti sei collegato alla chiamata in voce
 	</string>
+	<string name="you_auto_rejected_call-im">
+		Hai rifiutato automaticamente la chiamata voce mentre era attivata la modalità &apos;Non disturbare&apos;.
+	</string>
 	<string name="name_started_call">
 		[NAME] ha iniziato una chiamata vocale
 	</string>
@@ -3897,6 +3900,9 @@ Se il messaggio persiste, contatta [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Chiusa la chiamata
 	</string>
+	<string name="conference-title">
+		Chat con più persone
+	</string>
 	<string name="conference-title-incoming">
 		Chiamata in conferenza con [AGENT_NAME]
 	</string>
@@ -4769,6 +4775,9 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
 	<string name="Command_Chat_Label">
 		Chat
 	</string>
+	<string name="Command_Conversations_Label">
+		Conversazioni
+	</string>
 	<string name="Command_Compass_Label">
 		Bussola
 	</string>
@@ -4844,6 +4853,9 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
 	<string name="Command_Chat_Tooltip">
 		Chatta con persone vicine usando il testo
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Conversa con chiunque
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Bussola
 	</string>
@@ -4973,4 +4985,13 @@ Prova a racchiudere il percorso dell&apos;editor in doppie virgolette.
 	<string name="UserDictionary">
 		[User]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		Le conversazioni non vengono registrate. Per iniziare a registrare, seleziona &quot;Salva: Solo registro&quot; oppure &quot;Salva: Registri e trascrizioni&quot; in Preferenze &gt; Chat.
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		Non verranno registrate più le conversazioni. Per riprendere a registrare, seleziona &quot;Salva: Solo registro&quot; oppure &quot;Salva: Registri e trascrizioni&quot; in Preferenze &gt; Chat.
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		Nessuna conversazione in registro. Dopo che hai contattato qualcuno o se qualcuno ti contatta, una voce del registro verrà mostrata qui.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/it/teleport_strings.xml b/indra/newview/skins/default/xui/it/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_about.xml b/indra/newview/skins/default/xui/ja/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_about_land.xml b/indra/newview/skins/default/xui/ja/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_activeim.xml b/indra/newview/skins/default/xui/ja/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/ja/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_auction.xml b/indra/newview/skins/default/xui/ja/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_autoreplace.xml b/indra/newview/skins/default/xui/ja/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar.xml b/indra/newview/skins/default/xui/ja/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml b/indra/newview/skins/default/xui/ja/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ja/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_beacons.xml b/indra/newview/skins/default/xui/ja/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_build_options.xml b/indra/newview/skins/default/xui/ja/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ja/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_bumps.xml b/indra/newview/skins/default/xui/ja/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_contents.xml b/indra/newview/skins/default/xui/ja/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/ja/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_land.xml b/indra/newview/skins/default/xui/ja/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_buy_object.xml b/indra/newview/skins/default/xui/ja/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_camera.xml b/indra/newview/skins/default/xui/ja/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_chat_bar.xml b/indra/newview/skins/default/xui/ja/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_choose_group.xml b/indra/newview/skins/default/xui/ja/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_color_picker.xml b/indra/newview/skins/default/xui/ja/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_conversation_log.xml b/indra/newview/skins/default/xui/ja/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..98b1a59a0db3d32912a8799301f84c1efa869363
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="会話ログ">
+	<panel name="buttons_panel">
+		<filter_editor label="人をフィルター" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="表示 / 並べ替えのオプション"/>
+		<menu_button name="conversations_gear_btn" tool_tip="選択した住人・グループに対するアクション"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_conversation_preview.xml b/indra/newview/skins/default/xui/ja/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ea0b23de483b5d4b6b4dd0f6a13a32a622850d9c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="会話:">
+	<floater.string name="Title">
+		会話:[NAME]
+	</floater.string>
+	<text name="page_label" value="ページ"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_critical.xml b/indra/newview/skins/default/xui/ja/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/ja/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_destinations.xml b/indra/newview/skins/default/xui/ja/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_display_name.xml b/indra/newview/skins/default/xui/ja/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/ja/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/ja/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/ja/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_environment_settings.xml b/indra/newview/skins/default/xui/ja/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_event.xml b/indra/newview/skins/default/xui/ja/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_fast_timers.xml b/indra/newview/skins/default/xui/ja/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_font_test.xml b/indra/newview/skins/default/xui/ja/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_gesture.xml b/indra/newview/skins/default/xui/ja/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_god_tools.xml b/indra/newview/skins/default/xui/ja/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ja/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_help_browser.xml b/indra/newview/skins/default/xui/ja/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_how_to.xml b/indra/newview/skins/default/xui/ja/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_hud.xml b/indra/newview/skins/default/xui/ja/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_im_container.xml b/indra/newview/skins/default/xui/ja/floater_im_container.xml
old mode 100644
new mode 100755
index 06b65e27f0cdfb7146cebacabe1bc5fef961dce6..a155efdc1e6fbf61772f91b27be40fecc8b2ef76
--- a/indra/newview/skins/default/xui/ja/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="会話"/>
+<multi_floater name="floater_im_box" title="会話">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="オプションの表示 / 並べ替え"/>
+					<button name="add_btn" tool_tip="新しい会話を開始"/>
+					<button name="speak_btn" tool_tip="マイクを使って人と話す"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="このリストを閉じる / 開く"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="このペインを閉じる"/>
+					<text name="stub_textbox">
+						この会話は、別のウィンドウに表示されます。[secondlife:/// 戻る.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_im_session.xml b/indra/newview/skins/default/xui/ja/floater_im_session.xml
old mode 100644
new mode 100755
index dfa1c85ca23b4bad4545f613ad9769ebc43d6a43..a44c843df7fa5ec58569d23243730453410b5b32
--- a/indra/newview/skins/default/xui/ja/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/ja/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="宛先" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] は会話に招待されました。"/>
+	<floater.string name="multiple_participants_added" value="[NAME] は会話に招待されました。"/>
+	<floater.string name="tooltip_to_separate_window" value="この会話を別のウィンドウへ移動する"/>
+	<floater.string name="tooltip_to_main_window" value="この会話をメインウィンドウへ戻す"/>
+	<floater.string name="start_call_button_tooltip" value="会話の接続を開く"/>
+	<floater.string name="end_call_button_tooltip" value="会話の接続を閉じる"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="このペインを閉じる"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="参加者リストを閉じる"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="参加者リストを開く"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="表示 / 並べ替えのオプション"/>
+				<menu_button name="gear_btn" tool_tip="選択した人に対するアクション"/>
+				<button name="add_btn" tool_tip="この会話に他の人を追加する"/>
+				<button name="voice_call_btn" tool_tip="会話の接続を開く"/>
+				<button name="close_btn" tool_tip="この会話を終了する"/>
+				<button name="expand_collapse_btn" tool_tip="このペインを閉じる / 開く"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="チャットを翻訳" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="宛先" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="メッセージパネルの表示 / 非表示"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_image_preview.xml b/indra/newview/skins/default/xui/ja/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_import_collada.xml b/indra/newview/skins/default/xui/ja/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_incoming_call.xml b/indra/newview/skins/default/xui/ja/floater_incoming_call.xml
old mode 100644
new mode 100755
index f152fcd73811bf14dc5a0b94d5698ff174ca22db..308f6f9a3de504d4716c0b470b2fe4dca5ac97e7
--- a/indra/newview/skins/default/xui/ja/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/ja/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		匿名ユーザー
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		がコールしています。
+		からコールを受けています。
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		がコンファレンスチャットで、ボイスチャットに参加しました。
@@ -25,9 +25,9 @@
 		[CURRENT_CHAT]を退席して、このボイスチャットに参加しますか?
 	</floater.string>
 	<text name="question">
-		[CURRENT_CHAT] を退席して、このボイスチャットに参加しますか?
+		コールに応答すると、現在のボイスチャットから切断されます。
 	</text>
-	<button label="はい" label_selected="はい" name="Accept"/>
-	<button label="いいえ" label_selected="いいえ" name="Reject"/>
-	<button label="IM" name="Start IM"/>
+	<button label="取る" label_selected="取る" name="Accept"/>
+	<button label="無視" label_selected="無視" name="Reject"/>
+	<button label="代わりに IM を開く" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_inspect.xml b/indra/newview/skins/default/xui/ja/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ja/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ja/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_joystick.xml b/indra/newview/skins/default/xui/ja/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_lagmeter.xml b/indra/newview/skins/default/xui/ja/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_land_holdings.xml b/indra/newview/skins/default/xui/ja/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ja/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml b/indra/newview/skins/default/xui/ja/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_map.xml b/indra/newview/skins/default/xui/ja/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_media_browser.xml b/indra/newview/skins/default/xui/ja/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_media_settings.xml b/indra/newview/skins/default/xui/ja/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ja/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/ja/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_model_preview.xml b/indra/newview/skins/default/xui/ja/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_moveview.xml b/indra/newview/skins/default/xui/ja/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_mute_object.xml b/indra/newview/skins/default/xui/ja/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_my_appearance.xml b/indra/newview/skins/default/xui/ja/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_my_inventory.xml b/indra/newview/skins/default/xui/ja/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_notification.xml b/indra/newview/skins/default/xui/ja/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_notifications_console.xml b/indra/newview/skins/default/xui/ja/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_object_weights.xml b/indra/newview/skins/default/xui/ja/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_openobject.xml b/indra/newview/skins/default/xui/ja/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ja/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_outgoing_call.xml b/indra/newview/skins/default/xui/ja/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/ja/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index ec107f3e6b914bfcb87bc44354e693b2a3c0f90c..9733c6191818a0e6bafb86a48f1e84e6576d9b9b
--- a/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/ja/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				表示:
 			</text>
-			<check_box label="世界" name="show_world"/>
+			<check_box label="テスト" name="show_world"/>
 			<check_box label="可動物のみ" name="show_world_movables_only"/>
 			<check_box label="ナビメッシュ" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/ja/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/ja/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_pay.xml b/indra/newview/skins/default/xui/ja/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_pay_object.xml b/indra/newview/skins/default/xui/ja/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_people.xml b/indra/newview/skins/default/xui/ja/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ja/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_picks.xml b/indra/newview/skins/default/xui/ja/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_places.xml b/indra/newview/skins/default/xui/ja/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_post_process.xml b/indra/newview/skins/default/xui/ja/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preferences.xml b/indra/newview/skins/default/xui/ja/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/ja/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_animation.xml b/indra/newview/skins/default/xui/ja/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ja/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ja/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_sound.xml b/indra/newview/skins/default/xui/ja/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_preview_texture.xml b/indra/newview/skins/default/xui/ja/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_price_for_listing.xml b/indra/newview/skins/default/xui/ja/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_publish_classified.xml b/indra/newview/skins/default/xui/ja/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_region_debug_console.xml b/indra/newview/skins/default/xui/ja/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_region_info.xml b/indra/newview/skins/default/xui/ja/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_report_abuse.xml b/indra/newview/skins/default/xui/ja/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug.xml b/indra/newview/skins/default/xui/ja/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/ja/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_script_limits.xml b/indra/newview/skins/default/xui/ja/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_script_preview.xml b/indra/newview/skins/default/xui/ja/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_script_queue.xml b/indra/newview/skins/default/xui/ja/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_script_search.xml b/indra/newview/skins/default/xui/ja/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_search.xml b/indra/newview/skins/default/xui/ja/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_select_key.xml b/indra/newview/skins/default/xui/ja/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_sell_land.xml b/indra/newview/skins/default/xui/ja/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_settings_debug.xml b/indra/newview/skins/default/xui/ja/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_snapshot.xml b/indra/newview/skins/default/xui/ja/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_sound_devices.xml b/indra/newview/skins/default/xui/ja/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_sound_preview.xml b/indra/newview/skins/default/xui/ja/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_spellcheck.xml b/indra/newview/skins/default/xui/ja/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/ja/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_stats.xml b/indra/newview/skins/default/xui/ja/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_sys_well.xml b/indra/newview/skins/default/xui/ja/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_telehub.xml b/indra/newview/skins/default/xui/ja/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/ja/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/ja/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index 3773812bb6673a307fcbea7e4b26c55ca02a36ab..37233d3e6869fb272e6e22cc74fa8f17c76e93d8
--- a/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/ja/floater_texture_ctrl.xml
@@ -20,7 +20,7 @@
 	<button label="ブランク" label_selected="ブランク" name="Blank"/>
 	<button label="なし" label_selected="なし" name="None"/>
 	<button label="" label_selected="" name="Pipette"/>
-	<check_box initial_value="true" label="ライブプレビュー" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="今すぐ適用" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="プレビュー無効"/>
 	<filter_editor label="テクスチャをフィルター" name="inventory search editor"/>
 	<check_box initial_value="false" label="フォルダを表示" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/ja/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/ja/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_tools.xml b/indra/newview/skins/default/xui/ja/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_top_objects.xml b/indra/newview/skins/default/xui/ja/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_tos.xml b/indra/newview/skins/default/xui/ja/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_toybox.xml b/indra/newview/skins/default/xui/ja/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_translation_settings.xml b/indra/newview/skins/default/xui/ja/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_url_entry.xml b/indra/newview/skins/default/xui/ja/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/ja/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..44e96c35ad4d716a7b557f5c266939371a83bea3
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="ボイスチャットの音量">
+	<slider label="ボイスチャット" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_controls.xml b/indra/newview/skins/default/xui/ja/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
old mode 100644
new mode 100755
index ee675e143b00e1c45fea1ad0d50ef51bdd6e30f7..b38ea9331ad8a0dd47345997f91a420413dbae1d
--- a/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/ja/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="場所" name="voice_effects" title="ボイスモーフィング">
+<floater label="場所" name="voice_effects" title="ボイスモーフィングのプレビュー">
 	<string name="no_voice_effect">
 		(ボイスモーフィングなし)
 	</string>
diff --git a/indra/newview/skins/default/xui/ja/floater_voice_volume.xml b/indra/newview/skins/default/xui/ja/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a380615d5a4857d0ceddd289af0b0d2f9ef259d3
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="ボイス音量">
+	<slider name="volume_slider" tool_tip="ボイス音量" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ja/floater_web_content.xml b/indra/newview/skins/default/xui/ja/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/ja/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_window_size.xml b/indra/newview/skins/default/xui/ja/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/floater_world_map.xml b/indra/newview/skins/default/xui/ja/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/inspect_avatar.xml b/indra/newview/skins/default/xui/ja/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/inspect_group.xml b/indra/newview/skins/default/xui/ja/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/inspect_object.xml b/indra/newview/skins/default/xui/ja/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/inspect_remote_object.xml b/indra/newview/skins/default/xui/ja/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/language_settings.xml b/indra/newview/skins/default/xui/ja/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/ja/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_other.xml b/indra/newview/skins/default/xui/ja/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_attachment_self.xml b/indra/newview/skins/default/xui/ja/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ja/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_other.xml b/indra/newview/skins/default/xui/ja/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_avatar_self.xml b/indra/newview/skins/default/xui/ja/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ja/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ja/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ja/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml
old mode 100644
new mode 100755
index a071abbd2e8fdbd8cf4a672309d66e25882154b5..07bcefd9b3719cc257d9b5c1af40cf0aa9072535
--- a/indra/newview/skins/default/xui/ja/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear COF">
+<toggleable_menu name="Gear COF">
 	<menu label="衣類" name="COF.Gear.New_Clothes"/>
-	<menu label="新しい身体部位" name="COF.Geear.New_Body_Parts"/>
-</menu>
+	<menu label="新しい身体部位" name="COF.Gear.New_Body_Parts"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_conversation.xml b/indra/newview/skins/default/xui/ja/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7df20d2529b930d6f6d6acc97207ad005abe4d0
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="会話を終える" name="close_conversation"/>
+	<menu_item_call label="ボイスチャットを始める" name="open_voice_conversation"/>
+	<menu_item_call label="ボイスチャットを切断する" name="disconnect_from_voice"/>
+	<menu_item_call label="プロフィールを表示" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="テレポートを送る" name="offer_teleport"/>
+	<menu_item_call label="ボイスコール" name="voice_call"/>
+	<menu_item_call label="チャットの履歴..." name="chat_history"/>
+	<menu_item_call label="フレンドを追加" name="add_friend"/>
+	<menu_item_call label="フレンドを削除" name="remove_friend"/>
+	<menu_item_call label="フレンドを削除" name="remove_friends"/>
+	<menu_item_call label="グループに招待..." name="invite_to_group"/>
+	<menu_item_call label="ズームイン" name="zoom_in"/>
+	<menu_item_call label="地図" name="map"/>
+	<menu_item_call label="共有" name="share"/>
+	<menu_item_call label="支払い" name="pay"/>
+	<menu_item_check label="ボイスをブロック" name="block_unblock"/>
+	<menu_item_check label="文字をブロックする" name="MuteText"/>
+	<menu_item_call label="グループ情報" name="group_profile"/>
+	<menu_item_call label="グループをアクティブにする" name="activate_group"/>
+	<menu_item_call label="グループから脱退する" name="leave_group"/>
+	<context_menu label="モデレーターのオプション" name="Moderator Options">
+		<menu_item_check label="文字チャットを許可" name="AllowTextChat"/>
+		<menu_item_call label="この参加者をミュートする" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="この参加者のミュートを解除する" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="全員の音声をミュートする" name="ModerateVoiceMute"/>
+		<menu_item_call label="全員のミュートを解除する" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c9d4f947a4834a8b90952729800102ae3e75f454
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="IM..." name="IM"/>
+	<menu_item_call label="ボイスコール..." name="Call"/>
+	<menu_item_call label="チャットの履歴を開く..." name="Chat history"/>
+	<menu_item_call label="プロフィールを表示" name="View Profile"/>
+	<menu_item_call label="テレポートを送る" name="teleport"/>
+	<menu_item_call label="フレンド登録" name="add_friend"/>
+	<menu_item_call label="フレンドを削除" name="remove_friend"/>
+	<menu_item_call label="グループに招待..." name="Invite"/>
+	<menu_item_call label="地図" name="Map"/>
+	<menu_item_call label="共有" name="Share"/>
+	<menu_item_call label="支払い" name="Pay"/>
+	<menu_item_check label="ブロック・ブロック解除" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bd4812603f79d7e4891ad74c37c3e73abb6ae625
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="名前で並べ替え" name="sort_by_name"/>
+	<menu_item_check label="日付で並べ替え" name="sort_by_date"/>
+	<menu_item_check label="上位のフレンドを並べ替え" name="sort_by_friends"/>
+	<menu_item_call label="近くのチャットの履歴を表示..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_edit.xml b/indra/newview/skins/default/xui/ja/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_favorites.xml b/indra/newview/skins/default/xui/ja/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ja/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_group_plus.xml b/indra/newview/skins/default/xui/ja/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ja/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_im_conversation.xml b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..55cd6610f751aa0329dc90f48c47bffe28a905dc
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="プロフィールを表示" name="View Profile"/>
+	<menu_item_call label="フレンド登録" name="Add Friend"/>
+	<menu_item_call label="フレンドを削除" name="remove_friend"/>
+	<menu_item_call label="テレポートを送る" name="offer_teleport"/>
+	<menu_item_call label="グループに招待..." name="invite_to_group"/>
+	<menu_item_call label="チャットの履歴..." name="chat_history"/>
+	<menu_item_call label="ズームイン" name="zoom_in"/>
+	<menu_item_call label="地図" name="map"/>
+	<menu_item_call label="共有" name="Share"/>
+	<menu_item_call label="支払い" name="Pay"/>
+	<menu_item_check label="ボイスをブロック" name="Block/Unblock"/>
+	<menu_item_check label="文字をブロックする" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..222a74171892b7f9c4172897d284748746fd287f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="簡略表示" name="compact_view"/>
+	<menu_item_check label="詳細表示" name="expanded_view"/>
+	<menu_item_check label="時間を表示" name="IMShowTime"/>
+	<menu_item_check label="1対1の会話で名前を表示" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/ja/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ja/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory.xml b/indra/newview/skins/default/xui/ja/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_add.xml b/indra/newview/skins/default/xui/ja/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_land.xml b/indra/newview/skins/default/xui/ja/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_landmark.xml b/indra/newview/skins/default/xui/ja/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_login.xml b/indra/newview/skins/default/xui/ja/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml b/indra/newview/skins/default/xui/ja/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_mini_map.xml b/indra/newview/skins/default/xui/ja/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ja/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_navbar.xml b/indra/newview/skins/default/xui/ja/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml b/indra/newview/skins/default/xui/ja/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml b/indra/newview/skins/default/xui/ja/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_object.xml b/indra/newview/skins/default/xui/ja/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_object_icon.xml b/indra/newview/skins/default/xui/ja/menu_object_icon.xml
old mode 100644
new mode 100755
index 8c4f3286618cf912308c54e78fb1eb95d58aad86..6448e9244ecdca6831aa9ff5f6382bd14449c59f
--- a/indra/newview/skins/default/xui/ja/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/ja/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="オブジェクトのプロフィール..." name="Object Profile"/>
 	<menu_item_call label="ブロック..." name="Block"/>
+	<menu_item_call label="地図に表示" name="show_on_map"/>
+	<menu_item_call label="オブジェクトの場所にテレポート" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml
old mode 100644
new mode 100755
index 2bcbe1915b407a7a3ed40ba153dfeb79681d2547..1969ae2a102598320eda1d269e51b4eb2cd9f4e0
--- a/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/ja/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="髪" name="New Hair"/>
 		<menu_item_call label="ç›®" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="フォルダをすべて開く" name="expand"/>
+	<menu_item_call label="フォルダをすべて閉じる" name="collapse"/>
 	<menu_item_call label="アウトフィットの名前を変更する" name="rename"/>
 	<menu_item_call label="アウトフィットを削除する" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ja/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_participant_list.xml b/indra/newview/skins/default/xui/ja/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_participant_view.xml b/indra/newview/skins/default/xui/ja/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5816351d9de6537cd60c0ca888cd5a23fb095017
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="会話をタイプで並べ替え" name="sort_sessions_by_type"/>
+	<menu_item_check label="会話を名前で並べ替え" name="sort_sessions_by_name"/>
+	<menu_item_check label="会話を最新アクティビティで並べ替え" name="sort_sessions_by_recent"/>
+	<menu_item_check label="参加者を名前で並べ替え" name="sort_participants_by_name"/>
+	<menu_item_check label="参加者を最新アクティビティで並べ替え" name="sort_participants_by_recent"/>
+	<menu_item_call label="チャットの環境設定..." name="chat_preferences"/>
+	<menu_item_call label="プライバシーの環境設定..." name="privacy_preferences"/>
+	<menu_item_check label="会話ログ..." name="Conversation"/>
+	<menu_item_check label="近くのチャットを翻訳" name="Translate_chat"/>
+	<menu_item_check label="翻訳の設定..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b5c9d11e0214f130c6eecdfdaf9fe190c75569b9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="ブロック解除" name="unblock"/>
+	<menu_item_call label="プロフィール..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3e74b2ddff6b955b3e91523fa4500ba8a5d6640c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="名前で住人をブロック..." name="block_resident_by_name"/>
+	<menu_item_call label="名前でオブジェクトをブロック..." name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4b86a353f4baa2dc1cd5b4fd5889511f6ac66e8a
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="名前で並べ替え" name="sort_by_name"/>
+	<menu_item_check label="タイプによる並べ替え" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b95d11fdbdcfed97f5d53b73cbdb60f1d809e22d
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="名前で並べ替え" name="sort_name"/>
+	<menu_item_check label="オンライン状況で並べ替え" name="sort_status"/>
+	<menu_item_check label="人のアイコン表示" name="view_icons"/>
+	<menu_item_check label="与えられた権限を表示" name="view_permissions"/>
+	<menu_item_check label="会話ログを表示..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups.xml b/indra/newview/skins/default/xui/ja/menu_people_groups.xml
old mode 100644
new mode 100755
index 842d79dc4be740ae9d793af4da67d0c3a1ff8217..2c0c85ba28952ce7bd814dc071148c85f46da0c6
--- a/indra/newview/skins/default/xui/ja/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="情報を表示" name="View Info"/>
 	<menu_item_call label="チャット" name="Chat"/>
-	<menu_item_call label="コール" name="Call"/>
+	<menu_item_call label="ボイスコール" name="Call"/>
 	<menu_item_call label="アクティブ" name="Activate"/>
 	<menu_item_call label="脱退" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4a9e402fa4fb461d3809dc15e7b4c814d63c7f01
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="グループアイコンを表示" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml
old mode 100644
new mode 100755
index 8d84b0e521cec30169201f568b706128cae0e352..972ab767bf4bb6a58731c4c9b9be1237a05f5449
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="プロフィールの表示" name="View Profile"/>
-	<menu_item_call label="フレンド登録" name="Add Friend"/>
-	<menu_item_call label="フレンドを削除" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="コール" name="Call"/>
-	<menu_item_call label="地図" name="Map"/>
-	<menu_item_call label="共有" name="Share"/>
-	<menu_item_call label="支払う" name="Pay"/>
-	<menu_item_check label="ブロック・ブロック解除" name="Block/Unblock"/>
-	<menu_item_call label="テレポートを送る" name="teleport"/>
+	<menu_item_call label="プロフィールを表示" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="テレポートを送る" name="offer_teleport"/>
+	<menu_item_call label="ボイスコール" name="voice_call"/>
+	<menu_item_call label="チャットの履歴を表示..." name="chat_history"/>
+	<menu_item_call label="フレンド登録" name="add_friend"/>
+	<menu_item_call label="フレンドを削除" name="remove_friend"/>
+	<menu_item_call label="グループに招待..." name="invite_to_group"/>
+	<menu_item_call label="ズームイン" name="zoom_in"/>
+	<menu_item_call label="地図" name="map"/>
+	<menu_item_call label="共有" name="share"/>
+	<menu_item_call label="支払い" name="pay"/>
+	<menu_item_check label="ブロック・ブロック解除" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 3f20e5d3ab12aa5a017affa84bf65cf66040a7a5..fe85e278cfd41a947c7886421bfbaa07b27a7e5a
--- a/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="フレンド登録" name="Add Friends"/>
-	<menu_item_call label="フレンドを削除" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="コール" name="Call"/>
-	<menu_item_call label="共有" name="Share"/>
-	<menu_item_call label="支払う" name="Pay"/>
-	<menu_item_call label="テレポートを送る" name="teleport"/>
+	<menu_item_call label="フレンド登録" name="add_friends"/>
+	<menu_item_call label="フレンドを削除" name="remove_friends"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="コール" name="call"/>
+	<menu_item_call label="共有" name="share"/>
+	<menu_item_call label="支払い" name="pay"/>
+	<menu_item_call label="テレポートを送る" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b7cccc4396d660b5367a944b0bc21b3d3ac90742
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="最近の発言者で並べ替え" name="sort_by_recent_speakers"/>
+	<menu_item_check label="名前で並べ替え" name="sort_name"/>
+	<menu_item_check label="距離で並べ替え" name="sort_distance"/>
+	<menu_item_check label="人のアイコン表示" name="view_icons"/>
+	<menu_item_check label="地図を表示" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..feaeba4398ea77294718b3f4342fdf83a6b87f18
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="新しい順に並べ替え" name="sort_most"/>
+	<menu_item_check label="名前で並べ替え" name="sort_name"/>
+	<menu_item_check label="人のアイコン表示" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ja/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_picks.xml b/indra/newview/skins/default/xui/ja/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_picks_plus.xml b/indra/newview/skins/default/xui/ja/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_place.xml b/indra/newview/skins/default/xui/ja/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_place_add_button.xml b/indra/newview/skins/default/xui/ja/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ja/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ja/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_save_outfit.xml b/indra/newview/skins/default/xui/ja/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml b/indra/newview/skins/default/xui/ja/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_slurl.xml b/indra/newview/skins/default/xui/ja/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/ja/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_text_editor.xml b/indra/newview/skins/default/xui/ja/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_toolbars.xml b/indra/newview/skins/default/xui/ja/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_topinfobar.xml b/indra/newview/skins/default/xui/ja/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_agent.xml b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
old mode 100644
new mode 100755
index 92d118a5aec734538e720cc647c854b83ea4ad17..72722db7cca9ca2f782edc21192413910844120f
--- a/indra/newview/skins/default/xui/ja/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/ja/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="住人のプロフィールを表示" name="show_agent"/>
+	<menu_item_call label="プロフィールを表示" name="show_agent"/>
+	<menu_item_call label="IM を送信..." name="send_im"/>
+	<menu_item_call label="フレンドを追加..." name="add_friend"/>
 	<menu_item_call label="名前をクリップボードにコピー" name="url_copy_label"/>
 	<menu_item_call label="SLurl をクリップボードにコピー" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_group.xml b/indra/newview/skins/default/xui/ja/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_http.xml b/indra/newview/skins/default/xui/ja/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_inventory.xml b/indra/newview/skins/default/xui/ja/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_map.xml b/indra/newview/skins/default/xui/ja/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
old mode 100644
new mode 100755
index d6a048dcfcc2c8055f2cec7ae5da68f8e540ca8d..9e340e3239c8868be24a394819148738de9a4d05
--- a/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/ja/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="オブジェクトの情報を表示" name="show_object"/>
+	<menu_item_call label="オブジェクトのプロフィール..." name="show_object"/>
 	<menu_item_call label="地図に表示" name="show_on_map"/>
 	<menu_item_call label="オブジェクトの場所にテレポート" name="teleport_to_object"/>
 	<menu_item_call label="オブジェクト名をクリップボードにコピー" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_url_parcel.xml b/indra/newview/skins/default/xui/ja/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_slapp.xml b/indra/newview/skins/default/xui/ja/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_slurl.xml b/indra/newview/skins/default/xui/ja/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_url_teleport.xml b/indra/newview/skins/default/xui/ja/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_viewer.xml b/indra/newview/skins/default/xui/ja/menu_viewer.xml
old mode 100644
new mode 100755
index e60e6781c6e3c6810719c1325e896cf42c4c5736..89f58d3bacecf0fce59859f02b408589b81ac2b0
--- a/indra/newview/skins/default/xui/ja/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ja/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="私のアニメーションを停止する" name="Stop Animating My Avatar"/>
 			<menu_item_call label="歩行/走行/飛行..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="ログイン" name="Status">
-			<menu_item_call label="一時退席中" name="Set Away"/>
-			<menu_item_call label="取り込み中" name="Set Busy"/>
-		</menu>
+		<menu label="ログイン" name="Status"/>
 		<menu_item_call label="L$ の購入..." name="Buy and Sell L$"/>
 		<menu_item_call label="マーチャントアウトボックス..." name="MerchantOutbox"/>
 		<menu_item_call label="マイアカウント..." name="Manage My Account">
@@ -32,14 +29,18 @@
 		<menu_item_call label="[APP_NAME] を終了" name="Quit"/>
 	</menu>
 	<menu label="コミュニケーション" name="Communicate">
-		<menu_item_check label="チャット..." name="Nearby Chat"/>
+		<menu_item_check label="会話..." name="Conversations"/>
+		<menu_item_check label="近くのチャット..." name="Nearby Chat"/>
 		<menu_item_check label="話す" name="Speak"/>
-		<menu_item_check label="ボイス設定..." name="Nearby Voice"/>
-		<menu_item_check label="ボイスモーフィング..." name="ShowVoice"/>
+		<menu label="ボイスモーフィング" name="VoiceMorphing">
+			<menu_item_check label="ボイスモーフィングなし" name="NoVoiceMorphing"/>
+			<menu_item_check label="プレビュー..." name="Preview"/>
+			<menu_item_call label="申し込む..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="ジェスチャー..." name="Gestures"/>
-		<menu_item_call label="フレンド" name="My Friends"/>
-		<menu_item_call label="グループ" name="My Groups"/>
-		<menu_item_call label="近くにいる人" name="Active Speakers"/>
+		<menu_item_check label="フレンド" name="My Friends"/>
+		<menu_item_check label="グループ" name="My Groups"/>
+		<menu_item_check label="近くにいる人" name="Active Speakers"/>
 		<menu_item_call label="リストをブロック" name="Block List"/>
 	</menu>
 	<menu label="世界" name="World">
@@ -115,7 +116,6 @@
 			<menu_item_call label="買う" name="Menu Object Buy"/>
 			<menu_item_call label="取る" name="Menu Object Take"/>
 			<menu_item_call label="コピーを取る" name="Take Copy"/>
-			<menu_item_call label="マイインベントリに保存" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="オブジェクトの中身に保存" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="オブジェクトを返却する" name="Return Object back to Owner"/>
 		</menu>
@@ -130,6 +130,7 @@
 			<menu_item_call label="リンクセット..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="キャラクター..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="表示/テスト..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="地域の再構築" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="オプション" name="Options">
 			<menu_item_check label="権限の詳細を表示する" name="DebugPermissions"/>
@@ -159,6 +160,13 @@
 	<menu label="ヘルプ" name="Help">
 		<menu_item_call label="ハウツー..." name="How To"/>
 		<menu_item_call label="[SECOND_LIFE] ヘルプ" name="Second Life Help"/>
+		<menu_item_call label="ユーザーガイド" name="User’s guide"/>
+		<menu_item_call label="ナレッジベース" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="コミュニティフォーラム" name="Community Forums"/>
+		<menu_item_call label="日本語サポートページ" name="Support portal"/>
+		<menu_item_call label="[SECOND_LIFE] ニュース" name="Second Life News"/>
+		<menu_item_call label="[SECOND_LIFE] ブログ" name="Second Life Blogs"/>
 		<menu_item_call label="嫌がらせを報告する" name="Report Abuse"/>
 		<menu_item_call label="バグを報告する" name="Report Bug"/>
 		<menu_item_call label="[APP_NAME] について" name="About Second Life"/>
@@ -307,7 +315,7 @@
 			<menu_item_call label="選択したテクスチャ情報基底" name="Selected Texture Info Basis"/>
 			<menu_item_check label="ワイヤーフレーム" name="Wireframe"/>
 			<menu_item_check label="オブジェクト間オクルージョン" name="Object-Object Occlusion"/>
-			<menu_item_check label="光と影" name="Lighting and Shadows"/>
+			<menu_item_check label="光と影" name="Advanced Lighting Model"/>
 			<menu_item_check label="太陽・月・プロジェクタからの影" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO と影の平滑化" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="GL デバッグ" name="Debug GL"/>
@@ -385,9 +393,14 @@
 				<menu_item_call label="女性アバターのテスト" name="Test Female"/>
 				<menu_item_check label="選択アバター許可" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="アニメーションのスピード" name="Animation Speed">
+				<menu_item_call label="すべてのアニメーションのスピードを 10% アップ" name="All Animations 10 Faster"/>
+				<menu_item_call label="すべてのアニメーションのスピードを 10% ダウン" name="All Animations 10 Slower"/>
+				<menu_item_call label="すべてのアニメーションのスピードをリセット" name="Reset All Animation Speed"/>
+				<menu_item_check label="アニメーションをスローモーション" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="パラメータを強制的にデフォルトにする" name="Force Params to Default"/>
 			<menu_item_check label="アニメーション情報" name="Animation Info"/>
-			<menu_item_check label="スローモーションのアニメーション" name="Slow Motion Animations"/>
 			<menu_item_check label="見ているものを表示する" name="Show Look At"/>
 			<menu_item_check label="クリックした場所を表示する" name="Show Point At"/>
 			<menu_item_check label="結合部のアップデートのデバッグ" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ja/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ja/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/mime_types.xml b/indra/newview/skins/default/xui/ja/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/mime_types_linux.xml b/indra/newview/skins/default/xui/ja/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/mime_types_mac.xml b/indra/newview/skins/default/xui/ja/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/notifications.xml b/indra/newview/skins/default/xui/ja/notifications.xml
old mode 100644
new mode 100755
index d5cff18a24ab2a674df988191b5f040652532d99..356506f19123da7db5356f933d0680b30c6b01db
--- a/indra/newview/skins/default/xui/ja/notifications.xml
+++ b/indra/newview/skins/default/xui/ja/notifications.xml
@@ -538,6 +538,24 @@ L$ が不足しているのでこのグループに参加することができ
 		</url>
 		<usetemplate ignoretext="使用しているグラフィックドライバが古い場合" name="okcancelignore" notext="いいえ" yestext="はい"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		お使いのグラフィックチップには最新のドライバが存在するようです。グラフィックドライバを更新すると、パフォーマンスが大幅に改善されます。
+
+[_URL] へアクセスして、ドライバーを更新しますか。
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="自分のグラフィックドライバが旧くなりました。" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		お使いのグラフィックチップには最新のドライバが存在するようです。グラフィックドライバを更新すると、パフォーマンスが大幅に改善されます。
+
+[_URL] へアクセスして、ドライバーを更新しますか。
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=en-us
+		</url>
+		<usetemplate ignoretext="自分のグラフィックドライバが旧くなりました。" name="okcancelignore" notext="いいえ" yestext="はい"/>
+	</notification>
 	<notification name="UnknownGPU">
 		お使いのシステムには、[APP_NAME] が認識できないグラフィックカードが搭載されています。
 [APP_NAME] でまだテストされていない最新ハードウェアのためだと考えられます。  問題ないとは思いますが、グラフィックの設定を調整する必要があるかもしれません。
@@ -1582,10 +1600,13 @@ http://secondlife.com/download から最新バージョンをダウンロード
 		現在フレンドシップを送れません。数分後にもう一度お試しください。
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		取り込み中モードになりました。
-チャットとインスタントメッセージは表示されません。 受信するインスタントメッセージには取り込み中返答メッセージが表示されます。 テレポートのオファーは受け取り拒否となります。 アイテムのオファーはすべてごみ箱に入ります。
-		<usetemplate ignoretext="ログイン状態を取り込み中モードに変更するとき" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		「通知を受けない」がオンになります。着信通信はあなたには通知されません。
+
+- 他の住民は「通知を受けない」の応答(「設定」&gt;「一般」で設定)を受け取ることになります。
+- テレポートのオファーはすべて受け取り拒否となります。
+- ボイスコールは拒否されます。
+		<usetemplate ignoretext="マイ ログイン状態を「通知を受けない」モードに変更しました。" name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		加入できるグループの最大限に達しました。 このグループに加入するために他のグループを脱退するか、この申し入れを断ってください。
@@ -2076,6 +2097,10 @@ L$ [AMOUNT] で、このクラシファイド広告を今すぐ公開します
 		[http://jp.secondlife.com/account/ マイアカウント] ページに移動してアカウント履歴を確認しますか?
 		<usetemplate ignoretext="ブラウザを起動してアカウント履歴を見るとき" name="okcancelignore" notext="取り消し" yestext="ページに移動"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		既存の会話に人を加えると、新しい会話が作成されます。参加者全員に新しい会話についての通知が配信されます。
+		<usetemplate ignoretext="チャットの参加者の追加を確認してください" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		終了しようとしています。続けますか?
 		<usetemplate ignoretext="終了時の確認" name="okcancelignore" notext="終了しない" yestext="終了"/>
@@ -2153,14 +2178,14 @@ Linden Lab
 			<button ignore="交換しない" name="No" text="キャンセル"/>
 		</form>
 	</notification>
-	<notification label="取り込み中の警告" name="BusyModePay">
-		現在、「取り込み中」モードのため、支払いと引き換えにアイテムを受け取ることができません。
+	<notification label="「通知を受けない」モードの警告" name="DoNotDisturbModePay">
+		「通知を受けない」をオンにします。この支払との交換で提供されるアイテムが受信されなくなります。
 
-この取引を行うために「取り込み中」の設定を解除しますか?
+このトランザクションを完了するために、「通知を受けない」をオフにしてもよろしいですか。
 		<form name="form">
-			<ignore name="ignore" save_option="true" text="取り込み中モード時に支払をするとき"/>
-			<button ignore="常に「取り込み中」の設定を解除" name="Yes" text="OK"/>
-			<button ignore="常に「取り込み中」の設定を継続" name="No" text="キャンセル"/>
+			<ignore name="ignore" text="「通知を受けない」モード時に、人や物を支払う予定です。"/>
+			<button ignore="「通知を受けない」モードを維持しない" name="Yes" text="OK"/>
+			<button ignore="「通知を受けない」モードを維持する" name="No" text="取り消し"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2296,11 +2321,8 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 	<notification name="GroupNotice">
 		件名: [SUBJECT]、メッセージ: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; はオンラインです
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; はオフラインです
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; は [STATUS] です
 	</notification>
 	<notification name="AddSelfFriend">
 		残念ながら自分自身をフレンド登録することはできません。
@@ -2530,13 +2552,6 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 	<notification name="DynamicPathfindingDisabled">
 		この地域(リージョン)でダイナミックパスファインディングが有効になっていません。パスファインディング LSL 呼び出しを使用するスクリプト化されたオブジェクトがこの地域(リージョン)では動作できません。
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		この地域(リージョン)のオブジェクトを変更すると、他の移動オブジェクトが正しく動作しなくなる恐れがあります。移動オブジェクトを正しく動作させるには、「地域の再構築」ボタンをクリックします。詳しい情報は見るには「ヘルプ」を選択してください。
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="ヘルプ" ignoretext="この地域(リージョン)のオブジェクトを変更すると、他の移動オブジェクトが正しく動作しなくなる恐れがあります。" name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		エラーが発生しました。ネットワークまたはサーバーに問題があるか、制作権がない可能性があります。この問題は、一度ログアウトしてから、ログインし直すと解決される場合があります。
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2797,9 +2812,9 @@ Web ページにリンクすると、他人がこの場所に簡単にアクセ
 		</form>
 	</notification>
 	<notification name="ScriptQuestionCaution">
-		警告:オブジェクト &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; はあなたのリンデンドルアカウントへのトータルアクセスを希望しています。アクセスを許可すると、このオブジェクトはいつでもあなたのアカウントから資金を削除したり、今後警告を表示することなく継続的にアカウントを完全に空にできるようになります。
+		警告:オブジェクト &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; は、あなたのリンデンドルアカウントへのフルアクセスを要求しています。アクセスを許可すると、このオブジェクトは、特に警告を発せずに単発で、随時アカウントから資金を削除するか、アカウントを完全に空にします。
   
-このようなリクエストが正当であることは稀です。このオブジェクトがあなたのアカウントにアクセスしたい理由を完全に理解している場合を除き、アクセスの許可は避けてください。
+そのオブジェクトがアカウントへのアクセスを要求する理由がよくわからない場合は、アクセスを許可しないでください。
 		<form name="form">
 			<button name="Grant" text="トータルアクセスを許可"/>
 			<button name="Deny" text="拒否"/>
@@ -3378,4 +3393,627 @@ M キーを押して変更します。
 		[NUM_ITEMS] 個のアイテムを削除中です。続けますか?
 		<usetemplate ignoretext="複数のアイテムを削除しますか?" name="okcancelignore" notext="いいえ" yestext="はい"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] によってあなたはフリーズされています。世界を動かすことも、世界とインタラクションすることもできません。
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] によって、あなたは [AV_FREEZE_TIME] 秒間フリーズされました。世界を動かすことも、世界とインタラクションすることもできません。
+	</notification>
+	<notification name="YouFrozeAvatar">
+		アバターがフリーズされています。
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] によってフリーズが解除されています。
+	</notification>
+	<notification name="AvatarUnFrozen">
+		アバターのフリーズが解除されました。
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		その区画の管理権限を持っていないため、フリーズに失敗しました。
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		フリーズ期間が切れました。仕事に戻ってください。
+	</notification>
+	<notification name="AvatarCantFreeze">
+		残念ながら、そのユーザーをフリーズできません。
+	</notification>
+	<notification name="NowOwnObject">
+		これで、オブジェクト [OBJECT_NAME] の所有者になりました
+	</notification>
+	<notification name="CantRezOnLand">
+		この土地の所有者が許可していないため、[OBJECT_POS] でオブジェクトを Rez することができません。土地ツールを使用して、土地の所有を確認してください。
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		リクエストが多すぎて、オブジェクトを Rez することができません。
+	</notification>
+	<notification name="SitFailCantMove">
+		今回移動できなかったため、座ることができません。
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		その土地に対して許可を受けていないため、座ることができません。
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		移動して近づけてみてください。オブジェクトが同じリージョンにないため、オブジェクトを配置できません。
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		新しいオブジェクトを作成できません。リージョンが埋まっています。
+	</notification>
+	<notification name="FailedToPlaceObject">
+		指定した場所にオブジェクトを配置できませんでした。もう一度お試しください。
+	</notification>
+	<notification name="NoOwnNoGardening">
+		所有していない土地に木や草を植えることはできません。
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		オブジェクト &apos;[OBJ_NAME]&apos; をコピーする権限がないため、コピーに失敗しました。
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		オブジェクト &apos;[OBJ_NAME]&apos; をあなたに転送できないため、コピーに失敗しました。
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		オブジェクト &apos;[OBJ_NAME]&apos; がナビメッシュに貢献しているため、コピーに失敗しました。
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		ルートオブジェクトを選択せずに複製します。
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		リージョンが埋まっているため、オブジェクトのコピーを作成することができません。
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		オブジェクトのコピーを作成できません。オブジェクトのある区画が見つかりません。
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		区画がいっぱいのため、
+オブジェクトを作成できません。
+	</notification>
+	<notification name="RezAttemptFailed">
+		オブジェクトへの Rez の試みに失敗しました。
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		このリージョンで問題を引き起こすアイテムは作成できません。
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		その持ち物アイテムはブラックリストに登録されています。
+	</notification>
+	<notification name="NoCanRezObjects">
+		現在あなたにはオブジェクトを作成するための許可がありません。
+	</notification>
+	<notification name="LandSearchBlocked">
+		土地の検索がブロックされました。
+短期間に多くの土地を検索したためです。
+しばらくしてから再度お試しください。
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		オブジェクトの着用に使用できるスクリプトリソースが足りません。
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		死んでしまったので、ホームにテレポートされました。
+	</notification>
+	<notification name="EjectComingSoon">
+		ここへの入場が許可されていないため、[EJECT_TIME] 秒後に追放されます。
+	</notification>
+	<notification name="NoEnterServerFull">
+		サーバーが埋まっているため、
+このリージョンに入場することはできません。
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		「「持ち物」に保存」が無効になっています。
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		&apos;[OBJ_NAME]&apos; の Rez 元であるオブジェクトが存在しないため、このオブジェクトをオブジェクトコンテンツに保存できません。
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		オブジェクト &apos;[DEST_NAME]&apos; を修正する権限がないため、オブジェクトのコンテンツに &apos;[OBJ_NAME]&apos; を保存できません。
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		インベントリに &apos;[OBJ_NAME]&apos; を保存することはできません - この操作が無効になっています。
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		オブジェクト &apos;[OBJ_NAME]&apos; を変更する権限を持っていないため、選択したものをコピーできません。
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		オブジェクト &apos;[OBJ_NAME]&apos; を転送できないため、選択したものをコピーできません。
+	</notification>
+	<notification name="NoTransNoCopy">
+		オブジェクト &apos;[OBJ_NAME]&apos; を転送できないため、選択したものをコピーできません。
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		シミュレータからのオブジェクト &apos;[OBJ_NAME]&apos; の削除は、権限システムによって無効にされています。
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		オブジェクト &apos;[OBJ_NAME]&apos; を変更する権限を持っていないため、選択したものを保存できません。
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		オブジェクト &apos;[OBJ_NAME]&apos; をコピーできないため、選択したものを保存できません。
+	</notification>
+	<notification name="NoModNoTaking">
+		オブジェクト &apos;[OBJ_NAME]&apos; を変更する権限を持っていないため、選択したものを取得できません。
+	</notification>
+	<notification name="RezDestInternalError">
+		内部エラー: 不明な宛先タイプ。
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		オブジェクトが見つからないため削除できませんでした。
+	</notification>
+	<notification name="SorryCantEjectUser">
+		残念ながら、そのユーザーを追放することはできません。
+	</notification>
+	<notification name="RegionSezNotAHome">
+		このリージョンでは、ここにホームの位置を設定できません。
+	</notification>
+	<notification name="HomeLocationLimits">
+		ホームの場所を設定できるのは、自分の土地か、またはメインランドのインフォハブでのみです。
+	</notification>
+	<notification name="HomePositionSet">
+		家の配置の設定。
+	</notification>
+	<notification name="AvatarEjected">
+		アバターが追放されました。
+	</notification>
+	<notification name="AvatarEjectFailed">
+		その区画の管理権限がないため、追放できませんでした。
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		区画が埋まっているため、オブジェクト &apos;[OBJECT_NAME]&apos; を、リージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		オブジェクト &apos;[OBJECT_NAME]&apos; は、この区画で許可されていないため、リージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		この区画でこのオブジェクトのリソースが不足しているため、オブジェクト &apos;[OBJECT_NAME]&apos; をリージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		オブジェクト &apos;[OBJECT_NAME]&apos; をリージョン [REGION_NAME] 内の [OBJ_POSITION] に移動することはできません。他のリージョンでは、リージョンの境界をまたいだこのオブジェクトを受信することができない古いバージョンを実行しているためです。
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		リージョン境界をまたぐナビメッシュを変更できないため、オブジェクト &apos;[OBJECT_NAME]&apos; をリージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		不明な理由により、オブジェクト &apos;[OBJECT_NAME]&apos; を、リージョン [REGION_NAME] 内の [OBJ_POSITION] に移動できません。
+([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		そのオブジェクトを変更する権限がありません
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		ナビメッシュに貢献するオブジェクトに対して物理を有効にできません。
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		キーフレームオブジェクトのために物理を有効にできません。
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		土地のリソースが足りないため、オブジェクトの物理を有効にできません。
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		[MAX_OBJECTS] より大きい物理リソースコストを持つオブジェクトでは、物理を有効にできません。
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		このオブジェクトはファントムで、ナビメッシュに貢献しているため、くぼみを持たせることができません。
+	</notification>
+	<notification name="UnableAddItem">
+		アイテムを追加できません!
+	</notification>
+	<notification name="UnableEditItem">
+		これは編集できません!
+	</notification>
+	<notification name="NoPermToEdit">
+		これを編集する許可がありません。
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		そのインベントリをコピーすることは許可されません。
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		オブジェクトのコンテンツに保存できません。アイテムが存在していません。
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		オブジェクトのコンテンツに保存できません。同じ名前を持つアイテムがすでにインベントリに存在します。
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		オブジェクトのコンテンツに保存できません。このため、アタッチメントの権限が変更されます。
+	</notification>
+	<notification name="TooManyScripts">
+		スクリプトが多すぎます。
+	</notification>
+	<notification name="UnableAddScript">
+		テキストを追加できません!
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		資産サーバーがタイムリーに応答しませんでした。オブジェクトが sim に返されました。
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		このリージョンでは、物理的シェイプが有効にされていません。
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		リージョンの境界をまたぐナビメッシュは変更できません。
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		そのオブジェクトタイプの物理的プロパティを設定できません。
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		ルートプリムを設定できないため、シェイプがありません。
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		このリージョンでは、物理的素材が有効にされていません。
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		物理的素材を調整できるのは、ルートプリムだけです。
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		キャラクターへの物理的素材の設定はまだサポートされていません。
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		指定した物理的素材のプロパティが 1 つ以上無効です。
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		メッシュオブジェクトの縫い目のタイプを変更することはできません。
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		メッシュオブジェクトの形状を変更することはできません
+	</notification>
+	<notification name="FullRegionCantEnter">
+		リージョンが埋まっているため、\nこのリージョンに入場できません。
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		リンクエラー -- 所有者が違います
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		リンクエラー -- リージョンの境界をまたぐナビメッシュは変更できません。
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		リンクエラー -- 編集権限がありません。
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		リンクエラー -- プリミティブが多すぎます。
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		リンクエラー -- コピーなしと転送なしをリンクできません。
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		リンクエラー -- リンクできるものがありません。
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		リンクエラー -- パスファインディングの文字数が多すぎます
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		リンクエラー -- 土地のリソースが足りません
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		オブジェクトが使用している物理リソースが多すぎたため、ダイナミックスが無効にされました。
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		区画 &apos;[PARCEL_NAME]&apos; のオブジェクト &apos;[OBJECT_NAME]&apos; によって、あなたはホームにテレポートされました。
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		​オブジェクト ​&apos;[OBJECT_NAME]&apos; によって、あなたはホームへテレポートされています。
+	</notification>
+	<notification name="TeleportedByAttachment">
+		[ITEM_ID] へのアタッチメントによって、あなたはテレポートされています。
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		区画 &apos;[PARCEL_NAME]&apos; のオブジェクト &apos;[OBJECT_NAME]&apos; によって、あなたはテレポートされています。
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		[OWNER_ID] が所有しているオブジェクト &apos;[OBJECT_NAME]&apos; によって、あなたはテレポートされています。
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		不明なユーザーが所有しているオブジェクト &apos;[OBJECT_NAME]&apos; によって、あなたはテレポートされています。
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		リクエストされたオブジェクトを作成できません。リージョンが埋まっています。
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		1 つの場所に複数のオブジェクトを着用することはできません。
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		ここでは、複数のオブジェクトを作成することはできません。
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		リクエストされたオブジェクトを作成できません。オブジェクトがデータベースに見つかりません。
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		リクエストされたオブジェクトを作成できません。リクエストがタイムアウトになりました。もう一度お試しください。
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		要求されたオブジェクトを作成できません。もう一度お試しください。
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		リクエストされたオブジェクトのロードに時間がかかりすぎたため、Rez に失敗しました。
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		指定した場所にオブジェクトを配置できませんでした。もう一度お試しください。
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		この土地に木を植えることはできません。
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		オブジェクトをリストアできません。ワールドの位置が見つかりません。
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		メッシュデータが無効なため、オブジェクトを Rez することができません。
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		このリージョンに既に多くのスクリプトが存在するため、オブジェクトを Rez することができません。
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		現在のアクセス権限では、そこにオブジェクトを作成できません。
+	</notification>
+	<notification name="CantCreateObject">
+		現在あなたにはオブジェクト作成する許可がありません。
+	</notification>
+	<notification name="InvalidObjectParams">
+		無効なオブジェクトパラメーター
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		現在のアクセス権限では、ここにオブジェクトのコピーを作成できません。
+	</notification>
+	<notification name="CantChangeShape">
+		あなたにはこのシェイプを変更する許可がありません。
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		現在のアクセス権限では、ここにオブジェクトを取得できません。
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		あなたのグループにオブジェクトを譲渡する権限がないため、譲渡に失敗しました。
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		現在のアクセス権限では、ここでオブジェクトを購入できません。
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		アバターがオブジェクトに存在するため、オブジェクトを着用できません。
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		木や草をアタッチメントとして着用できません。
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		グループが所有しているオブジェクトは着用できません。
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		所有していないオブジェクトは着用できません。
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		ナビメッシュに貢献しているオブジェクトは着用できません。
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		あなたにはオブジェクトを移動する権限がないため、そのオブジェクト添付できません。
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		オブジェクトの着用に使用できるスクリプトリソースが足りません。
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		オブジェクトをここにドロップできません。フリートライアル領域をお試しください。
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		メッシュアタッチメントをドロップすることはできません。インベントリから切り離して、ワールドで Rez してください。
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		アタッチメントのドロップに失敗しました。そこへドロップする権限がありません。
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		アタッチメントのドロップに失敗しました。利用できる土地リソースの数が足りません。
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		利用できるリソースが足りないため、アタッチメントのドロップに失敗しました。
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		ここにオブジェクトをドロップできません。区画が埋まっています。
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		土地区画に入場することを禁止されているため、このオブジェクトを触ったり、つかむことができません。
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		削除パラメーターを絞ってください。
+	</notification>
+	<notification name="UnableToUploadAsset">
+		資産をアップロードできません。
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		ホームをテレポートするユーザーが見つかりませんでした。
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		過剰なリクエストが失敗しました
+	</notification>
+	<notification name="GenericRequestFailed">
+		一般的なリクエストに失敗しました
+	</notification>
+	<notification name="CantUploadPostcard">
+		ポストカードをアップロードできません。後でもう一度お試しください。
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		グループ通知のインベントリの詳細を取得できません。
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		グループ通知の送信が許可されないため、送信できません。
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		グループ通知を送信できません。持ち物を作成することもできません。
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		通知内の持ち物を検出できません。
+	</notification>
+	<notification name="TerrainUploadFailed">
+		地形のアップロードに失敗しました。
+	</notification>
+	<notification name="TerrainFileWritten">
+		地形ファイルが書き込まれました。
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		地形ファイルを書き出し、ダウンロードを開始しています...
+	</notification>
+	<notification name="TerrainBaked">
+		地形がベークされました。
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		選択された最初の 10 個のオブジェクトのみが無効にされました。必要に応じて、リフレッシュして選択内容を追加してください。
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		この区画を購入するには、ビューワをアップデートする必要があります。
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		購入することができません。この区画は販売対象ではありません。
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		販売価格または土地の面積が変わったため、購入できません。
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		あなたはこの区画の委任された買い手ではありません。
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		すでに購入の認証を待機しているため、この区画を購入できません。
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		区画をオーバーフローするため、ここでオブジェクトを構築することはできません。
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		所有者の違う土地を選びました。選択する面積を小さくして、もう一度試してください。
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		選択範囲のリース区画の数が少ないため、参加できません。
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		土地を分割できません。\n区画が複数選択されています。\nもっと小さい土地を選択してみてください。
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		土地を分解できません。\n区画が見つかりません。\n「Help」&gt;「Reprt Bug...」でレポートを行ってください。
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		土地を分割できません。区画全体を選択します。\n小さい土地を選択してみてください。
+	</notification>
+	<notification name="LandHasBeenDivided">
+		土地が分割されています。
+	</notification>
+	<notification name="PassPurchased">
+		入場許可を購入しました。
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		リージョンでは、クラシファイド広告を許可しません。
+	</notification>
+	<notification name="LandPassExpireSoon">
+		この土地への入場許可はまもなく期限が切れます。
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		配置に適した表面がありません。別の場所を試してみたください。
+	</notification>
+	<notification name="CantSitNoRoom">
+		ここには座る余地がありません。他の場所を試してください。
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		権限がないため、オブジェクトを取得できませんでした。
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		リンデンドルが足りないため、オブジェクトの取得に失敗しました。
+	</notification>
+	<notification name="CantDeedGroupLand">
+		グループ所有の土地は、譲渡できません。
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		リンデンドルが足りないため、オブジェクトの購入に失敗しました。
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		リンデンドルが不足しているため、インベントリを購入できませんでした。
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		リンデンドルが足りないため、この土地への入場許可を購入できません。
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		今すぐには入場許可を購入できません。後でもう一度お試しください。
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		区画が埋まっているため、オブジェクトを\n作成することができません。
+	</notification>
+	<notification name="FailedPlacingObject">
+		指定した場所にオブジェクトを配置できませんでした。もう一度お試しください。
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		イベントのためのランドマークを作成することができません。
+	</notification>
+	<notification name="GodBeatsFreeze">
+		強力な力でフリーズを解除します。
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		特殊な権限のリクエストに失敗しました。このリクエストはログに記録されています。
+	</notification>
+	<notification name="ExpireExplanation">
+		システムは、現在あなたのリクエストを処理できません。リクエストがタイムアウトになりました。
+	</notification>
+	<notification name="DieExplanation">
+		システムは、あなたのリクエストを処理できません。
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		プリミティブ広告を出すには、資金が足りません。
+	</notification>
+	<notification name="RezObjectFailure">
+		資金が足りないため、オブジェクトを作成できません。
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		ホームが不正なため、ホームの位置をリセットします。
+	</notification>
+	<notification name="CantInviteRegionFull">
+		リージョンが埋まっているため、現在の場所に誰かを招待することはできません。後でもう一度お試しください。
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		このリージョンでは、ここにホームの位置を設定できません。
+	</notification>
+	<notification name="ListValidHomeLocations">
+		ホームの場所を設定できるのは、自分の土地か、またはメインランドのインフォハブでのみです。
+	</notification>
+	<notification name="SetHomePosition">
+		家の配置の設定。
+	</notification>
+	<notification name="CantDerezInventoryError">
+		インベントリエラーのため、オブジェクトの Rez 解除ができません。
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		リクエストされたインベントリを作成できません。
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		リクエストされた持ち物フォルダーを作成できません。
+	</notification>
+	<notification name="CantCreateInventory">
+		そのインベントリを作成できません。
+	</notification>
+	<notification name="CantCreateLandmark">
+		ランドマークを作成できません。
+	</notification>
+	<notification name="CantCreateOutfit">
+		アウトフィットをすぐには作成できません。しばらくしてから再度お試しください。
+	</notification>
+	<notification name="InventoryNotForSale">
+		インベントリは販売対象ではありません。
+	</notification>
+	<notification name="CantFindInvItem">
+		持ち物アイテムを見つけることができません。
+	</notification>
+	<notification name="CantFindObject">
+		オブジェクトが見つかりません。
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		オブジェクトへの送金は、このリージョンでは現在無効にされています。
+	</notification>
+	<notification name="CantPayNoAgent">
+		支払いの相手を把握できませんでした。
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		パブリックオブジェクトにリンデンドルを与えることはできません。
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		インワールドオブジェクトでのインベントリ作成に失敗しました。
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		内部エラーが発生したため、ビューワを正しく更新できませんでした。ビューワに表示されるリンデンドルの残高または区画の所有は、サーバー上の実際の残高を反映していない可能性があります。
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		他のプレイヤーの関心を引く大きなプリムを作成できません。他のプレイヤーが移動したときに再試行してください。
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		これにより、過去の会話のログ、およびそのファイルのすべてのバックアップが削除されます。
+		<usetemplate ignoretext="以前の会話のログを削除する前に確認してください。" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		これにより、以前のすべての会話のテキストが削除されます。過去の会話のリストには影響しません。.txt および txt.backup の拡張子が付いたすべてのファイルが [FOLDER] フォルダーから削除されます。
+		<usetemplate ignoretext="テキストを削除するまえに確認してください。" name="okcancelignore" notext="取り消し" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		ファイルを移動できません。以前のパスがリストアされました。
+		<usetemplate ignoretext="ファイルを移動できません。以前のパスがリストアされました。" name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/ja/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_active_object_row.xml b/indra/newview/skins/default/xui/ja/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index 70d37c3baddd75ea22efe42c137a13ba4475acfe..3ef8eba19f1ec8a3f35d6d7903c6edab55fd1d07
--- a/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/ja/panel_avatar_list_item.xml
@@ -27,5 +27,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="このフレンドは、あなたのオブジェクトを編集・削除・取得することができます"/>
 	<icon name="permission_map_icon" tool_tip="このフレンドは地図上であなたの位置を表示できます"/>
 	<icon name="permission_online_icon" tool_tip="このフレンドはあなたがオンラインにいることを確認できます"/>
+	<button name="info_btn" tool_tip="詳細"/>
 	<button name="profile_btn" tool_tip="プロフィールの表示"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_avatar_tag.xml b/indra/newview/skins/default/xui/ja/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 5d6a6065aeb544494c9abdecd0de7cbd144443c2..9263e5f3476299177c65fc1a7c8d4bbd1ef3574e
--- a/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/ja/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		ブロックリスト
-	</text>
-	<scroll_list name="blocked" tool_tip="現在ブロックされている住人一覧"/>
-	<button label="アバターをブロック" label_selected="住人をブロック..." name="Block resident..." tool_tip="ブロックしたい住人を選んでください"/>
-	<button label="名前でオブジェクトをブロック..." label_selected="名前でオブジェクトをブロック..." name="Block object by name..." tool_tip="名前でブロックしたいオブジェクトを選んでください"/>
-	<button label="ブロック解除" label_selected="ブロック解除" name="Unblock" tool_tip="ブロックリストから住人・オブジェクトを削除"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="フィルター" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="選択した住人・オブジェクトに対するアクション"/>
+		<menu_button name="view_btn" tool_tip="オプションを並べ替える"/>
+		<menu_button name="plus_btn" tool_tip="ブロックする住人・オブジェクトを選択"/>
+		<button name="unblock_btn" tool_tip="ブロックリストから住人・オブジェクトを削除"/>
+	</panel>
+	<block_list name="blocked" tool_tip="現在ブロックされている住人一覧"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/ja/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/ja/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_chat_header.xml b/indra/newview/skins/default/xui/ja/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/ja/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_classified_info.xml b/indra/newview/skins/default/xui/ja/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml b/indra/newview/skins/default/xui/ja/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/ja/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..09ffb92d3688aa4528e73c364df1b6452d2adc9f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(ローディング)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/ja/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e05a67e31dace9d8c976c832efcf321974642867
--- /dev/null
+++ b/indra/newview/skins/default/xui/ja/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="ボイスチャット"/>
+	<icon name="unread_ims_icon" tool_tip="ログアウト時に表示されるメッセージ"/>
+	<button name="delete_btn" tool_tip="このエントリーを削除"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/ja/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/ja/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml b/indra/newview/skins/default/xui/ja/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_classified.xml b/indra/newview/skins/default/xui/ja/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_eyes.xml b/indra/newview/skins/default/xui/ja/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_gloves.xml b/indra/newview/skins/default/xui/ja/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_hair.xml b/indra/newview/skins/default/xui/ja/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_jacket.xml b/indra/newview/skins/default/xui/ja/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pants.xml b/indra/newview/skins/default/xui/ja/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_physics.xml b/indra/newview/skins/default/xui/ja/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_pick.xml b/indra/newview/skins/default/xui/ja/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_profile.xml b/indra/newview/skins/default/xui/ja/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shape.xml b/indra/newview/skins/default/xui/ja/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shirt.xml b/indra/newview/skins/default/xui/ja/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_shoes.xml b/indra/newview/skins/default/xui/ja/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_skin.xml b/indra/newview/skins/default/xui/ja/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_skirt.xml b/indra/newview/skins/default/xui/ja/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_socks.xml b/indra/newview/skins/default/xui/ja/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ja/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_underpants.xml b/indra/newview/skins/default/xui/ja/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/ja/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ja/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_general.xml b/indra/newview/skins/default/xui/ja/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ja/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_invite.xml b/indra/newview/skins/default/xui/ja/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_land_money.xml b/indra/newview/skins/default/xui/ja/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_list_item.xml b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
old mode 100644
new mode 100755
index 4b548049c8bc29f3a0770a0e242998a2d893d6c6..77d3d8f39164df330335110d8a8cabcfbf78bfaf
--- a/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/ja/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="不明"/>
+	<button name="info_btn" tool_tip="詳細"/>
 	<button name="profile_btn" tool_tip="プロフィールの表示"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notices.xml b/indra/newview/skins/default/xui/ja/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_notify.xml b/indra/newview/skins/default/xui/ja/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_group_roles.xml b/indra/newview/skins/default/xui/ja/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ja/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_instant_message.xml b/indra/newview/skins/default/xui/ja/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_inventory_item.xml b/indra/newview/skins/default/xui/ja/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_landmark_info.xml b/indra/newview/skins/default/xui/ja/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_landmarks.xml b/indra/newview/skins/default/xui/ja/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_login.xml b/indra/newview/skins/default/xui/ja/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_main_inventory.xml b/indra/newview/skins/default/xui/ja/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_me.xml b/indra/newview/skins/default/xui/ja/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml b/indra/newview/skins/default/xui/ja/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ja/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/ja/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_nearby_media.xml b/indra/newview/skins/default/xui/ja/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml b/indra/newview/skins/default/xui/ja/panel_notifications_channel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_notify_textbox.xml b/indra/newview/skins/default/xui/ja/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml b/indra/newview/skins/default/xui/ja/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ja/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/ja/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_list.xml b/indra/newview/skins/default/xui/ja/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/ja/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_people.xml b/indra/newview/skins/default/xui/ja/panel_people.xml
old mode 100644
new mode 100755
index 88c31451b51cc1d6caf98795e094a9488f604285..03ce87537a50bc049fc5b2edfea29c8bb2915a8b
--- a/indra/newview/skins/default/xui/ja/panel_people.xml
+++ b/indra/newview/skins/default/xui/ja/panel_people.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <!-- Side tray panel -->
 <panel label="人" name="people_panel">
 	<string name="no_recent_people" value="最近交流した人はいません。 一緒に何かする仲間をお探しですか? [secondlife:///app/search/people 検索] か [secondlife:///app/worldmap 世界地図] をお試しください。"/>
@@ -14,81 +14,53 @@
 	<string name="no_filtered_friends_msg">
 		お探しのものは見つかりましたか? [secondlife:///app/search/people/[SEARCH_TERM] 検索] をお試しください。
 	</string>
-	<string name="people_filter_label" value="人をフィルター"/>
-	<string name="groups_filter_label" value="グループをフィルター"/>
 	<string name="no_filtered_groups_msg" value="お探しのものは見つかりましたか? [secondlife:///app/search/groups/[SEARCH_TERM] 検索] をお試しください。"/>
 	<string name="no_groups_msg" value="グループをお探しですか? [secondlife:///app/search/groups 検索] をお試しください。"/>
 	<string name="MiniMapToolTipMsg" value="[地域](ダブルクリックで地図を開く。Shift‐ドラッグで水平・垂直移動)"/>
 	<string name="AltMiniMapToolTipMsg" value="[地域](ダブルクリックでテレポート。Shift‐ドラッグで水平・垂直移動)"/>
-	<filter_editor label="フィルター" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="近く" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="オプション"/>
-				<button name="add_friend_btn" tool_tip="選択した住人をフレンドリストに登録"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="人をフィルター" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="選択した人に対するアクション"/>
+				<menu_button name="nearby_view_btn" tool_tip="表示 / 並べ替えのオプション"/>
+				<button name="add_friend_btn" tool_tip="フレンド登録を申し出ます"/>
+				<dnd_button name="nearby_del_btn" tool_tip="フレンドとして選択されている人を削除"/>
 			</panel>
 		</panel>
-		<panel label="マイ フレンド" name="friends_panel">
+		<panel label="フレンド" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="人をフィルター" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="選択した人に対するアクション"/>
+				<menu_button name="friends_view_btn" tool_tip="表示 / 並べ替えのオプション"/>
+				<button name="friends_add_btn" tool_tip="フレンド登録を申し出ます"/>
+				<dnd_button name="friends_del_btn" tool_tip="フレンドとして選択されている人を削除"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="オンライン"/>
 				<accordion_tab name="tab_all" title="全員"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="オプションを表示します"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="フレンド登録を申し出る"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="選択した人をフレンドリストから削除"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="マイ グループ" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="オプション"/>
-				<button name="plus_btn" tool_tip="グループに参加 / 新規グループを作成します"/>
-				<button name="activate_btn" tool_tip="選択したグループをアクティブにします"/>
+		<panel label="グループ" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="フィルターグループ" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="選択したグループに対するアクション"/>
+				<menu_button name="groups_view_btn" tool_tip="表示 / 並べ替えのオプション"/>
+				<menu_button name="plus_btn" tool_tip="グループに参加 / 新規グループを作成します"/>
+				<dnd_button name="minus_btn" tool_tip="選択したグループから脱退"/>
 			</panel>
 		</panel>
 		<panel label="最新" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="オプション"/>
-				<button name="add_friend_btn" tool_tip="選択した住人をフレンドリストに登録"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="人をフィルター" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="選択した人に対するアクション"/>
+				<menu_button name="recent_view_btn" tool_tip="表示 / 並べ替えのオプション"/>
+				<button name="add_friend_btn" tool_tip="フレンド登録を申し出ます"/>
+				<dnd_button name="recent_del_btn" tool_tip="フレンドとして選択されている人を削除"/>
 			</panel>
 		</panel>
+		<panel label="停止" name="blocked_panel">
+			<panel label="ブロックされた住人とオブジェクト" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="プロフィール" name="view_profile_btn" tool_tip="写真、グループ、その他住人情報を表示"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="IM" name="im_btn" tool_tip="インスタントメッセージを開きます"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="コール" name="call_btn" tool_tip="この住人にコールする"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="共有" name="share_btn" tool_tip="インベントリのアイテムを共有する"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="テレポート" name="teleport_btn" tool_tip="テレポートを送ります"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="グループプロフィール" name="group_info_btn" tool_tip="グループプロフィールを表示します"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="グループチャット" name="chat_btn" tool_tip="チャットを開始します"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="グループコール" name="group_call_btn" tool_tip="このグループにコールする"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_pick_info.xml b/indra/newview/skins/default/xui/ja/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_picks.xml b/indra/newview/skins/default/xui/ja/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_place_profile.xml b/indra/newview/skins/default/xui/ja/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_places.xml b/indra/newview/skins/default/xui/ja/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_postcard_message.xml b/indra/newview/skins/default/xui/ja/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml b/indra/newview/skins/default/xui/ja/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ja/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ja/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
old mode 100644
new mode 100755
index b6e344ca48069dd9f025ce7820b38bb472015f6f..ae5391c7bd86b37267a341853d76df7b3ec4d024
--- a/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="チャット" name="chat">
-	<text name="font_size">
-		文字の大きさ:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="小" name="radio" value="0"/>
-		<radio_item label="中" name="radio2" value="1"/>
-		<radio_item label="大" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="チャット中にタイピング動作のアニメーションを再生" name="play_typing_animation"/>
-	<check_box label="オフライン時に受け取った IM をメールで受信" name="send_im_to_email"/>
-	<check_box label="IM とチャット履歴に文字だけ表示する" name="plain_text_chat_history"/>
-	<check_box label="吹き出しチャット" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		IM の表示方法:
-	</text>
-	<text name="requires_restart_label">
-		(再起動後に反映)
-	</text>
-	<radio_group name="chat_window" tool_tip="インスタントメッセージを別フローター、または1つのフローターに複数タブで表示します(要再起動)">
-		<radio_item label="別々のウィンドウ" name="radio" value="0"/>
-		<radio_item label="タブ" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		受信チャットのポップアップを有効にする
-	</text>
-	<check_box label="グループチャット" name="EnableGroupChatPopups" tool_tip="これを選択すると、グループチャットメッセージを受信した際にポップアップが表示されます"/>
-	<check_box label="IM チャット" name="EnableIMChatPopups" tool_tip="これを選択すると、インスタントメッセージを受信した際にポップアップが表示されます"/>
-	<spinner label="近くのチャットメッセージが表示される長さ:" name="nearby_toasts_lifetime"/>
-	<spinner label="近くのチャットメッセージが消えるまでの長さ:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="チャット中にタイピング動作のアニメーションを再生" name="play_typing_animation"/>
+		<check_box label="オフライン時に受け取った IM をメールで受信" name="send_im_to_email"/>
+		<check_box label="フレンドとグループ以外からはコールと IM を受信しない" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			文字の大きさ:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="小規模" name="Small" value="0"/>
+			<item label="中" name="Medium" value="1"/>
+			<item label="大規模" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="吹き出しチャット" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			通知
+		</text>
+		<text name="friend_ims">
+			フレンド IM:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="会話ウィンドウを開く" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="メッセージのポップアップ" name="PopUpMessage" value="toast"/>
+			<item label="Flash ツールバーボタン" name="FlashToolbarButton" value="flash"/>
+			<item label="フィルターなし" name="None" value="none"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			非フレンド IM:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="会話ウィンドウを開く" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="メッセージのポップアップ" name="PopUpMessage" value="toast"/>
+			<item label="Flash ツールバーボタン" name="FlashToolbarButton" value="flash"/>
+			<item label="フィルターなし" name="None" value="none"/>
+		</combo_box>
+		<text name="conference_ims">
+			コンファレンス IM:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="会話ウィンドウを開く" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="メッセージのポップアップ" name="PopUpMessage" value="toast"/>
+			<item label="Flashツールバーボタン" name="FlashToolbarButton" value="flash"/>
+			<item label="フィルターなし" name="None" value="none"/>
+		</combo_box>
+		<text name="group_chat">
+			グループチャット:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="会話ウィンドウを開く" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="メッセージのポップアップ" name="PopUpMessage" value="toast"/>
+			<item label="Flash ツールバーボタン" name="FlashToolbarButton" value="flash"/>
+			<item label="なし" name="None" value="none"/>
+		</combo_box>
+		<text name="nearby_chat">
+			近くのチャット:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="会話ウィンドウを開く" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="メッセージのポップアップ" name="PopUpMessage" value="toast"/>
+			<item label="Flash ツールバーボタン" name="FlashToolBarButton" value="flash"/>
+			<item label="フィルターなし" name="None" value="none"/>
+		</combo_box>
+		<text name="notifications_alert">
+			すべての通知を一時的に受け付けないようにするには、「コミュニケート」&gt;「通知を受けない」を使用します。
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			音の再生:
+		</text>
+		<check_box label="新しい会話" name="new_conversation"/>
+		<check_box label="ボイスコールの着信" name="incoming_voice_call"/>
+		<check_box label="テレポートを渡す" name="teleport_offer"/>
+		<check_box label="アイテムのオファー" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="ログのクリア..." name="clear_log"/>
+		<button label="テキストの削除..." name="delete_transcripts"/>
+		<button label="参照..." label_selected="参照" name="log_path_button"/>
+	</panel>
 	<button label="他の言語..." name="ok_btn"/>
 	<button label="自動置換..." name="autoreplace_showgui"/>
 	<button label="スペルチェック中..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_colors.xml b/indra/newview/skins/default/xui/ja/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
old mode 100644
new mode 100755
index 91e1514e496d38ceb43a79512c8191c846418b65..d70af7e099dd6daba41f9a1cabd7fdbf3a156530
--- a/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ja/panel_preferences_general.xml
@@ -69,9 +69,9 @@
 		<combo_box.item label="一時退席設定なし" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		取り込み中モード時の返事:
+		「通知を受けない」応答:
 	</text>
-	<text_editor name="busy_response">
+	<text_editor name="do_not_disturb_response">
 		log_in_to_change
 	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ja/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_move.xml b/indra/newview/skins/default/xui/ja/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ja/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ja/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ja/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ja/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_region_covenant.xml b/indra/newview/skins/default/xui/ja/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_region_debug.xml b/indra/newview/skins/default/xui/ja/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_region_environment.xml b/indra/newview/skins/default/xui/ja/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_region_estate.xml b/indra/newview/skins/default/xui/ja/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_region_general.xml b/indra/newview/skins/default/xui/ja/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_region_terrain.xml b/indra/newview/skins/default/xui/ja/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_script_ed.xml b/indra/newview/skins/default/xui/ja/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/ja/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/ja/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_script_question_toast.xml b/indra/newview/skins/default/xui/ja/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml b/indra/newview/skins/default/xui/ja/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/ja/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/ja/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml b/indra/newview/skins/default/xui/ja/panel_sidetray_home_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/ja/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_sound_devices.xml b/indra/newview/skins/default/xui/ja/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/ja/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_status_bar.xml b/indra/newview/skins/default/xui/ja/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_sys_well_item.xml b/indra/newview/skins/default/xui/ja/panel_sys_well_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ja/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_voice_effect.xml b/indra/newview/skins/default/xui/ja/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/ja/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/panel_world_map.xml b/indra/newview/skins/default/xui/ja/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/role_actions.xml b/indra/newview/skins/default/xui/ja/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ja/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ja/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
old mode 100644
new mode 100755
index c61c73657fcd41fda1f0a473b97d5613ff5a59d6..4f65c8477bc4725bfa68aff63b9e068c3c290cbb
--- a/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ja/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="オブジェクトを買う" name="Buyobject"/>
 			<combo_box.item label="オブジェクトに支払う" name="Payobject"/>
 			<combo_box.item label="開く" name="Open"/>
+			<combo_box.item label="ズーム" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/ja/strings.xml b/indra/newview/skins/default/xui/ja/strings.xml
old mode 100644
new mode 100755
index 50697e55001e09af83a1a2db7943ea4d30c01f31..b27904c4d74228d989b796d90fd57c0a181f0f1d
--- a/indra/newview/skins/default/xui/ja/strings.xml
+++ b/indra/newview/skins/default/xui/ja/strings.xml
@@ -137,7 +137,7 @@
 		終了
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=ja-JP&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		お使いの古いビューワでは Second Life にアクセスできません。以下のページから新しいビューワをダウンロードしてください:
@@ -622,8 +622,8 @@ support@secondlife.com にお問い合わせください。
 	<string name="AvatarAway">
 		一時退席中
 	</string>
-	<string name="AvatarBusy">
-		取り込み中
+	<string name="AvatarDoNotDisturb">
+		通知を受けない
 	</string>
 	<string name="AvatarMuted">
 		ブロック中
@@ -859,6 +859,12 @@ support@secondlife.com にお問い合わせください。
 	<string name="ST_NO_JOINT">
 		ROOT または JOINT が見つかりません
 	</string>
+	<string name="NearbyChatTitle">
+		近くのチャット
+	</string>
+	<string name="NearbyChatLabel">
+		(近くのチャット)
+	</string>
 	<string name="whisper">
 		のささやき:
 	</string>
@@ -922,12 +928,15 @@ support@secondlife.com にお問い合わせください。
 	<string name="ControlYourCamera">
 		カメラのコントロール
 	</string>
-	<string name="TeleportYourAgent">
-		あなたをテレポート
-	</string>
 	<string name="NotConnected">
 		接続されていません
 	</string>
+	<string name="AgentNameSubst">
+		(あなた)
+	</string>
+	<string name="TeleportYourAgent">
+		あなたをテレポート
+	</string>
 	<string name="SIM_ACCESS_PG">
 		General
 	</string>
@@ -1009,18 +1018,6 @@ support@secondlife.com にお問い合わせください。
 	<string name="dictionary_files">
 		辞書
 	</string>
-	<string name="AvatarSetNotAway">
-		一時退席中解除
-	</string>
-	<string name="AvatarSetAway">
-		一時退席中
-	</string>
-	<string name="AvatarSetNotBusy">
-		取り込み中解除
-	</string>
-	<string name="AvatarSetBusy">
-		取り込み中
-	</string>
 	<string name="shape">
 		シェイプ
 	</string>
@@ -1989,8 +1986,8 @@ support@secondlife.com にお問い合わせください。
 	<string name="PanelContentsNewScript">
 		新規スクリプト
 	</string>
-	<string name="BusyModeResponseDefault">
-		メッセージを送った住人は、誰にも邪魔をされたくないため現在「取り込み中」モードです。  あなたのメッセージは、あとで確認できるように IM パネルに表示されます。
+	<string name="DoNotDisturbModeResponseDefault">
+		この住民が「通知を受けない」をオンにすると、あなたのメッセージが後で表示されるようになります。
 	</string>
 	<string name="MuteByName">
 		(名称別)
@@ -2103,9 +2100,6 @@ support@secondlife.com にお問い合わせください。
 	<string name="GroupMoneyDate">
 		[year,datetime,utc]年[mth,datetime,utc]月[day,datetime,utc]日[weekday,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		内容
-	</string>
 	<string name="AcquiredItems">
 		取得アイテム
 	</string>
@@ -3877,7 +3871,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 		General リージョン
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		この区画外にアバターを見えるようにして、チャットも許可
+		この区画内のアバターは、この区画の外にいるアバターからは見ることも聞くこともできません。
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		地域(リージョン)が再構築されるまで、移動するオブジェクトは正しく動作しない可能性があります。
@@ -3954,6 +3948,12 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="IM_unblock_only_groups_friends">
 		このメッセージを表示するには、「環境設定」の「プライバシー」で「フレンドとグループ以外からはコールと IM を受信しない」チェックボックスをオフにします。
 	</string>
+	<string name="OnlineStatus">
+		オンライン
+	</string>
+	<string name="OfflineStatus">
+		オフライン
+	</string>
 	<string name="answered_call">
 		相手がコールを受けました
 	</string>
@@ -3963,6 +3963,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="you_joined_call">
 		ボイスコールに参加しました
 	</string>
+	<string name="you_auto_rejected_call-im">
+		「通知を受けない」がオンのときに、自動的にボイスコールを拒否しました。
+	</string>
 	<string name="name_started_call">
 		[NAME] はボイスコールを開始します
 	</string>
@@ -3979,7 +3982,7 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 		接続中...
 	</string>
 	<string name="conference-title">
-		アドホックコンファレンス
+		複数人チャット
 	</string>
 	<string name="conference-title-incoming">
 		[AGENT_NAME] とコンファレンスする
@@ -4859,6 +4862,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="Command_Chat_Label">
 		チャット
 	</string>
+	<string name="Command_Conversations_Label">
+		会話
+	</string>
 	<string name="Command_Compass_Label">
 		コンパス
 	</string>
@@ -4934,6 +4940,9 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="Command_Chat_Tooltip">
 		近くの人と文字チャットする
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		全員との会話
+	</string>
 	<string name="Command_Compass_Tooltip">
 		コンパス
 	</string>
@@ -5063,4 +5072,13 @@ www.secondlife.com から最新バージョンをダウンロードしてくだ
 	<string name="UserDictionary">
 		[User]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		会話はログに記録されていません。ログの記録を開始するには、「環境設定」&gt;「チャット」で「保存: ログのみ」または「保存: ログと会話のテキスト」を選択します。
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		これ以上の会話は記録されません。ログの記録を再開するには、「環境設定」&gt;「チャット」で「保存: ログのみ」または「保存: ログと会話のテキスト」を選択します。
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		ログイン時の会話はありません。誰かにご連絡した後、または誰かがあなたに連絡した後、ログエントリがここに表示されます。
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/ja/teleport_strings.xml b/indra/newview/skins/default/xui/ja/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ja/xui_version.xml b/indra/newview/skins/default/xui/ja/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_about.xml b/indra/newview/skins/default/xui/pl/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_about_land.xml b/indra/newview/skins/default/xui/pl/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_activeim.xml b/indra/newview/skins/default/xui/pl/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_animation_preview.xml b/indra/newview/skins/default/xui/pl/floater_animation_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_auction.xml b/indra/newview/skins/default/xui/pl/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pl/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pl/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_beacons.xml b/indra/newview/skins/default/xui/pl/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_build_options.xml b/indra/newview/skins/default/xui/pl/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pl/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_bumps.xml b/indra/newview/skins/default/xui/pl/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_contents.xml b/indra/newview/skins/default/xui/pl/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/pl/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_land.xml b/indra/newview/skins/default/xui/pl/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_buy_object.xml b/indra/newview/skins/default/xui/pl/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_camera.xml b/indra/newview/skins/default/xui/pl/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_choose_group.xml b/indra/newview/skins/default/xui/pl/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_color_picker.xml b/indra/newview/skins/default/xui/pl/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_critical.xml b/indra/newview/skins/default/xui/pl/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_display_name.xml b/indra/newview/skins/default/xui/pl/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_event.xml b/indra/newview/skins/default/xui/pl/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_font_test.xml b/indra/newview/skins/default/xui/pl/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_gesture.xml b/indra/newview/skins/default/xui/pl/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_god_tools.xml b/indra/newview/skins/default/xui/pl/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pl/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_help_browser.xml b/indra/newview/skins/default/xui/pl/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_hud.xml b/indra/newview/skins/default/xui/pl/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_im_container.xml b/indra/newview/skins/default/xui/pl/floater_im_container.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_im_session.xml b/indra/newview/skins/default/xui/pl/floater_im_session.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_image_preview.xml b/indra/newview/skins/default/xui/pl/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_incoming_call.xml b/indra/newview/skins/default/xui/pl/floater_incoming_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_inspect.xml b/indra/newview/skins/default/xui/pl/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory.xml b/indra/newview/skins/default/xui/pl/floater_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pl/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pl/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_joystick.xml b/indra/newview/skins/default/xui/pl/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_lagmeter.xml b/indra/newview/skins/default/xui/pl/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_land_holdings.xml b/indra/newview/skins/default/xui/pl/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pl/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pl/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_map.xml b/indra/newview/skins/default/xui/pl/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_media_browser.xml b/indra/newview/skins/default/xui/pl/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_media_settings.xml b/indra/newview/skins/default/xui/pl/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pl/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_moveview.xml b/indra/newview/skins/default/xui/pl/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_mute_object.xml b/indra/newview/skins/default/xui/pl/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml b/indra/newview/skins/default/xui/pl/floater_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_openobject.xml b/indra/newview/skins/default/xui/pl/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pl/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_pay.xml b/indra/newview/skins/default/xui/pl/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_pay_object.xml b/indra/newview/skins/default/xui/pl/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pl/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_post_process.xml b/indra/newview/skins/default/xui/pl/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_postcard.xml b/indra/newview/skins/default/xui/pl/floater_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_preferences.xml b/indra/newview/skins/default/xui/pl/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_animation.xml b/indra/newview/skins/default/xui/pl/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pl/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pl/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_sound.xml b/indra/newview/skins/default/xui/pl/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_preview_texture.xml b/indra/newview/skins/default/xui/pl/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_publish_classified.xml b/indra/newview/skins/default/xui/pl/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_region_debug_console.xml b/indra/newview/skins/default/xui/pl/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_region_info.xml b/indra/newview/skins/default/xui/pl/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_report_abuse.xml b/indra/newview/skins/default/xui/pl/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug.xml b/indra/newview/skins/default/xui/pl/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/pl/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_script_limits.xml b/indra/newview/skins/default/xui/pl/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_script_preview.xml b/indra/newview/skins/default/xui/pl/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_script_queue.xml b/indra/newview/skins/default/xui/pl/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_script_search.xml b/indra/newview/skins/default/xui/pl/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_search.xml b/indra/newview/skins/default/xui/pl/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_select_key.xml b/indra/newview/skins/default/xui/pl/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_sell_land.xml b/indra/newview/skins/default/xui/pl/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_settings_debug.xml b/indra/newview/skins/default/xui/pl/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_snapshot.xml b/indra/newview/skins/default/xui/pl/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_sound_preview.xml b/indra/newview/skins/default/xui/pl/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_stats.xml b/indra/newview/skins/default/xui/pl/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_sys_well.xml b/indra/newview/skins/default/xui/pl/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_telehub.xml b/indra/newview/skins/default/xui/pl/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pl/floater_texture_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_tools.xml b/indra/newview/skins/default/xui/pl/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_top_objects.xml b/indra/newview/skins/default/xui/pl/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_tos.xml b/indra/newview/skins/default/xui/pl/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_url_entry.xml b/indra/newview/skins/default/xui/pl/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_voice_controls.xml b/indra/newview/skins/default/xui/pl/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_voice_effect.xml b/indra/newview/skins/default/xui/pl/floater_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_web_content.xml b/indra/newview/skins/default/xui/pl/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pl/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_window_size.xml b/indra/newview/skins/default/xui/pl/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/floater_world_map.xml b/indra/newview/skins/default/xui/pl/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/inspect_avatar.xml b/indra/newview/skins/default/xui/pl/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/inspect_group.xml b/indra/newview/skins/default/xui/pl/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/inspect_object.xml b/indra/newview/skins/default/xui/pl/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/inspect_remote_object.xml b/indra/newview/skins/default/xui/pl/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/language_settings.xml b/indra/newview/skins/default/xui/pl/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/pl/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_other.xml b/indra/newview/skins/default/xui/pl/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_attachment_self.xml b/indra/newview/skins/default/xui/pl/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pl/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_other.xml b/indra/newview/skins/default/xui/pl/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_avatar_self.xml b/indra/newview/skins/default/xui/pl/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_bottomtray.xml b/indra/newview/skins/default/xui/pl/menu_bottomtray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_cof_attachment.xml b/indra/newview/skins/default/xui/pl/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_cof_body_part.xml b/indra/newview/skins/default/xui/pl/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_cof_clothing.xml b/indra/newview/skins/default/xui/pl/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_cof_gear.xml b/indra/newview/skins/default/xui/pl/menu_cof_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_edit.xml b/indra/newview/skins/default/xui/pl/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_favorites.xml b/indra/newview/skins/default/xui/pl/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_gesture_gear.xml b/indra/newview/skins/default/xui/pl/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_group_plus.xml b/indra/newview/skins/default/xui/pl/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pl/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pl/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pl/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/pl/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory.xml b/indra/newview/skins/default/xui/pl/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_add.xml b/indra/newview/skins/default/xui/pl/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_land.xml b/indra/newview/skins/default/xui/pl/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_landmark.xml b/indra/newview/skins/default/xui/pl/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_login.xml b/indra/newview/skins/default/xui/pl/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_media_ctrl.xml b/indra/newview/skins/default/xui/pl/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_mini_map.xml b/indra/newview/skins/default/xui/pl/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_navbar.xml b/indra/newview/skins/default/xui/pl/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml b/indra/newview/skins/default/xui/pl/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pl/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_object.xml b/indra/newview/skins/default/xui/pl/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_object_icon.xml b/indra/newview/skins/default/xui/pl/menu_object_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pl/menu_outfit_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_outfit_tab.xml b/indra/newview/skins/default/xui/pl/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_participant_list.xml b/indra/newview/skins/default/xui/pl/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups.xml b/indra/newview/skins/default/xui/pl/menu_people_groups.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pl/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_picks.xml b/indra/newview/skins/default/xui/pl/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_picks_plus.xml b/indra/newview/skins/default/xui/pl/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_place.xml b/indra/newview/skins/default/xui/pl/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_place_add_button.xml b/indra/newview/skins/default/xui/pl/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pl/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pl/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_save_outfit.xml b/indra/newview/skins/default/xui/pl/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_script_chiclet.xml b/indra/newview/skins/default/xui/pl/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_slurl.xml b/indra/newview/skins/default/xui/pl/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/pl/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_text_editor.xml b/indra/newview/skins/default/xui/pl/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_topinfobar.xml b/indra/newview/skins/default/xui/pl/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_agent.xml b/indra/newview/skins/default/xui/pl/menu_url_agent.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_group.xml b/indra/newview/skins/default/xui/pl/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_http.xml b/indra/newview/skins/default/xui/pl/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_inventory.xml b/indra/newview/skins/default/xui/pl/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_map.xml b/indra/newview/skins/default/xui/pl/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_objectim.xml b/indra/newview/skins/default/xui/pl/menu_url_objectim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_parcel.xml b/indra/newview/skins/default/xui/pl/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_slapp.xml b/indra/newview/skins/default/xui/pl/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_slurl.xml b/indra/newview/skins/default/xui/pl/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_url_teleport.xml b/indra/newview/skins/default/xui/pl/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_viewer.xml b/indra/newview/skins/default/xui/pl/menu_viewer.xml
old mode 100644
new mode 100755
index 24c961fa2659b0096c9563329c12831a0d7d9f62..e1725fc30865db1f805db6ed7906fd707891c37a
--- a/indra/newview/skins/default/xui/pl/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pl/menu_viewer.xml
@@ -236,7 +236,7 @@
 		<menu label="Renderowanie" name="Rendering">
 			<menu_item_check label="Osie" name="Axes"/>
 			<menu_item_check label="Tryb obrazu szkieletowego" name="Wireframe"/>
-			<menu_item_check label="Oświetlenie i cienie" name="Lighting and Shadows"/>
+			<menu_item_check label="Oświetlenie i cienie" name="Advanced Lighting Model"/>
 			<menu_item_check label="Cienie Słońca/Księżyca/Projektory" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO and wygładzanie cienia" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Globalne oświetlenie (eksperymentalne)" name="Global Illumination"/>
diff --git a/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pl/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pl/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml b/indra/newview/skins/default/xui/pl/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/mime_types.xml b/indra/newview/skins/default/xui/pl/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/mime_types_linux.xml b/indra/newview/skins/default/xui/pl/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/mime_types_mac.xml b/indra/newview/skins/default/xui/pl/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/notifications.xml b/indra/newview/skins/default/xui/pl/notifications.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/pl/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_active_object_row.xml b/indra/newview/skins/default/xui/pl/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pl/panel_avatar_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/pl/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/pl/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pl/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_classified_info.xml b/indra/newview/skins/default/xui/pl/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/pl/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/pl/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_cof_wearables.xml b/indra/newview/skins/default/xui/pl/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/pl/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/pl/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pl/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_classified.xml b/indra/newview/skins/default/xui/pl/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml b/indra/newview/skins/default/xui/pl/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml b/indra/newview/skins/default/xui/pl/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_hair.xml b/indra/newview/skins/default/xui/pl/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml b/indra/newview/skins/default/xui/pl/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pants.xml b/indra/newview/skins/default/xui/pl/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_physics.xml b/indra/newview/skins/default/xui/pl/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_pick.xml b/indra/newview/skins/default/xui/pl/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_profile.xml b/indra/newview/skins/default/xui/pl/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shape.xml b/indra/newview/skins/default/xui/pl/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml b/indra/newview/skins/default/xui/pl/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skin.xml b/indra/newview/skins/default/xui/pl/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_socks.xml b/indra/newview/skins/default/xui/pl/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pl/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml b/indra/newview/skins/default/xui/pl/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/pl/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pl/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_general.xml b/indra/newview/skins/default/xui/pl/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pl/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_invite.xml b/indra/newview/skins/default/xui/pl/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_land_money.xml b/indra/newview/skins/default/xui/pl/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_list_item.xml b/indra/newview/skins/default/xui/pl/panel_group_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_notices.xml b/indra/newview/skins/default/xui/pl/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_notify.xml b/indra/newview/skins/default/xui/pl/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_group_roles.xml b/indra/newview/skins/default/xui/pl/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pl/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_inventory_item.xml b/indra/newview/skins/default/xui/pl/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_landmark_info.xml b/indra/newview/skins/default/xui/pl/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_landmarks.xml b/indra/newview/skins/default/xui/pl/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_login.xml b/indra/newview/skins/default/xui/pl/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_main_inventory.xml b/indra/newview/skins/default/xui/pl/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_me.xml b/indra/newview/skins/default/xui/pl/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pl/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pl/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pl/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_nearby_media.xml b/indra/newview/skins/default/xui/pl/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_notify_textbox.xml b/indra/newview/skins/default/xui/pl/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pl/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pl/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pl/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_list.xml b/indra/newview/skins/default/xui/pl/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/pl/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_people.xml b/indra/newview/skins/default/xui/pl/panel_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_pick_info.xml b/indra/newview/skins/default/xui/pl/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_picks.xml b/indra/newview/skins/default/xui/pl/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_place_profile.xml b/indra/newview/skins/default/xui/pl/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_places.xml b/indra/newview/skins/default/xui/pl/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pl/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pl/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pl/panel_preferences_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_colors.xml b/indra/newview/skins/default/xui/pl/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_general.xml b/indra/newview/skins/default/xui/pl/panel_preferences_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pl/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_move.xml b/indra/newview/skins/default/xui/pl/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pl/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pl/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pl/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pl/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_region_covenant.xml b/indra/newview/skins/default/xui/pl/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_region_debug.xml b/indra/newview/skins/default/xui/pl/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_region_estate.xml b/indra/newview/skins/default/xui/pl/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_region_general.xml b/indra/newview/skins/default/xui/pl/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_region_terrain.xml b/indra/newview/skins/default/xui/pl/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_region_texture.xml b/indra/newview/skins/default/xui/pl/panel_region_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_script_ed.xml b/indra/newview/skins/default/xui/pl/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pl/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pl/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/pl/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray.xml b/indra/newview/skins/default/xui/pl/panel_side_tray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pl/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pl/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_status_bar.xml b/indra/newview/skins/default/xui/pl/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pl/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_voice_effect.xml b/indra/newview/skins/default/xui/pl/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/pl/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/panel_world_map.xml b/indra/newview/skins/default/xui/pl/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/role_actions.xml b/indra/newview/skins/default/xui/pl/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pl/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pl/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pl/sidepanel_task_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/strings.xml b/indra/newview/skins/default/xui/pl/strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/teleport_strings.xml b/indra/newview/skins/default/xui/pl/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pl/xui_version.xml b/indra/newview/skins/default/xui/pl/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_about.xml b/indra/newview/skins/default/xui/pt/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_about_land.xml b/indra/newview/skins/default/xui/pt/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_activeim.xml b/indra/newview/skins/default/xui/pt/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/pt/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_auction.xml b/indra/newview/skins/default/xui/pt/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_autoreplace.xml b/indra/newview/skins/default/xui/pt/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar.xml b/indra/newview/skins/default/xui/pt/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml b/indra/newview/skins/default/xui/pt/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml b/indra/newview/skins/default/xui/pt/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_beacons.xml b/indra/newview/skins/default/xui/pt/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_build_options.xml b/indra/newview/skins/default/xui/pt/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml b/indra/newview/skins/default/xui/pt/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_bumps.xml b/indra/newview/skins/default/xui/pt/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_contents.xml b/indra/newview/skins/default/xui/pt/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/pt/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_land.xml b/indra/newview/skins/default/xui/pt/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_buy_object.xml b/indra/newview/skins/default/xui/pt/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_camera.xml b/indra/newview/skins/default/xui/pt/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_chat_bar.xml b/indra/newview/skins/default/xui/pt/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_choose_group.xml b/indra/newview/skins/default/xui/pt/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_color_picker.xml b/indra/newview/skins/default/xui/pt/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_conversation_log.xml b/indra/newview/skins/default/xui/pt/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ae7dd3c4411db9b0735205e8ccdb027ecf49764b
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="REGISTRO DE CONVERSA">
+	<panel name="buttons_panel">
+		<filter_editor label="Filtrar pessoas" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Opções de exibição/ordenação"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Ações em uma pessoa ou um grupo selecionado"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_conversation_preview.xml b/indra/newview/skins/default/xui/pt/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..97a2e8327c0067528df61c8ad1943e3b397c84af
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="CONVERSA:">
+	<floater.string name="Title">
+		CONVERSA: [NAME]
+	</floater.string>
+	<text name="page_label" value="Página"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_critical.xml b/indra/newview/skins/default/xui/pt/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/pt/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_destinations.xml b/indra/newview/skins/default/xui/pt/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_display_name.xml b/indra/newview/skins/default/xui/pt/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/pt/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/pt/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/pt/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_environment_settings.xml b/indra/newview/skins/default/xui/pt/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_event.xml b/indra/newview/skins/default/xui/pt/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_fast_timers.xml b/indra/newview/skins/default/xui/pt/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_font_test.xml b/indra/newview/skins/default/xui/pt/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_gesture.xml b/indra/newview/skins/default/xui/pt/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_god_tools.xml b/indra/newview/skins/default/xui/pt/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml b/indra/newview/skins/default/xui/pt/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_help_browser.xml b/indra/newview/skins/default/xui/pt/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_how_to.xml b/indra/newview/skins/default/xui/pt/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_hud.xml b/indra/newview/skins/default/xui/pt/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_im_container.xml b/indra/newview/skins/default/xui/pt/floater_im_container.xml
old mode 100644
new mode 100755
index 0fbb826a964ff2d22584daf2271862d8f121bfe6..a1cea72b1e01ef3ea9ca8024897e3da7f4411f17
--- a/indra/newview/skins/default/xui/pt/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="CONVERSAS"/>
+<multi_floater name="floater_im_box" title="CONVERSAS">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Opções de exibição/ordenação"/>
+					<button name="add_btn" tool_tip="Iniciar uma nova conversa"/>
+					<button name="speak_btn" tool_tip="Fale com pessoas usando seu microfone"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Recolher/expandir esta lista"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Recolher este painel"/>
+					<text name="stub_textbox">
+						Esta conversa está em uma janela separada.   [secondlife:/// Trazer de volta.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_im_session.xml b/indra/newview/skins/default/xui/pt/floater_im_session.xml
old mode 100644
new mode 100755
index 5543ffa41da8aa8b8a777f2839913f621595373c..9f6a7a06ad0545d94af892d3ba670d04cb0dff98
--- a/indra/newview/skins/default/xui/pt/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/pt/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="Para" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] foi convidado para a conversa."/>
+	<floater.string name="multiple_participants_added" value="[NAME] foram convidados para a conversa."/>
+	<floater.string name="tooltip_to_separate_window" value="Mover esta conversa para uma janela separada"/>
+	<floater.string name="tooltip_to_main_window" value="Mover esta conversa para a janela principal"/>
+	<floater.string name="start_call_button_tooltip" value="Abrir conexão por voz"/>
+	<floater.string name="end_call_button_tooltip" value="Encerrar conexão por voz"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Recolher este painel"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Recolher lista de participantes"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Expandir a lista de participantes"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Opções de exibição/ordenação"/>
+				<menu_button name="gear_btn" tool_tip="Ações nas pessoas selecionadas"/>
+				<button name="add_btn" tool_tip="Adicionar alguém a esta conversa"/>
+				<button name="voice_call_btn" tool_tip="Abrir conexão por voz"/>
+				<button name="close_btn" tool_tip="Encerrar esta conversa"/>
+				<button name="expand_collapse_btn" tool_tip="Recolher/expandir este painel"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Traduzir bate-papo" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="Para" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Mostrar/ocultar painel de mensagens"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_image_preview.xml b/indra/newview/skins/default/xui/pt/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_import_collada.xml b/indra/newview/skins/default/xui/pt/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
old mode 100644
new mode 100755
index 6344258fa0c82751e305d76b103524ceb8ca1f43..1e86f847adea43704036b6eb62c1cf325a64757f
--- a/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/pt/floater_incoming_call.xml
@@ -25,9 +25,9 @@
 		Sair do [CURRENT_CHAT] e entrar neste bate-papo de voz?
 	</floater.string>
 	<text name="question">
-		Sair do [CURRENT_CHAT] e entrar neste bate-papo?
+		Se você atender, será desconectado de suas conversas de voz atuais.
 	</text>
-	<button label="Aceitar" label_selected="Aceitar" name="Accept"/>
-	<button label="Rejeitar" label_selected="Rejeitar" name="Reject"/>
-	<button label="Enviar MI" name="Start IM"/>
+	<button label="Atender" label_selected="Atender" name="Accept"/>
+	<button label="Ignorar" label_selected="Ignorar" name="Reject"/>
+	<button label="Iniciar MI em vez disso" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_inspect.xml b/indra/newview/skins/default/xui/pt/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/pt/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/pt/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_joystick.xml b/indra/newview/skins/default/xui/pt/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_lagmeter.xml b/indra/newview/skins/default/xui/pt/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_land_holdings.xml b/indra/newview/skins/default/xui/pt/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/pt/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml b/indra/newview/skins/default/xui/pt/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_map.xml b/indra/newview/skins/default/xui/pt/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_media_browser.xml b/indra/newview/skins/default/xui/pt/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_media_settings.xml b/indra/newview/skins/default/xui/pt/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml b/indra/newview/skins/default/xui/pt/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/pt/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_model_preview.xml b/indra/newview/skins/default/xui/pt/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_moveview.xml b/indra/newview/skins/default/xui/pt/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_mute_object.xml b/indra/newview/skins/default/xui/pt/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_my_appearance.xml b/indra/newview/skins/default/xui/pt/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_my_inventory.xml b/indra/newview/skins/default/xui/pt/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_object_weights.xml b/indra/newview/skins/default/xui/pt/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_openobject.xml b/indra/newview/skins/default/xui/pt/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/pt/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml b/indra/newview/skins/default/xui/pt/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/pt/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index 182f2513e0c6f0e413aae43ef1687fb423cac842..d04cf2a173c92556db45252d9f41dd1cfe5cd0b8
--- a/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/pt/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Exibir:
 			</text>
-			<check_box label="Mundo" name="show_world"/>
+			<check_box label="Testar" name="show_world"/>
 			<check_box label="Apenas móveis" name="show_world_movables_only"/>
 			<check_box label="Navmesh" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/pt/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/pt/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_pay.xml b/indra/newview/skins/default/xui/pt/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_pay_object.xml b/indra/newview/skins/default/xui/pt/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_people.xml b/indra/newview/skins/default/xui/pt/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml b/indra/newview/skins/default/xui/pt/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_picks.xml b/indra/newview/skins/default/xui/pt/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_places.xml b/indra/newview/skins/default/xui/pt/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_post_process.xml b/indra/newview/skins/default/xui/pt/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences.xml b/indra/newview/skins/default/xui/pt/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/pt/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_animation.xml b/indra/newview/skins/default/xui/pt/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml b/indra/newview/skins/default/xui/pt/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml b/indra/newview/skins/default/xui/pt/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_sound.xml b/indra/newview/skins/default/xui/pt/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_preview_texture.xml b/indra/newview/skins/default/xui/pt/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml b/indra/newview/skins/default/xui/pt/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_publish_classified.xml b/indra/newview/skins/default/xui/pt/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_region_debug_console.xml b/indra/newview/skins/default/xui/pt/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_region_info.xml b/indra/newview/skins/default/xui/pt/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_report_abuse.xml b/indra/newview/skins/default/xui/pt/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug.xml b/indra/newview/skins/default/xui/pt/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/pt/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_script_limits.xml b/indra/newview/skins/default/xui/pt/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_script_preview.xml b/indra/newview/skins/default/xui/pt/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_script_queue.xml b/indra/newview/skins/default/xui/pt/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_script_search.xml b/indra/newview/skins/default/xui/pt/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_search.xml b/indra/newview/skins/default/xui/pt/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_select_key.xml b/indra/newview/skins/default/xui/pt/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_sell_land.xml b/indra/newview/skins/default/xui/pt/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_settings_debug.xml b/indra/newview/skins/default/xui/pt/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_snapshot.xml b/indra/newview/skins/default/xui/pt/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_sound_devices.xml b/indra/newview/skins/default/xui/pt/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_sound_preview.xml b/indra/newview/skins/default/xui/pt/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_spellcheck.xml b/indra/newview/skins/default/xui/pt/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/pt/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_stats.xml b/indra/newview/skins/default/xui/pt/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_sys_well.xml b/indra/newview/skins/default/xui/pt/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_telehub.xml b/indra/newview/skins/default/xui/pt/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/pt/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/pt/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index a75cf34a9447d172e2b21ba52159eb530faf4e16..ba4ef0afdefb476bace1aec51220305be833edd6
--- a/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/pt/floater_texture_ctrl.xml
@@ -19,7 +19,7 @@
 	<button label="Padrão" label_selected="Padrão" name="Default"/>
 	<button label="Branco" label_selected="Branco" name="Blank"/>
 	<button label="Nenhum" label_selected="Nenhum" name="None"/>
-	<check_box initial_value="true" label="Visualização em tempo real" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="Inscrever-se agora" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Visualização desativada"/>
 	<filter_editor label="Filtrar texturas" name="inventory search editor"/>
 	<check_box initial_value="false" label="Exibir pastas" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/pt/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/pt/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_tools.xml b/indra/newview/skins/default/xui/pt/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_top_objects.xml b/indra/newview/skins/default/xui/pt/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_tos.xml b/indra/newview/skins/default/xui/pt/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_toybox.xml b/indra/newview/skins/default/xui/pt/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_translation_settings.xml b/indra/newview/skins/default/xui/pt/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_url_entry.xml b/indra/newview/skins/default/xui/pt/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/pt/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..de7aa2df12e78ad784dce48667f74acf5a9af823
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="VOLUME DO BATE-PAPO DE VOZ">
+	<slider label="Bate-papo de voz" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_controls.xml b/indra/newview/skins/default/xui/pt/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
old mode 100644
new mode 100755
index b29ca3d699fff88bb9221975865bcf138fce9a10..71d3c33ae57f5fd1cf4eb0c371a2fc09be99b2de
--- a/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/pt/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Lugares" name="voice_effects" title="EFEITOS DE VOZ">
+<floater label="Lugares" name="voice_effects" title="AMOSTRA DE DISTORÇÃO DE VOZ">
 	<string name="no_voice_effect">
 		(Não distorcer voz)
 	</string>
diff --git a/indra/newview/skins/default/xui/pt/floater_voice_volume.xml b/indra/newview/skins/default/xui/pt/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dae47a99ae238566d9490b01e95e468a20fb06eb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="VOLUME DE VOZ">
+	<slider name="volume_slider" tool_tip="Volume de voz" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/pt/floater_web_content.xml b/indra/newview/skins/default/xui/pt/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/pt/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_window_size.xml b/indra/newview/skins/default/xui/pt/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/floater_world_map.xml b/indra/newview/skins/default/xui/pt/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/inspect_avatar.xml b/indra/newview/skins/default/xui/pt/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/inspect_group.xml b/indra/newview/skins/default/xui/pt/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/inspect_object.xml b/indra/newview/skins/default/xui/pt/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/inspect_remote_object.xml b/indra/newview/skins/default/xui/pt/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/language_settings.xml b/indra/newview/skins/default/xui/pt/language_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/pt/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_other.xml b/indra/newview/skins/default/xui/pt/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_attachment_self.xml b/indra/newview/skins/default/xui/pt/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml b/indra/newview/skins/default/xui/pt/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_other.xml b/indra/newview/skins/default/xui/pt/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_avatar_self.xml b/indra/newview/skins/default/xui/pt/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml b/indra/newview/skins/default/xui/pt/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml b/indra/newview/skins/default/xui/pt/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml b/indra/newview/skins/default/xui/pt/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_cof_gear.xml b/indra/newview/skins/default/xui/pt/menu_cof_gear.xml
old mode 100644
new mode 100755
index 8716992a5e0389c3f1c0cdfba34f3c9e4bde2550..b59895573ee28d06abfb5a0f4ddba59929c8c22a
--- a/indra/newview/skins/default/xui/pt/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<menu name="Gear COF">
+<toggleable_menu name="Gear COF">
 	<menu label="Roupas novas" name="COF.Gear.New_Clothes"/>
-	<menu label="Nova parte do corpo" name="COF.Geear.New_Body_Parts"/>
-</menu>
+	<menu label="Novas partes do corpo" name="COF.Gear.New_Body_Parts"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_conversation.xml b/indra/newview/skins/default/xui/pt/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..01316b887d4b17c83b4ef82608a75e4f72507f40
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Encerrar conversa" name="close_conversation"/>
+	<menu_item_call label="Abrir conversa de voz" name="open_voice_conversation"/>
+	<menu_item_call label="Desconectar de voz" name="disconnect_from_voice"/>
+	<menu_item_call label="Exibir perfil" name="view_profile"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Oferecer teletransporte" name="offer_teleport"/>
+	<menu_item_call label="Chamada de voz" name="voice_call"/>
+	<menu_item_call label="Histórico de bate-papo..." name="chat_history"/>
+	<menu_item_call label="Adicionar amigo" name="add_friend"/>
+	<menu_item_call label="Remover amigo" name="remove_friend"/>
+	<menu_item_call label="Remover amigos" name="remove_friends"/>
+	<menu_item_call label="Convidar para entrar no grupo..." name="invite_to_group"/>
+	<menu_item_call label="Mais zoom" name="zoom_in"/>
+	<menu_item_call label="Mapa" name="map"/>
+	<menu_item_call label="Compartilhar" name="share"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_check label="Bloquear voz" name="block_unblock"/>
+	<menu_item_check label="Bloquear texto" name="MuteText"/>
+	<menu_item_call label="Perfil do grupo" name="group_profile"/>
+	<menu_item_call label="Ativar grupo" name="activate_group"/>
+	<menu_item_call label="Sair do grupo" name="leave_group"/>
+	<context_menu label="Opções do moderador &gt;" name="Moderator Options">
+		<menu_item_check label="Pode bater papo por escrito" name="AllowTextChat"/>
+		<menu_item_call label="Silenciar este participante" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Desfazer silenciar deste participante" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Silenciar todos" name="ModerateVoiceMute"/>
+		<menu_item_call label="Desfazer silenciar para todos" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/pt/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..616e6db46e93909ce5d4efe37b1df95faa47f128
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="MI..." name="IM"/>
+	<menu_item_call label="Chamada de voz..." name="Call"/>
+	<menu_item_call label="Abrir histórico de bate-papo..." name="Chat history"/>
+	<menu_item_call label="Exibir perfil" name="View Profile"/>
+	<menu_item_call label="Oferecer teletransporte" name="teleport"/>
+	<menu_item_call label="Adicionar amigo" name="add_friend"/>
+	<menu_item_call label="Remover amigo" name="remove_friend"/>
+	<menu_item_call label="Convidar para entrar no grupo..." name="Invite"/>
+	<menu_item_call label="Mapa" name="Map"/>
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Bloquear/desbloquear" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/pt/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cab81175a08cb4cce45e64371eee71d8b66e6445
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Ordenar por nome" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por data" name="sort_by_date"/>
+	<menu_item_check label="Ordenar com amigos acima" name="sort_by_friends"/>
+	<menu_item_call label="Exibir histórico de Bate-papo local..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_edit.xml b/indra/newview/skins/default/xui/pt/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_favorites.xml b/indra/newview/skins/default/xui/pt/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml b/indra/newview/skins/default/xui/pt/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_group_plus.xml b/indra/newview/skins/default/xui/pt/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml b/indra/newview/skins/default/xui/pt/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_im_conversation.xml b/indra/newview/skins/default/xui/pt/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a8434dc3364e0e7f007f1d307570f896bf3162b9
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Exibir perfil" name="View Profile"/>
+	<menu_item_call label="Adicionar amigo" name="Add Friend"/>
+	<menu_item_call label="Remover amigo" name="remove_friend"/>
+	<menu_item_call label="Oferecer teletransporte" name="offer_teleport"/>
+	<menu_item_call label="Convidar para entrar no grupo..." name="invite_to_group"/>
+	<menu_item_call label="Histórico de bate-papo..." name="chat_history"/>
+	<menu_item_call label="Mais zoom" name="zoom_in"/>
+	<menu_item_call label="Mapa" name="map"/>
+	<menu_item_call label="Compartilhar" name="Share"/>
+	<menu_item_call label="Pagar" name="Pay"/>
+	<menu_item_check label="Bloquear voz" name="Block/Unblock"/>
+	<menu_item_check label="Bloquear texto" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/pt/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..398b890f667f3f5bf27a5745e5c1d1b45ea55f9a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Exibição compacta" name="compact_view"/>
+	<menu_item_check label="Exibição expandida" name="expanded_view"/>
+	<menu_item_check label="Mostrar hora" name="IMShowTime"/>
+	<menu_item_check label="Mostrar nomes em conversas individuais" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/pt/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/pt/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/pt/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/pt/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/pt/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory.xml b/indra/newview/skins/default/xui/pt/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_add.xml b/indra/newview/skins/default/xui/pt/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_land.xml b/indra/newview/skins/default/xui/pt/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_landmark.xml b/indra/newview/skins/default/xui/pt/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_login.xml b/indra/newview/skins/default/xui/pt/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_media_ctrl.xml b/indra/newview/skins/default/xui/pt/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_mini_map.xml b/indra/newview/skins/default/xui/pt/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/pt/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_navbar.xml b/indra/newview/skins/default/xui/pt/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_nearby_chat.xml b/indra/newview/skins/default/xui/pt/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml b/indra/newview/skins/default/xui/pt/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_object.xml b/indra/newview/skins/default/xui/pt/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_object_icon.xml b/indra/newview/skins/default/xui/pt/menu_object_icon.xml
old mode 100644
new mode 100755
index 7af760a6ee4c7ed140fd8bdf3eba2254dd1eed70..df224a88fa290564617d86c3d178ee9719e0f372
--- a/indra/newview/skins/default/xui/pt/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/pt/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Perfil do objeto..." name="Object Profile"/>
 	<menu_item_call label="Bloquear..." name="Block"/>
+	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
+	<menu_item_call label="Teletransportar para lugar do objeto" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml b/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml
old mode 100644
new mode 100755
index 894f1d741cf570a52a3b5c0b018f8cf326f40700..3602bdaac42b979ad96b6c928acfdc5a5bb9a880
--- a/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/pt/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Novo cabelo" name="New Hair"/>
 		<menu_item_call label="Novos olhos" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Expandir todas as pastas" name="expand"/>
+	<menu_item_call label="Recolher todas as pastas" name="collapse"/>
 	<menu_item_call label="Renomear look" name="rename"/>
 	<menu_item_call label="Excluir visual" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml b/indra/newview/skins/default/xui/pt/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_participant_list.xml b/indra/newview/skins/default/xui/pt/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_participant_view.xml b/indra/newview/skins/default/xui/pt/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b61108cf54520ca3835e753ece9a690267a34b7e
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Ordenar conversas por tipo" name="sort_sessions_by_type"/>
+	<menu_item_check label="Ordenar conversas por nome" name="sort_sessions_by_name"/>
+	<menu_item_check label="Ordenar conversas por atividade recente" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Ordenar participantes por nome" name="sort_participants_by_name"/>
+	<menu_item_check label="Ordenar participantes por atividade recente" name="sort_participants_by_recent"/>
+	<menu_item_call label="Preferências de bate-papo..." name="chat_preferences"/>
+	<menu_item_call label="Preferências de privacidade..." name="privacy_preferences"/>
+	<menu_item_check label="Registro de conversas..." name="Conversation"/>
+	<menu_item_check label="Traduzir Bate-papo local" name="Translate_chat"/>
+	<menu_item_check label="Configurações de tradução..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8bbde9b38c93c4c05a7685aa6a5c35e3873367bf
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="Desbloquear" name="unblock"/>
+	<menu_item_call label="Perfil..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/pt/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e69935995ca01fff310947cc5a7733060550f331
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Bloquear residente por nome..." name="block_resident_by_name"/>
+	<menu_item_call label="Bloquear objeto por nome" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/pt/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..b80d683c7be0a4136ed018d149ecfcf76612c24a
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Ordenar por nome" name="sort_by_name"/>
+	<menu_item_check label="Ordenar por tipo" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_friends_view.xml b/indra/newview/skins/default/xui/pt/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..46caeae31059b781bc3750678678047e8afef321
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por nome" name="sort_name"/>
+	<menu_item_check label="Ordenar por status" name="sort_status"/>
+	<menu_item_check label="Exibir ícones de pessoas" name="view_icons"/>
+	<menu_item_check label="Exibir permissões concedidas" name="view_permissions"/>
+	<menu_item_check label="Exibir registro de conversas..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups.xml b/indra/newview/skins/default/xui/pt/menu_people_groups.xml
old mode 100644
new mode 100755
index 9a924ad7b93d23e68b284b160d1345d45b4cafad..2ba7af17cd85a314183d9aa874b388df803040af
--- a/indra/newview/skins/default/xui/pt/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Ver dados" name="View Info"/>
 	<menu_item_call label="Bate-papo" name="Chat"/>
-	<menu_item_call label="Ligar" name="Call"/>
+	<menu_item_call label="Chamada de voz" name="Call"/>
 	<menu_item_call label="Ativar" name="Activate"/>
 	<menu_item_call label="Sair" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups_view.xml b/indra/newview/skins/default/xui/pt/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..637e591ae19bf43cd3659a8e8ba56825ef52becb
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Mostrar ícones de grupos" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby.xml
old mode 100644
new mode 100755
index 7c720f262bae51f07ac232916877ba5fa0bc3d09..51464fed68fa366210af49d57b5cec4b31a2b904
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Ver perfil" name="View Profile"/>
-	<menu_item_call label="Adicionar amigo..." name="Add Friend"/>
-	<menu_item_call label="Remover amigo..." name="Remove Friend"/>
-	<menu_item_call label="MI" name="IM"/>
-	<menu_item_call label="Ligar" name="Call"/>
-	<menu_item_call label="Mapa" name="Map"/>
-	<menu_item_call label="Compartilhar" name="Share"/>
-	<menu_item_call label="Pagar" name="Pay"/>
-	<menu_item_check label="Bloquear/desbloquear" name="Block/Unblock"/>
-	<menu_item_call label="Teletransportar?" name="teleport"/>
+	<menu_item_call label="Exibir perfil" name="view_profile"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Oferecer teletransporte" name="offer_teleport"/>
+	<menu_item_call label="Chamada de voz" name="voice_call"/>
+	<menu_item_call label="Exibir histórico de bate-papo..." name="chat_history"/>
+	<menu_item_call label="Adicionar amigo" name="add_friend"/>
+	<menu_item_call label="Remover amigo" name="remove_friend"/>
+	<menu_item_call label="Convidar para entrar no grupo..." name="invite_to_group"/>
+	<menu_item_call label="Mais zoom" name="zoom_in"/>
+	<menu_item_call label="Mapa" name="map"/>
+	<menu_item_call label="Compartilhar" name="share"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_check label="Bloquear/desbloquear" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 79edb96b1c67aa651c516ec5b5cb7fce0b99b6f3..7f3c6ace2785918aecbd3e5eda2dc4c3bc77b515
--- a/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Adicionar amigo..." name="Add Friends"/>
-	<menu_item_call label="Remover amigo..." name="Remove Friend"/>
-	<menu_item_call label="MI" name="IM"/>
-	<menu_item_call label="Ligar" name="Call"/>
-	<menu_item_call label="Compartilhar" name="Share"/>
-	<menu_item_call label="Pagar" name="Pay"/>
-	<menu_item_call label="Teletransportar?" name="teleport"/>
+	<menu_item_call label="Adicionar amigo..." name="add_friends"/>
+	<menu_item_call label="Remover amigo..." name="remove_friends"/>
+	<menu_item_call label="MI" name="im"/>
+	<menu_item_call label="Ligar" name="call"/>
+	<menu_item_call label="Compartilhar" name="share"/>
+	<menu_item_call label="Pagar" name="pay"/>
+	<menu_item_call label="Oferecer teletransporte" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bce015e732c7b2c0ce4a15a97778183d9a0d08d8
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por conversas mais recentes" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Ordenar por nome" name="sort_name"/>
+	<menu_item_check label="Ordenar por distância" name="sort_distance"/>
+	<menu_item_check label="Exibir ícones de pessoas" name="view_icons"/>
+	<menu_item_check label="Exibir mapa" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_people_recent_view.xml b/indra/newview/skins/default/xui/pt/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e4b368fe143fb8ee4459a70587bd576740359b08
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ordenar por mais recente" name="sort_most"/>
+	<menu_item_check label="Ordenar por nome" name="sort_name"/>
+	<menu_item_check label="Exibir ícones de pessoas" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/pt/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_picks.xml b/indra/newview/skins/default/xui/pt/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_picks_plus.xml b/indra/newview/skins/default/xui/pt/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_place.xml b/indra/newview/skins/default/xui/pt/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_place_add_button.xml b/indra/newview/skins/default/xui/pt/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/pt/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/pt/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml b/indra/newview/skins/default/xui/pt/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_save_outfit.xml b/indra/newview/skins/default/xui/pt/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_script_chiclet.xml b/indra/newview/skins/default/xui/pt/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_slurl.xml b/indra/newview/skins/default/xui/pt/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/pt/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_text_editor.xml b/indra/newview/skins/default/xui/pt/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_toolbars.xml b/indra/newview/skins/default/xui/pt/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_topinfobar.xml b/indra/newview/skins/default/xui/pt/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_agent.xml b/indra/newview/skins/default/xui/pt/menu_url_agent.xml
old mode 100644
new mode 100755
index ba5e0551248ad3a397771cffefcf83795d1a3f77..aa0a42640543f4bb6156045a366b1f7cff39c50c
--- a/indra/newview/skins/default/xui/pt/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/pt/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Mostrar perfil de residente" name="show_agent"/>
+	<menu_item_call label="Exibir perfil" name="show_agent"/>
+	<menu_item_call label="Enviar MI..." name="send_im"/>
+	<menu_item_call label="Adicionar amigo..." name="add_friend"/>
 	<menu_item_call label="Copiar nome para área de transferência" name="url_copy_label"/>
 	<menu_item_call label="Copiar SLurl para área de transferência" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/pt/menu_url_group.xml b/indra/newview/skins/default/xui/pt/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_http.xml b/indra/newview/skins/default/xui/pt/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_inventory.xml b/indra/newview/skins/default/xui/pt/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_map.xml b/indra/newview/skins/default/xui/pt/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_objectim.xml b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml
old mode 100644
new mode 100755
index c19744418150e45814733f21c0e37a743a42f321..247a92567af84a4dfb2d769db8546d967d45e0df
--- a/indra/newview/skins/default/xui/pt/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/pt/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Mostrar informações sobre o objeto" name="show_object"/>
+	<menu_item_call label="Perfil do objeto..." name="show_object"/>
 	<menu_item_call label="Mostrar no mapa" name="show_on_map"/>
 	<menu_item_call label="Teletransportar para lugar do objeto" name="teleport_to_object"/>
 	<menu_item_call label="Copiar nome do objeto para área de transferência" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_url_parcel.xml b/indra/newview/skins/default/xui/pt/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_slapp.xml b/indra/newview/skins/default/xui/pt/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_slurl.xml b/indra/newview/skins/default/xui/pt/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_url_teleport.xml b/indra/newview/skins/default/xui/pt/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_viewer.xml b/indra/newview/skins/default/xui/pt/menu_viewer.xml
old mode 100644
new mode 100755
index ca378c1b583fcbfffa7186abb5deb3c5c6725e6b..15814fed4cfe8015c5ef1f03f28bb22d76d1c3a8
--- a/indra/newview/skins/default/xui/pt/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/pt/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Parar minha animação" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Andar/correr/voar..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Status" name="Status">
-			<menu_item_call label="Ausente" name="Set Away"/>
-			<menu_item_call label="Ocupado" name="Set Busy"/>
-		</menu>
+		<menu label="Status" name="Status"/>
 		<menu_item_call label="Comprar L$..." name="Buy and Sell L$"/>
 		<menu_item_call label="Caixa de saída do lojista..." name="MerchantOutbox"/>
 		<menu_item_call label="Painel da conta..." name="Manage My Account">
@@ -32,14 +29,18 @@
 		<menu_item_call label="Sair do [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Comunicar" name="Communicate">
-		<menu_item_check label="Bate-papo..." name="Nearby Chat"/>
+		<menu_item_check label="Conversas..." name="Conversations"/>
+		<menu_item_check label="Bate-papo local..." name="Nearby Chat"/>
 		<menu_item_check label="Falar" name="Speak"/>
-		<menu_item_check label="Configurações de voz..." name="Nearby Voice"/>
-		<menu_item_check label="Distorção de voz..." name="ShowVoice"/>
+		<menu label="Distorção de voz" name="VoiceMorphing">
+			<menu_item_check label="Não distorcer voz" name="NoVoiceMorphing"/>
+			<menu_item_check label="Visualizar..." name="Preview"/>
+			<menu_item_call label="Assinar..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Gestos..." name="Gestures"/>
-		<menu_item_call label="Amigos" name="My Friends"/>
-		<menu_item_call label="Grupos" name="My Groups"/>
-		<menu_item_call label="Pessoas próximas" name="Active Speakers"/>
+		<menu_item_check label="Amigos" name="My Friends"/>
+		<menu_item_check label="Grupos" name="My Groups"/>
+		<menu_item_check label="Pessoas próximas" name="Active Speakers"/>
 		<menu_item_call label="Lista de bloqueados" name="Block List"/>
 	</menu>
 	<menu label="Mundo" name="World">
@@ -115,7 +116,6 @@
 			<menu_item_call label="Comprar" name="Menu Object Buy"/>
 			<menu_item_call label="Pegar" name="Menu Object Take"/>
 			<menu_item_call label="Pegar uma cópia" name="Take Copy"/>
-			<menu_item_call label="Salvar no meu inventário" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Salvar objeto de volta aos conteúdos do objeto" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="Devolver objeto" name="Return Object back to Owner"/>
 		</menu>
@@ -130,6 +130,7 @@
 			<menu_item_call label="Linksets..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="Personagens..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="Visualização/teste..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="Recarregar região" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="Opções" name="Options">
 			<menu_item_check label="Mostrar permissões avançadas" name="DebugPermissions"/>
@@ -159,6 +160,13 @@
 	<menu label="Ajuda" name="Help">
 		<menu_item_call label="Como..." name="How To"/>
 		<menu_item_call label="[SECOND_LIFE] Ajuda" name="Second Life Help"/>
+		<menu_item_call label="Guia do usuário" name="User’s guide"/>
+		<menu_item_call label="Base de conhecimento" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="Fóruns da comunidade" name="Community Forums"/>
+		<menu_item_call label="Portal de suporte" name="Support portal"/>
+		<menu_item_call label="Notícias do [SECOND_LIFE]" name="Second Life News"/>
+		<menu_item_call label="Blogs do [SECOND_LIFE]" name="Second Life Blogs"/>
 		<menu_item_call label="Denunciar abuso" name="Report Abuse"/>
 		<menu_item_call label="Relatar bug" name="Report Bug"/>
 		<menu_item_call label="Sobre [APP_NAME]" name="About Second Life"/>
@@ -286,7 +294,7 @@
 		<menu label="Rendering" name="Rendering">
 			<menu_item_check label="Axes" name="Axes"/>
 			<menu_item_check label="Wireframe" name="Wireframe"/>
-			<menu_item_check label="Iluminação e sombras" name="Lighting and Shadows"/>
+			<menu_item_check label="Iluminação e sombras" name="Advanced Lighting Model"/>
 			<menu_item_check label="Sombras da projeção do sol/lua" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO e sombra suave" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Máscaras alpha automáticas (adiadas)" name="Automatic Alpha Masks (deferred)"/>
@@ -336,9 +344,14 @@
 				<menu_item_call label="Toggle Character Geometry" name="Toggle Character Geometry"/>
 				<menu_item_check label="Allow Select Avatar" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="Velocidade de animação" name="Animation Speed">
+				<menu_item_call label="Todas as animações 10% mais rápidas" name="All Animations 10 Faster"/>
+				<menu_item_call label="Todas as animações 10% mais lentas" name="All Animations 10 Slower"/>
+				<menu_item_call label="Redefinir todas as velocidades de animação" name="Reset All Animation Speed"/>
+				<menu_item_check label="Animações em câmera lenta" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="Force Params to Default" name="Force Params to Default"/>
 			<menu_item_check label="Dados da animação" name="Animation Info"/>
-			<menu_item_check label="Mostrar animação de movimento" name="Slow Motion Animations"/>
 			<menu_item_check label="Disable Level Of Detail" name="Disable LOD"/>
 			<menu_item_check label="Show Collision Skeleton" name="Show Collision Skeleton"/>
 			<menu_item_check label="Display Agent Target" name="Display Agent Target"/>
diff --git a/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml b/indra/newview/skins/default/xui/pt/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml b/indra/newview/skins/default/xui/pt/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/mime_types.xml b/indra/newview/skins/default/xui/pt/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/mime_types_linux.xml b/indra/newview/skins/default/xui/pt/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/mime_types_mac.xml b/indra/newview/skins/default/xui/pt/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/notifications.xml b/indra/newview/skins/default/xui/pt/notifications.xml
old mode 100644
new mode 100755
index ff7382bf8014dd69c224a8afd77ab84f57c419b6..d9f5e48745d3f380a1bce18719259c8439dc2a88
--- a/indra/newview/skins/default/xui/pt/notifications.xml
+++ b/indra/newview/skins/default/xui/pt/notifications.xml
@@ -510,6 +510,24 @@ Consultar [_URL] para mais informações?
 		</url>
 		<usetemplate ignoretext="Meu driver gráfico está desatualizado" name="okcancelignore" notext="Não" yestext="Sim"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		Provavelmente, há um driver mais recente para o seu chip gráfico.  A atualização dos drivers gráficos pode melhorar significativamente o desempenho.
+
+    Visitar [_URL] para verificar se há atualizações do driver?
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Meu driver gráfico está desatualizado" name="okcancelignore" notext="Não" yestext="Sim"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		Provavelmente, há um driver mais recente para o seu chip gráfico.  A atualização dos drivers gráficos pode melhorar significativamente o desempenho.
+
+    Visitar [_URL] para verificar se há atualizações do driver?
+		<url name="url">
+			http://www.nvidia.com.br/Download/index.aspx?lang=br
+		</url>
+		<usetemplate ignoretext="Meu driver gráfico está desatualizado" name="okcancelignore" notext="Não" yestext="Sim"/>
+	</notification>
 	<notification name="UnknownGPU">
 		A placa de vídeo do seu sistema não é reconhecida pelo [APP_NAME].
 Isto acontece quando novos hardwares que ainda não foram testados no [APP_NAME].  Talvez isso não cause problemas, mas pode ser preciso checar as configurações de vídeo. 
@@ -1533,10 +1551,13 @@ Para instalar a atualização, será preciso reiniciar o [APP_NAME].
 		Não é possível oferecer amizade neste momento. Por favor, tente novamente em breve.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		Modo ocupado ativado. 
-O bate-papo e MIs não serão exibidos.  MIs enviadas para você receberão sua resposta de modo ocupado.  Todas as ofertas de teletransporte serão recusadas.  Todas as ofertas de inventário serão colocadas na Lixeira.
-		<usetemplate ignoretext="Passar meu status para o modo ocupado" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		Não perturbe está ativado.  Você não será notificado de comunicações recebidas.
+
+- Outros residentes receberão a sua resposta de Não perturbe (definida em Preferências &gt; Geral).
+- As ofertas de teletransporte serão recusadas.
+- Chamadas de voz serão recusadas.
+		<usetemplate ignoretext="Altero meu status para o modo Não perturbe" name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Você atingiu o limite máximo de grupos. Saia de outro grupo para poder entrar nesse ou recuse o convite.
@@ -2022,6 +2043,10 @@ Mover para o inventário o(s) item(s)?
 		Deseja abrir o [http://secondlife.com/account/ Painel] para ver o histórico da sua conta?
 		<usetemplate ignoretext="Abrir o navegador para acessar minha conta" name="okcancelignore" notext="Cancelar" yestext="Ir para a página"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		Quando você adiciona uma pessoa a uma conversa existente, uma nova conversa é criada.  Todos os participantes recebem notificações sobre a nova conversa.
+		<usetemplate ignoretext="Confirme a inclusão de participantes no bate-papo" name="okcancelignore" notext="Cancelar" yestext="Ok"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		Tem certeza que deseja sair?
 		<usetemplate ignoretext="Confirmar antes de sair" name="okcancelignore" notext="Não sair" yestext="Sair"/>
@@ -2096,14 +2121,14 @@ Você deseja substituí-lo pelo objeto selecionado?
 			<button ignore="Never Replace" name="No" text="Não"/>
 		</form>
 	</notification>
-	<notification label="Aviso de Modo Ocupado" name="BusyModePay">
-		Você está no modo Ocupado, o que significa que você não receberá quaisquer itens oferecidos em troca deste pagamento.
+	<notification label="Aviso de modo Não perturbe" name="DoNotDisturbModePay">
+		Você ativou o Não perturbe. Você não receberá qualquer item oferecido em troca deste pagamento.
 
-Você gostaria de deixar o modo Ocupado antes de completar esta transação?
+Deseja desativar o Não perturbe antes de concluir esta transação?
 		<form name="form">
-			<ignore name="ignore" save_option="true" text="Estou prestes a pagar alguém ou um objeto no modo ocupado"/>
-			<button ignore="Always leave Busy Mode" name="Yes" text="Sim"/>
-			<button ignore="Never leave Busy Mode" name="No" text="Não"/>
+			<ignore name="ignore" text="Estou prestes a pagar alguém ou um objeto no modo Não perturbe"/>
+			<button ignore="Sempre manter no modo Não perturbe" name="Yes" text="OK"/>
+			<button ignore="Nunca sair do modo Não perturbe" name="No" text="Cancelar"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2238,11 +2263,8 @@ Inclua um link para facilitar o acesso para visitantes. Teste o link na barra de
 	<notification name="GroupNotice">
 		Assunto: [SUBJECT], Mensagem: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; está online
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; está offline
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; está [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Você é o máximo! Mesmo assim, não dá para adicionar a si mesmo(a) como amigo(a).
@@ -2467,13 +2489,6 @@ Logo, não é possível voar aqui.
 	<notification name="DynamicPathfindingDisabled">
 		O pathfinding dinâmico não está habilitado nesta região.  Os objetos com script usando chamadas LSL de pathfinding podem não operar como o esperado na região.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		A alteração de determinados objetos nesta região pode resultar no comportamento incorreto de outros objeto em movimento.  Para fazer com que os objetos em movimento se comportem corretamente, clique no botão “Recarregar região”.  Escolha “Ajuda” para obter mais informações.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Ajuda" ignoretext="A alteração de determinados objetos nesta região pode resultar no comportamento incorreto de outros objeto em movimento." name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Erro.  Pode haver um erro de rede ou do servidor, ou você pode não ter direitos de construção.  Às vezes, fazer login e logout novamente resolve este problema.
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2736,7 +2751,7 @@ OK?
 	<notification name="ScriptQuestionCaution">
 		Aviso: O objeto &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; deseja obter acesso total à sua conta de dólares Linden. Se você conceder acesso, ele poderá remover fundos de sua conta a qualquer momento ou esvaziar sua conta completamente, continuamente e sem avisos adicionais.
   
-Esse tipo de pedido raramente é legítimo. Não conceda acesso se você não entender completamente por que ele deseja acessar sua conta.
+Não conceda acesso se você não entender completamente por que ele deseja acessar sua conta.
 		<form name="form">
 			<button name="Grant" text="Permitir acesso total"/>
 			<button name="Deny" text="Negar"/>
@@ -3310,4 +3325,633 @@ Tentativa cancelada.
 		Você está excluindo [NUM_ITEMS] itens.  Tem certeza de que deseja continuar?
 		<usetemplate ignoretext="Tem certeza de que deseja excluir múltiplos itens?" name="okcancelignore" notext="Não" yestext="Sim"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] congelou você. Você não pode se mover ou interagir com o mundo.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] congelou você por [AV_FREEZE_TIME] segundos. Você não pode se mover ou interagir com o mundo.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Avatar congelado.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] descongelou você.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Avatar descongelado.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		O congelamento falhou porque você não tem permissão de administrador para esse lote.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		Seu congelamento expirou, vá cuidar da sua vida.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Não é possível congelar esse usuário.
+	</notification>
+	<notification name="NowOwnObject">
+		Agora você é o proprietário do objeto [OBJECT_NAME]
+	</notification>
+	<notification name="CantRezOnLand">
+		Não é possível renderizar objeto em [OBJECT_POS] porque o proprietário do terreno não permite.  Use a ferramenta de terrenos para ver a propriedade do terreno.
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		O objeto não pode ser renderizado porque há muitas solicitações.
+	</notification>
+	<notification name="SitFailCantMove">
+		Você não pode sentar porque não pode se mover no momento.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		Você não pode sentar porque não está autorizado a sentar nesse terreno.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Tente chegar mais perto.  Não é possível sentar no objeto porque
+ele não está na mesma região que você.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		Não foi possível criar um novo objeto. A região está cheia.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Falha ao posicionar objeto em local específico.  Tente novamente.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		Você não pode criar árvores e grama em terrenos que não são sua propriedade.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		A cópia falhou porque você não está autorizado a copiar o objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		A cópia falhou porque o objeto &apos;[OBJ_NAME]&apos; não pode ser transferido para você.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		A cópia falhou porque o objeto &apos;[OBJ_NAME]&apos; contribui para o navmesh.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Duplicar sem objetos raiz selecionados.
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		Não é possível duplicar objetos porque a região está cheia.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		Não é possível duplicar os objetos - não é possível encontrar o lote em que eles estão.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		Não é possível criar objeto porque 
+o lote está cheio.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Falha na tentativa de renderizar um objeto.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		Não é possível criar um item que causou problemas a essa região.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		Esse item do inventário foi incluído na lista.
+	</notification>
+	<notification name="NoCanRezObjects">
+		No momento, você não está autorizado a criar objetos.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Pesquisa de terreno bloqueada.
+Você realizou muitas pesquisas de terreno muito rápido.
+Tente novamente em instantes.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		Não há recursos de script disponíveis suficientes para anexar objeto!
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Você morreu e foi teletransportado para seu início
+	</notification>
+	<notification name="EjectComingSoon">
+		Você não tem mais permissão para ficar aqui e tem [EJECT_TIME] segundos para sair.
+	</notification>
+	<notification name="NoEnterServerFull">
+		Você não pode entrar nesta região porque 
+o servidor está cheio.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Salvar no inventário foi desativado.
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		Não é possível salvar &apos;[OBJ_NAME]&apos; no conteúdo do objeto porque o objeto do qual ele foi renderizado não existe mais.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		Não é possível salvar &apos;[OBJ_NAME]&apos; no conteúdo do objeto porque você não tem permissão para modificar o objeto &apos;[DEST_NAME]&apos;.
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		Não é possível salvar &apos;[OBJ_NAME]&apos; no inventário -- essa operação foi desativada.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		Você não pode copiar sua seleção porque não está autorizado a copiar o objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		Você não pode copiar a seleção porque o objeto &apos;[OBJ_NAME]&apos; não é transferível.
+	</notification>
+	<notification name="NoTransNoCopy">
+		Você não pode copiar a seleção porque o objeto &apos;[OBJ_NAME]&apos; não é transferível.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		A remoção do objeto &apos;[OBJ_NAME]&apos; do simulador é proibida pelo sistema de permissões.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		Você não pode salvar sua seleção porque não está autorizado a modificar o objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		Não é possível salvar sua seleção porque o objeto &apos;[OBJ_NAME]&apos; não é copiável.
+	</notification>
+	<notification name="NoModNoTaking">
+		Você não pode levar sua seleção porque não está autorizado a modificar o objeto &apos;[OBJ_NAME]&apos;.
+	</notification>
+	<notification name="RezDestInternalError">
+		Erro interno: tipo de destino desconhecido.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		A exclusão falhou porque o objeto não foi encontrado
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Não é possível expulsar esse usuário.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Esta região não permite que você a defina como seu início.
+	</notification>
+	<notification name="HomeLocationLimits">
+		Você só pode definir seu &quot;Início&quot; em seu terreno ou em um Infohub do continente.
+	</notification>
+	<notification name="HomePositionSet">
+		Posição de início definida.
+	</notification>
+	<notification name="AvatarEjected">
+		Avatar expulso.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		A expulsão falhou porque você não tem permissão de administrador para esse lote.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		Não é possível mover &apos;[OBJECT_NAME]&apos; para
+[OBJ_POSITION] na região [REGION_NAME] porque o lote está cheio.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		Não é possível mover &apos;[OBJECT_NAME]&apos; para
+[OBJ_POSITION] na região [REGION_NAME] porque seus objetos não são permitidos neste lote.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		Não é possível mover &apos;[OBJECT_NAME]&apos; para
+[OBJ_POSITION] na região [REGION_NAME] porque não há recursos suficientes para este objeto neste lote.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		Não é possível mover &apos;[OBJECT_NAME]&apos; para
+[OBJ_POSITION] na região [REGION_NAME] porque outra região está executando uma versão mais antiga, que não dá suporte o recebimento deste objeto por meio de passagem de regiões.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		Não é possível mover &apos;[OBJECT_NAME]&apos; para
+[OBJ_POSITION] na região [REGION_NAME] porque você não está autorizado a modificar o navmesh além dos limites da região.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		Não é possível mover &apos;[OBJECT_NAME]&apos; para
+[OBJ_POSITION] na região [REGION_NAME] por uma razão desconhecida. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		Você não está autorizado a modificar este objeto
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		Não é possível ativar propriedades físicas para um objeto que contribui para o navmesh.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		Não é possível ativar propriedades físicas para objetos keyframe.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		Não é possível ativar propriedades físicas para o objeto -- recursos de terreno insuficientes.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		Não é possível ativar propriedades físicas para objeto com custo de recursos físicos acima de [MAX_OBJECTS]
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Este objeto não pode ter uma peça côncava porque é phantom e contribui para o navmesh.
+	</notification>
+	<notification name="UnableAddItem">
+		Não é possível adicionar item!
+	</notification>
+	<notification name="UnableEditItem">
+		Não é possível editar isso!
+	</notification>
+	<notification name="NoPermToEdit">
+		Não é permitido editar isso.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		Não é permitido copiar esse inventário.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		Não é possível salvar no conteúdo do objeto: O item não existe mais.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		Não é possível salvar no conteúdo do objeto: já existe um item com esse nome no inventário
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		Não é possível salvar no conteúdo do objeto: isso modificaria as permissões de anexo.
+	</notification>
+	<notification name="TooManyScripts">
+		Muitos scripts.
+	</notification>
+	<notification name="UnableAddScript">
+		Não é possível adicionar script!
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		Servidor de objetos não respondeu a tempo.  Objeto retornado a sim.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		Esta região não tem formas físicas ativadas.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		Você não pode modificar o navmesh além dos limites da região.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		Não é possível definir as propriedades físicas neste tipo de objeto.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		Não é possível definir que um prim raiz não tenha forma.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		Esta região não tem materiais físicos ativados.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		Apenas prims raiz podem ter seus materiais físicos ajustados.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		Ainda não há suporte para a configuração dos materiais físicos em personagens.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Uma ou mais das propriedades do material físico são inválidas.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		Você não pode alterar o tipo de acabamento de um objeto mesh.
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		Você não pode alterar a forma de um objeto mesh
+	</notification>
+	<notification name="FullRegionCantEnter">
+		Você não pode entrar nesta região porque \nela está cheia.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Falha na vinculação -- proprietários diferentes
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Falha na vinculação -- não é possível modificar o navmesh além dos limites da região.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Ocorreu uma falha na vinculação porque você não tem permissão de edição.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Falha na vinculação -- muitos prims
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Falha na vinculação -- não é possível vincular itens com cópia proibida a itens com transferência proibida
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Falha na vinculação -- nada é vinculável.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Falha na vinculação -- muitos personagens com pathfinding
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Falha na vinculação -- recursos de terreno insuficientes
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		O objeto usa muitos recursos físicos – sua dinâmica foi desativada.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		Você foi teletransportado para seu início pelo objeto &apos;[OBJECT_NAME]&apos; no lote &apos;[PARCEL_NAME]&apos;
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		Você foi teletransportado para seu início pelo objeto &apos;[OBJECT_NAME]&apos;
+	</notification>
+	<notification name="TeleportedByAttachment">
+		Você foi teletransportado por um anexo em [ITEM_ID]
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		Você foi teletransportado pelo objeto &apos;[OBJECT_NAME]&apos; no lote &apos;[PARCEL_NAME]&apos;
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Você foi teletransportado pelo objeto &apos;[OBJECT_NAME]&apos; de propriedade de [OWNER_ID]
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Você foi teletransportado pelo objeto &apos;[OBJECT_NAME]&apos; de propriedade de um usuário desconhecido.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		Não foi possível criar o objeto solicitado. A região está cheia.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		Não é possível anexar vários objetos a um local.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Você não pode criar vários objetos aqui.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		Não foi possível criar o objeto solicitado. Objeto ausente do banco de dados.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		Não foi possível criar o objeto solicitado. A solicitação expirou. Tente novamente.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		Não foi possível criar o objeto solicitado. Tente novamente.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Falha na renderização, objeto solicitado demorou muito a carregar.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Falha ao posicionar objeto em local específico.  Tente novamente.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		Você não pode criar plantas neste terreno.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		Não é possível restaurar o objeto. Nenhuma posição encontrada no mundo.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		Não é possível renderizar o objeto porque os dados de mesh são inválidos.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		Não foi possível renderizar objeto porque já há muitos scripts nesta região.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Seus privilégios de acesso não permitem que você crie objetos aqui.
+	</notification>
+	<notification name="CantCreateObject">
+		No momento, você não está autorizado a criar objetos.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Parâmetros de objeto inválidos
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Seus privilégios de acesso não permitem que você duplique objetos aqui.
+	</notification>
+	<notification name="CantChangeShape">
+		Você não está autorizado a alterar essa forma.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Seus privilégios de acesso não permitem que você reivindique objetos aqui.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		A doação falhou porque você não está autorizado a doar objetos ao seu grupo.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Seus privilégios de acesso não permitem que você compre objetos aqui.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		Não é possível anexar objeto porque um avatar está sentado nele.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		Árvores e grama não podem ser usadas como anexos.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		Não é possível anexar objetos de propriedade de um grupo.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		Não é possível anexar objetos que não sua propriedade.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		Não é possível anexar objetos que contribuem com o navmesh.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		Não é possível vincular objeto porque você não tem permissão para movê-lo.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		Não há recursos de script disponíveis suficientes para anexar objeto!
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		Não é possível largar objetos aqui. Tente a área de Avaliação grátis.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		Você não pode largar anexos mesh. Separe para o inventário e depois renderize no mundo.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		Falha ao largar anexo: você não está autorizado a largá-lo aqui.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		Falha ao largar anexo: recursos de terreno disponíveis insuficientes.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Falha ao largar anexos: recursos disponíveis insuficientes.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		Não é possível largar objeto aqui.  O lote está cheio.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		Não é possível tocar/pegar este objeto porque você foi banido do lote de terreno.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Detalhe seus parâmetros de exclusão.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		Não é possível carregar objeto.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		Não foi possível encontrar usuário para teletransportar para início
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		solicitação de poderes de deus falhou
+	</notification>
+	<notification name="GenericRequestFailed">
+		falha em solicitação genérica
+	</notification>
+	<notification name="CantUploadPostcard">
+		Não foi possível carregar cartão postal.  Tente novamente mais tarde.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		Não foi possível obter detalhes de inventário para o anúncio de grupo.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		Não é possível enviar anúncio de grupo -- não permitido.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		Não é possível enviar anúncio de grupo -- não foi possível construir inventário.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		Não é possível processar o inventário do anúncio.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Falha no envio de terreno.
+	</notification>
+	<notification name="TerrainFileWritten">
+		Arquivo de terreno gravado.
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		Arquivo de terreno criado, iniciando o download...
+	</notification>
+	<notification name="TerrainBaked">
+		Terreno confeccionado.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Apenas os 10 primeiros objetos selecionados foram desativados. Atualize e faça novas seleções, se necessário.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Você precisa atualizar seu visualizador para comprar este lote.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Não é possível comprar, este lote não está à venda.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		Não é possível comprar, o preço de venda ou a área do terreno foram alterados.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		Você não é o comprador autorizado deste lote.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		Você não pode comprar este lote porque já está aguardando aut. de compra
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		Não é possível criar objeto aqui porque isso sobrecarregaria o lote.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		Você selecionou terreno com proprietários diferentes. Selecione uma área menor e tente novamente.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		Não há lotes alugados suficientes na seleção para reunir.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		Não é possível dividir o terreno.\nHá mais de um lote selecionado.\nTente selecionar um pedaço menor de terreno.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		Não é possível dividir o terreno.\nNão é possível encontrar o lote.\nComunique isso em Ajuda -&gt; Relatar bug...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		Não é possível dividir o terreno. O lote inteiro está selecionado.\nTente selecionar um pedaço menor do terreno.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		O terreno foi dividido.
+	</notification>
+	<notification name="PassPurchased">
+		Você comprou um passe.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		A região não permite classificados.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Seu passe para este terreno está prestes a expirar.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Não há uma superfície adequada para sentar, tente outro local.
+	</notification>
+	<notification name="CantSitNoRoom">
+		Não há espaço para sentar aqui, tente outro local.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		A reivindicação do objeto falhou porque você não tem permissão
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		A reivindicação do objeto falhou porque você não tem L$ suficiente.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		Não é possível doar terrenos de propriedade de um grupo.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		A compra do objeto falhou porque você não tem L$ suficientes.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		A compra do inventário falhou porque você não tem L$ suficiente
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		Você não tem L $ suficientes para comprar um passe para este terreno.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		Não é possível comprar passe no momento.  Tente novamente mais tarde.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		Não é possível criar objeto porque \no lote está cheio.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Falha ao posicionar objeto em local específico.  Tente novamente.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		Não é possível criar marco para o evento.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		Seus poderes de deus rompem o congelamento!
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Falha na solicitação de poderes especiais. Essa solicitação foi registrada.
+	</notification>
+	<notification name="ExpireExplanation">
+		O sistema não pode processar sua solicitação no momento. A solicitação expirou.
+	</notification>
+	<notification name="DieExplanation">
+		O sistema não pode processar sua solicitação.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		Fundos insuficientes para criar prim.
+	</notification>
+	<notification name="RezObjectFailure">
+		Fundos insuficientes para criar objeto.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Redefinir Início pois o Início não era legal.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		No momento, você não pode convidar ninguém para seu local pois a região está cheia. Tente novamente mais tarde.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Esta região não permite que você a defina como seu início.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		Você só pode definir seu &quot;Início&quot; em seu terreno ou em um Infohub do continente.
+	</notification>
+	<notification name="SetHomePosition">
+		Posição de início definida.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		Não é possível desrenderizar objeto devido a uma falha de inventário.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		Não é possível criar o inventário solicitado.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		Não é possível criar a pasta de inventário solicitada.
+	</notification>
+	<notification name="CantCreateInventory">
+		Não é possível criar esse inventário.
+	</notification>
+	<notification name="CantCreateLandmark">
+		Não é possível criar marco.
+	</notification>
+	<notification name="CantCreateOutfit">
+		Não é possível criar roupa agora. Tente novamente em instantes.
+	</notification>
+	<notification name="InventoryNotForSale">
+		O inventário não está à venda.
+	</notification>
+	<notification name="CantFindInvItem">
+		Não é possível encontrar item do inventário.
+	</notification>
+	<notification name="CantFindObject">
+		Não foi possível encontrar objeto.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		Transferências de dinheiro para objetos estão desativadas para esta região no momento.
+	</notification>
+	<notification name="CantPayNoAgent">
+		Não foi possível descobrir a quem pagar.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		Não é possível dar L$ a objetos públicos.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Falha na criação de inventário de objetos do mundo virtual.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Um erro interno impediu que seu visualizador fosse atualizado corretamente.  O saldo em L$ ou a propriedade de lotes exibidos em seu visualizador pode não refletir o saldo real nos servidores.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		Não é possível criar grandes prims que interceptam outros jogadores.  Tente novamente quando os outros jogadores tiverem se movido.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Isso excluirá os registros das conversas anteriores e qualquer backup desse arquivo.
+		<usetemplate ignoretext="Confirmar antes de excluir o registro com conversas anteriores." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Isso excluirá todas as transcrições de todas as conversas anteriores. A lista de conversas antigas não será afetada. Todos os arquivos com as extensões .txt e txt.backup na pasta [FOLDER] serão excluídos.
+		<usetemplate ignoretext="Confirmar antes de excluir transcrições." name="okcancelignore" notext="Cancelar" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		Não foi possível mover arquivos. Caminho anterior restaurado.
+		<usetemplate ignoretext="Não foi possível mover arquivos. Caminho anterior restaurado." name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/pt/outfit_accordion_tab.xml b/indra/newview/skins/default/xui/pt/outfit_accordion_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_active_object_row.xml b/indra/newview/skins/default/xui/pt/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index b444593af82dc5f62c382682e86a096d7eeb21c3..22eb23ebc5242f7c9f096d2a30fa9ed1a16791a4
--- a/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/pt/panel_avatar_list_item.xml
@@ -26,5 +26,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Este amigo pode editar, excluir ou pegar seus pertences"/>
 	<icon name="permission_map_icon" tool_tip="Este amigo pode localizar você no mapa"/>
 	<icon name="permission_online_icon" tool_tip="Este amigo pode saber quando você estiver online"/>
+	<button name="info_btn" tool_tip="Mais informações"/>
 	<button name="profile_btn" tool_tip="Ver perfil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index c5f93d719a3da04da4c337b9b9dca5857a07936f..2fcf6b9932f42222791ca1e693808b649fc54bd0
--- a/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/pt/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		Lista de bloqueados
-	</text>
-	<scroll_list name="blocked" tool_tip="Lista atual dos residentes bloqueados"/>
-	<button label="Bloquear residente..." label_selected="Bloquear residente..." name="Block resident..." tool_tip="Selecione o residente a bloquear"/>
-	<button label="Bloquear objeto por nome..." label_selected="Bloquear objeto por nome..." name="Block object by name..."/>
-	<button label="Desbloquear" label_selected="Desbloquear" name="Unblock" tool_tip="Remover residente ou objeto da lista dos bloqueados"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Filtrar" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Ações em uma pessoa ou um objeto selecionado"/>
+		<menu_button name="view_btn" tool_tip="Opções de ordenação"/>
+		<menu_button name="plus_btn" tool_tip="Escolher um residente ou um objeto a ser bloqueado"/>
+		<button name="unblock_btn" tool_tip="Remover residente ou objeto da lista dos bloqueados"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Lista atual dos residentes bloqueados"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/pt/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/pt/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/pt/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/pt/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_classified_info.xml b/indra/newview/skins/default/xui/pt/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/pt/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/pt/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml b/indra/newview/skins/default/xui/pt/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/pt/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f56168c96299560838f7b394ad4c3da37af6a4ea
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(carregando)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/pt/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..74daded58f7db8ae7678cb116a8cff006fce7f19
--- /dev/null
+++ b/indra/newview/skins/default/xui/pt/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="Uma conversa de voz foi incluída"/>
+	<icon name="unread_ims_icon" tool_tip="Chegaram mensagens enquanto você estava desconectado"/>
+	<button name="delete_btn" tool_tip="Remover esta entrada"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/pt/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/pt/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_alpha.xml b/indra/newview/skins/default/xui/pt/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_classified.xml b/indra/newview/skins/default/xui/pt/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_eyes.xml b/indra/newview/skins/default/xui/pt/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_gloves.xml b/indra/newview/skins/default/xui/pt/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_hair.xml b/indra/newview/skins/default/xui/pt/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_jacket.xml b/indra/newview/skins/default/xui/pt/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pants.xml b/indra/newview/skins/default/xui/pt/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_physics.xml b/indra/newview/skins/default/xui/pt/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_pick.xml b/indra/newview/skins/default/xui/pt/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_profile.xml b/indra/newview/skins/default/xui/pt/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shape.xml b/indra/newview/skins/default/xui/pt/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shirt.xml b/indra/newview/skins/default/xui/pt/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_shoes.xml b/indra/newview/skins/default/xui/pt/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_skin.xml b/indra/newview/skins/default/xui/pt/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_skirt.xml b/indra/newview/skins/default/xui/pt/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_socks.xml b/indra/newview/skins/default/xui/pt/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/pt/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_underpants.xml b/indra/newview/skins/default/xui/pt/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/pt/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml b/indra/newview/skins/default/xui/pt/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_general.xml b/indra/newview/skins/default/xui/pt/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/pt/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_invite.xml b/indra/newview/skins/default/xui/pt/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_land_money.xml b/indra/newview/skins/default/xui/pt/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_list_item.xml b/indra/newview/skins/default/xui/pt/panel_group_list_item.xml
old mode 100644
new mode 100755
index 19c34d2f103c14f1c39ed1123f2fb0494eab97fe..0490878507727dcbf979b2441d1f28546333db49
--- a/indra/newview/skins/default/xui/pt/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/pt/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Desconhecido"/>
+	<button name="info_btn" tool_tip="Mais informações"/>
 	<button name="profile_btn" tool_tip="Ver perfil"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_group_notices.xml b/indra/newview/skins/default/xui/pt/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_notify.xml b/indra/newview/skins/default/xui/pt/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_group_roles.xml b/indra/newview/skins/default/xui/pt/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml b/indra/newview/skins/default/xui/pt/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_inventory_item.xml b/indra/newview/skins/default/xui/pt/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_landmark_info.xml b/indra/newview/skins/default/xui/pt/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_landmarks.xml b/indra/newview/skins/default/xui/pt/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_login.xml b/indra/newview/skins/default/xui/pt/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_main_inventory.xml b/indra/newview/skins/default/xui/pt/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_me.xml b/indra/newview/skins/default/xui/pt/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml b/indra/newview/skins/default/xui/pt/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml b/indra/newview/skins/default/xui/pt/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/pt/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_nearby_media.xml b/indra/newview/skins/default/xui/pt/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_notify_textbox.xml b/indra/newview/skins/default/xui/pt/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml b/indra/newview/skins/default/xui/pt/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/pt/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml b/indra/newview/skins/default/xui/pt/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/pt/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_list.xml b/indra/newview/skins/default/xui/pt/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/pt/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_people.xml b/indra/newview/skins/default/xui/pt/panel_people.xml
old mode 100644
new mode 100755
index f3af15b99161ec89b069fd2a7e0673652c53441b..babb48c208f30609ebe6eda2b987881af0076c1a
--- a/indra/newview/skins/default/xui/pt/panel_people.xml
+++ b/indra/newview/skins/default/xui/pt/panel_people.xml
@@ -14,81 +14,53 @@ Em busca de alguém para conversar? Procure no [secondlife:///app/worldmap Mapa-
 	<string name="no_filtered_friends_msg">
 		Não encontrou o que procura? Tente buscar no [secondlife:///app/search/people/[SEARCH_TERM] Search].
 	</string>
-	<string name="people_filter_label" value="Filtro de pessoas"/>
-	<string name="groups_filter_label" value="Filtro de grupos"/>
 	<string name="no_filtered_groups_msg" value="Não encontrou o que procura? Tente buscar no [secondlife:///app/search/groups/[SEARCH_TERM] Search]."/>
 	<string name="no_groups_msg" value="À procura de grupos interessantes? Tente fazer uma [secondlife:///app/search/groups Busca]."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Clique duas vezes para abrir o mapa, shift+arraste para a visão pan)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Clique duas vezes para teletransportar, shift+arraste para a visão pan)"/>
-	<filter_editor label="Filtro" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="PROXIMIDADE" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Opções"/>
-				<button name="add_friend_btn" tool_tip="Adicionar o residente selecionado para sua lista de amigos"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="Filtrar pessoas" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Ações nas pessoas selecionadas"/>
+				<menu_button name="nearby_view_btn" tool_tip="Opções de exibição/ordenação"/>
+				<button name="add_friend_btn" tool_tip="Oferecer amizade ao residente"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Remover a pessoa selecionada dos amigos"/>
 			</panel>
 		</panel>
-		<panel label="MEUS AMIGOS" name="friends_panel">
+		<panel label="AMIGOS" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="Filtrar pessoas" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Ações nas pessoas selecionadas"/>
+				<menu_button name="friends_view_btn" tool_tip="Opções de exibição/ordenação"/>
+				<button name="friends_add_btn" tool_tip="Oferecer amizade ao residente"/>
+				<dnd_button name="friends_del_btn" tool_tip="Remover a pessoa selecionada dos amigos"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="Online"/>
 				<accordion_tab name="tab_all" title="Todos"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="Mostrar opções adicionais"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Oferecer amizade para um residente"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Remover a pessoa selecionada da sua lista de amigos"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="MEUS GRUPOS" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Opções"/>
-				<button name="plus_btn" tool_tip="Ingressar em um grupo/Criar novo grupo"/>
-				<button name="activate_btn" tool_tip="Ativar o grupo selecionado"/>
+		<panel label="GRUPOS" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Filtrar grupos" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Ações no grupo selecionado"/>
+				<menu_button name="groups_view_btn" tool_tip="Opções de exibição/ordenação"/>
+				<menu_button name="plus_btn" tool_tip="Entrar em um grupo/Criar novo grupo"/>
+				<dnd_button name="minus_btn" tool_tip="Sair do grupo selecionado"/>
 			</panel>
 		</panel>
 		<panel label="RECENTE" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Opções"/>
-				<button name="add_friend_btn" tool_tip="Adicionar o residente selecionado para sua lista de amigos"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="Filtrar pessoas" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Ações nas pessoas selecionadas"/>
+				<menu_button name="recent_view_btn" tool_tip="Opções de exibição/ordenação"/>
+				<button name="add_friend_btn" tool_tip="Oferecer amizade ao residente"/>
+				<dnd_button name="recent_del_btn" tool_tip="Remover a pessoa selecionada dos amigos"/>
 			</panel>
 		</panel>
+		<panel label="BLOQUEADA" name="blocked_panel">
+			<panel label="Residentes e objetos bloqueados" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Perfil" name="view_profile_btn" tool_tip="Exibir fotografia, grupos e outras informações dos residentes"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="MI" name="im_btn" tool_tip="Abrir sessão de mensagem instantânea"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Ligar" name="call_btn" tool_tip="Ligar para este residente"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Compartilhar" name="share_btn" tool_tip="Compartilhar item de inventário"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Teletransportar" name="teleport_btn" tool_tip="Oferecer teletransporte"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Perfil do grupo" name="group_info_btn" tool_tip="Exibir dados do grupo"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Bate-papo de grupo" name="chat_btn" tool_tip="Nova sessão de bate-papo"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Ligar para o grupo" name="group_call_btn" tool_tip="Ligar para este grupo"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_pick_info.xml b/indra/newview/skins/default/xui/pt/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_picks.xml b/indra/newview/skins/default/xui/pt/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_place_profile.xml b/indra/newview/skins/default/xui/pt/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_places.xml b/indra/newview/skins/default/xui/pt/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_postcard_message.xml b/indra/newview/skins/default/xui/pt/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml b/indra/newview/skins/default/xui/pt/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/pt/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/pt/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
old mode 100644
new mode 100755
index 350d53b81c71616e381c4292af1257a07a6dc200..baf14c2c23f985ae9f3c5f645209a4605ec3355e
--- a/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Chat" name="chat">
-	<text name="font_size">
-		Tamanho da fonte:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Pequeno" name="radio" value="0"/>
-		<radio_item label="Médio" name="radio2" value="1"/>
-		<radio_item label="Grande" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/>
-	<check_box label="Enviar MIs por email se estiver desconectado" name="send_im_to_email"/>
-	<check_box label="Ativar MIs e bate-papos de texto simples" name="plain_text_chat_history"/>
-	<check_box label="Balão de bate-papo" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		Mostrar MIs em:
-	</text>
-	<text name="requires_restart_label">
-		(Reinicie para ativar)
-	</text>
-	<radio_group name="chat_window" tool_tip="Exibir cada bate-papo em uma janela separada ou exibir todos em uma única janela com uma aba para cada pessoa (requer reinício)">
-		<radio_item label="Janelas separadas" name="radio" value="0"/>
-		<radio_item label="Guias" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Ativar pop-ups de novos bate-papos:
-	</text>
-	<check_box label="Bate-papo de grupo" name="EnableGroupChatPopups" tool_tip="Exibir pop-up de bate-papos novos de grupos"/>
-	<check_box label="Bate-papos de MI" name="EnableIMChatPopups" tool_tip="Exibir pop-up de mensagens instantâneas novas"/>
-	<spinner label="Transição de avisos de bate-papos por perto:" name="nearby_toasts_lifetime"/>
-	<spinner label="Transição de avisos de bate-papos por perto:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="Executar animação digitada quando estiver conversando" name="play_typing_animation"/>
+		<check_box label="Enviar MIs por email se estiver desconectado" name="send_im_to_email"/>
+		<check_box label="Apenas amigos e grupos podem me ligar ou enviar MIs" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Tamanho da fonte:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Pequeno" name="Small" value="0"/>
+			<item label="Médio" name="Medium" value="1"/>
+			<item label="Grande" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Balão de bate-papo" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Notificações
+		</text>
+		<text name="friend_ims">
+			MIs de amigos:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
+			<item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
+			<item label="Nenhum" name="None" value="none"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			MIs de não amigos:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
+			<item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
+			<item label="Nenhum" name="None" value="none"/>
+		</combo_box>
+		<text name="conference_ims">
+			MIs de conferências:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
+			<item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
+			<item label="Nenhum" name="None" value="none"/>
+		</combo_box>
+		<text name="group_chat">
+			Bate-papo de grupo:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
+			<item label="Piscar botão da barra de ferramentas" name="FlashToolbarButton" value="flash"/>
+			<item label="Nenhum" name="None" value="none"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Bate-papo local:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Abrir janela Conversas" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Abrir pop up com mensagem" name="PopUpMessage" value="toast"/>
+			<item label="Piscar botão da barra de ferramentas" name="FlashToolBarButton" value="flash"/>
+			<item label="Nenhum" name="None" value="none"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Para interromper temporariamente todas as notificações, use Comunicar &gt; Não perturbe.
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Executar som:
+		</text>
+		<check_box label="Nova conversa" name="new_conversation"/>
+		<check_box label="Chamada de voz recebida" name="incoming_voice_call"/>
+		<check_box label="Oferta de teletransporte" name="teleport_offer"/>
+		<check_box label="Oferta de inventário" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Limpar registro..." name="clear_log"/>
+		<button label="Excluir transcrições..." name="delete_transcripts"/>
+		<button label="Procurar..." label_selected="Procurar" name="log_path_button"/>
+	</panel>
 	<button label="Tradução..." name="ok_btn"/>
 	<button label="Substituição automática..." name="autoreplace_showgui"/>
 	<button label="Verificando a ortografia..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_colors.xml b/indra/newview/skins/default/xui/pt/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
old mode 100644
new mode 100755
index c53aa7d5f70e72ecc45c06b5ac72ee0e69743960..8a0495f9bb52673832fbdfe6c33cda2991f50070
--- a/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/pt/panel_preferences_general.xml
@@ -69,6 +69,9 @@
 		<combo_box.item label="(nunca)" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Mensagem do modo ocupado:
+		Resposta de Não perturbe:
 	</text>
+	<text_editor name="do_not_disturb_response">
+		log_in_to_change
+	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/pt/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_move.xml b/indra/newview/skins/default/xui/pt/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/pt/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml b/indra/newview/skins/default/xui/pt/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml b/indra/newview/skins/default/xui/pt/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/pt/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_region_covenant.xml b/indra/newview/skins/default/xui/pt/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_region_debug.xml b/indra/newview/skins/default/xui/pt/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_region_environment.xml b/indra/newview/skins/default/xui/pt/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_region_estate.xml b/indra/newview/skins/default/xui/pt/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_region_general.xml b/indra/newview/skins/default/xui/pt/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_region_terrain.xml b/indra/newview/skins/default/xui/pt/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_script_ed.xml b/indra/newview/skins/default/xui/pt/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/pt/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/pt/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_script_question_toast.xml b/indra/newview/skins/default/xui/pt/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml b/indra/newview/skins/default/xui/pt/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/pt/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/pt/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/pt/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_sound_devices.xml b/indra/newview/skins/default/xui/pt/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/pt/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_status_bar.xml b/indra/newview/skins/default/xui/pt/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/pt/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_voice_effect.xml b/indra/newview/skins/default/xui/pt/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/pt/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/panel_world_map.xml b/indra/newview/skins/default/xui/pt/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/role_actions.xml b/indra/newview/skins/default/xui/pt/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml b/indra/newview/skins/default/xui/pt/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml b/indra/newview/skins/default/xui/pt/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
old mode 100644
new mode 100755
index 3cfe0fe4f41063dbc71da2558ab8f46baa50b31f..f0fd438cef55752b2cd993f29c93f9d023b244fa
--- a/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/pt/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Comprar objeto" name="Buyobject"/>
 			<combo_box.item label="Pagar por objeto" name="Payobject"/>
 			<combo_box.item label="Abrir" name="Open"/>
+			<combo_box.item label="Zoom" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/pt/strings.xml b/indra/newview/skins/default/xui/pt/strings.xml
old mode 100644
new mode 100755
index bc72b8602012a21a58f671b844a75d18395afab8..4bf18aab7059f23bf4f2c276d1a4daa61c8bf272
--- a/indra/newview/skins/default/xui/pt/strings.xml
+++ b/indra/newview/skins/default/xui/pt/strings.xml
@@ -128,7 +128,7 @@
 		Sair
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=pt-BR&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		O visualizador utilizado já não é compatível com o Second Life.  Visite a página abaixo para baixar uma versão atual: http://secondlife.com/download
@@ -571,8 +571,8 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="AvatarAway">
 		Distante
 	</string>
-	<string name="AvatarBusy">
-		Ocupado
+	<string name="AvatarDoNotDisturb">
+		Não perturbe
 	</string>
 	<string name="AvatarMuted">
 		Mudo
@@ -808,6 +808,12 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="ST_NO_JOINT">
 		Não é possível encontrar a raiz (ROOT) ou junção (JOINT).
 	</string>
+	<string name="NearbyChatTitle">
+		Bate-papo local
+	</string>
+	<string name="NearbyChatLabel">
+		(Bate-papo local)
+	</string>
 	<string name="whisper">
 		sussurra:
 	</string>
@@ -871,6 +877,9 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="ControlYourCamera">
 		Controle sua camera
 	</string>
+	<string name="AgentNameSubst">
+		(Você)
+	</string>
 	<string name="TeleportYourAgent">
 		Teletransportá-lo
 	</string>
@@ -955,18 +964,6 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="dictionary_files">
 		Dicionários
 	</string>
-	<string name="AvatarSetNotAway">
-		deixar como ausente
-	</string>
-	<string name="AvatarSetAway">
-		deixar como ausente
-	</string>
-	<string name="AvatarSetNotBusy">
-		deixar como não ocupado
-	</string>
-	<string name="AvatarSetBusy">
-		Deixar como ocupado
-	</string>
 	<string name="shape">
 		Silhueta
 	</string>
@@ -1923,8 +1920,8 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="PanelContentsNewScript">
 		Novo Script
 	</string>
-	<string name="BusyModeResponseDefault">
-		O residente para o qual escreveu está no modo &apos;ocupado&apos;, ou seja, ele prefere não receber nada no momento. Sua mensagem será exibida como uma MI mais tarde.
+	<string name="DoNotDisturbModeResponseDefault">
+		Este residente ativou o &quot;Não perturbe&quot; e verá sua mensagem mais tarde.
 	</string>
 	<string name="MuteByName">
 		(por nome)
@@ -2037,9 +2034,6 @@ Pessoas com contas gratuitas não poderão acessar o Second Life no momento para
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		Conteúdo
-	</string>
 	<string name="AcquiredItems">
 		Itens adquiridos
 	</string>
@@ -3753,7 +3747,7 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 		Região em geral
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Avatar visíveis e bate-papo permitido fora deste terreno
+		Os avatares neste lote não podem ser vistos ou ouvidos por avatares fora dele
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Os objetos que se movem podem não se comportar corretamente nesta região até que ela seja recarregada.
@@ -3830,6 +3824,12 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="IM_unblock_only_groups_friends">
 		Para visualizar esta mensagem, você deve desmarcar &quot;Apenas amigos e grupos podem me ligar ou enviar MIs&quot; em Preferências/Privacidade.
 	</string>
+	<string name="OnlineStatus">
+		Conectado
+	</string>
+	<string name="OfflineStatus">
+		Desconectado
+	</string>
 	<string name="answered_call">
 		Ligação atendida
 	</string>
@@ -3839,6 +3839,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="you_joined_call">
 		Você entrou na ligação
 	</string>
+	<string name="you_auto_rejected_call-im">
+		Você recusou automaticamente a chamada de voz enquanto &quot;Não perturbe&quot; estava ativado.
+	</string>
 	<string name="name_started_call">
 		[NAME] iniciou uma ligação de voz
 	</string>
@@ -3851,6 +3854,9 @@ If you continue to receive this message, contact the [SUPPORT_SITE].
 	<string name="hang_up-im">
 		Saiu da ligação de voz
 	</string>
+	<string name="conference-title">
+		Bate-papo com várias pessoas
+	</string>
 	<string name="conference-title-incoming">
 		Conversa com [AGENT_NAME]
 	</string>
@@ -4726,6 +4732,9 @@ Tente colocar o caminho do editor entre aspas.
 	<string name="Command_Chat_Label">
 		Bate-papo
 	</string>
+	<string name="Command_Conversations_Label">
+		Conversas
+	</string>
 	<string name="Command_Compass_Label">
 		Bússola
 	</string>
@@ -4801,6 +4810,9 @@ Tente colocar o caminho do editor entre aspas.
 	<string name="Command_Chat_Tooltip">
 		Bater papo com pessoas próximas usando texto
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Conversar com todos
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Bússola
 	</string>
@@ -4930,4 +4942,13 @@ Tente colocar o caminho do editor entre aspas.
 	<string name="UserDictionary">
 		[Usuário]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		As conversas não estão sendo registradas. Para começar a manter um registro, selecione &quot;Salvar: apenas registro&quot; ou &quot;Salvar: registro e transcrições&quot; em Preferências&gt; Bate-papo.
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		Nenhuma conversa será registrada. Para recomeçar a gravação de registros, selecione &quot;Salvar: apenas registro&quot; ou &quot;Salvar: registro e transcrições&quot; em Preferências&gt; Bate-papo.
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		Não há conversas registradas. Depois que você entrar em contato com alguém, ou alguém entrar em contato com você, um registro será exibido aqui.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/pt/teleport_strings.xml b/indra/newview/skins/default/xui/pt/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/pt/xui_version.xml b/indra/newview/skins/default/xui/pt/xui_version.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_aaa.xml b/indra/newview/skins/default/xui/ru/floater_aaa.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_about.xml b/indra/newview/skins/default/xui/ru/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_about_land.xml b/indra/newview/skins/default/xui/ru/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_activeim.xml b/indra/newview/skins/default/xui/ru/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/ru/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/ru/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_auction.xml b/indra/newview/skins/default/xui/ru/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_autoreplace.xml b/indra/newview/skins/default/xui/ru/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_avatar.xml b/indra/newview/skins/default/xui/ru/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_avatar_picker.xml b/indra/newview/skins/default/xui/ru/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_avatar_textures.xml b/indra/newview/skins/default/xui/ru/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_beacons.xml b/indra/newview/skins/default/xui/ru/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_build_options.xml b/indra/newview/skins/default/xui/ru/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml b/indra/newview/skins/default/xui/ru/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_bumps.xml b/indra/newview/skins/default/xui/ru/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_contents.xml b/indra/newview/skins/default/xui/ru/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_currency.xml b/indra/newview/skins/default/xui/ru/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/ru/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_land.xml b/indra/newview/skins/default/xui/ru/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_buy_object.xml b/indra/newview/skins/default/xui/ru/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_camera.xml b/indra/newview/skins/default/xui/ru/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_chat_bar.xml b/indra/newview/skins/default/xui/ru/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_choose_group.xml b/indra/newview/skins/default/xui/ru/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_color_picker.xml b/indra/newview/skins/default/xui/ru/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_conversation_log.xml b/indra/newview/skins/default/xui/ru/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..090ac7193ac5183e6a57b18d2f606e8f70798342
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="ЖУРНАЛ РАЗГОВОРА">
+	<panel name="buttons_panel">
+		<filter_editor label="Фильтр для людей" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Параметры просмотра/сортировки"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Действия с выбранным жителем или группой"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_conversation_preview.xml b/indra/newview/skins/default/xui/ru/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..23225fcf56d5b220be7004c9cd5fe63ff84e3e12
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="РАЗГОВОР:">
+	<floater.string name="Title">
+		РАЗГОВОР: [NAME]
+	</floater.string>
+	<text name="page_label" value="Страница"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_critical.xml b/indra/newview/skins/default/xui/ru/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/ru/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_destinations.xml b/indra/newview/skins/default/xui/ru/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_display_name.xml b/indra/newview/skins/default/xui/ru/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/ru/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/ru/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/ru/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_environment_settings.xml b/indra/newview/skins/default/xui/ru/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_event.xml b/indra/newview/skins/default/xui/ru/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_fast_timers.xml b/indra/newview/skins/default/xui/ru/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_font_test.xml b/indra/newview/skins/default/xui/ru/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_gesture.xml b/indra/newview/skins/default/xui/ru/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_god_tools.xml b/indra/newview/skins/default/xui/ru/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_hardware_settings.xml b/indra/newview/skins/default/xui/ru/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_help_browser.xml b/indra/newview/skins/default/xui/ru/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_how_to.xml b/indra/newview/skins/default/xui/ru/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_hud.xml b/indra/newview/skins/default/xui/ru/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_im_container.xml b/indra/newview/skins/default/xui/ru/floater_im_container.xml
old mode 100644
new mode 100755
index b147cfa2b320bf3168cd7c5b53424c41c8719e09..eba7a19cd4a90020258dd6ba3b1fc0426376a964
--- a/indra/newview/skins/default/xui/ru/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/ru/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="ОБЩЕНИЕ"/>
+<multi_floater name="floater_im_box" title="ОБЩЕНИЕ">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Параметры просмотра/сортировки"/>
+					<button name="add_btn" tool_tip="Начать разговор"/>
+					<button name="speak_btn" tool_tip="Разговаривать через микрофон"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Свернуть/развернуть этот список"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Свернуть эту панель"/>
+					<text name="stub_textbox">
+						Разговор отображается в отдельном окне.   [secondlife:/// Вернуть.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_im_session.xml b/indra/newview/skins/default/xui/ru/floater_im_session.xml
old mode 100644
new mode 100755
index 604d9dc6d3315bd233432cd7172e07198e1b701a..ea110ffb44ac27e6096f2098a7733c986e8d436f
--- a/indra/newview/skins/default/xui/ru/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/ru/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="Кому" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] приглашен(а) на разговор."/>
+	<floater.string name="multiple_participants_added" value="[NAME] приглашены на разговор."/>
+	<floater.string name="tooltip_to_separate_window" value="Перенести этот разговор в отдельное окно"/>
+	<floater.string name="tooltip_to_main_window" value="Вернуть этот разговор в главное окно"/>
+	<floater.string name="start_call_button_tooltip" value="Открыть голосовое подключение"/>
+	<floater.string name="end_call_button_tooltip" value="Закрыть голосовое подключение"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Свернуть эту панель"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Свернуть список участников"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Развернуть список участников"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Параметры просмотра/сортировки"/>
+				<menu_button name="gear_btn" tool_tip="Действия с выбранным жителем"/>
+				<button name="add_btn" tool_tip="Добавить участника в этот разговор"/>
+				<button name="voice_call_btn" tool_tip="Открыть голосовое подключение"/>
+				<button name="close_btn" tool_tip="Завершить этот разговор"/>
+				<button name="expand_collapse_btn" tool_tip="Развернуть/свернуть эту панель"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Переводить чат" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="Кому" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Показать/скрыть панель сообщений"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_image_preview.xml b/indra/newview/skins/default/xui/ru/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_import_collada.xml b/indra/newview/skins/default/xui/ru/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_incoming_call.xml b/indra/newview/skins/default/xui/ru/floater_incoming_call.xml
old mode 100644
new mode 100755
index 072c20147df7f5e95abdd2b505cc79c238812464..3f61421d0ce4c4a9b004e3d1e7f84774fe46a028
--- a/indra/newview/skins/default/xui/ru/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/ru/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		анонимно
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		вызывает.
+		вызывает вас.
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		теперь участвует в групповом голосовом чате.
@@ -25,9 +25,9 @@
 		Хотите выйти из чата «[CURRENT_CHAT]» и присоединиться к этому голосовому чату?
 	</floater.string>
 	<text name="question">
-		Хотите выйти из чата «[CURRENT_CHAT]» и присоединиться к этому голосовому чату?
+		Если вы ответите, вы покинете текущий голосовой чат.
 	</text>
-	<button label="Принять" label_selected="Принять" name="Accept"/>
-	<button label="Отклонить" label_selected="Отклонить" name="Reject"/>
-	<button label="Начать IM" name="Start IM"/>
+	<button label="Ответить" label_selected="Ответить" name="Accept"/>
+	<button label="Игнорировать" label_selected="Игнорировать" name="Reject"/>
+	<button label="Открыть IM" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_inspect.xml b/indra/newview/skins/default/xui/ru/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/ru/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/ru/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_joystick.xml b/indra/newview/skins/default/xui/ru/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_lagmeter.xml b/indra/newview/skins/default/xui/ru/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_land_holdings.xml b/indra/newview/skins/default/xui/ru/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/ru/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_lsl_guide.xml b/indra/newview/skins/default/xui/ru/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_map.xml b/indra/newview/skins/default/xui/ru/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_media_browser.xml b/indra/newview/skins/default/xui/ru/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_media_settings.xml b/indra/newview/skins/default/xui/ru/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_mem_leaking.xml b/indra/newview/skins/default/xui/ru/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/ru/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_model_preview.xml b/indra/newview/skins/default/xui/ru/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_moveview.xml b/indra/newview/skins/default/xui/ru/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_mute_object.xml b/indra/newview/skins/default/xui/ru/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_my_appearance.xml b/indra/newview/skins/default/xui/ru/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_my_inventory.xml b/indra/newview/skins/default/xui/ru/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_notification.xml b/indra/newview/skins/default/xui/ru/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_notifications_console.xml b/indra/newview/skins/default/xui/ru/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_object_weights.xml b/indra/newview/skins/default/xui/ru/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_openobject.xml b/indra/newview/skins/default/xui/ru/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/ru/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_outgoing_call.xml b/indra/newview/skins/default/xui/ru/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/ru/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index fa72df04fdc1e15d4326b55cba5b49fa1c4bd771..8faddb1805815d08558e837d1ed11a294f577235
--- a/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/ru/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Показать:
 			</text>
-			<check_box label="Мир" name="show_world"/>
+			<check_box label="Тест" name="show_world"/>
 			<check_box label="Только перемещаемые предметы" name="show_world_movables_only"/>
 			<check_box label="Навигационная сетка" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/ru/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/ru/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_pay.xml b/indra/newview/skins/default/xui/ru/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_pay_object.xml b/indra/newview/skins/default/xui/ru/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_people.xml b/indra/newview/skins/default/xui/ru/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml b/indra/newview/skins/default/xui/ru/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_picks.xml b/indra/newview/skins/default/xui/ru/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_places.xml b/indra/newview/skins/default/xui/ru/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_post_process.xml b/indra/newview/skins/default/xui/ru/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preferences.xml b/indra/newview/skins/default/xui/ru/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/ru/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_animation.xml b/indra/newview/skins/default/xui/ru/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_gesture.xml b/indra/newview/skins/default/xui/ru/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_notecard.xml b/indra/newview/skins/default/xui/ru/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_sound.xml b/indra/newview/skins/default/xui/ru/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_preview_texture.xml b/indra/newview/skins/default/xui/ru/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_price_for_listing.xml b/indra/newview/skins/default/xui/ru/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_publish_classified.xml b/indra/newview/skins/default/xui/ru/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_region_debug_console.xml b/indra/newview/skins/default/xui/ru/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_region_info.xml b/indra/newview/skins/default/xui/ru/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_report_abuse.xml b/indra/newview/skins/default/xui/ru/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_script_debug.xml b/indra/newview/skins/default/xui/ru/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/ru/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_script_limits.xml b/indra/newview/skins/default/xui/ru/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_script_preview.xml b/indra/newview/skins/default/xui/ru/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_script_queue.xml b/indra/newview/skins/default/xui/ru/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_script_search.xml b/indra/newview/skins/default/xui/ru/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_search.xml b/indra/newview/skins/default/xui/ru/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_select_key.xml b/indra/newview/skins/default/xui/ru/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_sell_land.xml b/indra/newview/skins/default/xui/ru/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_settings_debug.xml b/indra/newview/skins/default/xui/ru/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_snapshot.xml b/indra/newview/skins/default/xui/ru/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_sound_devices.xml b/indra/newview/skins/default/xui/ru/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_sound_preview.xml b/indra/newview/skins/default/xui/ru/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_spellcheck.xml b/indra/newview/skins/default/xui/ru/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/ru/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_stats.xml b/indra/newview/skins/default/xui/ru/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_sys_well.xml b/indra/newview/skins/default/xui/ru/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_telehub.xml b/indra/newview/skins/default/xui/ru/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/ru/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/ru/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/ru/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index db37089aeba65da34772f5156770e057bc302490..a9a21e7d4a1b84f75ebadba17435ff201f74e4e2
--- a/indra/newview/skins/default/xui/ru/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/ru/floater_texture_ctrl.xml
@@ -19,7 +19,7 @@
 	<button label="По умолчанию" label_selected="По умолчанию" name="Default"/>
 	<button label="Очистить" label_selected="Очистить" name="Blank"/>
 	<button label="Нет" label_selected="Нет" name="None"/>
-	<check_box initial_value="истина" label="Просмотр вживую" name="apply_immediate_check"/>
+	<check_box initial_value="истина" label="Применить сейчас" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Просмотр отключен"/>
 	<filter_editor label="Фильтровать текстуры" name="inventory search editor"/>
 	<check_box initial_value="ложь" label="Показывать папки" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/ru/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/ru/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_tools.xml b/indra/newview/skins/default/xui/ru/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_top_objects.xml b/indra/newview/skins/default/xui/ru/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_tos.xml b/indra/newview/skins/default/xui/ru/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_toybox.xml b/indra/newview/skins/default/xui/ru/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_translation_settings.xml b/indra/newview/skins/default/xui/ru/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_url_entry.xml b/indra/newview/skins/default/xui/ru/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/ru/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5a7e7a706100067e394099707cd811a647c4798e
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="ГРОМКОСТЬ ГОЛОСОВОГО ЧАТА">
+	<slider label="Голосовой чат" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_controls.xml b/indra/newview/skins/default/xui/ru/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_effect.xml b/indra/newview/skins/default/xui/ru/floater_voice_effect.xml
old mode 100644
new mode 100755
index 1eb8a94d7a7bba4373e729057f601a01b83113d5..d3cef042a31085865a30ea1480d4a69bdbf43b38
--- a/indra/newview/skins/default/xui/ru/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/ru/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Места" name="voice_effects" title="ИЗМЕНЕНИЕ ГОЛОСА">
+<floater label="Места" name="voice_effects" title="ПРОСМОТР ИЗМЕНЕНИЯ ГОЛОСА">
 	<string name="no_voice_effect">
 		(Нет изменения голоса)
 	</string>
diff --git a/indra/newview/skins/default/xui/ru/floater_voice_volume.xml b/indra/newview/skins/default/xui/ru/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aca6bd518aaf0e842bb3d9072193999c61143334
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="ГРОМКОСТЬ ГОЛОСА">
+	<slider name="volume_slider" tool_tip="Громкость голоса" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/ru/floater_web_content.xml b/indra/newview/skins/default/xui/ru/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/ru/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_window_size.xml b/indra/newview/skins/default/xui/ru/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/floater_world_map.xml b/indra/newview/skins/default/xui/ru/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/inspect_avatar.xml b/indra/newview/skins/default/xui/ru/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/inspect_group.xml b/indra/newview/skins/default/xui/ru/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/inspect_object.xml b/indra/newview/skins/default/xui/ru/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/inspect_remote_object.xml b/indra/newview/skins/default/xui/ru/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/ru/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_other.xml b/indra/newview/skins/default/xui/ru/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_attachment_self.xml b/indra/newview/skins/default/xui/ru/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml b/indra/newview/skins/default/xui/ru/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_other.xml b/indra/newview/skins/default/xui/ru/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_avatar_self.xml b/indra/newview/skins/default/xui/ru/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_cof_attachment.xml b/indra/newview/skins/default/xui/ru/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_cof_body_part.xml b/indra/newview/skins/default/xui/ru/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_cof_clothing.xml b/indra/newview/skins/default/xui/ru/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_cof_gear.xml b/indra/newview/skins/default/xui/ru/menu_cof_gear.xml
old mode 100644
new mode 100755
index 0332c03a0465961f30623fe919c2e2c998a3940c..b7a32dfd7538b82f1d66396fcdabe6717a31bdc1
--- a/indra/newview/skins/default/xui/ru/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/ru/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="Gear COF">
 	<menu label="Новая одежда" name="COF.Gear.New_Clothes"/>
-	<menu label="Новые части тела" name="COF.Geear.New_Body_Parts"/>
+	<menu label="Новые части тела" name="COF.Gear.New_Body_Parts"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_conversation.xml b/indra/newview/skins/default/xui/ru/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..530b1ea704e6815464b88f6e7058f6aa7b41c8a3
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Закрыть разговор" name="close_conversation"/>
+	<menu_item_call label="Открыть голосовой чат" name="open_voice_conversation"/>
+	<menu_item_call label="Прекратить голосовой чат" name="disconnect_from_voice"/>
+	<menu_item_call label="Смотреть профиль" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Предложить телепортацию" name="offer_teleport"/>
+	<menu_item_call label="Голосовой вызов" name="voice_call"/>
+	<menu_item_call label="Журнал чата..." name="chat_history"/>
+	<menu_item_call label="Добавить друга" name="add_friend"/>
+	<menu_item_call label="Удалить друга" name="remove_friend"/>
+	<menu_item_call label="Удалить друзей" name="remove_friends"/>
+	<menu_item_call label="Пригласить в группу..." name="invite_to_group"/>
+	<menu_item_call label="Приблизить" name="zoom_in"/>
+	<menu_item_call label="Карта" name="map"/>
+	<menu_item_call label="Поделиться" name="share"/>
+	<menu_item_call label="Заплатить" name="pay"/>
+	<menu_item_check label="Блокировать голос" name="block_unblock"/>
+	<menu_item_check label="Блокировать текст" name="MuteText"/>
+	<menu_item_call label="Профиль группы" name="group_profile"/>
+	<menu_item_call label="Активировать группу" name="activate_group"/>
+	<menu_item_call label="Покинуть группу" name="leave_group"/>
+	<context_menu label="Параметры модератора" name="Moderator Options">
+		<menu_item_check label="Разрешить текстовый чат" name="AllowTextChat"/>
+		<menu_item_call label="Заглушить этого участника" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Позволить говорить этому участнику" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Заглушить всех" name="ModerateVoiceMute"/>
+		<menu_item_call label="Позволить говорить всем" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/ru/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3fbffbe038a3cd1afbbdb196b55ff90ea45ec2dd
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="IM..." name="IM"/>
+	<menu_item_call label="Голосовой вызов..." name="Call"/>
+	<menu_item_call label="Открыть журнал чата..." name="Chat history"/>
+	<menu_item_call label="Смотреть профиль" name="View Profile"/>
+	<menu_item_call label="Предложить телепорт" name="teleport"/>
+	<menu_item_call label="Добавить друга" name="add_friend"/>
+	<menu_item_call label="Удалить из друзей" name="remove_friend"/>
+	<menu_item_call label="Пригласить в группу..." name="Invite"/>
+	<menu_item_call label="Карта" name="Map"/>
+	<menu_item_call label="Поделиться" name="Share"/>
+	<menu_item_call label="Заплатить" name="Pay"/>
+	<menu_item_check label="Черный список" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/ru/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..928146e273ec0814e9915dd871f2fa37fdb7d049
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Сортировать по имени" name="sort_by_name"/>
+	<menu_item_check label="Сортировать по дате" name="sort_by_date"/>
+	<menu_item_check label="Сначала друзья" name="sort_by_friends"/>
+	<menu_item_call label="Посмотреть журнал локального чата..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_edit.xml b/indra/newview/skins/default/xui/ru/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_favorites.xml b/indra/newview/skins/default/xui/ru/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml b/indra/newview/skins/default/xui/ru/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_group_plus.xml b/indra/newview/skins/default/xui/ru/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml b/indra/newview/skins/default/xui/ru/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_im_conversation.xml b/indra/newview/skins/default/xui/ru/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1db0b8bae30a24c3076d0516dd7b1c73682c4f92
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Смотреть профиль" name="View Profile"/>
+	<menu_item_call label="Добавить друга" name="Add Friend"/>
+	<menu_item_call label="Удалить друга" name="remove_friend"/>
+	<menu_item_call label="Предложить телепортацию" name="offer_teleport"/>
+	<menu_item_call label="Пригласить в группу..." name="invite_to_group"/>
+	<menu_item_call label="Журнал чата..." name="chat_history"/>
+	<menu_item_call label="Приблизить" name="zoom_in"/>
+	<menu_item_call label="Карта" name="map"/>
+	<menu_item_call label="Поделиться" name="Share"/>
+	<menu_item_call label="Заплатить" name="Pay"/>
+	<menu_item_check label="Блокировать голос" name="Block/Unblock"/>
+	<menu_item_check label="Блокировать текст" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/ru/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35cff8e4bf541c311e64503cdcda02a662a85489
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Компактный вид" name="compact_view"/>
+	<menu_item_check label="Развернутый вид" name="expanded_view"/>
+	<menu_item_check label="Показать время" name="IMShowTime"/>
+	<menu_item_check label="Показывать имена при разговорах" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/ru/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/ru/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/ru/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/ru/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/ru/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory.xml b/indra/newview/skins/default/xui/ru/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory_add.xml b/indra/newview/skins/default/xui/ru/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/ru/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_land.xml b/indra/newview/skins/default/xui/ru/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_landmark.xml b/indra/newview/skins/default/xui/ru/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_login.xml b/indra/newview/skins/default/xui/ru/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_media_ctrl.xml b/indra/newview/skins/default/xui/ru/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_mini_map.xml b/indra/newview/skins/default/xui/ru/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/ru/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_navbar.xml b/indra/newview/skins/default/xui/ru/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_nearby_chat.xml b/indra/newview/skins/default/xui/ru/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_notification_well_button.xml b/indra/newview/skins/default/xui/ru/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_object.xml b/indra/newview/skins/default/xui/ru/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_object_icon.xml b/indra/newview/skins/default/xui/ru/menu_object_icon.xml
old mode 100644
new mode 100755
index 6229b2e72fe59af4b5e378b72a761ae217b5b3b6..0c50abcfbdf904471c6b386dc70b004a58bd43dd
--- a/indra/newview/skins/default/xui/ru/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/ru/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Профиль объекта..." name="Object Profile"/>
 	<menu_item_call label="Блокировать..." name="Block"/>
+	<menu_item_call label="Показать на карте" name="show_on_map"/>
+	<menu_item_call label="Телепорт в местоположение объекта" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml b/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml
old mode 100644
new mode 100755
index 93dbd7d6a7a68bb33224d026e425b7e295c7fa3e..d379a172166bdf85138c908240c6675bac659935
--- a/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/ru/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Новые волосы" name="New Hair"/>
 		<menu_item_call label="Новые глаза" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Открыть все папки" name="expand"/>
+	<menu_item_call label="Закрыть все папки" name="collapse"/>
 	<menu_item_call label="Переименовать костюм" name="rename"/>
 	<menu_item_call label="Удалить костюм" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_outfit_tab.xml b/indra/newview/skins/default/xui/ru/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_participant_list.xml b/indra/newview/skins/default/xui/ru/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_participant_view.xml b/indra/newview/skins/default/xui/ru/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..851a42d428a78fc1cace2cbe10eae16c5f4af982
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Сортировать разговоры по типу" name="sort_sessions_by_type"/>
+	<menu_item_check label="Сортировать разговоры по имени" name="sort_sessions_by_name"/>
+	<menu_item_check label="Сортировать разговоры по последнему действию" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Сортировать участников по имени" name="sort_participants_by_name"/>
+	<menu_item_check label="Сортировать участников по последнему действию" name="sort_participants_by_recent"/>
+	<menu_item_call label="Изменить настройки..." name="chat_preferences"/>
+	<menu_item_call label="Настройки приватности..." name="privacy_preferences"/>
+	<menu_item_check label="Журнал разговора..." name="Conversation"/>
+	<menu_item_check label="Перевести локальный чат" name="Translate_chat"/>
+	<menu_item_check label="Настройки перевода..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..157f2ad5e237868910bb170d441af8e2e6b91eba
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="Разблокировать" name="unblock"/>
+	<menu_item_call label="Профиль…" name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/ru/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f42e8f8609b573f4330012197b8bcce30ab865f1
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Блокировать жителя по имени..." name="block_resident_by_name"/>
+	<menu_item_call label="Блокировать объект по имени" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/ru/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8c0150e8aedfc41021f3c400c1e9766bf56c0bd9
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Сортировать по имени" name="sort_by_name"/>
+	<menu_item_check label="Сортировать по типу" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_friends_view.xml b/indra/newview/skins/default/xui/ru/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b2dba0539620e8d21e974425dd399a6cd8ff8a2
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Сортировать по имени" name="sort_name"/>
+	<menu_item_check label="Сортировать по статусу" name="sort_status"/>
+	<menu_item_check label="Показывать значки людей" name="view_icons"/>
+	<menu_item_check label="Показывать разрешенные действия" name="view_permissions"/>
+	<menu_item_check label="Посмотреть журнал разговора..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_people_groups.xml b/indra/newview/skins/default/xui/ru/menu_people_groups.xml
old mode 100644
new mode 100755
index e734a83ef08e1c1f9fc2088001cd4861b6c4b029..78d73c9d1ed1c46ec8b2ec971bed032f57dd37ed
--- a/indra/newview/skins/default/xui/ru/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/ru/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Информация" name="View Info"/>
 	<menu_item_call label="Чат" name="Chat"/>
-	<menu_item_call label="Звонок" name="Call"/>
+	<menu_item_call label="Голосовой вызов" name="Call"/>
 	<menu_item_call label="Активация" name="Activate"/>
 	<menu_item_call label="Покинуть" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_groups_view.xml b/indra/newview/skins/default/xui/ru/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cbf1c64774f5f31eef8bdccd560ebf444fafdb8c
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Показывать значки группы" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_people_nearby.xml b/indra/newview/skins/default/xui/ru/menu_people_nearby.xml
old mode 100644
new mode 100755
index ebce959044da2e73e079a3c102876c144f9ddf94..d05b7e7d012c53ae2e266bbfc4c31417b9949332
--- a/indra/newview/skins/default/xui/ru/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/ru/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Смотреть профиль" name="View Profile"/>
-	<menu_item_call label="В друзья" name="Add Friend"/>
-	<menu_item_call label="Удалить из друзей" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Звонок" name="Call"/>
-	<menu_item_call label="Карта" name="Map"/>
-	<menu_item_call label="Поделиться" name="Share"/>
-	<menu_item_call label="Заплатить" name="Pay"/>
-	<menu_item_check label="Черный список" name="Block/Unblock"/>
-	<menu_item_call label="Предложить телепорт" name="teleport"/>
+	<menu_item_call label="Смотреть профиль" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Предложить телепорт" name="offer_teleport"/>
+	<menu_item_call label="Голосовой вызов" name="voice_call"/>
+	<menu_item_call label="Посмотреть журнал чата..." name="chat_history"/>
+	<menu_item_call label="Добавить друга" name="add_friend"/>
+	<menu_item_call label="Удалить из друзей" name="remove_friend"/>
+	<menu_item_call label="Пригласить в группу..." name="invite_to_group"/>
+	<menu_item_call label="Приблизить" name="zoom_in"/>
+	<menu_item_call label="Карта" name="map"/>
+	<menu_item_call label="Поделиться" name="share"/>
+	<menu_item_call label="Заплатить" name="pay"/>
+	<menu_item_check label="Черный список" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/ru/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 0e8e0d4053764f7040c0f1287c70ff26fa4a1384..88eb56c9f5e69d52897b0f3910b553a27963a21f
--- a/indra/newview/skins/default/xui/ru/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/ru/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="Добавить в друзья" name="Add Friends"/>
-	<menu_item_call label="Удалить из друзей" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="Звонок" name="Call"/>
-	<menu_item_call label="Поделиться" name="Share"/>
-	<menu_item_call label="Заплатить" name="Pay"/>
-	<menu_item_call label="Предложить телепорт" name="teleport"/>
+	<menu_item_call label="Добавить в друзья" name="add_friends"/>
+	<menu_item_call label="Удалить из друзей" name="remove_friends"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="Звонок" name="call"/>
+	<menu_item_call label="Поделиться" name="share"/>
+	<menu_item_call label="Заплатить" name="pay"/>
+	<menu_item_call label="Предложить телепорт" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/ru/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bc353ad5831ddc278c3dd4399ea994f5196f3da
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Сортировать по недавно говорившим" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Сортировать по имени" name="sort_name"/>
+	<menu_item_check label="Сортировать по расстоянию" name="sort_distance"/>
+	<menu_item_check label="Показывать значки людей" name="view_icons"/>
+	<menu_item_check label="Смотреть карту" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_people_recent_view.xml b/indra/newview/skins/default/xui/ru/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a009cf081f3e7f2b08dd381aa161a8a36ed599cd
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Сортировать по времени" name="sort_most"/>
+	<menu_item_check label="Сортировать по имени" name="sort_name"/>
+	<menu_item_check label="Показывать значки людей" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/ru/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_picks.xml b/indra/newview/skins/default/xui/ru/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_picks_plus.xml b/indra/newview/skins/default/xui/ru/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_place.xml b/indra/newview/skins/default/xui/ru/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_place_add_button.xml b/indra/newview/skins/default/xui/ru/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/ru/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/ru/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_profile_overflow.xml b/indra/newview/skins/default/xui/ru/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_save_outfit.xml b/indra/newview/skins/default/xui/ru/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_script_chiclet.xml b/indra/newview/skins/default/xui/ru/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_slurl.xml b/indra/newview/skins/default/xui/ru/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/ru/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/ru/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/ru/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_text_editor.xml b/indra/newview/skins/default/xui/ru/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_toolbars.xml b/indra/newview/skins/default/xui/ru/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_topinfobar.xml b/indra/newview/skins/default/xui/ru/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_agent.xml b/indra/newview/skins/default/xui/ru/menu_url_agent.xml
old mode 100644
new mode 100755
index 0ba3ee152a5c2dcf4508e712395b1f28c57d3587..230d049fad6c64750f98be26dab5588c7e7cddf0
--- a/indra/newview/skins/default/xui/ru/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/ru/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Показать профиль жителя" name="show_agent"/>
+	<menu_item_call label="Смотреть профиль" name="show_agent"/>
+	<menu_item_call label="Отправить сообщение..." name="send_im"/>
+	<menu_item_call label="Добавить в друзья..." name="add_friend"/>
 	<menu_item_call label="Копировать название в буфер обмена" name="url_copy_label"/>
 	<menu_item_call label="Копировать URL-адрес SL в буфер обмена" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/ru/menu_url_group.xml b/indra/newview/skins/default/xui/ru/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_http.xml b/indra/newview/skins/default/xui/ru/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_inventory.xml b/indra/newview/skins/default/xui/ru/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_map.xml b/indra/newview/skins/default/xui/ru/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_objectim.xml b/indra/newview/skins/default/xui/ru/menu_url_objectim.xml
old mode 100644
new mode 100755
index 6e7800d3f5d22d2b70e8b255b534e9256bdeb119..1326db708e5450c15d58a844f72784aa7912fcb5
--- a/indra/newview/skins/default/xui/ru/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/ru/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Показать информацию об объекте" name="show_object"/>
+	<menu_item_call label="Профиль объекта..." name="show_object"/>
 	<menu_item_call label="Показать на карте" name="show_on_map"/>
 	<menu_item_call label="Телепорт в местоположение объекта" name="teleport_to_object"/>
 	<menu_item_call label="Копировать название объекта в буфер обмена" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_url_parcel.xml b/indra/newview/skins/default/xui/ru/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_slapp.xml b/indra/newview/skins/default/xui/ru/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_slurl.xml b/indra/newview/skins/default/xui/ru/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_url_teleport.xml b/indra/newview/skins/default/xui/ru/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_viewer.xml b/indra/newview/skins/default/xui/ru/menu_viewer.xml
old mode 100644
new mode 100755
index d9425937c36c8ab234d0220ef3497648440b8387..92a9943b937f13bce73bde7990506e5874f4b701
--- a/indra/newview/skins/default/xui/ru/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/ru/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Остановить анимацию" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Ходьба / бег / полет..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Статус" name="Status">
-			<menu_item_call label="Нет на месте" name="Set Away"/>
-			<menu_item_call label="Не беспокоить" name="Set Busy"/>
-		</menu>
+		<menu label="Статус" name="Status"/>
 		<menu_item_call label="Купить L$..." name="Buy and Sell L$"/>
 		<menu_item_call label="Торговые исходящие..." name="MerchantOutbox"/>
 		<menu_item_call label="Информационная панель аккаунта..." name="Manage My Account"/>
@@ -30,14 +27,18 @@
 		<menu_item_call label="Выход из [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="Общение" name="Communicate">
-		<menu_item_check label="Чат..." name="Nearby Chat"/>
+		<menu_item_check label="Разговоры..." name="Conversations"/>
+		<menu_item_check label="Локальный чат..." name="Nearby Chat"/>
 		<menu_item_check label="Говорить" name="Speak"/>
-		<menu_item_check label="Настройки голоса..." name="Nearby Voice"/>
-		<menu_item_check label="Изменение голоса..." name="ShowVoice"/>
+		<menu label="Изменение голоса" name="VoiceMorphing">
+			<menu_item_check label="Без изменения голоса" name="NoVoiceMorphing"/>
+			<menu_item_check label="Просмотр..." name="Preview"/>
+			<menu_item_call label="Подписаться..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Жесты..." name="Gestures"/>
-		<menu_item_call label="Друзья" name="My Friends"/>
-		<menu_item_call label="Группы" name="My Groups"/>
-		<menu_item_call label="Люди неподалеку" name="Active Speakers"/>
+		<menu_item_check label="Друзья" name="My Friends"/>
+		<menu_item_check label="Группы" name="My Groups"/>
+		<menu_item_check label="Люди неподалеку" name="Active Speakers"/>
 		<menu_item_call label="Черный список" name="Block List"/>
 	</menu>
 	<menu label="Мир" name="World">
@@ -305,7 +306,7 @@
 			<menu_item_call label="Выбранная текстура в основе" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Каркас" name="Wireframe"/>
 			<menu_item_check label="Смыкание объектов" name="Object-Object Occlusion"/>
-			<menu_item_check label="Освещение и тени" name="Lighting and Shadows"/>
+			<menu_item_check label="Освещение и тени" name="Advanced Lighting Model"/>
 			<menu_item_check label="Тени от солнца, луны и прожекторов" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO и сглаживание теней" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="Отладка GL" name="Debug GL"/>
diff --git a/indra/newview/skins/default/xui/ru/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/ru/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_wearing_gear.xml b/indra/newview/skins/default/xui/ru/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/menu_wearing_tab.xml b/indra/newview/skins/default/xui/ru/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/mime_types.xml b/indra/newview/skins/default/xui/ru/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/mime_types_linux.xml b/indra/newview/skins/default/xui/ru/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/mime_types_mac.xml b/indra/newview/skins/default/xui/ru/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/notifications.xml b/indra/newview/skins/default/xui/ru/notifications.xml
old mode 100644
new mode 100755
index 85b7074253f82ee32d08c1a081789df6a98db99f..00ab0b5763381740971acae88176759d87b3b318
--- a/indra/newview/skins/default/xui/ru/notifications.xml
+++ b/indra/newview/skins/default/xui/ru/notifications.xml
@@ -516,6 +516,24 @@
 		</url>
 		<usetemplate ignoretext="Мой графический драйвер устарел" name="okcancelignore" notext="Нет" yestext="Да"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		Возможно, для вашей видеокарты имеется более новый драйвер.  Обновление драйвера может существенно повысить быстродействие.
+
+    Проверить наличие обновления для драйвера по адресу [_URL]?
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Мой графический драйвер устарел" name="okcancelignore" notext="Нет" yestext="Да"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		Возможно, для вашей видеокарты имеется более новый драйвер.  Обновление драйвера может существенно повысить быстродействие.
+
+    Проверить наличие обновления для драйвера по адресу [_URL]?
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=ru-ru
+		</url>
+		<usetemplate ignoretext="Мой графический драйвер устарел" name="okcancelignore" notext="Нет" yestext="Да"/>
+	</notification>
 	<notification name="UnknownGPU">
 		В вашей системе установлена графическая карта, которую [APP_NAME] не может распознать.
 Так часто бывает, если новое оборудование еще не было проверено на работу с [APP_NAME].  Скорее всего, оно будет работать нормально, но, возможно, придется отрегулировать параметры графики.
@@ -1546,10 +1564,13 @@ http://secondlife.com/download.
 		Сейчас невозможно предложить дружбу. Повторите попытку через минуту.
 		<usetemplate name="okbutton" yestext="OK"/>
 	</notification>
-	<notification name="BusyModeSet">
-		Установлен режим «Занят».
-Сообщения чата и IM будут скрыты. На IM-сообщения будет возвращаться заданный ответ в режиме «Занят». Все предложения телепортации будут отклоняться. Все предложения инвентаря будут направлены в корзину.
-		<usetemplate ignoretext="Смена моего статуса на режим «Занят»" name="okignore" yestext="OK"/>
+	<notification name="DoNotDisturbModeSet">
+		Режим «Не беспокоить» включен.  Вы не будете получать уведомлений о входящих вызовах.
+
+- Другие жители будут получать ваш ответ, установленный для режима «Не беспокоить» (Настройки &gt; Общие).
+- Предложения телепортации будут отклоняться.
+- Голосовые вызовы будут отклоняться.
+		<usetemplate ignoretext="Смена моего статуса на режим «Не беспокоить»" name="okignore" yestext="OK"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Достигнуто максимальное количество групп. Выйдите из другой группы, прежде чем вступать в эту, или отклоните предложение.
@@ -2033,6 +2054,10 @@ http://secondlife.com/download.
 		Перейти на [http://secondlife.com/account/ информационную панель], чтобы увидеть историю аккаунта?
 		<usetemplate ignoretext="Запустить браузер для просмотра истории аккаунта" name="okcancelignore" notext="Отмена" yestext="Перейти на страницу"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		При добавлении участника в существующий разговор будет создан новый разговор.  Все участники получат уведомления о новом разговоре.
+		<usetemplate ignoretext="Подтвердите добавление участников чата" name="okcancelignore" notext="Отмена" yestext="ОК"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		Выйти из программы?
 		<usetemplate ignoretext="Подтверждать перед выходом" name="okcancelignore" notext="Не выходить" yestext="Выйти"/>
@@ -2107,14 +2132,14 @@ http://secondlife.com/download.
 			<button ignore="Не заменять" name="No" text="Отмена"/>
 		</form>
 	</notification>
-	<notification label="Предупреждение о режиме «Занят»" name="BusyModePay">
-		У вас включен режим «Занят», поэтому вы не получите никаких предметов, предлагаемых в обмен на этот платеж.
+	<notification label="Предупреждение режима «Не беспокоить»" name="DoNotDisturbModePay">
+		Включен режим «Не беспокоить». Вы не будете получать никаких предметов, предлагаемых в обмен за этот платеж.
 
-Хотите отключить режим «Занят» до завершения этой транзакции?
+Отключить режим «Не беспокоить» перед завершением этой операции?
 		<form name="form">
-			<ignore name="ignore" text="Я собираюсь заплатить за пользователя или объект, когда включен режим «Занят»"/>
-			<button ignore="Всегда отключать режим «Занят»" name="Yes" text="OK"/>
-			<button ignore="Не отключать режим «Занят»" name="No" text="Отмена"/>
+			<ignore name="ignore" text="Я собираюсь заплатить за пользователя или объект, когда включен режим «Не беспокоить»"/>
+			<button ignore="Всегда выходить из режима «Не беспокоить»" name="Yes" text="OK"/>
+			<button ignore="Не выходить из режима «Не беспокоить»" name="No" text="Отмена"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2249,11 +2274,8 @@ http://secondlife.com/download.
 	<notification name="GroupNotice">
 		Раздел: [SUBJECT], сообщение: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; в сети
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; не в сети
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Вы лучше всех, но нельзя добавить в друзья себя самого.
@@ -2482,13 +2504,6 @@ http://secondlife.com/download.
 	<notification name="DynamicPathfindingDisabled">
 		В этом регионе не разрешен динамический поиск пути.  Возможны нарушения работы скриптовых объектов с использованием вызовов LSL поиска пути.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		Изменение некоторых объектов в регионе может привести к неправильному поведению других подвижных объектов.  Чтобы исправить их поведение, нажмите кнопку «Восстановить регион».  Более подробная информация – по ссылке «Справка».
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Справка" ignoretext="Изменение некоторых объектов в регионе может привести к неправильному поведению других подвижных объектов." name="okhelpignore" yestext="OK"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Произошла ошибка.  Возможно, неполадка в сети или на сервере, или у вас нет прав на строительство.  Иногда для устранения этой проблемы достаточно выйти и снова войти.
 		<usetemplate name="okbutton" yestext="OK"/>
@@ -2751,7 +2766,7 @@ http://secondlife.com/download.
 	<notification name="ScriptQuestionCaution">
 		Предупреждение. Объект «&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;» требует полного доступа к вашему аккаунту для Linden-долларов. Если разрешить такой доступ, объект сможет в любое время снимать средства с вашего аккаунта или полностью опустошать его неоднократно и без предупреждения.
   
-Такое требование чаще всего незаконно. Не разрешайте доступ к своему аккаунту, если только не полностью осознаете, зачем он нужен этому объекту.
+Не разрешайте доступ к своему аккаунту, если только не полностью осознаете, зачем он нужен этому объекту.
 		<form name="form">
 			<button name="Grant" text="Разрешить полный доступ"/>
 			<button name="Deny" text="Отклонить"/>
@@ -3333,4 +3348,632 @@ http://secondlife.com/download.
 		Вы удаляете несколько предметов ([NUM_ITEMS]).  Продолжить?
 		<usetemplate ignoretext="Удалить несколько предметов?" name="okcancelignore" notext="Нет" yestext="Да"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] заморозил вас. В это время вы не можете перемещаться и выполнять другие действия с миром.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] заморозил вас на [AV_FREEZE_TIME] сек. В это время вы не можете перемещаться и выполнять другие действия с миром.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Аватар заморожен.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] разморозил вас.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Аватар разморожен.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		Не удалось заморозить: у вас нет прав администратора на этом участке.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		Заморозка кончилась, занимайтесь своим делом.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Невозможно заморозить этого пользователя.
+	</notification>
+	<notification name="NowOwnObject">
+		Вы стали владельцем объекта [OBJECT_NAME]
+	</notification>
+	<notification name="CantRezOnLand">
+		Нельзя выложить объект на [OBJECT_POS]: это не разрешено владельцем земли.  Узнать, кто владелец, можно с помощью инструмента «Земля».
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		Невозможно выложить объект: слишком много запросов.
+	</notification>
+	<notification name="SitFailCantMove">
+		Нельзя сесть: сейчас вы не можете двигаться.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		Вам не разрешено садиться на этой земле.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Попробуйте переместиться ближе.  Нельзя сесть на объект:
+он находится в другом регионе.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		Невозможно создать новый объект. Регион уже заполнен.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Не удалось поместить объект в указанное место.  Повторите попытку.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		Вы не можете создавать деревья и траву на чужой земле.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		Не удалось скопировать: вам не разрешено копировать объект «[OBJ_NAME]».
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		Не удалось скопировать: объект «[OBJ_NAME]» нельзя перенести к вам.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		Не удалось скопировать: объект «[OBJ_NAME]» относится к навигационной сетке.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Выбран дубликат без корневых объектов.
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		Невозможно дублировать объекты: регион заполнен.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		Невозможно дублировать объекты: не удалось найти их участок.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		Нельзя создать объект: 
+участок уже заполнен.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Не удалось выложить объект.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		Невозможно создать элемент, который вызвал проблемы в этом регионе.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		Этот предмет инвентаря находится в черном списке.
+	</notification>
+	<notification name="NoCanRezObjects">
+		Сейчас вам не разрешено создавать объекты.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Поиск по земле заблокирован.
+Вы провели слишком много операций поиска за короткое время.
+Повторите попытку через минуту.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		Недостаточно свободных ресурсов скриптинга для присоединения объекта!
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Вы умерли и были телепортированы в ваше домашнее местоположение
+	</notification>
+	<notification name="EjectComingSoon">
+		Вам запрещено здесь присутствовать; у вас есть [EJECT_TIME] сек, чтобы покинуть это место.
+	</notification>
+	<notification name="NoEnterServerFull">
+		Вам нет доступа в этот регион: 
+серпер переполнен.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Сохранение в инвентаре отключено.
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		Нельзя сохранить «[OBJ_NAME]» в содержимом объекта: объект, из которого оно было выложено, уже не существует.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		Нельзя сохранить «[OBJ_NAME]» в содержимом объекта: вам не разрешено изменять объект «[DEST_NAME]».
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		Невозможно сохранить «[OBJ_NAME]» в инвентаре: эта операция запрещена.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		Нельзя скопировать выбранное: вам не разрешено копировать объект «[OBJ_NAME]».
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		Невозможно скопировать выбранный предмет: объект «[OBJ_NAME]» не переносится.
+	</notification>
+	<notification name="NoTransNoCopy">
+		Невозможно скопировать выбранный предмет: объект «[OBJ_NAME]» не переносится.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		Удаление объекта «[OBJ_NAME]» из симулятора запрещено системой разрешений.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		Нельзя сохранить выбранное: вам не разрешено изменять объект «[OBJ_NAME]».
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		Невозможно сохранить выбранный предмет: объект «[OBJ_NAME]» не копируется.
+	</notification>
+	<notification name="NoModNoTaking">
+		Нельзя забрать выбранное: вам не разрешено изменять объект «[OBJ_NAME]».
+	</notification>
+	<notification name="RezDestInternalError">
+		Внутренняя ошибка: неизвестный тип места назначения.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		Невозможно удалить: объект не найден
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Невозможно выбросить этого пользователя.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Вам не разрешено устанавливать свое домашнее местоположение в этом регионе.
+	</notification>
+	<notification name="HomeLocationLimits">
+		Задать домашнее местоположение можно только на вашей земле или в Инфохабе материка.
+	</notification>
+	<notification name="HomePositionSet">
+		Задано положение дома.
+	</notification>
+	<notification name="AvatarEjected">
+		Аватар выброшен.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		Не удалось выбросить: у вас нет прав администратора на этом участке.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		Нельзя переместить объект «[OBJECT_NAME]» в позицию «[OBJ_POSITION]» региона [REGION_NAME]: участок уже заполнен.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		Нельзя переместить объект «[OBJECT_NAME]» в позицию
+«[OBJ_POSITION]» региона [REGION_NAME]: вашим объектам не разрешено присутствовать на этом участке.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		Нельзя переместить объект «[OBJECT_NAME]» в позицию
+«[OBJ_POSITION]» региона [REGION_NAME]: на этом участке недостаточно ресурсов для данного объекта.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		Нельзя переместить объект «[OBJECT_NAME]» в позицию
+[OBJ_POSITION] региона [REGION_NAME]: в другом регионе работает старая версия симулятора, которая не поддерживает прием этого объекта через границу регионов.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		Нельзя переместить объект «[OBJECT_NAME]» в позицию
+«[OBJ_POSITION]» региона [REGION_NAME]: вам не разрешено изменять навигационную сетку за пределами региона.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		Нельзя переместить объект «[OBJECT_NAME]» в позицию
+[OBJ_POSITION] региона [REGION_NAME] по неизвестной причине. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		У вас нет прав на изменение этого объекта
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		Нельзя включить физику для объекта, который относится к навигационной сетке.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		Нельзя включить физику для объектов с ключевыми кадрами.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		Нельзя включить физику для объекта -- недостаточно земельных ресурсов.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		Нельзя включить физику для объекта с расходом ресурсов физики больше [MAX_OBJECTS]
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Этот объект не может содержать вогнутых элементов: это фантом, который относится к навигационной сетке.
+	</notification>
+	<notification name="UnableAddItem">
+		Невозможно добавить предмет!
+	</notification>
+	<notification name="UnableEditItem">
+		Редактирование невозможно!
+	</notification>
+	<notification name="NoPermToEdit">
+		Редактирование не разрешено.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		Не разрешено копировать этот инвентарь.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		Нельзя сохранить в содержимом объекта: предмет уже не существует.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		Нельзя сохранить в содержимом объекта: предмет с таким названием уже есть в инвентаре
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		Нельзя сохранить в содержимом объекта: это приведет к изменению разрешений прикрепленного объекта.
+	</notification>
+	<notification name="TooManyScripts">
+		Слишком много скриптов.
+	</notification>
+	<notification name="UnableAddScript">
+		Невозможно добавить скрипт!
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		Сервер активов не ответил в заданное время.  Объект возвращен в симулятор.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		В этом регионе не разрешены фигуры с физическими данными.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		Нельзя изменять навигационную сетку за пределами региона.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		Нельзя задать свойства физики для объекта этого типа.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		Нельзя задать корневой примитив без фигуры.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		В этом регионе не разрешены материалы с физическими данными.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		Настройка материалов с физическими данными разрешена только для корневых примитивов.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		Присвоение персонажам материалов с физическими данными еще не поддерживается.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Одно или несколько свойств указанного материала с физическими данными недопустимы.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		Не разрешается изменять тип стыковки меш-объекта.
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		Не разрешается изменять форму меш-объекта
+	</notification>
+	<notification name="FullRegionCantEnter">
+		Вам нет доступа в этот регион: \nрегион заполнен.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Связь невозможна -- разные владельцы
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Связь невозможна – нельзя изменять навигационную сетку за пределами региона.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Связь невозможна: у вас нет разрешения на редактирование.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Связь невозможна -- слишком много примитивов
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Связь невозможна -- нельзя связать некопируемый и непереносимый объекты
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Связь невозможна -- нет связываемых объектов.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Связь невозможна -- слишком много персонажей с поиском пути
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Связь невозможна -- недостаточно земельных ресурсов
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		Объект использует слишком много ресурсов физики -- динамическое поведение отключено.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		Вы были телепортированы домой объектом «[OBJECT_NAME]» на участке «[PARCEL_NAME]»
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		Вы были телепортированы домой объектом «[OBJECT_NAME]»
+	</notification>
+	<notification name="TeleportedByAttachment">
+		Вы были телепортированы прикрепленным объектом [ITEM_ID]
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		Вы были телепортированы объектом «[OBJECT_NAME]» на участке «[PARCEL_NAME]»
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Вы были телепортированы объектом «[OBJECT_NAME]», владелец – [OWNER_ID]
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Вы были телепортированы объектом «[OBJECT_NAME]», владелец неизвестен.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		Невозможно создать запрошенный объект. Регион уже заполнен.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		Нельзя присоединить несколько объектов к одной точке.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Здесь нельзя создать несколько объектов.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		Невозможно создать запрошенный объект. Объекта нет в базе данных.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		Невозможно создать запрошенный объект. Истекло время запроса. Повторите попытку.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		Невозможно создать запрошенный объект. Повторите попытку.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Не удалось выложить, загрузка нужного объекта длится слишком долго.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Не удалось поместить объект в указанное место.  Повторите попытку.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		Вам нельзя создавать растения на этой земле.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		Невозможно восстановить объект. Не найдена позиция в игровом мире.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		Невозможно выложить объект: его данные сетки неверны.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		Невозможно выложить объект: в этом регионе уже сликом много скриптов.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Ваши привилегии доступа не разрешают создание объектов на этом месте.
+	</notification>
+	<notification name="CantCreateObject">
+		Сейчас вам не разрешено создавать объекты.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Неверные параметры объекта
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Ваши привилегии доступа не разрешают дублирование объектов на этом месте.
+	</notification>
+	<notification name="CantChangeShape">
+		Вам не разрешено изменять эту фигуру.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Ваши привилегии доступа не разрешают претендовать на объекты на этом месте.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		Не удалось передать: вам не разрешено передавать объекты для этой группы.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Ваши привилегии доступа не разрешают покупать объекты на этом месте.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		Невозможно присоединить объект: на нем сидит аватар.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		Деревья и траву нельзя носить как прикрепленные объекты.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		Нельзя присоединять объекты, принадлежащие группе.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		Нельзя прикреплять объекты, которыми вы не владеете.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		Невозможно присоединить объекты, которые относятся к навигационной сетке.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		Нельзя присоединить объект: вам не разрешено его перемещать.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		Недостаточно свободных ресурсов скриптинга для присоединения объекта!
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		Здесь нельзя сбрасывать объекты; перейдите в бесплатную область для гостей.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		Нельзя сбрасывать прикрепленные меш-объекты. Отсоедините их в инвентарь, а затем выложите в игровой мир.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		Не удалось сбросить прикрепленный объект: вам не разрешено оставлять его здесь.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		Не удалось сбросить прикрепленный объект: не хватает свободных земельных ресурсов.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Не удалось сбросить прикрепленные объекты: не хватает свободных ресурсов.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		Нельзя сбросить объект здесь.  Участок уже заполнен.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		Нельзя коснуться/взять этот объект: вы забанены на этом участке.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Уточните параметры удаления.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		Невозможно отправить актив.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		Не удалось найти пользователя для телепортации домой
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		режим творца недоступен
+	</notification>
+	<notification name="GenericRequestFailed">
+		не удалось выполнить общий запрос
+	</notification>
+	<notification name="CantUploadPostcard">
+		Невозможно отправить открытку.  Повторите попытку позже.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		Невозможно получить данные инвентаря для группового уведомления.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		Невозможно отправить групповое уведомление -- не разрешено.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		Невозможно отправить групповое уведомление -- не удалось собрать инвентарь.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		Невозможно проанализировать инвентарь, указанный в уведомлении.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Не удалось загрузить ландшафт.
+	</notification>
+	<notification name="TerrainFileWritten">
+		Файл ландшафта записан.
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		Файл ландшафта записан, начинается загрузка...
+	</notification>
+	<notification name="TerrainBaked">
+		Ландшафт готов.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Отключены только первые 10 выбранных объектов. Обновите экран и выберите объекты снова, если требуется.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Для покупки этого участка необходимо обновить клиент.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Невозможно купить, этот участок не предназначен для продажи.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		Невозможно купить: цена или площадь земли изменились.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		Вам не разрешено покупать этот участок.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		Вы не можете приобрести этот участок: он уже ожидает подтверждения покупки
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		Здесь нельзя создавать объекты – участок будет переполнен.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		Вы выбрали землю с разными владельцами. Выберите меньшую область и повторите попытку.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		Выбрано недостаточно арендуемых участков для вступления.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		Нельзя разделить землю.\nВыбрано больше одного участка.\nВыберите меньшую территорию.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		Нельзя разделить землю.\nНе удалось найти участок.\nСообщите об этой неполадке: Справка -&gt; Сообщить об ошибке...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		Невозможно разделить землю. Выбран весь участок.\nПопробуйте выбрать территорию поменьше.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		Земля разделена.
+	</notification>
+	<notification name="PassPurchased">
+		Вы приобрели пропуск.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		В регионе не разрешены рекламные объявления.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Ваш пропуск на эту землю скоро закончится.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Нет подходящей поверхности, чтобы сесть. Попробуйте в другом месте.
+	</notification>
+	<notification name="CantSitNoRoom">
+		Здесь нет места, чтобы сесть. Попробуйте в другом месте.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		Невозможно претендовать на объект: у вас нет разрешения
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		Невозможно претендовать на объект: у вас не хватает L$.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		Нельзя передать землю, принадлежащую группе.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		Не удалось купить объект: у вас не хватает L$.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		Не удалось купить инвентарь: у вас не хватает L$.
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		У вас недостаточно L$, чтобы заплатить за проход на эту землю.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		Сейчас нельзя купить пропуск.  Повторите попытку позже.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		Невозможно создать объект:\nучасток заполнен.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Не удалось поместить объект в указанное место.  Повторите попытку.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		Невозможно создать закладку для события.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		Сила творца одолевает заморозку!
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Не удалось выполнить запрос на особые способности. Запрос зарегистрирован.
+	</notification>
+	<notification name="ExpireExplanation">
+		Система сейчас не может обработать ваш запрос. Истекло время запроса.
+	</notification>
+	<notification name="DieExplanation">
+		Система не может обработать ваш запрос.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		Недостаточно денег для создания примитива.
+	</notification>
+	<notification name="RezObjectFailure">
+		Недостаточно денег для создания объекта.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Недопустимое домашнее местоположение; восстановлено стандартное местоположение.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		Сейчас вы не можете никого пригласить к себе: регион уже заполнен. Повторите попытку позже.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Вам не разрешено устанавливать свое домашнее местоположение в этом регионе.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		Задать домашнее местоположение можно только на вашей земле или в Инфохабе материка.
+	</notification>
+	<notification name="SetHomePosition">
+		Домашнее местоположение задано.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		Невозможно забрать объект: сбой инвентаря.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		Невозможно создать требуемый инвентарь.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		Невозможно создать требуемую папку инвентаря.
+	</notification>
+	<notification name="CantCreateInventory">
+		Невозможно создать этот инвентарь.
+	</notification>
+	<notification name="CantCreateLandmark">
+		Невозможно создать закладку.
+	</notification>
+	<notification name="CantCreateOutfit">
+		Сейчас нельзя создать костюм. Попробуйте через минуту.
+	</notification>
+	<notification name="InventoryNotForSale">
+		Инвентарь не для продажи.
+	</notification>
+	<notification name="CantFindInvItem">
+		Не удалось найти предмет из инвентаря.
+	</notification>
+	<notification name="CantFindObject">
+		Не удалось найти объект.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		Сейчас в этом регионе запрещен перевод денег на объекты.
+	</notification>
+	<notification name="CantPayNoAgent">
+		Непонятно, кому платить.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		Нельзя отдавать L$ за общедоступные объекты.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Не удалось создать инвентарь в объекте игрового мира.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Не удалось обновить клиент из-за внутренней ошибки.  Отображаемый в клиенте баланс L$ или владение участками могут не соответствовать действительному балансу на серверах.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		Нельзя создавать большие примитивы, которые пересекаются с другими игроками.  Повторите попытку, когда другие игроки уйдут.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Будут удалены журналы предыдущих разговоров и все резервные копии этих файлов.
+		<usetemplate ignoretext="Подтверждать удаление журнала предыдущих разговоров." name="okcancelignore" notext="Отмена" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Будут удалены записи всех предыдущих разговоров. Список прошедших разговоров не изменится. Все файлы с расширениями .txt и txt.backup в папке [FOLDER] будут удалены.
+		<usetemplate ignoretext="Подтверждать удаление записей." name="okcancelignore" notext="Отмена" yestext="OK"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		Невозможно переместить файлы. Восстановлен прежний путь.
+		<usetemplate ignoretext="Невозможно переместить файлы. Восстановлен прежний путь." name="okignore" yestext="OK"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/ru/panel_active_object_row.xml b/indra/newview/skins/default/xui/ru/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/ru/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index 75e396222f93e7e510822561b872ad6f54e88e3d..4866bb7ed6150845d5e99aa9ff3950cda5f600f7
--- a/indra/newview/skins/default/xui/ru/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/ru/panel_avatar_list_item.xml
@@ -27,5 +27,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Этот друг может изменять, удалять или брать ваши объекты"/>
 	<icon name="permission_map_icon" tool_tip="Этот друг может видеть вас на карте"/>
 	<icon name="permission_online_icon" tool_tip="Этот друг может видеть ваш статус в сети"/>
+	<button name="info_btn" tool_tip="Дополнительно"/>
 	<button name="profile_btn" tool_tip="Смотреть профиль"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_avatar_tag.xml b/indra/newview/skins/default/xui/ru/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 214ca8bf3a95e1fdfb916744788427c06134f204..70a1b259969d4a9ae09fb1c20b654a55151b86e0
--- a/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/ru/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		Черный список
-	</text>
-	<scroll_list name="blocked" tool_tip="Список заблокированных жителей"/>
-	<button label="Заблокировать жителя" name="Block resident..." tool_tip="Выберите жителя для блокировки"/>
-	<button label="Блокировать объект по имени" name="Block object by name..." tool_tip="Выберите объект для блокировки по имени"/>
-	<button label="Разблокировать" name="Unblock" tool_tip="Удалить объект или жителя из списка заблокированных"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Фильтр" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Действия с выбранным жителем или объектом"/>
+		<menu_button name="view_btn" tool_tip="Параметры сортировки"/>
+		<menu_button name="plus_btn" tool_tip="Выберите жителя или объект для блокировки"/>
+		<button name="unblock_btn" tool_tip="Удалить объект или жителя из списка заблокированных"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Список заблокированных жителей"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/ru/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/ru/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/ru/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_chat_header.xml b/indra/newview/skins/default/xui/ru/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/ru/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_classified_info.xml b/indra/newview/skins/default/xui/ru/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/ru/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/ru/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_cof_wearables.xml b/indra/newview/skins/default/xui/ru/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/ru/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4fdb4f9122e815b82881e67b6c7296004e2d9743
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(загрузка)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/ru/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..98fe7b99be09a912c2c3b7225162ccddcabe8a3f
--- /dev/null
+++ b/indra/newview/skins/default/xui/ru/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="Включая голосовой чат"/>
+	<icon name="unread_ims_icon" tool_tip="За время вашего отсутствия пришли сообщения"/>
+	<button name="delete_btn" tool_tip="Удалить эту запись"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/ru/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/ru/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_alpha.xml b/indra/newview/skins/default/xui/ru/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_classified.xml b/indra/newview/skins/default/xui/ru/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_eyes.xml b/indra/newview/skins/default/xui/ru/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_gloves.xml b/indra/newview/skins/default/xui/ru/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_hair.xml b/indra/newview/skins/default/xui/ru/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_jacket.xml b/indra/newview/skins/default/xui/ru/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_pants.xml b/indra/newview/skins/default/xui/ru/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_physics.xml b/indra/newview/skins/default/xui/ru/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_pick.xml b/indra/newview/skins/default/xui/ru/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_profile.xml b/indra/newview/skins/default/xui/ru/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_shape.xml b/indra/newview/skins/default/xui/ru/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_shirt.xml b/indra/newview/skins/default/xui/ru/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_shoes.xml b/indra/newview/skins/default/xui/ru/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_skin.xml b/indra/newview/skins/default/xui/ru/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_skirt.xml b/indra/newview/skins/default/xui/ru/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_socks.xml b/indra/newview/skins/default/xui/ru/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/ru/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_underpants.xml b/indra/newview/skins/default/xui/ru/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/ru/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_edit_wearable.xml b/indra/newview/skins/default/xui/ru/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_general.xml b/indra/newview/skins/default/xui/ru/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/ru/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_invite.xml b/indra/newview/skins/default/xui/ru/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_land_money.xml b/indra/newview/skins/default/xui/ru/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_list_item.xml b/indra/newview/skins/default/xui/ru/panel_group_list_item.xml
old mode 100644
new mode 100755
index 7f000fb5a0d8dc724f5bfceb5e5ee1aae2c9980b..b043ffbbe2585faa3e5d82d3b76eb6578c737bcf
--- a/indra/newview/skins/default/xui/ru/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/ru/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Неизвестно"/>
+	<button name="info_btn" tool_tip="Дополнительно"/>
 	<button name="profile_btn" tool_tip="Смотреть профиль"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_group_notices.xml b/indra/newview/skins/default/xui/ru/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_notify.xml b/indra/newview/skins/default/xui/ru/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_group_roles.xml b/indra/newview/skins/default/xui/ru/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml b/indra/newview/skins/default/xui/ru/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_instant_message.xml b/indra/newview/skins/default/xui/ru/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_inventory_item.xml b/indra/newview/skins/default/xui/ru/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_landmark_info.xml b/indra/newview/skins/default/xui/ru/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_landmarks.xml b/indra/newview/skins/default/xui/ru/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_login.xml b/indra/newview/skins/default/xui/ru/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_main_inventory.xml b/indra/newview/skins/default/xui/ru/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_me.xml b/indra/newview/skins/default/xui/ru/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_media_settings_general.xml b/indra/newview/skins/default/xui/ru/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/ru/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_media_settings_security.xml b/indra/newview/skins/default/xui/ru/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml b/indra/newview/skins/default/xui/ru/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml b/indra/newview/skins/default/xui/ru/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/ru/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_nearby_media.xml b/indra/newview/skins/default/xui/ru/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_notify_textbox.xml b/indra/newview/skins/default/xui/ru/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_online_status_toast.xml b/indra/newview/skins/default/xui/ru/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/ru/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_outfit_edit.xml b/indra/newview/skins/default/xui/ru/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/ru/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/ru/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_outfits_list.xml b/indra/newview/skins/default/xui/ru/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/ru/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_people.xml b/indra/newview/skins/default/xui/ru/panel_people.xml
old mode 100644
new mode 100755
index 607921f2d6940de5615b03e51245481606d4bb59..7da7fb3191f25ecb12e0ec6f3e42022048c204df
--- a/indra/newview/skins/default/xui/ru/panel_people.xml
+++ b/indra/newview/skins/default/xui/ru/panel_people.xml
@@ -14,81 +14,53 @@
 	<string name="no_filtered_friends_msg">
 		Не нашли того, что вам нужно? Воспользуйтесь [secondlife:///app/search/people/[SEARCH_TERM] поиском].
 	</string>
-	<string name="people_filter_label" value="Фильтр для людей"/>
-	<string name="groups_filter_label" value="Фильтр для групп"/>
 	<string name="no_filtered_groups_msg" value="Не нашли того, что вам нужно? Воспользуйтесь [secondlife:///app/search/groups/[SEARCH_TERM] поиском]."/>
 	<string name="no_groups_msg" value="Ищете группу, чтобы присоединиться к ней? Воспользуйтесь [secondlife:///app/search/groups поиском]."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Двойной щелчок открывает карту, shift+перетягивание – обзор)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Двойной щелчок – телепортация, shift+перетягивание – обзор)"/>
-	<filter_editor label="Фильтр" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="РЯДОМ" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Опции"/>
-				<button name="add_friend_btn" tool_tip="Добавить выбранного жителя в список друзей"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="Фильтр для людей" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Действия с выбранным жителем"/>
+				<menu_button name="nearby_view_btn" tool_tip="Параметры просмотра/сортировки"/>
+				<button name="add_friend_btn" tool_tip="Предложить жителю дружбу"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Удалить выбранного пользователя из друзей"/>
 			</panel>
 		</panel>
-		<panel label="МОИ ДРУЗЬЯ" name="friends_panel">
+		<panel label="ДРУЗЬЯ" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="Фильтр для людей" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Действия с выбранным жителем"/>
+				<menu_button name="friends_view_btn" tool_tip="Параметры просмотра/сортировки"/>
+				<button name="friends_add_btn" tool_tip="Предложить жителю дружбу"/>
+				<dnd_button name="friends_del_btn" tool_tip="Удалить выбранного пользователя из друзей"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="Онлайн"/>
 				<accordion_tab name="tab_all" title="Все"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="Показать дополнительные параметры"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Предложить жителю дружбу"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Удалить выбранного жителя из списка друзей"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="МОИ ГРУППЫ" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Опции"/>
-				<button name="plus_btn" tool_tip="Присоединиться к группе/создать новую группу"/>
-				<button name="activate_btn" tool_tip="Активировать выбранную группу"/>
+		<panel label="ГРУППЫ" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Фильтр для групп" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Действия с выбранной группой"/>
+				<menu_button name="groups_view_btn" tool_tip="Параметры просмотра/сортировки"/>
+				<menu_button name="plus_btn" tool_tip="Присоединиться к группе/создать новую группу"/>
+				<dnd_button name="minus_btn" tool_tip="Покинуть выбранную группу"/>
 			</panel>
 		</panel>
 		<panel label="НЕДАВНИЕ" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Опции"/>
-				<button name="add_friend_btn" tool_tip="Добавить выбранного жителя в список друзей"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="Фильтр для людей" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Действия с выбранным жителем"/>
+				<menu_button name="recent_view_btn" tool_tip="Параметры просмотра/сортировки"/>
+				<button name="add_friend_btn" tool_tip="Предложить жителю дружбу"/>
+				<dnd_button name="recent_del_btn" tool_tip="Удалить выбранного пользователя из друзей"/>
 			</panel>
 		</panel>
+		<panel label="БЛОКИРОВАН" name="blocked_panel">
+			<panel label="Черный список жителей и объектов" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Профиль" name="view_profile_btn" tool_tip="Показать изображение, группы и прочую информацию о жителе"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="IM" name="im_btn" tool_tip="Начать сеанс IM"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Звонок" name="call_btn" tool_tip="Позвонить этому жителю"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Поделиться" name="share_btn" tool_tip="Поделиться объектом из инвентаря"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Телепортация" name="teleport_btn" tool_tip="Предложить телепортацию"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Профиль группы" name="group_info_btn" tool_tip="Показать информацию о группе"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Групповой чат" name="chat_btn" tool_tip="Открыть сеанс чата"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Звонок группе" name="group_call_btn" tool_tip="Позвонить этой группе"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_pick_info.xml b/indra/newview/skins/default/xui/ru/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_picks.xml b/indra/newview/skins/default/xui/ru/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_place_profile.xml b/indra/newview/skins/default/xui/ru/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_places.xml b/indra/newview/skins/default/xui/ru/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_postcard_message.xml b/indra/newview/skins/default/xui/ru/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml b/indra/newview/skins/default/xui/ru/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/ru/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/ru/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
old mode 100644
new mode 100755
index 9283fc9e6e56dca54258daf6f2529833500f58b3..6383fc8c2c0901381669cffc33d495c6ca799e2c
--- a/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Текстовый чат" name="chat">
-	<text name="font_size">
-		Размер шрифта:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Мелкий" name="radio" value="0"/>
-		<radio_item label="Средний" name="radio2" value="1"/>
-		<radio_item label="Крупный" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="истина" label="Воспроизводить анимацию ввода текста при общении" name="play_typing_animation"/>
-	<check_box label="Отправлять мне сообщения по почте, когда меня нет в сети" name="send_im_to_email"/>
-	<check_box label="Вести журнал текстового IM и чата" name="plain_text_chat_history"/>
-	<check_box label="Чат в пузырьках" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		Показывать сообщения:
-	</text>
-	<text name="requires_restart_label">
-		(требуется перезапуск)
-	</text>
-	<radio_group name="chat_window" tool_tip="Показывать IM-сообщения в отдельных окнах или же в одном окне с несколькими вкладками (требуется перезапуск)">
-		<radio_item label="В отдельных окнах" name="radio" value="0"/>
-		<radio_item label="На вкладках" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Включить всплывающие сообщения с новыми репликами в чате:
-	</text>
-	<check_box label="Групповой чат" name="EnableGroupChatPopups" tool_tip="Отображать всплывающие уведомления при появлении сообщений в групповом чате"/>
-	<check_box label="Текстовые чаты" name="EnableIMChatPopups" tool_tip="Отображать всплывающие уведомления при получении IM-сообщений"/>
-	<spinner label="Время отображения всплывающих реплик:" name="nearby_toasts_lifetime"/>
-	<spinner label="Время затухания всплывающих реплик:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="истина" label="Воспроизводить анимацию ввода текста при общении" name="play_typing_animation"/>
+		<check_box label="Отправлять мне сообщения по почте, когда меня нет в сети" name="send_im_to_email"/>
+		<check_box label="Только друзья и группы могут звонить мне и отправлять IM" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Размер шрифта:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Мелкий" name="Small" value="0"/>
+			<item label="Средний" name="Medium" value="1"/>
+			<item label="Крупный" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Чат в пузырьках" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Уведомления
+		</text>
+		<text name="friend_ims">
+			IM друзей:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Сообщение во всплывающем окне" name="PopUpMessage" value="всплывание"/>
+			<item label="Мигание кнопки на панели инструментов" name="FlashToolbarButton" value="мигание"/>
+			<item label="Нет" name="None" value="нет"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			IM чужих:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Сообщение во всплывающем окне" name="PopUpMessage" value="всплывание"/>
+			<item label="Мигание кнопки на панели инструментов" name="FlashToolbarButton" value="мигание"/>
+			<item label="Нет" name="None" value="нет"/>
+		</combo_box>
+		<text name="conference_ims">
+			IM конференции:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Сообщение во всплывающем окне" name="PopUpMessage" value="всплывание"/>
+			<item label="Мигание кнопки на панели инструментов" name="FlashToolbarButton" value="мигание"/>
+			<item label="Нет" name="None" value="нет"/>
+		</combo_box>
+		<text name="group_chat">
+			Групповой чат:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Сообщение во всплывающем окне" name="PopUpMessage" value="всплывание"/>
+			<item label="Мигание кнопки на панели инструментов" name="FlashToolbarButton" value="мигание"/>
+			<item label="Нет" name="None" value="нет"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Локальный чат:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Открыть окно разговоров" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Сообщение во всплывающем окне" name="PopUpMessage" value="всплывание"/>
+			<item label="Мигание кнопки на панели инструментов" name="FlashToolBarButton" value="мигание"/>
+			<item label="Нет" name="None" value="нет"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Для временного отключения всех уведомлений вызовите меню «Общение &gt; Не беспокоить».
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Звук:
+		</text>
+		<check_box label="Новый разговор" name="new_conversation"/>
+		<check_box label="Входящий голосовой вызов" name="incoming_voice_call"/>
+		<check_box label="Предложение телепортации" name="teleport_offer"/>
+		<check_box label="Предложение инвентаря" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Очистить журнал..." name="clear_log"/>
+		<button label="Удалить записи..." name="delete_transcripts"/>
+		<button label="Обзор..." label_selected="Обзор" name="log_path_button"/>
+	</panel>
 	<button label="Перевод..." name="ok_btn"/>
 	<button label="Автозамена..." name="autoreplace_showgui"/>
 	<button label="Проверка правописания..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_colors.xml b/indra/newview/skins/default/xui/ru/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
old mode 100644
new mode 100755
index d1bfedf2d85db2ff1d349c3820523aab63d9470f..c7a850f78a11cd0901e819aaeea411817f7cd757
--- a/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/ru/panel_preferences_general.xml
@@ -68,9 +68,9 @@
 		<combo_box.item label="никогда" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Ответ в режиме «Занят»:
+		Ответ в режиме «Не беспокоить»:
 	</text>
-	<text_editor name="busy_response">
+	<text_editor name="do_not_disturb_response">
 		log_in_to_change
 	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/ru/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_move.xml b/indra/newview/skins/default/xui/ru/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/ru/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml b/indra/newview/skins/default/xui/ru/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_preferences_sound.xml b/indra/newview/skins/default/xui/ru/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/ru/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_region_covenant.xml b/indra/newview/skins/default/xui/ru/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_region_debug.xml b/indra/newview/skins/default/xui/ru/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_region_environment.xml b/indra/newview/skins/default/xui/ru/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_region_estate.xml b/indra/newview/skins/default/xui/ru/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_region_general.xml b/indra/newview/skins/default/xui/ru/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_region_terrain.xml b/indra/newview/skins/default/xui/ru/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_script_ed.xml b/indra/newview/skins/default/xui/ru/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/ru/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/ru/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_script_question_toast.xml b/indra/newview/skins/default/xui/ru/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_scrolling_param.xml b/indra/newview/skins/default/xui/ru/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/ru/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/ru/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/ru/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_sound_devices.xml b/indra/newview/skins/default/xui/ru/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/ru/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_status_bar.xml b/indra/newview/skins/default/xui/ru/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_teleport_history.xml b/indra/newview/skins/default/xui/ru/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/ru/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_voice_effect.xml b/indra/newview/skins/default/xui/ru/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/ru/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/panel_world_map.xml b/indra/newview/skins/default/xui/ru/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/role_actions.xml b/indra/newview/skins/default/xui/ru/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_appearance.xml b/indra/newview/skins/default/xui/ru/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml b/indra/newview/skins/default/xui/ru/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_item_info.xml b/indra/newview/skins/default/xui/ru/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
old mode 100644
new mode 100755
index e9dd3760b5c103fa743901c40b0ca96a0bd2ec37..5502530ca466237213df157071f0005dc9c2f711
--- a/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/ru/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Купить объект" name="Buyobject"/>
 			<combo_box.item label="Заплатить за объект" name="Payobject"/>
 			<combo_box.item label="Открыть" name="Open"/>
+			<combo_box.item label="Приблизить" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/ru/strings.xml b/indra/newview/skins/default/xui/ru/strings.xml
old mode 100644
new mode 100755
index f9ded799bff8014ab43cdecb3948498c8b58dfe8..d7d4df4a37c8603abeefaf7811bb3aef0a934fb7
--- a/indra/newview/skins/default/xui/ru/strings.xml
+++ b/indra/newview/skins/default/xui/ru/strings.xml
@@ -137,7 +137,7 @@
 		Выйти
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=ru-RU&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		У клиента, которым вы пользуетесь, больше нет доступа к игре Second Life. Загрузить новую версию клиента можно по адресу
@@ -619,7 +619,7 @@ support@secondlife.com.
 	<string name="AvatarAway">
 		Нет на месте
 	</string>
-	<string name="AvatarBusy">
+	<string name="AvatarDoNotDisturb">
 		Не беспокоить
 	</string>
 	<string name="AvatarMuted">
@@ -856,6 +856,12 @@ support@secondlife.com.
 	<string name="ST_NO_JOINT">
 		Не удается найти объект ROOT или JOINT.
 	</string>
+	<string name="NearbyChatTitle">
+		Локальный чат
+	</string>
+	<string name="NearbyChatLabel">
+		(Локальный чат)
+	</string>
 	<string name="whisper">
 		шепчет:
 	</string>
@@ -919,12 +925,15 @@ support@secondlife.com.
 	<string name="ControlYourCamera">
 		Управлять камерой
 	</string>
-	<string name="TeleportYourAgent">
-		Телепортировать вас
-	</string>
 	<string name="NotConnected">
 		Нет подключения
 	</string>
+	<string name="AgentNameSubst">
+		(Ð’Ñ‹)
+	</string>
+	<string name="TeleportYourAgent">
+		Телепортировать вас
+	</string>
 	<string name="SIM_ACCESS_PG">
 		Общий
 	</string>
@@ -1006,18 +1015,6 @@ support@secondlife.com.
 	<string name="dictionary_files">
 		Словари
 	</string>
-	<string name="AvatarSetNotAway">
-		На месте
-	</string>
-	<string name="AvatarSetAway">
-		Нет на месте
-	</string>
-	<string name="AvatarSetNotBusy">
-		Не занят(а)
-	</string>
-	<string name="AvatarSetBusy">
-		Не беспокоить
-	</string>
 	<string name="shape">
 		Фигура
 	</string>
@@ -1986,8 +1983,8 @@ support@secondlife.com.
 	<string name="PanelContentsNewScript">
 		Новый скрипт
 	</string>
-	<string name="BusyModeResponseDefault">
-		У адресата вашего сообщения задан статус «Не беспокоить».  Ваше сообщение все равно будет отображено на панели IM для просмотра позже.
+	<string name="DoNotDisturbModeResponseDefault">
+		Этот житель включил режим «Не беспокоить» и увидит ваше сообщение позже.
 	</string>
 	<string name="MuteByName">
 		(по имени)
@@ -2100,9 +2097,6 @@ support@secondlife.com.
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc], [day,datetime,utc] [mth,datetime,utc] [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		Контент
-	</string>
 	<string name="AcquiredItems">
 		Купленные вещи
 	</string>
@@ -3871,7 +3865,7 @@ support@secondlife.com.
 		Область общей дозволенности
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Все жители с других участков могут видеть аватары и общаться в чате
+		Аватары на этом участке невидимы и неслышимы для аватаров с других участков
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Возможны неполадки подвижных объектов в этом регионе, пока регион не будет восстановлен.
@@ -3948,6 +3942,12 @@ support@secondlife.com.
 	<string name="IM_unblock_only_groups_friends">
 		Для просмотра этого сообщения снимите флажок «Только друзья и группы могут звонить мне и отправлять IM» в окне «Настройки/Приватность».
 	</string>
+	<string name="OnlineStatus">
+		Онлайн
+	</string>
+	<string name="OfflineStatus">
+		Оффлайн
+	</string>
 	<string name="answered_call">
 		На ваш звонок ответили
 	</string>
@@ -3957,6 +3957,9 @@ support@secondlife.com.
 	<string name="you_joined_call">
 		Вы присоединились к голосовой беседе
 	</string>
+	<string name="you_auto_rejected_call-im">
+		Голосовой вызов автоматически отклонен, так как включен режим «Не беспокоить».
+	</string>
 	<string name="name_started_call">
 		Житель [NAME] начал голосовую беседу
 	</string>
@@ -3973,7 +3976,7 @@ support@secondlife.com.
 		Соединяется...
 	</string>
 	<string name="conference-title">
-		Спонтанная конференция
+		Чат с несколькими участниками
 	</string>
 	<string name="conference-title-incoming">
 		Конференция с жителем [AGENT_NAME]
@@ -4865,6 +4868,9 @@ support@secondlife.com.
 	<string name="Command_Chat_Label">
 		Чат
 	</string>
+	<string name="Command_Conversations_Label">
+		Разговоры
+	</string>
 	<string name="Command_Compass_Label">
 		Компас
 	</string>
@@ -4940,6 +4946,9 @@ support@secondlife.com.
 	<string name="Command_Chat_Tooltip">
 		Обменивайтесь текстовыми репликами с людьми вокруг вас
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Поговорить со всеми
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Компас
 	</string>
@@ -5069,4 +5078,13 @@ support@secondlife.com.
 	<string name="UserDictionary">
 		[Пользователь]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		Разговоры не записываются. Чтобы начать запись разговора, в меню «Настройки &gt; Чат» выберите «Сохранять: только журнал» или «Сохранять: журнал и записи».
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		Разговоры больше не будут записываться. Чтобы восстановить запись разговора, в меню «Настройки &gt; Чат» выберите «Сохранять: только журнал» или «Сохранять: журнал и записи».
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		Нет зарегистрированных разговоров. Если вы обратитесь к кому-то или наоборот, в журнале появится новая запись.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/ru/teleport_strings.xml b/indra/newview/skins/default/xui/ru/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_aaa.xml b/indra/newview/skins/default/xui/tr/floater_aaa.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_about.xml b/indra/newview/skins/default/xui/tr/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_about_land.xml b/indra/newview/skins/default/xui/tr/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_activeim.xml b/indra/newview/skins/default/xui/tr/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/tr/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/tr/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_auction.xml b/indra/newview/skins/default/xui/tr/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_autoreplace.xml b/indra/newview/skins/default/xui/tr/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_avatar.xml b/indra/newview/skins/default/xui/tr/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_avatar_picker.xml b/indra/newview/skins/default/xui/tr/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_avatar_textures.xml b/indra/newview/skins/default/xui/tr/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_beacons.xml b/indra/newview/skins/default/xui/tr/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_build_options.xml b/indra/newview/skins/default/xui/tr/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_bulk_perms.xml b/indra/newview/skins/default/xui/tr/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_bumps.xml b/indra/newview/skins/default/xui/tr/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_contents.xml b/indra/newview/skins/default/xui/tr/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_currency.xml b/indra/newview/skins/default/xui/tr/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/tr/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_land.xml b/indra/newview/skins/default/xui/tr/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_buy_object.xml b/indra/newview/skins/default/xui/tr/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_camera.xml b/indra/newview/skins/default/xui/tr/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_chat_bar.xml b/indra/newview/skins/default/xui/tr/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_choose_group.xml b/indra/newview/skins/default/xui/tr/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_color_picker.xml b/indra/newview/skins/default/xui/tr/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_conversation_log.xml b/indra/newview/skins/default/xui/tr/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5f8dac506fd3f952a4c89b319c3dc24ec839b721
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="SOHBET GÜNLÜĞÜ">
+	<panel name="buttons_panel">
+		<filter_editor label="KiÅŸileri Filtrele" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="Gösterme/sıralama seçenekleri"/>
+		<menu_button name="conversations_gear_btn" tool_tip="Seçilen kişi veya grup üzerindeki eylemler"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_conversation_preview.xml b/indra/newview/skins/default/xui/tr/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..84403dfd6822a7a2f180b20ab57e81bb52dc34b2
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="KONUÅžMA:">
+	<floater.string name="Title">
+		KONUÅžMA: [NAME]
+	</floater.string>
+	<text name="page_label" value="Sayfa"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_critical.xml b/indra/newview/skins/default/xui/tr/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/tr/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_destinations.xml b/indra/newview/skins/default/xui/tr/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_display_name.xml b/indra/newview/skins/default/xui/tr/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/tr/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/tr/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/tr/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_environment_settings.xml b/indra/newview/skins/default/xui/tr/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_event.xml b/indra/newview/skins/default/xui/tr/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_fast_timers.xml b/indra/newview/skins/default/xui/tr/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_font_test.xml b/indra/newview/skins/default/xui/tr/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_gesture.xml b/indra/newview/skins/default/xui/tr/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_god_tools.xml b/indra/newview/skins/default/xui/tr/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_hardware_settings.xml b/indra/newview/skins/default/xui/tr/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_help_browser.xml b/indra/newview/skins/default/xui/tr/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_how_to.xml b/indra/newview/skins/default/xui/tr/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_hud.xml b/indra/newview/skins/default/xui/tr/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_im_container.xml b/indra/newview/skins/default/xui/tr/floater_im_container.xml
old mode 100644
new mode 100755
index 4451d1d309bab917af42e9aa4f9b404cf6b62dcb..6504430b3cb84ee5b1d70a8cc58aa995a24197c3
--- a/indra/newview/skins/default/xui/tr/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/tr/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="SOHBETLER"/>
+<multi_floater name="floater_im_box" title="SOHBETLER">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="Gösterme/sıralama seçenekleri"/>
+					<button name="add_btn" tool_tip="Yeni bir sohbet baÅŸlat"/>
+					<button name="speak_btn" tool_tip="Mikrofonunuzu kullanarak kiÅŸilerle konuÅŸun"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="Bu listeyi Daralt/GeniÅŸlet"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="Bu panoyu daralt"/>
+					<text name="stub_textbox">
+						Sohbet ayrı bir pencerede.   [secondlife:/// Bunu geri getir.]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_im_session.xml b/indra/newview/skins/default/xui/tr/floater_im_session.xml
old mode 100644
new mode 100755
index bed08b36c612aef07c8217ef0f924eed62596b6b..8ce8f0fe13d52f7ca3ded715cbf33509e5904dec
--- a/indra/newview/skins/default/xui/tr/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/tr/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="Kime" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] sohbete davet edildi."/>
+	<floater.string name="multiple_participants_added" value="[NAME] sohbete davet edildi."/>
+	<floater.string name="tooltip_to_separate_window" value="Bu sohbeti ayrı bir pencereye taşı"/>
+	<floater.string name="tooltip_to_main_window" value="Bu sohbeti ana pencereye geri taşı"/>
+	<floater.string name="start_call_button_tooltip" value="Ses bağlantısını aç"/>
+	<floater.string name="end_call_button_tooltip" value="Ses bağlantısını kapat"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="Bu panoyu daralt"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="Katılımcı listesini daralt"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="Katılımcı listesini genişlet"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="Gösterme/sıralama seçenekleri"/>
+				<menu_button name="gear_btn" tool_tip="Seçilen kişi üzerindeki eylemler"/>
+				<button name="add_btn" tool_tip="Bu sohbete birini ekle"/>
+				<button name="voice_call_btn" tool_tip="Ses bağlantısını aç"/>
+				<button name="close_btn" tool_tip="Bu sohbeti bitir"/>
+				<button name="expand_collapse_btn" tool_tip="Bu panoyu Daralt/GeniÅŸlet"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="Sohbeti çevir" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="Kime" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="Mesaj panelini gösterir/gizler"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_image_preview.xml b/indra/newview/skins/default/xui/tr/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_import_collada.xml b/indra/newview/skins/default/xui/tr/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_incoming_call.xml b/indra/newview/skins/default/xui/tr/floater_incoming_call.xml
old mode 100644
new mode 100755
index adb03c2dff39b0cff65fee16dc045adaa8169d8f..0f2b27241e0f199ee913a9a0d75109b059de1cf8
--- a/indra/newview/skins/default/xui/tr/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/tr/floater_incoming_call.xml
@@ -10,7 +10,7 @@
 		anonim
 	</floater.string>
 	<floater.string name="VoiceInviteP2P">
-		arıyor.
+		sizi arıyor.
 	</floater.string>
 	<floater.string name="VoiceInviteAdHoc">
 		bir Sesli Sohbet aramasına bir konferans araması ile katıldı.
@@ -25,9 +25,9 @@
 		[CURRENT_CHAT] sohbetinden ayrılıp, bu sesli sohbete katılmak istiyor musunuz?
 	</floater.string>
 	<text name="question">
-		[CURRENT_CHAT] sohbetinden ayrılıp, bu sesli sohbete katılmak istiyor musunuz?
+		Yanıtlarsanız, mevcut sesli sohbetinizle bağlantınız kesilecek.
 	</text>
-	<button label="Kabul Et" label_selected="Kabul Et" name="Accept"/>
-	<button label="Reddet" label_selected="Reddet" name="Reject"/>
-	<button label="Aİ Başlat" name="Start IM"/>
+	<button label="Yanıtla" label_selected="Yanıtla" name="Accept"/>
+	<button label="Yok say" label_selected="Yok say" name="Reject"/>
+	<button label="Bunun yerine Aİ aç" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_inspect.xml b/indra/newview/skins/default/xui/tr/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/tr/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/tr/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_joystick.xml b/indra/newview/skins/default/xui/tr/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_lagmeter.xml b/indra/newview/skins/default/xui/tr/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_land_holdings.xml b/indra/newview/skins/default/xui/tr/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/tr/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_lsl_guide.xml b/indra/newview/skins/default/xui/tr/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_map.xml b/indra/newview/skins/default/xui/tr/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_media_browser.xml b/indra/newview/skins/default/xui/tr/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_media_settings.xml b/indra/newview/skins/default/xui/tr/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_mem_leaking.xml b/indra/newview/skins/default/xui/tr/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/tr/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_model_preview.xml b/indra/newview/skins/default/xui/tr/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_moveview.xml b/indra/newview/skins/default/xui/tr/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_mute_object.xml b/indra/newview/skins/default/xui/tr/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_my_appearance.xml b/indra/newview/skins/default/xui/tr/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_my_inventory.xml b/indra/newview/skins/default/xui/tr/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_notification.xml b/indra/newview/skins/default/xui/tr/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_notifications_console.xml b/indra/newview/skins/default/xui/tr/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_object_weights.xml b/indra/newview/skins/default/xui/tr/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_openobject.xml b/indra/newview/skins/default/xui/tr/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/tr/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_outgoing_call.xml b/indra/newview/skins/default/xui/tr/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/tr/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index 6eecc7fb776e233c624f655e0bb075e24fb80ad0..35f47e6dfaa985a607bfb7c0e283ccf905321562
--- a/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/tr/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				Göster:
 			</text>
-			<check_box label="Dünya" name="show_world"/>
+			<check_box label="Test" name="show_world"/>
 			<check_box label="Sadece hareket ettirilebilir nesneler" name="show_world_movables_only"/>
 			<check_box label="Navigasyon örgüsü" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/tr/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/tr/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_pay.xml b/indra/newview/skins/default/xui/tr/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_pay_object.xml b/indra/newview/skins/default/xui/tr/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_people.xml b/indra/newview/skins/default/xui/tr/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml b/indra/newview/skins/default/xui/tr/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_picks.xml b/indra/newview/skins/default/xui/tr/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_places.xml b/indra/newview/skins/default/xui/tr/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_post_process.xml b/indra/newview/skins/default/xui/tr/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preferences.xml b/indra/newview/skins/default/xui/tr/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/tr/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_animation.xml b/indra/newview/skins/default/xui/tr/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_gesture.xml b/indra/newview/skins/default/xui/tr/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_notecard.xml b/indra/newview/skins/default/xui/tr/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_sound.xml b/indra/newview/skins/default/xui/tr/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_preview_texture.xml b/indra/newview/skins/default/xui/tr/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_price_for_listing.xml b/indra/newview/skins/default/xui/tr/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_publish_classified.xml b/indra/newview/skins/default/xui/tr/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_region_debug_console.xml b/indra/newview/skins/default/xui/tr/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_region_info.xml b/indra/newview/skins/default/xui/tr/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_report_abuse.xml b/indra/newview/skins/default/xui/tr/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_script_debug.xml b/indra/newview/skins/default/xui/tr/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/tr/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_script_limits.xml b/indra/newview/skins/default/xui/tr/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_script_preview.xml b/indra/newview/skins/default/xui/tr/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_script_queue.xml b/indra/newview/skins/default/xui/tr/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_script_search.xml b/indra/newview/skins/default/xui/tr/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_search.xml b/indra/newview/skins/default/xui/tr/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_select_key.xml b/indra/newview/skins/default/xui/tr/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_sell_land.xml b/indra/newview/skins/default/xui/tr/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_settings_debug.xml b/indra/newview/skins/default/xui/tr/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_snapshot.xml b/indra/newview/skins/default/xui/tr/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_sound_devices.xml b/indra/newview/skins/default/xui/tr/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_sound_preview.xml b/indra/newview/skins/default/xui/tr/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_spellcheck.xml b/indra/newview/skins/default/xui/tr/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/tr/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_stats.xml b/indra/newview/skins/default/xui/tr/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_sys_well.xml b/indra/newview/skins/default/xui/tr/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_telehub.xml b/indra/newview/skins/default/xui/tr/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/tr/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/tr/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/tr/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index 889425f23a04c0520bad6c11577bd4763d80fae3..42483c09e189b8d1ca2fc18ca12e7df3c0f30b88
--- a/indra/newview/skins/default/xui/tr/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/tr/floater_texture_ctrl.xml
@@ -19,7 +19,7 @@
 	<button label="Varsayılan" label_selected="Varsayılan" name="Default"/>
 	<button label="BoÅŸ" label_selected="BoÅŸ" name="Blank"/>
 	<button label="Hiçbiri" label_selected="Hiçbiri" name="None"/>
-	<check_box initial_value="true" label="Canlı Önizleme" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="Åžimdi uygula" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="Önizleme Devre Dışı"/>
 	<filter_editor label="Dokuları Filtrele" name="inventory search editor"/>
 	<check_box initial_value="false" label="Klasörleri göster" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/tr/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/tr/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_tools.xml b/indra/newview/skins/default/xui/tr/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_top_objects.xml b/indra/newview/skins/default/xui/tr/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_tos.xml b/indra/newview/skins/default/xui/tr/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_toybox.xml b/indra/newview/skins/default/xui/tr/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_translation_settings.xml b/indra/newview/skins/default/xui/tr/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_url_entry.xml b/indra/newview/skins/default/xui/tr/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/tr/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ec350bee60bbfecaedd2ba6b27ecaa0344c6556d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="SOHBET SES DÜZEYİ">
+	<slider label="Sesli Sohbet" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_controls.xml b/indra/newview/skins/default/xui/tr/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_effect.xml b/indra/newview/skins/default/xui/tr/floater_voice_effect.xml
old mode 100644
new mode 100755
index 3534a3fe906a58ac7f33f5b6ed8e0b96e44704fb..7a157244cd62b0974a67b81df7c67b2682b26f58
--- a/indra/newview/skins/default/xui/tr/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/tr/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="Yerler" name="voice_effects" title="SES ŞEKİLLENDİRME">
+<floater label="Yerler" name="voice_effects" title="SES ŞEKİLLENDİRME ÖNİZLEMESİ">
 	<string name="no_voice_effect">
 		(Ses Åžekillendirme Yok)
 	</string>
diff --git a/indra/newview/skins/default/xui/tr/floater_voice_volume.xml b/indra/newview/skins/default/xui/tr/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..acf99d6199c29fa21d89eb1ecf4ab5ec7e664288
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="SES DÜZEYİ">
+	<slider name="volume_slider" tool_tip="Ses düzeyi" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/tr/floater_web_content.xml b/indra/newview/skins/default/xui/tr/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/tr/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_window_size.xml b/indra/newview/skins/default/xui/tr/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/floater_world_map.xml b/indra/newview/skins/default/xui/tr/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/inspect_avatar.xml b/indra/newview/skins/default/xui/tr/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/inspect_group.xml b/indra/newview/skins/default/xui/tr/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/inspect_object.xml b/indra/newview/skins/default/xui/tr/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/inspect_remote_object.xml b/indra/newview/skins/default/xui/tr/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/tr/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_other.xml b/indra/newview/skins/default/xui/tr/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_attachment_self.xml b/indra/newview/skins/default/xui/tr/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml b/indra/newview/skins/default/xui/tr/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_other.xml b/indra/newview/skins/default/xui/tr/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_avatar_self.xml b/indra/newview/skins/default/xui/tr/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_cof_attachment.xml b/indra/newview/skins/default/xui/tr/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_cof_body_part.xml b/indra/newview/skins/default/xui/tr/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_cof_clothing.xml b/indra/newview/skins/default/xui/tr/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_cof_gear.xml b/indra/newview/skins/default/xui/tr/menu_cof_gear.xml
old mode 100644
new mode 100755
index f910e1fe9103c5801c17625f36e3087eccd83f8e..9480d300298da1c65334bbbe5b6e5434183ffa7d
--- a/indra/newview/skins/default/xui/tr/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/tr/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="Gear COF">
 	<menu label="Yeni Giysiler" name="COF.Gear.New_Clothes"/>
-	<menu label="Yeni Vücut Bölümleri" name="COF.Geear.New_Body_Parts"/>
+	<menu label="Yeni Vücut Bölümleri" name="COF.Gear.New_Body_Parts"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_conversation.xml b/indra/newview/skins/default/xui/tr/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..31404f250109a58d89d79381301f80704e7be490
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="Sohbeti kapat" name="close_conversation"/>
+	<menu_item_call label="Ses sohbetini aç" name="open_voice_conversation"/>
+	<menu_item_call label="Ses bağlantısını kes" name="disconnect_from_voice"/>
+	<menu_item_call label="Profili Göster" name="view_profile"/>
+	<menu_item_call label="Aİ" name="im"/>
+	<menu_item_call label="Işınlama teklif et" name="offer_teleport"/>
+	<menu_item_call label="Sesli arama" name="voice_call"/>
+	<menu_item_call label="Sohbet geçmişi..." name="chat_history"/>
+	<menu_item_call label="ArkadaÅŸ ekle" name="add_friend"/>
+	<menu_item_call label="Arkadaşı çıkar" name="remove_friend"/>
+	<menu_item_call label="Arkadaşları çıkar" name="remove_friends"/>
+	<menu_item_call label="Gruba davet et..." name="invite_to_group"/>
+	<menu_item_call label="Yakınlaştır" name="zoom_in"/>
+	<menu_item_call label="Harita" name="map"/>
+	<menu_item_call label="PaylaÅŸ" name="share"/>
+	<menu_item_call label="Öde" name="pay"/>
+	<menu_item_check label="Sesi Engelle" name="block_unblock"/>
+	<menu_item_check label="Metni Engelle" name="MuteText"/>
+	<menu_item_call label="Grup Profili" name="group_profile"/>
+	<menu_item_call label="Grubu EtkinleÅŸtir" name="activate_group"/>
+	<menu_item_call label="Gruptan Ayrıl" name="leave_group"/>
+	<context_menu label="Moderatör Seçenekleri" name="Moderator Options">
+		<menu_item_check label="Metin sohbetine izin ver" name="AllowTextChat"/>
+		<menu_item_call label="Bu katılımcıyı engelle" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="Bu katılımcının engellemesini kaldır" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="Herkesi engelle" name="ModerateVoiceMute"/>
+		<menu_item_call label="Herkesin engellemesini kaldır" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/tr/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9e91780eb810fe1d4a6c7d4730a18971914f0cc1
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="Aİ..." name="IM"/>
+	<menu_item_call label="Sesli arama..." name="Call"/>
+	<menu_item_call label="Sohbet geçmişini aç..." name="Chat history"/>
+	<menu_item_call label="Profili Göster" name="View Profile"/>
+	<menu_item_call label="Işınlama Teklif Et" name="teleport"/>
+	<menu_item_call label="ArkadaÅŸ Ekle" name="add_friend"/>
+	<menu_item_call label="Arkadaşı Çıkar" name="remove_friend"/>
+	<menu_item_call label="Gruba davet et..." name="Invite"/>
+	<menu_item_call label="Harita" name="Map"/>
+	<menu_item_call label="PaylaÅŸ" name="Share"/>
+	<menu_item_call label="Öde" name="Pay"/>
+	<menu_item_check label="Engelle/Engeli Kaldır" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/tr/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a77eaadd90ebc94f07292383faa677f16e3c270
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="Ada göre sırala" name="sort_by_name"/>
+	<menu_item_check label="Tarihe göre sırala" name="sort_by_date"/>
+	<menu_item_check label="Arkadaşlar üstte olacak şekilde sırala" name="sort_by_friends"/>
+	<menu_item_call label="Yakındaki sohbet geçmişini göster..." name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_edit.xml b/indra/newview/skins/default/xui/tr/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_favorites.xml b/indra/newview/skins/default/xui/tr/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_gesture_gear.xml b/indra/newview/skins/default/xui/tr/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_group_plus.xml b/indra/newview/skins/default/xui/tr/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_hide_navbar.xml b/indra/newview/skins/default/xui/tr/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_im_conversation.xml b/indra/newview/skins/default/xui/tr/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3b9738edceb837dd482e23b7c60000538b79bfa9
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="Profili Göster" name="View Profile"/>
+	<menu_item_call label="ArkadaÅŸ Ekle" name="Add Friend"/>
+	<menu_item_call label="Arkadaşı çıkar" name="remove_friend"/>
+	<menu_item_call label="Işınlama teklif et" name="offer_teleport"/>
+	<menu_item_call label="Gruba davet et..." name="invite_to_group"/>
+	<menu_item_call label="Sohbet geçmişi..." name="chat_history"/>
+	<menu_item_call label="Yakınlaştır" name="zoom_in"/>
+	<menu_item_call label="Harita" name="map"/>
+	<menu_item_call label="PaylaÅŸ" name="Share"/>
+	<menu_item_call label="Öde" name="Pay"/>
+	<menu_item_check label="Sesi Engelle" name="Block/Unblock"/>
+	<menu_item_check label="Metni Engelle" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/tr/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c4d4357ac975ebb48644b01ef1b9928c85a9b2d4
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="Daraltılmış görünüm" name="compact_view"/>
+	<menu_item_check label="Genişletilmiş görünüm" name="expanded_view"/>
+	<menu_item_check label="Zamanı göster" name="IMShowTime"/>
+	<menu_item_check label="Bire bir sohbetlerde adları göster" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/tr/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/tr/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/tr/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/tr/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/tr/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inventory.xml b/indra/newview/skins/default/xui/tr/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inventory_add.xml b/indra/newview/skins/default/xui/tr/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/tr/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_land.xml b/indra/newview/skins/default/xui/tr/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_landmark.xml b/indra/newview/skins/default/xui/tr/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_login.xml b/indra/newview/skins/default/xui/tr/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_media_ctrl.xml b/indra/newview/skins/default/xui/tr/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_mini_map.xml b/indra/newview/skins/default/xui/tr/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/tr/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_navbar.xml b/indra/newview/skins/default/xui/tr/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_nearby_chat.xml b/indra/newview/skins/default/xui/tr/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_notification_well_button.xml b/indra/newview/skins/default/xui/tr/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_object.xml b/indra/newview/skins/default/xui/tr/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_object_icon.xml b/indra/newview/skins/default/xui/tr/menu_object_icon.xml
old mode 100644
new mode 100755
index 34a2661d8af00a1dd3a23bb9ac96623e88b7cd24..3d5c68d9d3df50e0ef1629e1b65f08c28525fcf1
--- a/indra/newview/skins/default/xui/tr/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/tr/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="Nesne Profili..." name="Object Profile"/>
 	<menu_item_call label="Engelle..." name="Block"/>
+	<menu_item_call label="Haritada Göster" name="show_on_map"/>
+	<menu_item_call label="Nesne Konumuna Işınla" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_outfit_gear.xml b/indra/newview/skins/default/xui/tr/menu_outfit_gear.xml
old mode 100644
new mode 100755
index d2e7e7107aa2f01b376cb0ed9da9bcd0fb6244e4..674041e9c9b03f0c5b790d9666f8ce5f43d4acf8
--- a/indra/newview/skins/default/xui/tr/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/tr/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="Yeni Saç" name="New Hair"/>
 		<menu_item_call label="Yeni Gözler" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="Tüm klasörleri genişlet" name="expand"/>
+	<menu_item_call label="Tüm klasörleri daralt" name="collapse"/>
 	<menu_item_call label="Dış Görünümü Yeniden Adlandır" name="rename"/>
 	<menu_item_call label="Dış Görünümü Sil" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_outfit_tab.xml b/indra/newview/skins/default/xui/tr/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_participant_list.xml b/indra/newview/skins/default/xui/tr/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_participant_view.xml b/indra/newview/skins/default/xui/tr/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e9411ff350d37f22cee480fb1f5a785fc83870e8
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="Sohbetleri türe göre sırala" name="sort_sessions_by_type"/>
+	<menu_item_check label="Sohbetleri ada göre sırala" name="sort_sessions_by_name"/>
+	<menu_item_check label="Sohbetleri son faaliyetlere göre sırala" name="sort_sessions_by_recent"/>
+	<menu_item_check label="Katılımcıları ada göre sırala" name="sort_participants_by_name"/>
+	<menu_item_check label="Katılımcıları son faaliyetlere göre sırala" name="sort_participants_by_recent"/>
+	<menu_item_call label="Sohbet tercihleri..." name="chat_preferences"/>
+	<menu_item_call label="Gizlilik tercihleri..." name="privacy_preferences"/>
+	<menu_item_check label="Sohbet günlüğü..." name="Conversation"/>
+	<menu_item_check label="Yakındaki sohbeti çevir" name="Translate_chat"/>
+	<menu_item_check label="Çeviri ayarları..." name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2bf1101b48101d11500d604fe1eb7b03d570cb55
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="Engellemeyi Kaldır" name="unblock"/>
+	<menu_item_call label="Profil..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/tr/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a869e2ae7d65bd0bd197dbecabd1cb0d3c2f6b1d
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="Sakini ada göre engelle..." name="block_resident_by_name"/>
+	<menu_item_call label="Nesneyi ada göre engelle" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/tr/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..14b3de3a9fc6efc2a906516bc45f1e98cf03a7fe
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="Ada göre sırala" name="sort_by_name"/>
+	<menu_item_check label="Türe göre sırala" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_friends_view.xml b/indra/newview/skins/default/xui/tr/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..609584d6a60d97f51a09aa38fac97aa3f814d18b
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Ada Göre Sırala" name="sort_name"/>
+	<menu_item_check label="Duruma Göre Sırala" name="sort_status"/>
+	<menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/>
+	<menu_item_check label="Verilen İzinleri Göster" name="view_permissions"/>
+	<menu_item_check label="Sohbet Günlüğünü Göster..." name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_people_groups.xml b/indra/newview/skins/default/xui/tr/menu_people_groups.xml
old mode 100644
new mode 100755
index 9f2946e310ad6862278e0848b35ae8f9777d7e66..743b01844d1378c8d0da3fff9b5996f55315e6f1
--- a/indra/newview/skins/default/xui/tr/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/tr/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="Bilgileri Görüntüle" name="View Info"/>
 	<menu_item_call label="Sohbet" name="Chat"/>
-	<menu_item_call label="Ara" name="Call"/>
+	<menu_item_call label="Sesli arama" name="Call"/>
 	<menu_item_call label="EtkinleÅŸtir" name="Activate"/>
 	<menu_item_call label="Ayrıl" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_groups_view.xml b/indra/newview/skins/default/xui/tr/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e550b20adddaed159cc8e1a91cc1ee2242842a5a
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Grup Simgelerini Göster" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_people_nearby.xml b/indra/newview/skins/default/xui/tr/menu_people_nearby.xml
old mode 100644
new mode 100755
index ee859a9450d5d159742b7029a2c8d729303e48ff..2d61461c9193a3a34e7492bcff308f89028b2c8f
--- a/indra/newview/skins/default/xui/tr/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/tr/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="Profili Göster" name="View Profile"/>
-	<menu_item_call label="ArkadaÅŸ Ekle" name="Add Friend"/>
-	<menu_item_call label="Arkadaşı Çıkar" name="Remove Friend"/>
-	<menu_item_call label="Aİ" name="IM"/>
-	<menu_item_call label="Ara" name="Call"/>
-	<menu_item_call label="Harita" name="Map"/>
-	<menu_item_call label="PaylaÅŸ" name="Share"/>
-	<menu_item_call label="Öde" name="Pay"/>
-	<menu_item_check label="Engelle/Engeli Kaldır" name="Block/Unblock"/>
-	<menu_item_call label="Işınlama Teklif Et" name="teleport"/>
+	<menu_item_call label="Profili Göster" name="view_profile"/>
+	<menu_item_call label="Aİ" name="im"/>
+	<menu_item_call label="Işınlama Teklif Et" name="offer_teleport"/>
+	<menu_item_call label="Sesli arama" name="voice_call"/>
+	<menu_item_call label="Sohbet geçmişini göster..." name="chat_history"/>
+	<menu_item_call label="ArkadaÅŸ Ekle" name="add_friend"/>
+	<menu_item_call label="Arkadaşı Çıkar" name="remove_friend"/>
+	<menu_item_call label="Gruba davet et..." name="invite_to_group"/>
+	<menu_item_call label="Yakınlaştır" name="zoom_in"/>
+	<menu_item_call label="Harita" name="map"/>
+	<menu_item_call label="PaylaÅŸ" name="share"/>
+	<menu_item_call label="Öde" name="pay"/>
+	<menu_item_check label="Engelle/Engeli Kaldır" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/tr/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 5c89f87906c86dcecf55197a4674d65f8f86bde2..20695d98e8df33299de06bcf061894e054fd370f
--- a/indra/newview/skins/default/xui/tr/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/tr/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="ArkadaÅŸ Ekle" name="Add Friends"/>
-	<menu_item_call label="Arkadaşı Çıkar" name="Remove Friend"/>
-	<menu_item_call label="Aİ" name="IM"/>
-	<menu_item_call label="Ara" name="Call"/>
-	<menu_item_call label="PaylaÅŸ" name="Share"/>
-	<menu_item_call label="Öde" name="Pay"/>
-	<menu_item_call label="Işınlama Teklif Et" name="teleport"/>
+	<menu_item_call label="ArkadaÅŸ Ekle" name="add_friends"/>
+	<menu_item_call label="Arkadaşı Çıkar" name="remove_friends"/>
+	<menu_item_call label="Aİ" name="im"/>
+	<menu_item_call label="Ara" name="call"/>
+	<menu_item_call label="PaylaÅŸ" name="share"/>
+	<menu_item_call label="Öde" name="pay"/>
+	<menu_item_call label="Işınlama Teklif Et" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/tr/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..59ea7c145f624e32e02db1bbd8b7a5e55a10b317
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="Son Konuşanlara Göre Sırala" name="sort_by_recent_speakers"/>
+	<menu_item_check label="Ada Göre Sırala" name="sort_name"/>
+	<menu_item_check label="Mesafeye Göre Sırala" name="sort_distance"/>
+	<menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/>
+	<menu_item_check label="Haritayı Göster" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_people_recent_view.xml b/indra/newview/skins/default/xui/tr/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..02be715ed2c183029997e98fdd8f0799e704479b
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="En Sonunculara Göre Sırala" name="sort_most"/>
+	<menu_item_check label="Ada Göre Sırala" name="sort_name"/>
+	<menu_item_check label="Kişi Simgelerini Göster" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/tr/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_picks.xml b/indra/newview/skins/default/xui/tr/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_picks_plus.xml b/indra/newview/skins/default/xui/tr/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_place.xml b/indra/newview/skins/default/xui/tr/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_place_add_button.xml b/indra/newview/skins/default/xui/tr/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/tr/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/tr/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_profile_overflow.xml b/indra/newview/skins/default/xui/tr/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_save_outfit.xml b/indra/newview/skins/default/xui/tr/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_script_chiclet.xml b/indra/newview/skins/default/xui/tr/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_slurl.xml b/indra/newview/skins/default/xui/tr/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/tr/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/tr/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/tr/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_text_editor.xml b/indra/newview/skins/default/xui/tr/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_toolbars.xml b/indra/newview/skins/default/xui/tr/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_topinfobar.xml b/indra/newview/skins/default/xui/tr/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_agent.xml b/indra/newview/skins/default/xui/tr/menu_url_agent.xml
old mode 100644
new mode 100755
index d82b52aea8040c8af2cbda5a1d31892ea5113668..b14a0509bfe25b2d6a307db6d36f4402865b9b00
--- a/indra/newview/skins/default/xui/tr/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/tr/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Sakin Profilini Göster" name="show_agent"/>
+	<menu_item_call label="Profili Göster" name="show_agent"/>
+	<menu_item_call label="Aİ Gönder..." name="send_im"/>
+	<menu_item_call label="ArkadaÅŸ Ekle..." name="add_friend"/>
 	<menu_item_call label="Adı panoya kopyala" name="url_copy_label"/>
 	<menu_item_call label="SLurl&apos;yi Panoya Kopyala" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/tr/menu_url_group.xml b/indra/newview/skins/default/xui/tr/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_http.xml b/indra/newview/skins/default/xui/tr/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_inventory.xml b/indra/newview/skins/default/xui/tr/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_map.xml b/indra/newview/skins/default/xui/tr/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_objectim.xml b/indra/newview/skins/default/xui/tr/menu_url_objectim.xml
old mode 100644
new mode 100755
index d55e34c11c31bf68e9ba3a67d203a093275feb51..00fa3c27c2e66d335cc86832e2787f14b66be883
--- a/indra/newview/skins/default/xui/tr/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/tr/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="Nesne Bilgilerini Göster" name="show_object"/>
+	<menu_item_call label="Nesne Profili..." name="show_object"/>
 	<menu_item_call label="Haritada Göster" name="show_on_map"/>
 	<menu_item_call label="Nesne Konumuna Işınla" name="teleport_to_object"/>
 	<menu_item_call label="Nesne Adını panoya kopyala" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_url_parcel.xml b/indra/newview/skins/default/xui/tr/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_slapp.xml b/indra/newview/skins/default/xui/tr/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_slurl.xml b/indra/newview/skins/default/xui/tr/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_url_teleport.xml b/indra/newview/skins/default/xui/tr/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_viewer.xml b/indra/newview/skins/default/xui/tr/menu_viewer.xml
old mode 100644
new mode 100755
index 7a7faf6ac4bd8a76fd932268926e3a24fbee70e2..35485bb292b303cfa307bfceac4888f620587016
--- a/indra/newview/skins/default/xui/tr/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/tr/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="Beni Anime Etmeyi Durdur" name="Stop Animating My Avatar"/>
 			<menu_item_call label="Yürü / koş / uç..." name="Walk / run / fly"/>
 		</menu>
-		<menu label="Durum" name="Status">
-			<menu_item_call label="Uzakta" name="Set Away"/>
-			<menu_item_call label="MeÅŸgul" name="Set Busy"/>
-		</menu>
+		<menu label="Durum" name="Status"/>
 		<menu_item_call label="L$ Satın Al..." name="Buy and Sell L$"/>
 		<menu_item_call label="Satıcı Giden Kutusu..." name="MerchantOutbox"/>
 		<menu_item_call label="Hesap kontrol paneli..." name="Manage My Account"/>
@@ -30,14 +27,18 @@
 		<menu_item_call label="[APP_NAME]&apos;den Çık" name="Quit"/>
 	</menu>
 	<menu label="İletişim Kur" name="Communicate">
-		<menu_item_check label="Sohbet..." name="Nearby Chat"/>
+		<menu_item_check label="Sohbetler..." name="Conversations"/>
+		<menu_item_check label="Yakındaki Sohbet..." name="Nearby Chat"/>
 		<menu_item_check label="KonuÅŸ" name="Speak"/>
-		<menu_item_check label="Ses ayarları..." name="Nearby Voice"/>
-		<menu_item_check label="Ses ÅŸekillendirme..." name="ShowVoice"/>
+		<menu label="Ses ÅŸekillendirme" name="VoiceMorphing">
+			<menu_item_check label="Ses ÅŸekillendirme yok" name="NoVoiceMorphing"/>
+			<menu_item_check label="Önizleme..." name="Preview"/>
+			<menu_item_call label="Abone ol..." name="Subscribe"/>
+		</menu>
 		<menu_item_check label="Mimikler..." name="Gestures"/>
-		<menu_item_call label="ArkadaÅŸlar" name="My Friends"/>
-		<menu_item_call label="Gruplar" name="My Groups"/>
-		<menu_item_call label="Yakındaki kişiler" name="Active Speakers"/>
+		<menu_item_check label="ArkadaÅŸlar" name="My Friends"/>
+		<menu_item_check label="Gruplar" name="My Groups"/>
+		<menu_item_check label="Yakındaki kişiler" name="Active Speakers"/>
 		<menu_item_call label="Engelleme Listesi" name="Block List"/>
 	</menu>
 	<menu label="Dünya" name="World">
@@ -113,7 +114,6 @@
 			<menu_item_call label="Satın Al" name="Menu Object Buy"/>
 			<menu_item_call label="Al" name="Menu Object Take"/>
 			<menu_item_call label="Kopya Al" name="Take Copy"/>
-			<menu_item_call label="Envanterime Geri Kaydet" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="Nesne İçeriklerine Geri Kaydet" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="Nesneyi İade Et" name="Return Object back to Owner"/>
 		</menu>
@@ -128,6 +128,7 @@
 			<menu_item_call label="Bağlantı kümeleri..." name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="Karakterler..." name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="Görüntüleme / test..." name="pathfinding_console_menu_item"/>
+			<menu_item_call label="Bölgeyi tekrar kaydet" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="Seçenklr." name="Options">
 			<menu_item_check label="Gelişmiş İzinleri Göster" name="DebugPermissions"/>
@@ -157,6 +158,13 @@
 	<menu label="Yardım" name="Help">
 		<menu_item_call label="Nasıl yapılır..." name="How To"/>
 		<menu_item_call label="[SECOND_LIFE] Yardımı" name="Second Life Help"/>
+		<menu_item_call label="Kullanıcı kılavuzu" name="User’s guide"/>
+		<menu_item_call label="Bilgi Bankası" name="Knowledge Base"/>
+		<menu_item_call label="Wiki" name="Wiki"/>
+		<menu_item_call label="Topluluk Forumları" name="Community Forums"/>
+		<menu_item_call label="Destek portalı" name="Support portal"/>
+		<menu_item_call label="[SECOND_LIFE] Haberleri" name="Second Life News"/>
+		<menu_item_call label="[SECOND_LIFE] Blogları" name="Second Life Blogs"/>
 		<menu_item_call label="Kötüye Kullanımı Bildir" name="Report Abuse"/>
 		<menu_item_call label="Hata Bildir" name="Report Bug"/>
 		<menu_item_call label="[APP_NAME] Hakkında" name="About Second Life"/>
@@ -305,7 +313,7 @@
 			<menu_item_call label="Seçilen Doku Bilgi Temeli" name="Selected Texture Info Basis"/>
 			<menu_item_check label="Telkafes" name="Wireframe"/>
 			<menu_item_check label="Görünen Nesneler İçin Gölgeleme" name="Object-Object Occlusion"/>
-			<menu_item_check label="Işıklandırma ve Gölgeler" name="Lighting and Shadows"/>
+			<menu_item_check label="Işıklandırma ve Gölgeler" name="Advanced Lighting Model"/>
 			<menu_item_check label="Güneş/Ay/Projektörlerden Gelen Gölgeler" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="SSAO ve Gölge Yumuşatma" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="GL Hata Ayıklama" name="Debug GL"/>
@@ -383,9 +391,14 @@
 				<menu_item_call label="Test DiÅŸisi" name="Test Female"/>
 				<menu_item_check label="Avatar Seçimine İzin Ver" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="Animasyon Hızı" name="Animation Speed">
+				<menu_item_call label="Tüm Animasyonlar %10 Daha Hızlı" name="All Animations 10 Faster"/>
+				<menu_item_call label="Tüm Animasyonlar %10 Daha Yavaş" name="All Animations 10 Slower"/>
+				<menu_item_call label="Tüm Animasyon Hızlarını Sıfırla" name="Reset All Animation Speed"/>
+				<menu_item_check label="Yavaş Hareket Animasyonları" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="Parametreleri Varsayılana Zorla" name="Force Params to Default"/>
 			<menu_item_check label="Animasyon Bilgisi" name="Animation Info"/>
-			<menu_item_check label="Yavaş Hareket Animasyonları" name="Slow Motion Animations"/>
 			<menu_item_check label="Şuraya Bak&apos;ı Göster" name="Show Look At"/>
 			<menu_item_check label="Şuraya İşaret Et&apos;i Göster" name="Show Point At"/>
 			<menu_item_check label="Eklem Güncelleştirmeleri İçin Hata Ayıklama" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/tr/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/tr/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_wearing_gear.xml b/indra/newview/skins/default/xui/tr/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/menu_wearing_tab.xml b/indra/newview/skins/default/xui/tr/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/mime_types.xml b/indra/newview/skins/default/xui/tr/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/mime_types_linux.xml b/indra/newview/skins/default/xui/tr/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/mime_types_mac.xml b/indra/newview/skins/default/xui/tr/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/notifications.xml b/indra/newview/skins/default/xui/tr/notifications.xml
old mode 100644
new mode 100755
index 488702f9caa089f6a06b7f465147a97a310b1099..ad92a4b478dce6831d057fe1616ebc8a5ef7365c
--- a/indra/newview/skins/default/xui/tr/notifications.xml
+++ b/indra/newview/skins/default/xui/tr/notifications.xml
@@ -516,6 +516,24 @@ Daha fazla bilgi için [_URL] adresini ziyaret etmek ister misiniz?
 		</url>
 		<usetemplate ignoretext="Grafik sürücüm güncel değil" name="okcancelignore" notext="Hayır" yestext="Evet"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		Grafik yonganız için muhtemelen daha yeni bir sürücü mevcut.  Grafik sürücüleri güncellemek performansınızı kayda değer şekilde artırabilir.
+
+    Sürücü güncellemeleri için [_URL] adresini ziyaret etmek ister misiniz?
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="Grafik sürücüm güncel değil" name="okcancelignore" notext="Hayır" yestext="Evet"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		Grafik yonganız için muhtemelen daha yeni bir sürücü mevcut.  Grafik sürücüleri güncellemek performansınızı kayda değer şekilde artırabilir.
+
+    Sürücü güncellemeleri için [_URL] adresini ziyaret etmek ister misiniz?
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=en-us
+		</url>
+		<usetemplate ignoretext="Grafik sürücüm güncel değil" name="okcancelignore" notext="Hayır" yestext="Evet"/>
+	</notification>
 	<notification name="UnknownGPU">
 		Sisteminiz [APP_NAME] uygulamasının tanımadığı bir grafik kartı içeriyor.
 Bu durum genellikle [APP_NAME] uygulaması ile henüz denenmemiş yeni donanımlar kullanıldığında ortaya çıkar.  Büyük olasılıkla bir sorun çıkmayacaktır, fakat grafik ayarlarınızı değiştirmeniz gerekebilir.
@@ -1546,10 +1564,13 @@ Gruptan ayrılmak istiyor musunuz?
 		Şu anda arkadaşlık teklif edilemiyor. Lütfen biraz sonra tekrar deneyin.
 		<usetemplate name="okbutton" yestext="Tamam"/>
 	</notification>
-	<notification name="BusyModeSet">
-		Durumunuz Meşgul olarak ayarlandı.
-Sohbet ve anlık iletiler gizlenecek. Anlık iletilere Meşgul durumu için belirlediğiniz yanıt gönderilecek. Tüm ışınlanma teklifleri reddedilecek. Tüm envanter teklifleri Çöp Kutunuza gidecek.
-		<usetemplate ignoretext="Durumumu MeÅŸgul olarak deÄŸiÅŸtiriyorum" name="okignore" yestext="Tamam"/>
+	<notification name="DoNotDisturbModeSet">
+		Rahatsız Etme açık.  Gelen iletişimlerle ilgili size bilgi verilmeyecek.
+
+- Diğer sakinlere sizin Rahatsız Etmeyin yanıtı iletilecektir (Tercihler &gt; Genel içerisinde ayarlanır).
+- Işınlanma teklifleri reddedilecektir.
+- Sesli aramalar reddedilecektir.
+		<usetemplate ignoretext="Durumumu Rahatsız Etme moduna değiştiriyorum" name="okignore" yestext="Tamam"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		Maksimum grup sayısına eriştiniz. Lütfen bu gruba katılmadan önce başka bir gruptan ayrılın ya da bu teklifi reddedin.
@@ -2033,6 +2054,10 @@ Envanter öğesi/öğeleri taşınsın mı?
 		Hesap geçmişinizi görüntülemek için [http://secondlife.com/account/ Kontrol Paneli] adresine gitmek istiyor musunuz?
 		<usetemplate ignoretext="Hesap geçmişimi görüntülemek için tarayıcımı başlat" name="okcancelignore" notext="İptal" yestext="Sayfaya git"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		Mevcut bir sohbete bir kişi eklediğinizde yeni bir sohbet oluşturulur.  Tüm katılımcılara yeni sohbet bildirimi gönderilir.
+		<usetemplate ignoretext="Sohbet katılımcılarının eklenmesini doğrula" name="okcancelignore" notext="İptal" yestext="Tamam"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		Çıkmak istediğinize emin misiniz?
 		<usetemplate ignoretext="Çıkmadan önce doğrulama iste" name="okcancelignore" notext="Çıkma" yestext="Çık"/>
@@ -2107,14 +2132,14 @@ Bu nesneyi seçilen nesne ile değiştirmek istiyor musunuz?
 			<button ignore="Hiçbir Zaman Değiştirme" name="No" text="İptal"/>
 		</form>
 	</notification>
-	<notification label="Meşgul Durumu Uyarısı" name="BusyModePay">
-		Durumunuz Meşgul olarak ayarlanmış; bu da, bu ödemenin karşılığında teklif edilen hiçbir öğeyi almayacağınız anlamına gelir.
+	<notification label="Rahatsız Etme Modu Uyarısı" name="DoNotDisturbModePay">
+		Rahatsız Etme seçeneğini devreye aldınız. Bu ödemenin karşılığında sunulan hiçbir öğeyi almayacaksınız.
 
-Bu işlemi tamamlamadan önce Meşgul durumundan çıkmak ister misiniz?
+Bu işlemi tamamlamadan önce Rahatsız Etme&apos;yi kapatmak ister misiniz?
 		<form name="form">
-			<ignore name="ignore" text="Meşgul durumundayken bir kişiye veya bir nesneye ödeme yapmak üzereyim."/>
-			<button ignore="Her zaman Meşgul durumundan çık" name="Yes" text="Tamam"/>
-			<button ignore="Hiçbir zaman Meşgul durumundan çıkma" name="No" text="İptal"/>
+			<ignore name="ignore" text="Rahatsız Etmeyin modundayken bir kişiye veya bir nesneye ödeme yapmak üzereyim"/>
+			<button ignore="Rahatsız Etme Modundan daima çıkılsın" name="Yes" text="Tamam"/>
+			<button ignore="Rahatsız Etme Modundan asla çıkılmasın" name="No" text="İptal"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2249,11 +2274,8 @@ Diğer kişilerin bu konuma kolayca erişmesini sağlamak için bu adrese bir we
 	<notification name="GroupNotice">
 		Konu: [SUBJECT], İleti: [MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; çevrimiçi
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; çevrimdışı
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; durumu: [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		Çok iyi biri olduğunuza eminiz fakat kendinizi arkadaş olarak ekleyemezsiniz.
@@ -2482,13 +2504,6 @@ Burada uçamazsınız.
 	<notification name="DynamicPathfindingDisabled">
 		Bu bölgede dinamik yol bulma etkin değil.  Yol bulma LSL çağrılarını kullanan komut dosyalı nesneler, bu bölgede beklendiiği gibi çalışmayabilir.
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		Bu bölgede belirli diğer nesneleri değiştirmek, hareket eden başka nesnelerin yanlış davranmasına neden olabilir.  Hareket eden başka nesnelerin doğru davranmasını sağlamak için “Bölgeyi yeniden kaydet” düğmesine tıklayın.  Daha fazla bilgi edinmek için “Yardım” seçimini yapın.
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="Yardım" ignoretext="Bu bölgede belirli diğer nesneleri değiştirmek, hareket eden başka nesnelerin yanlış davranmasına neden olabilir." name="okhelpignore" yestext="Tamam"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		Bir hata meydana geldi.  Bir ağ veya sunucu sorunu olabilir ya da oluşturma haklarına sahip olmayabilirsiniz.  Bazen oturumu kapatıp, tekrar açmak bu sorunu çözer.
 		<usetemplate name="okbutton" yestext="Tamam"/>
@@ -2751,7 +2766,7 @@ Kabul ediyor musunuz?
 	<notification name="ScriptQuestionCaution">
 		Uyarı: &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; nesnesi, Linden Dolar hesabınıza tam erişim istiyor. Eğer erişime izin verirseniz, süregelen bir şekilde, ilave uyarı olmaksızın, hesabınızdan herhangi bir zamanda fon çekebilir veya hesabınızı tamamen boşaltabilir.
   
-Bu türden bir talebin yerinde olması nadir bir durumdur. Eğer hesabınıza neden erişmek istediğini tam olarak anlamıyorsanız, erişime izin vermeyin.
+Eğer hesabınıza neden erişmek istediğini tam olarak anlamıyorsanız, erişime izin vermeyin.
 		<form name="form">
 			<button name="Grant" text="Tam eriÅŸime izin ver"/>
 			<button name="Deny" text="Reddet"/>
@@ -3333,4 +3348,626 @@ GiriÅŸim iptal edildi.
 		[NUM_ITEMS] öğeyi siliyorsunuz.  Devam etmek istediğinize emin misiniz?
 		<usetemplate ignoretext="Birden çok öğeyi silmek istediğinize emin misiniz?" name="okcancelignore" notext="Hayır" yestext="Evet"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] sizi dondurdu. Hareket edemez veya dünyayla etkileşim kuramazsınız.
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] sizi [AV_FREEZE_TIME] saniye boyunca dondurdu. Hareket edemez veya dünyayla etkileşim kuramazsınız.
+	</notification>
+	<notification name="YouFrozeAvatar">
+		Avatar donduruldu.
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] sizin dondurulmanızı kaldırdı.
+	</notification>
+	<notification name="AvatarUnFrozen">
+		Avatar artık dondurulmuş değil.
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		Dondurma başarılamadı çünkü bu parsel için yönetici iznine sahip değilsiniz.
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		Dondurmanızın süresi sona erdi, istediğinizi yapabilirsiniz.
+	</notification>
+	<notification name="AvatarCantFreeze">
+		Üzgünüz, bu kullanıcı dondurulamaz.
+	</notification>
+	<notification name="NowOwnObject">
+		Artık [OBJECT_NAME] nesnesinin sahibisiniz
+	</notification>
+	<notification name="CantRezOnLand">
+		[OBJECT_POS] konumunda nesneyi oluşturamazsınız çünkü bu arazinin sahibi buna izin vermiyor.  Arazinin sahibini görmek için arazi aracını kullanın.
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		Çok fazla talep olduğu için nesne oluşturulamadı.
+	</notification>
+	<notification name="SitFailCantMove">
+		Oturamazsınız çünkü şu anda hareket edemezsiniz.
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		Oturamazsınız çünkü bu araziye girme izniniz yok.
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		Daha yakına gelmeyi deneyin.  Nesne sizinle aynı bölgede olmadığı için nesnenin üzerine oturulamaz.
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		Yeni nesne oluşturulamıyor. Bölge dolu.
+	</notification>
+	<notification name="FailedToPlaceObject">
+		Belirtilen konuma nesne yerleştirilemedi.  Lütfen tekrar deneyin.
+	</notification>
+	<notification name="NoOwnNoGardening">
+		Sahibi olmadığınız arazide ağaçlar ve çimen oluşturamazsınız.
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		&apos;[OBJ_NAME]&apos; nesnesini kopyalama izniniz olmadığı için kopyalama başarılamadı.
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		&apos;[OBJ_NAME]&apos; nesnesi size aktarılamadığı için kopyalama başarılamadı.
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		&apos;[OBJ_NAME]&apos; nesnesi navmesh&apos;e katkıda bulunduğu için kopyalama başarılamadı.
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		Kök nesne seçili olmayan kopya.
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		Nesneler çoğaltılamıyor çünkü bölge dolu.
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		Nesneler çoğaltılamadı - Üzerinde oldukları parsel bulunamadı.
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		Nesne oluşturulamıyor çünkü
+parsel dolu.
+	</notification>
+	<notification name="RezAttemptFailed">
+		Bir nesneyi oluşturma girişimi başarısız oldu.
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		Bu bölgede hatalara yol açmış olan öğe oluşturulamıyor.
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		Bu envanter öğesi kara listeye alınmış.
+	</notification>
+	<notification name="NoCanRezObjects">
+		Şu anda nesne oluşturmanıza izin verilmiyor.
+	</notification>
+	<notification name="LandSearchBlocked">
+		Arazi Arama Engellendi.
+Çok fazla sayıda arazi aramasını çok hızlı gerçekleştirdiniz.
+Lütfen bir dakika sonra tekrar deneyin.
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		Nesneyi iliştirmek için yeterli komut dosyası kaynağı mevcut değil!
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		Hayatınızı kaybettiniz ve ana konumunuza ışınlandınız
+	</notification>
+	<notification name="EjectComingSoon">
+		Daha fazla burada olma izniniz yok ve ayrılmak için [EJECT_TIME] saniyeniz var.
+	</notification>
+	<notification name="NoEnterServerFull">
+		Bu bölgeye giremezsiniz çünkü 
+sunucu dolu.
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		Envantere Geri Kaydet devre dışı bırakıldı.
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		&apos;[OBJ_NAME]&apos; nesne içeriğine kaydedilemedi, çünkü oluşturulurken temel alınan nesne artık mevcut değil.
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		&apos;[DEST_NAME]&apos; nesnesini değiştirme izniniz olmadığı için &apos;[OBJ_NAME]&apos; nesne içeriğine kaydedilemedi.
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		&apos;[OBJ_NAME]&apos; envantere geri kaydedilemez -- bu işlem devre dışı bırakıldı.
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		&apos;[OBJ_NAME]&apos; nesnesini kopyalama izniniz olmadığı için seçiminizi kopyalamayazsınız.
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		&apos;[OBJ_NAME]&apos; nesnesi aktarılamaz olduğu için seçiminizi kopyalayamazsınız.
+	</notification>
+	<notification name="NoTransNoCopy">
+		&apos;[OBJ_NAME]&apos; nesnesi aktarılamaz olduğu için seçiminizi kopyalayamazsınız.
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		Benzeticiden &apos;[OBJ_NAME]&apos; nesnesinin kaldırılmasına izinler sistemi izin vermiyor.
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		&apos;[OBJ_NAME]&apos; nesnesini değiştirme izniniz olmadığı için seçiminizi kaydedemezsiniz.
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		&apos;[OBJ_NAME]&apos; nesnesi kopyalanamaz olduğu için seçiminizi kaydedemezsiniz.
+	</notification>
+	<notification name="NoModNoTaking">
+		&apos;[OBJ_NAME]&apos; nesnesini değiştirme izniniz olmadığı için seçiminizi alamazsınız.
+	</notification>
+	<notification name="RezDestInternalError">
+		Dahili Hata: Bilinmeyen hedef türü.
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		Nesne bulunamadığı için silme başarılamadı
+	</notification>
+	<notification name="SorryCantEjectUser">
+		Üzgünüz, bu kullanıcı çıkartılamaz.
+	</notification>
+	<notification name="RegionSezNotAHome">
+		Bu bölge, ana konumunuzu buraya kurmanıza izin vermiyor.
+	</notification>
+	<notification name="HomeLocationLimits">
+		&apos;Ana Konum&apos;unuzu sadece arazinizde veya anakarada bir Bilgi İstasyonu&apos;nda ayarlayabilirsiniz.
+	</notification>
+	<notification name="HomePositionSet">
+		Ana konum ayarlandı.
+	</notification>
+	<notification name="AvatarEjected">
+		Avatar çıkartıldı.
+	</notification>
+	<notification name="AvatarEjectFailed">
+		Çıkarma başarılamadı çünkü bu parsel için yönetici iznine sahip değilsiniz.
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		[REGION_NAME] bölgesinde &apos;[OBJECT_NAME]&apos; nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü parsel dolu.
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		[REGION_NAME] bölgesinde &apos;[OBJECT_NAME]&apos; nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü bu parselde nesnelerinize izin verilmiyor.
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		[REGION_NAME] bölgesinde &apos;[OBJECT_NAME]&apos; nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor, çünkü bu parselde bu nesne için yeterli kaynak yok.
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		[REGION_NAME] bölgesinde &apos;[OBJECT_NAME]&apos; nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü bölgede çalıştırılan eski versiyon, bölge değiştirme üzerinden bu nesnenin alınmasını desteklemiyor.
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		[REGION_NAME] bölgesinde &apos;[OBJECT_NAME]&apos; nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor çünkü navmesh&apos;i bölge sınırları ötesinde değiştiremezsiniz.
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		Bilinmeyen bir nedenden ötürü [REGION_NAME] bölgesinde &apos;[OBJECT_NAME]&apos; nesnesi [OBJ_POSITION] konumuna hareket ettirilemiyor. ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		Bu nesneyi deÄŸiÅŸtirme izniniz yok
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		Navmesh&apos;e katkıda bulunan bir nesne için fizik etkinleştirilemez.
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		Anahtar karelenmiş nesneler için fizik etkinleştirilemez.
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		Nesne için fizik etkinleştirilemedi -- arazi kaynakları yetersiz.
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		Fizik kaynağı maliyeti [MAX_OBJECTS]&apos;dan büyük nesne için fizik etkinleştirilemedi
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		Bu nesne fantom olduğu ve navmesh&apos;e katkıda bulunduğu için konkav bir parçaya sahip olamaz.
+	</notification>
+	<notification name="UnableAddItem">
+		Öğe eklenemedi!
+	</notification>
+	<notification name="UnableEditItem">
+		Bu düzenlenemiyor!
+	</notification>
+	<notification name="NoPermToEdit">
+		Bunu düzenleme izni yok.
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		Bu envanteri kopyalama izni yok.
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		Nesne içeriklerine kaydedilemedi: Öğe artık mevcut değil.
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		Nesne içeriklerine kaydedilemedi: Bu ada sahip öğe envanterde zaten mevcut
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		Nesne içeriklerine kaydedilemedi: Bu, aksesuar izinlerini değiştirmeyi gerektirirdi.
+	</notification>
+	<notification name="TooManyScripts">
+		Çok fazla komut dosyası.
+	</notification>
+	<notification name="UnableAddScript">
+		Komut dosyası eklenemedi!
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		Varlık sunucusu zamanında yanıt vermedi.  Nesne sime iade edildi.
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		Bu bölgede fiziksel şekiller etkin değil.
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		Navmesh&apos;i bölge sınırlarının ötesinde değiştiremezsiniz.
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		Bu nesne türü üzerinde fizik özellikleri ayarlanamaz.
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		Kök prim şekilsiz olacak şekilde ayarlanamaz.
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		Bu bölgede fiziksel malzemeler etkin değil.
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		Sadece kök primlerin fizik malzemeleri ayarlanabilir.
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		Karakterler üzerinde fizik malzemelerin ayarlanması henüz desteklenmiyor.
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		Belirtilen fizik malzemesi özelliklerinden biri veya daha fazlası geçersiz.
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		Bir örgü nesnesinin dikiş türünü değiştiremezsiniz.
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		Bir örgü nesnesinin şeklini değiştiremezsiniz
+	</notification>
+	<notification name="FullRegionCantEnter">
+		Bu bölgeye giremezsiniz çünkü \nbölge dolu.
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		Bağlantı başarısız oldu -- sahipler farklı
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		Bağlntı başarılamadı -- navmesh&apos;i bölge sınırlarının ötesinde değiştiremezsiniz.
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		Düzenleme iznine sahip olmadığınız için bağlantı başarılamadı.
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		Bağlantı başarısız oldu -- çok fazla ilkel öğe var
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		Bağlantı başarısız oldu -- aktarılamayanla kopyalanamayan arasında bağlantı kurulamaz
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		Bağlantı başarısız oldu -- bağlantı verilebilecek bir şey yok.
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		Bağlantı başarısız oldu -- çok fazla yol bulma karakteri var
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		Bağlantı başarısız oldu -- arazi kaynakları yetersiz
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		Nesne çok fazla fizik kaynağı kullanıyor -- dinamikleri devre dışı bırakıldı.
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		&apos;[PARCEL_NAME]&apos; parseli üzerindeki &apos;[OBJECT_NAME]&apos; nesnesi tarafından ana konuma ışınlandınız
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		&apos;[OBJECT_NAME]&apos; nesnesi tarafından ana konuma ışınlandınız
+	</notification>
+	<notification name="TeleportedByAttachment">
+		You have been teleported by an attachment on [ITEM_ID]
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		&apos;[PARCEL_NAME]&apos; parseli üzerindeki &apos;[OBJECT_NAME]&apos; nesnesi tarafından ışınlandınız
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		Sahibi [OWNER_ID] olan &apos;[OBJECT_NAME]&apos; nesnesi tarafından ışınlandınız
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		Bilinmeyen bir sahibi olan &apos;[OBJECT_NAME]&apos; nesnesi tarafından ışınlandınız.
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		Talep edilen nesne oluşturulamıyor. Bölge dolu.
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		Tek bir noktaya birden fazla nesne iliÅŸtiremezsiniz.
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		Burada birden fazla nesne oluşturamazsınız.
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		Talep edilen nesne oluşturulamıyor. Nesne veri tabanında yok.
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		Talep edilen nesne oluşturulamıyor. Talep zaman aşımına uğradı. Lütfen tekrar deneyin.
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		Talep edilen nesne oluşturulamıyor. Lütfen tekrar deneyin.
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		Oluşturma başarısız oldu, talep edilen nesnenin yüklenmesi çok zaman aldı.
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		Belirtilen konuma nesne yerleştirilemedi.  Lütfen tekrar deneyin.
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		Bu arazide bitkiler oluşturamazsınız.
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		Nesne geri yüklenemiyor. Dünya konumu bulunamadı.
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		Örgü verileri geçersiz olduğu için nesne oluşturulamadı.
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		Bölgede zaten fazlasıyla komut dosyası olduğu için nesne oluşturulamadı.
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		Erişim ayrıcalıklarınız orada nesne oluşturmanıza izin vermiyor.
+	</notification>
+	<notification name="CantCreateObject">
+		Şu anda nesne oluşturmanıza izin verilmiyor.
+	</notification>
+	<notification name="InvalidObjectParams">
+		Geçersiz nesne parametreleri
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		Erişim ayrıcalıklarınız burada nesne çoğaltmanıza izin vermiyor.
+	</notification>
+	<notification name="CantChangeShape">
+		Bu ÅŸekli deÄŸiÅŸtirmenize izin verilmiyor.
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		Erişim ayrıcalıklarınız burada nesneler üzerinde hak talebinde bulunmanıza izin vermiyor.
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		Grubunuz adına nesne devretmek için gerekli izne sahip olmadığınız için devretme başarılamadı.
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		Erişim ayrıcalıklarınız burada nesneler satın almanıza izin vermiyor.
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		Üzerinde bir avatar oturduğu için nesne iliştirilemiyor.
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		Ağaçlar ve çimen aksesuar olarak giyilemez.
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		Sahibi grup olan nesneler iliÅŸtirilemiyor.
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		Sahip olmadığınız nesneleri iliştiremezsiniz.
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		Navmesh&apos;e katkıda bulunan nesneler iliştirilemez.
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		Nesneyi hareket ettirme izniniz olmadığı için nesneyi iliştiremiyorsanız.
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		Nesneyi iliştirmek için yeterli komut dosyası kaynağı mevcut değil!
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		Buraya nesne düşüremezsiniz; Ücretsiz Deneme alanını deneyin.
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		Örgü aksesuarlarını düşüremezsiniz. Envantere ayırın, sonra dünyada oluşturun.
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		Aksesuar düşürülemedi: Burada düşürme izniniz yok.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		Aksesuar düşürülemedi: Mevcut arazi kaynakları yetersiz.
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		Aksesuarlar düşürülemedi: Mevcut kaynaklar yetersiz.
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		Nesne buraya düşürülemez.  Parsel dolu.
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		Bu arazi parselinde yasaklandığınız için bu nesneye dokunamıyor/tutamıyorsunuz.
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		Lütfen silme parametrelerinizi daraltın.
+	</notification>
+	<notification name="UnableToUploadAsset">
+		Varlık karşıya yüklenemiyor.
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		Ana konuma ışınlanacak kullanıcı bulunamadı
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		tanrısal talep başarısız oldu
+	</notification>
+	<notification name="GenericRequestFailed">
+		genel talep başarısız oldu
+	</notification>
+	<notification name="CantUploadPostcard">
+		Posta kartı karşıya yüklenemiyor.  Daha sonra tekrar deneyin.
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		Grup bildirimi için envanter ayrıntıları alınamadı.
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		Grup bildirimi gönderilemedi -- izin verilmiyor.
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		Grup bildirimi gönderilemedi -- envanter oluşturulamadı.
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		Bildirimde envanter ayrıştırılamadı.
+	</notification>
+	<notification name="TerrainUploadFailed">
+		Yüzeyin karşıya yüklemesi başarılamadı.
+	</notification>
+	<notification name="TerrainFileWritten">
+		Yüzey dosyası yazıldı.
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		Yüzey dosyası yazıldı, karşıdan yükleme başlatılıyor...
+	</notification>
+	<notification name="TerrainBaked">
+		Yüzey kaydedildi.
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		Sadece seçilen ilk 10 nesne devre dışı bırakıldı. Gerekiyorsa yenileyin ve ilave seçimler yapın.
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		Bu parseli satın almak için görüntüleyicinizi güncelleştirmelisiniz.
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		Satın alınamıyor, bu parsel satılık değil.
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		Satın alınamıyor, satış fiyatı veya arazi bölgesi değişmiş.
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		Bu parsel için yetkili alıcı değilsiniz.
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		Bu parseli satın alamazsınız çünkü zaten satın alım yetkilendirmesi bekliyor
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		Burada nesneler inşa edemezsiniz, aksi halde parselin kaynak sınırları aşılır.
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		Farklı sahiplere ait araziler seçtiniz. Lütfen daha küçük bir alan seçin ve tekrar deneyin.
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		Seçimde birleştirilecek yeterli sayıda lease edilmiş parsel yok.
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		Arazi bölünemedi.\nBirden fazla parsel seçili durumda.\nDaha küçük bir arazi parçası seçmeyi deneyin.
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		Arazi bölünemiyor.\nParsel bulunamıyor.\nLütfen Yardım -&gt; Hata Bildir ile bildirin...
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		Arazi bölünemiyor. Tüm parsel seçilidir.\nDaha küçük bir arazi parçası seçmeyi deneyin.
+	</notification>
+	<notification name="LandHasBeenDivided">
+		Arazi bölündü.
+	</notification>
+	<notification name="PassPurchased">
+		Bir geçiş hakkı satın aldınız.
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		Bölgede seri ilanlara izin verilmiyor.
+	</notification>
+	<notification name="LandPassExpireSoon">
+		Bu arazi için geçiş hakkınız sona ermek üzere.
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		Üzerinde oturulabilecek uygun bir yüzey yok, başka bir noktayı deneyin.
+	</notification>
+	<notification name="CantSitNoRoom">
+		Burada oturacak yer yok, baÅŸka bir yer deneyin.
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		İzniniz olmadığı için nesne üzerinde hak talep etme başarılamadı
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		Sahip olduğunuz L$ yeterli olmadığı için nesne üzerinde hak talep etme başarılamadı.
+	</notification>
+	<notification name="CantDeedGroupLand">
+		Grubun sahip olduÄŸu araziyi devredemezsiniz.
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		Sahip olduğunuz L$ yeterli olmadığı için nesne satın alma başarılamadı.
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		Sahip olduğunuz L$ yeterli olmadığı için envanter satın alma başarılamadı.
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		Sahibi olduğunuz L$ bu araziye geçiş hakkı almanıza yeterli değil.
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		Şu anda geçiş hakkı satın alınamıyor.  Daha sonra tekrar deneyin.
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		Nesne oluşturulamıyor çünkü \nparsel dolu.
+	</notification>
+	<notification name="FailedPlacingObject">
+		Belirtilen konuma nesne yerleştirilemedi.  Lütfen tekrar deneyin.
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		Etkinlik için yer imi oluşturulamıyor.
+	</notification>
+	<notification name="GodBeatsFreeze">
+		Tanrısal güçleriniz dondurmayı devre dışı bıraktı!
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		Özel yetkiler talebi başarısız oldu. Bu talep günlüğe kaydedildi.
+	</notification>
+	<notification name="ExpireExplanation">
+		Sistem şu anda talebinizi işleyemiyor. Talep zaman aşımına uğradı.
+	</notification>
+	<notification name="DieExplanation">
+		Sistem talebinizi iÅŸleyemiyor.
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		İlkel öğeyi oluşturmak için yeterli fon yok.
+	</notification>
+	<notification name="RezObjectFailure">
+		Nesneyi oluşturmak için yeterli fon yok.
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		Ana konum sıfırlandı çünkü Ana konum yasal değildi.
+	</notification>
+	<notification name="CantInviteRegionFull">
+		Şu anda konumunuza kimseyi davet edemezsiniz çünkü bölge dolu. Daha sonra tekrar deneyin.
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		Bu bölge, ana konumunuzu buraya kurmanıza izin vermiyor.
+	</notification>
+	<notification name="ListValidHomeLocations">
+		&apos;Ana Konum&apos;unuzu sadece arazinizde veya anakarada bir Bilgi İstasyonu&apos;nda ayarlayabilirsiniz.
+	</notification>
+	<notification name="SetHomePosition">
+		Ana konum ayarlandı.
+	</notification>
+	<notification name="CantDerezInventoryError">
+		Envanter hatasından ötürü nesne oluşturulması geri alınamıyor.
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		Talep edilen envanter oluşturulamadı.
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		Talep edilen envanter klasörü oluşturulamadı.
+	</notification>
+	<notification name="CantCreateInventory">
+		Bu envanter oluşturulamadı.
+	</notification>
+	<notification name="CantCreateLandmark">
+		Yer imi oluşturulamıyor.
+	</notification>
+	<notification name="CantCreateOutfit">
+		Dış görünüm şu anda oluşturulamıyor. Bir dakika sonra tekrar deneyin.
+	</notification>
+	<notification name="InventoryNotForSale">
+		Envanter satılık değil.
+	</notification>
+	<notification name="CantFindInvItem">
+		Envanter öğesi bulunamıyor.
+	</notification>
+	<notification name="CantFindObject">
+		Nesne bulunamıyor.
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		Nesnelere para transferleri bölgede şu anda devre dışı bırakılmış durumda.
+	</notification>
+	<notification name="CantPayNoAgent">
+		Kime ödeme yapılacağı belirlenemedi.
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		Kamusal nesnelere L$ veremezsiniz.
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		Dünya içerisindeki nesnede envater oluşturma başarısız oldu.
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		Dahili bir hata nedeniyle görüntüleyicinizi gerektiği gibi güncelleyemedik.  Görüntüleyicinizde gösterilen L$ bakiyesi veya parsel tutarı sunucular üzerinde gerçekteki bakiyenizi yansıtmayabilir.
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		Başka oyuncularla kesişen büyük primler oluşturulamaz.  Öbür oyuncular hareket ettiğinde lütfen tekrar deneyin.
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		Bu, geçmiş sohbetlerin günlüklerini ve bu dosyanın tüm yedeklerini silecektir.
+		<usetemplate ignoretext="Ben geçmiş sohbetlerin günlüğünü silmeden önce doğrula." name="okcancelignore" notext="İptal" yestext="Tamam"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		Bu, tüm geçmiş sohbetlerin dökümlerini silecektir. Geçmiş sohbetlerin listesi bundan etkilenmez. [FOLDER] klasöründe .txt ve txt.backup uzantısına sahip tüm dosyalar silinecektir.
+		<usetemplate ignoretext="Ben dökümleri silmeden önce doğrulama iste." name="okcancelignore" notext="İptal" yestext="Tamam"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		Dosyalar taşınamıyor. Önceki yol geri yüklendi.
+		<usetemplate ignoretext="Dosyalar taşınamıyor. Önceki yol geri yüklendi." name="okignore" yestext="Tamam"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/tr/panel_active_object_row.xml b/indra/newview/skins/default/xui/tr/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/tr/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index 7542778acaf68dcf41cfbdfaeacd5f9771a21658..f330bd85e8e12032c24cbb1a411f666a8946aaee
--- a/indra/newview/skins/default/xui/tr/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/tr/panel_avatar_list_item.xml
@@ -27,5 +27,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="Bu arkadaşınız nesnelerinizi düzenleyebilir, silebilir veya alabilir"/>
 	<icon name="permission_map_icon" tool_tip="Bu arkadaşınız haritada sizi bulabilir"/>
 	<icon name="permission_online_icon" tool_tip="Bu arkadaşınız çevrimiçi olduğunuzda sizi görebilir"/>
+	<button name="info_btn" tool_tip="Ek bilgi"/>
 	<button name="profile_btn" tool_tip="Profili göster"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_avatar_tag.xml b/indra/newview/skins/default/xui/tr/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 0464b7ec07a1d4886f2703cf02c61e26c90188e3..87b67e249ed78d421db38424b0e296be52244777
--- a/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/tr/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		Listeyi Engelle
-	</text>
-	<scroll_list name="blocked" tool_tip="Åžu anda engellenmiÅŸ olan Sakinler listesi"/>
-	<button label="Kişiyi engelle" name="Block resident..." tool_tip="Engellenecek bir Sakin seç"/>
-	<button label="Nesneyi ada göre engelle" name="Block object by name..." tool_tip="Ada göre engellenecek bir nesne seç"/>
-	<button label="Engellemeyi Kaldır" name="Unblock" tool_tip="Engelleme listesinden Sakini veya nesneyi kaldır"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="Filtrele" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="Seçilen kişi veya nesne üzerindeki eylemler"/>
+		<menu_button name="view_btn" tool_tip="Sıralama seçenekleri"/>
+		<menu_button name="plus_btn" tool_tip="Engellenecek bir Sakin veya nesne seç"/>
+		<button name="unblock_btn" tool_tip="Engelleme listesinden Sakini veya nesneyi kaldır"/>
+	</panel>
+	<block_list name="blocked" tool_tip="Åžu anda engellenmiÅŸ olan Sakinler listesi"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/tr/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/tr/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/tr/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_chat_header.xml b/indra/newview/skins/default/xui/tr/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/tr/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_classified_info.xml b/indra/newview/skins/default/xui/tr/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/tr/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/tr/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_cof_wearables.xml b/indra/newview/skins/default/xui/tr/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/tr/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c7227f02b65ec51aeaff8e25343530c5f2a31842
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(yükleniyor)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/tr/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..79895f9c21165641b2c1534a12411edd89ab0547
--- /dev/null
+++ b/indra/newview/skins/default/xui/tr/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="Sohbet ses dahil edildi"/>
+	<icon name="unread_ims_icon" tool_tip="Oturumunuz kapalıyken mesajlar geldi"/>
+	<button name="delete_btn" tool_tip="Bu girişi kaldır"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/tr/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/tr/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_alpha.xml b/indra/newview/skins/default/xui/tr/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_classified.xml b/indra/newview/skins/default/xui/tr/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_eyes.xml b/indra/newview/skins/default/xui/tr/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_gloves.xml b/indra/newview/skins/default/xui/tr/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_hair.xml b/indra/newview/skins/default/xui/tr/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_jacket.xml b/indra/newview/skins/default/xui/tr/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_pants.xml b/indra/newview/skins/default/xui/tr/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_physics.xml b/indra/newview/skins/default/xui/tr/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_pick.xml b/indra/newview/skins/default/xui/tr/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_profile.xml b/indra/newview/skins/default/xui/tr/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_shape.xml b/indra/newview/skins/default/xui/tr/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_shirt.xml b/indra/newview/skins/default/xui/tr/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_shoes.xml b/indra/newview/skins/default/xui/tr/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_skin.xml b/indra/newview/skins/default/xui/tr/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_skirt.xml b/indra/newview/skins/default/xui/tr/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_socks.xml b/indra/newview/skins/default/xui/tr/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/tr/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_underpants.xml b/indra/newview/skins/default/xui/tr/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/tr/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_edit_wearable.xml b/indra/newview/skins/default/xui/tr/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_general.xml b/indra/newview/skins/default/xui/tr/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/tr/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_invite.xml b/indra/newview/skins/default/xui/tr/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_land_money.xml b/indra/newview/skins/default/xui/tr/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_list_item.xml b/indra/newview/skins/default/xui/tr/panel_group_list_item.xml
old mode 100644
new mode 100755
index 2bc597f2fa9c1e50dba56458232f71479be07ea4..f44d2b5e762cc7998da986d0d56ba652e4623c84
--- a/indra/newview/skins/default/xui/tr/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/tr/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="Bilinmiyor"/>
+	<button name="info_btn" tool_tip="Ek bilgi"/>
 	<button name="profile_btn" tool_tip="Profili göster"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_group_notices.xml b/indra/newview/skins/default/xui/tr/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_notify.xml b/indra/newview/skins/default/xui/tr/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_group_roles.xml b/indra/newview/skins/default/xui/tr/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml b/indra/newview/skins/default/xui/tr/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_instant_message.xml b/indra/newview/skins/default/xui/tr/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_inventory_item.xml b/indra/newview/skins/default/xui/tr/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_landmark_info.xml b/indra/newview/skins/default/xui/tr/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_landmarks.xml b/indra/newview/skins/default/xui/tr/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_login.xml b/indra/newview/skins/default/xui/tr/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_main_inventory.xml b/indra/newview/skins/default/xui/tr/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_me.xml b/indra/newview/skins/default/xui/tr/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_media_settings_general.xml b/indra/newview/skins/default/xui/tr/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/tr/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_media_settings_security.xml b/indra/newview/skins/default/xui/tr/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_navigation_bar.xml b/indra/newview/skins/default/xui/tr/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml b/indra/newview/skins/default/xui/tr/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/tr/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_nearby_media.xml b/indra/newview/skins/default/xui/tr/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_notify_textbox.xml b/indra/newview/skins/default/xui/tr/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_online_status_toast.xml b/indra/newview/skins/default/xui/tr/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/tr/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_outfit_edit.xml b/indra/newview/skins/default/xui/tr/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/tr/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/tr/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_outfits_list.xml b/indra/newview/skins/default/xui/tr/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/tr/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_people.xml b/indra/newview/skins/default/xui/tr/panel_people.xml
old mode 100644
new mode 100755
index 1a1e53bac20f28980a07a38a36feda5b0690bed1..08efd0aa6162ab9497b8acf9ab9907d8c97b81d6
--- a/indra/newview/skins/default/xui/tr/panel_people.xml
+++ b/indra/newview/skins/default/xui/tr/panel_people.xml
@@ -14,81 +14,53 @@ Birlikte takılacak kişiler mi arıyorsunuz? [secondlife:///app/worldmap Dünya
 	<string name="no_filtered_friends_msg">
 		Aradığınızı bulamadınız mı? [secondlife:///app/search/people/[SEARCH_TERM] Ara] deneyin.
 	</string>
-	<string name="people_filter_label" value="KiÅŸileri Filtrele"/>
-	<string name="groups_filter_label" value="Grupları Filtrele"/>
 	<string name="no_filtered_groups_msg" value="Aradığınızı bulamadınız mı? [secondlife:///app/search/groups/[SEARCH_TERM] Ara] deneyin."/>
 	<string name="no_groups_msg" value="Katılacak Gruplar mı arıyorsunuz? [secondlife:///app/search/groups Ara] deneyin."/>
 	<string name="MiniMapToolTipMsg" value="[REGION](Haritayı açmak için çift tıkla, yatay hareket için shift çek)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](Işınlamak için çift tıkla, yatay hareket için shift çek)"/>
-	<filter_editor label="Filtrele" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="YAKIN" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="Seçenklr."/>
-				<button name="add_friend_btn" tool_tip="Seçilen Sakini arkadaş listene ekle"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="KiÅŸileri Filtrele" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="Seçilen kişi üzerindeki eylemler"/>
+				<menu_button name="nearby_view_btn" tool_tip="Gösterme/sıralama seçenekleri"/>
+				<button name="add_friend_btn" tool_tip="Bir sakine arkadaşlık öner"/>
+				<dnd_button name="nearby_del_btn" tool_tip="Seçilen kişiyi arkadaş olarak kaldır"/>
 			</panel>
 		</panel>
-		<panel label="ARKADAÅžLARIM" name="friends_panel">
+		<panel label="ARKADAÅžLAR" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="KiÅŸileri Filtrele" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="Seçilen kişi üzerindeki eylemler"/>
+				<menu_button name="friends_view_btn" tool_tip="Seçenekleri göster/sırala"/>
+				<button name="friends_add_btn" tool_tip="Bir sakine arkadaşlık öner"/>
+				<dnd_button name="friends_del_btn" tool_tip="Seçilen kişiyi arkadaş olarak kaldır"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="Çevrimiçi"/>
 				<accordion_tab name="tab_all" title="Tümü"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="İlave seçenekleri göster"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="Bir Sakine arkadaşlık öner"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="Seçilen kişiyi arkadaş Listenden çıkar"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="GRUPLARIM" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="Seçenklr."/>
-				<button name="plus_btn" tool_tip="Gruba katıl/yeni grup oluştur"/>
-				<button name="activate_btn" tool_tip="Seçilen grubu etkinleştir"/>
+		<panel label="GRUPLAR" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="Grupları Filtrele" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="Seçilen grup üzerindeki eylemler"/>
+				<menu_button name="groups_view_btn" tool_tip="Seçenekleri göster/sırala"/>
+				<menu_button name="plus_btn" tool_tip="Gruba katıl/yeni grup oluştur"/>
+				<dnd_button name="minus_btn" tool_tip="Seçilen gruptan ayrıl"/>
 			</panel>
 		</panel>
 		<panel label="SON" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="Seçenklr."/>
-				<button name="add_friend_btn" tool_tip="Seçilen Sakini arkadaş listene ekle"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="KiÅŸileri Filtrele" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="Seçilen kişi üzerindeki eylemler"/>
+				<menu_button name="recent_view_btn" tool_tip="Seçenekleri göster/sırala"/>
+				<button name="add_friend_btn" tool_tip="Bir sakine arkadaşlık öner"/>
+				<dnd_button name="recent_del_btn" tool_tip="Seçilen kişiyi arkadaş olarak kaldır"/>
 			</panel>
 		</panel>
+		<panel label="ENGELLENMİŞ" name="blocked_panel">
+			<panel label="EngellenmiÅŸ Sakinler ve Nesneler" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="Profil" name="view_profile_btn" tool_tip="Resim, grup ve diğer Sakin bilgilerini göster"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="Aİ" name="im_btn" tool_tip="Anlık ileti oturumu aç"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="Ara" name="call_btn" tool_tip="Bu Sakini ara"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="Paylaş" name="share_btn" tool_tip="Bir envanter öğesini paylaş"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="Işınla" name="teleport_btn" tool_tip="Işınlama teklif et"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="Grup Profili" name="group_info_btn" tool_tip="Grup bilgilerini göster"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="Grup Sohbeti" name="chat_btn" tool_tip="Sohbet oturumu aç"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="Grup Araması" name="group_call_btn" tool_tip="Bu grubu ara"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_pick_info.xml b/indra/newview/skins/default/xui/tr/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_picks.xml b/indra/newview/skins/default/xui/tr/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_place_profile.xml b/indra/newview/skins/default/xui/tr/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_places.xml b/indra/newview/skins/default/xui/tr/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_postcard_message.xml b/indra/newview/skins/default/xui/tr/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml b/indra/newview/skins/default/xui/tr/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/tr/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/tr/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
old mode 100644
new mode 100755
index 231e8fc5fe8c1cfc43c2b4b838fd60661a4b9004..aaeebdfe6e8eb0c51dee25dc4c991447e7b27d1c
--- a/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="Metin Sohbeti" name="chat">
-	<text name="font_size">
-		Font büyüklüğü:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="Küçük" name="radio" value="0"/>
-		<radio_item label="Orta" name="radio2" value="1"/>
-		<radio_item label="Büyük" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="Sohbet sırasında yazma animasyonunu oynat" name="play_typing_animation"/>
-	<check_box label="Çevrimdışı olduğunda Aİ&apos;ler e-posta ile bana gönderilsin" name="send_im_to_email"/>
-	<check_box label="Düz metin Aİ&apos;ler ve sohbet geçmişini etkinleştir" name="plain_text_chat_history"/>
-	<check_box label="Balon Sohbeti" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		Aİ&apos;leri şurada göster:
-	</text>
-	<text name="requires_restart_label">
-		(tekrar baÅŸlatma gerekir)
-	</text>
-	<radio_group name="chat_window" tool_tip="Anlık İletileri ayrı gezdiricilerde veya çoklu sekmelere sahip tek bir gezdiricide gösterin (tekrar başlatma gerekir)">
-		<radio_item label="Ayrı Pencereler" name="radio" value="0"/>
-		<radio_item label="Sekmeler" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		Gelen sohbet için açılır pencereleri etkinleştir:
-	</text>
-	<check_box label="Grup Sohbetleri" name="EnableGroupChatPopups" tool_tip="Bir Grup Sohbet iletisi gönderildiğinde açılır pencereleri görmek için işaretle"/>
-	<check_box label="Aİ Sohbetleri" name="EnableIMChatPopups" tool_tip="Bir anlık ileti geldiğinde açılır pencereleri görmek için işaretle"/>
-	<spinner label="Yakındaki sohbet iletilerinin vurgulanma süresi:" name="nearby_toasts_lifetime"/>
-	<spinner label="Yakındaki sohbet iletilerinin sönme süresi:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="Sohbet sırasında yazma animasyonunu oynat" name="play_typing_animation"/>
+		<check_box label="Çevrimdışı olduğunda Aİ&apos;ler e-posta ile bana gönderilsin" name="send_im_to_email"/>
+		<check_box label="Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			Font büyüklüğü:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="Küçük" name="Small" value="0"/>
+			<item label="Orta" name="Medium" value="1"/>
+			<item label="Büyük" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="Balon Sohbeti" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			Bildirimler
+		</text>
+		<text name="friend_ims">
+			Arkadaş Aİ&apos;leri:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+			<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
+			<item label="Hiçbiri" name="None" value="none"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			Arkadaş harici Aİ&apos;ler:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mesajı açılır pencerede göster" name="PopUpMessage" value="toast"/>
+			<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
+			<item label="Hiçbiri" name="None" value="none"/>
+		</combo_box>
+		<text name="conference_ims">
+			Konferans Aİ&apos;leri:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+			<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
+			<item label="Hiçbiri" name="None" value="none"/>
+		</combo_box>
+		<text name="group_chat">
+			Grup sohbeti:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+			<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolbarButton" value="flash"/>
+			<item label="Hiçbiri" name="None" value="none"/>
+		</combo_box>
+		<text name="nearby_chat">
+			Yakındaki sohbet:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="Sohbetler penceresini aç" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="Mesajı aç" name="PopUpMessage" value="toast"/>
+			<item label="Araç çubuğu düğmesi yanıp sönsün" name="FlashToolBarButton" value="flash"/>
+			<item label="Hiçbiri" name="None" value="none"/>
+		</combo_box>
+		<text name="notifications_alert">
+			Tüm bildirimleri geçici olarak durdurmak için İletişim Kur &gt; Rahatsız Etme seçeneğini kullanın.
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			Sesi çal:
+		</text>
+		<check_box label="Yeni sohbet" name="new_conversation"/>
+		<check_box label="Gelen sesli arama" name="incoming_voice_call"/>
+		<check_box label="Işınlama teklifi" name="teleport_offer"/>
+		<check_box label="Envanter teklifi" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="Günlüğü temizle..." name="clear_log"/>
+		<button label="Dökümleri sil..." name="delete_transcripts"/>
+		<button label="Gözat..." label_selected="Gözat" name="log_path_button"/>
+	</panel>
 	<button label="Çeviri..." name="ok_btn"/>
 	<button label="Otomatik Yerine Koy..." name="autoreplace_showgui"/>
 	<button label="Yazım Denetimi Yapılıyor..." name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_colors.xml b/indra/newview/skins/default/xui/tr/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
old mode 100644
new mode 100755
index 4a48b1588c1387bbf62c789b936f0c3d998b1182..1a13cf8f717b4b83aea4cf41113157befca86984
--- a/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/tr/panel_preferences_general.xml
@@ -68,9 +68,9 @@
 		<combo_box.item label="asla" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		Meşgul durumu cevabı:
+		Rahatsız Etme yanıtı:
 	</text>
-	<text_editor name="busy_response">
+	<text_editor name="do_not_disturb_response">
 		log_in_to_change
 	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/tr/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_move.xml b/indra/newview/skins/default/xui/tr/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/tr/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml b/indra/newview/skins/default/xui/tr/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_preferences_sound.xml b/indra/newview/skins/default/xui/tr/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/tr/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_region_covenant.xml b/indra/newview/skins/default/xui/tr/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_region_debug.xml b/indra/newview/skins/default/xui/tr/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_region_environment.xml b/indra/newview/skins/default/xui/tr/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_region_estate.xml b/indra/newview/skins/default/xui/tr/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_region_general.xml b/indra/newview/skins/default/xui/tr/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_region_terrain.xml b/indra/newview/skins/default/xui/tr/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_script_ed.xml b/indra/newview/skins/default/xui/tr/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/tr/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/tr/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_script_question_toast.xml b/indra/newview/skins/default/xui/tr/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_scrolling_param.xml b/indra/newview/skins/default/xui/tr/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/tr/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/tr/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/tr/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_sound_devices.xml b/indra/newview/skins/default/xui/tr/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/tr/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_status_bar.xml b/indra/newview/skins/default/xui/tr/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_teleport_history.xml b/indra/newview/skins/default/xui/tr/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/tr/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_voice_effect.xml b/indra/newview/skins/default/xui/tr/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/tr/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/panel_world_map.xml b/indra/newview/skins/default/xui/tr/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/role_actions.xml b/indra/newview/skins/default/xui/tr/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_appearance.xml b/indra/newview/skins/default/xui/tr/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml b/indra/newview/skins/default/xui/tr/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_item_info.xml b/indra/newview/skins/default/xui/tr/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
old mode 100644
new mode 100755
index b0b9ab77169c0255d46979b8176c1bab9cb9bf7c..9a4cf54fa79ad9c4a71633fd3934da1cda4bf5e1
--- a/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/tr/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="Nesneyi satın al" name="Buyobject"/>
 			<combo_box.item label="Nesneye ödeme yap" name="Payobject"/>
 			<combo_box.item label="Aç" name="Open"/>
+			<combo_box.item label="Yakınlaştır" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/tr/strings.xml b/indra/newview/skins/default/xui/tr/strings.xml
old mode 100644
new mode 100755
index 1be8f5974c700ac3154690eb443dc97f1f9d040c..155dc8749a06518782003e46eb468386c96f4cff
--- a/indra/newview/skins/default/xui/tr/strings.xml
+++ b/indra/newview/skins/default/xui/tr/strings.xml
@@ -137,7 +137,7 @@
 		Çık
 	</string>
 	<string name="create_account_url">
-		http://join.secondlife.com/index.php?lang=tr-TR&amp;sourceid=[sourceid]
+		http://join.secondlife.com/?sourceid=[sourceid]
 	</string>
 	<string name="LoginFailedViewerNotPermitted">
 		Kullandığınız görüntüleyici ile artık Second Life&apos;a erişemezsiniz. Yeni bir görüntüleyiciyi karşıdan yüklemek için lütfen şu sayfayı ziyaret edin:
@@ -619,8 +619,8 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="AvatarAway">
 		Uzakta
 	</string>
-	<string name="AvatarBusy">
-		MeÅŸgul
+	<string name="AvatarDoNotDisturb">
+		Rahatsız Etme
 	</string>
 	<string name="AvatarMuted">
 		EngellenmiÅŸ
@@ -856,6 +856,12 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="ST_NO_JOINT">
 		KÖK veya EKLEM bulunamıyor.
 	</string>
+	<string name="NearbyChatTitle">
+		Yakındaki sohbet
+	</string>
+	<string name="NearbyChatLabel">
+		(Yakındaki sohbet)
+	</string>
 	<string name="whisper">
 		fısıldar:
 	</string>
@@ -919,12 +925,15 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="ControlYourCamera">
 		Kameranızı kontrol etmek
 	</string>
-	<string name="TeleportYourAgent">
-		Sizi ışınlama
-	</string>
 	<string name="NotConnected">
 		Bağlı Değil
 	</string>
+	<string name="AgentNameSubst">
+		(Siz)
+	</string>
+	<string name="TeleportYourAgent">
+		Sizi ışınlama
+	</string>
 	<string name="SIM_ACCESS_PG">
 		Genel
 	</string>
@@ -1006,18 +1015,6 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="dictionary_files">
 		Sözlükler
 	</string>
-	<string name="AvatarSetNotAway">
-		Uzakta DeÄŸil
-	</string>
-	<string name="AvatarSetAway">
-		Uzakta
-	</string>
-	<string name="AvatarSetNotBusy">
-		MeÅŸgul DeÄŸil
-	</string>
-	<string name="AvatarSetBusy">
-		MeÅŸgul
-	</string>
 	<string name="shape">
 		Åžekil
 	</string>
@@ -1986,8 +1983,8 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="PanelContentsNewScript">
 		Yeni Komut Dosyası
 	</string>
-	<string name="BusyModeResponseDefault">
-		İleti gönderdiğiniz Sakin &apos;meşgul modu&apos;nda, bu da rahatsız edilmek istemediği anlamına geliyor.  İletiniz daha sonra incelenmesi için kendisine ait Aİ panelinde gösterilecektir.
+	<string name="DoNotDisturbModeResponseDefault">
+		Bu sakin &quot;Rahatsız Etme&quot; seçeneğini devreye almış, mesajınızı sonra görecek.
 	</string>
 	<string name="MuteByName">
 		(Adına göre)
@@ -2100,9 +2097,6 @@ Lütfen bir dakika içerisinde tekrar oturum açmayı deneyin.
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		İçerik
-	</string>
 	<string name="AcquiredItems">
 		Alınan Öğeler
 	</string>
@@ -3874,7 +3868,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
 		Genel Bölge
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		Bu parselin dışında avatarlar görünür durumda ve sohbete izin veriliyor
+		Bu parselin içindeki avatarlar, bu parselin dışındaki avatarlar tarafından görülemez veya işitilemez
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		Bölge yeniden kaydedilinceye kadar hareket eden nesneler bu bölgede doğru davranmayabilir.
@@ -3951,6 +3945,12 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
 	<string name="IM_unblock_only_groups_friends">
 		Bu mesajı görmek için Tercihler/Gizlilik&apos;de &apos;Sadece arkadaşlar ve gruplar beni arasın veya Aİ göndersin&apos; seçeneğinin işaretini kaldırmalısınız.
 	</string>
+	<string name="OnlineStatus">
+		Çevrimiçi
+	</string>
+	<string name="OfflineStatus">
+		Çevrimdışı
+	</string>
 	<string name="answered_call">
 		Aramanız yanıtlandı
 	</string>
@@ -3960,6 +3960,9 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
 	<string name="you_joined_call">
 		Sesli aramaya katıldınız
 	</string>
+	<string name="you_auto_rejected_call-im">
+		&quot;Rahatsız Etme&quot; seçeneğini devredeyken sesli aramayı otomatik olarak reddettiniz.
+	</string>
 	<string name="name_started_call">
 		[NAME] bir sesli arama başlattı
 	</string>
@@ -3976,7 +3979,7 @@ Bu iletiyi almaya devam ederseniz, lütfen [SUPPORT_SITE] bölümüne başvurun.
 		Bağlanıyor...
 	</string>
 	<string name="conference-title">
-		Özel Konferans
+		Çok kişili sohbet
 	</string>
 	<string name="conference-title-incoming">
 		[AGENT_NAME] ile konferans
@@ -4866,6 +4869,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
 	<string name="Command_Chat_Label">
 		Sohbet
 	</string>
+	<string name="Command_Conversations_Label">
+		Sohbetler
+	</string>
 	<string name="Command_Compass_Label">
 		Pusula
 	</string>
@@ -4941,6 +4947,9 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
 	<string name="Command_Chat_Tooltip">
 		Metin kullanarak yakındaki kişilerle sohbet etmek
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		Herkesle sohbet et
+	</string>
 	<string name="Command_Compass_Tooltip">
 		Pusula
 	</string>
@@ -5070,4 +5079,13 @@ Düzenleyici yolunu çift tırnakla çevrelemeyi deneyin.
 	<string name="UserDictionary">
 		[User]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		Sohbetlerin günlüğü tutulmuyor. Bir günlük tutmaya başlamak için, Tercihler &gt; Sohbet altında &quot;Kaydet: Sadece günlük&quot; veya &quot;Kaydet: Günlük ve dökümler&quot; seçimini yapın.
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		Bundan böyle sohbetlerin günlükleri tutulmayacak. Bir günlük tutmaya devam etmek için, Tercihler &gt; Sohbet altında &quot;Kaydet: Sadece günlük&quot; veya &quot;Kaydet: Günlük ve dökümler&quot; seçimini yapın.
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		Günlüğü tutulmuş sohbet yok. Siz biriyle iletişime geçtikten sonra veya biri sizinle iletişime geçtikten sonra, burada bir günlük girişi gösterilir.
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/tr/teleport_strings.xml b/indra/newview/skins/default/xui/tr/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_aaa.xml b/indra/newview/skins/default/xui/zh/floater_aaa.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_about.xml b/indra/newview/skins/default/xui/zh/floater_about.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_about_land.xml b/indra/newview/skins/default/xui/zh/floater_about_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_activeim.xml b/indra/newview/skins/default/xui/zh/floater_activeim.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_animation_anim_preview.xml b/indra/newview/skins/default/xui/zh/floater_animation_anim_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_animation_bvh_preview.xml b/indra/newview/skins/default/xui/zh/floater_animation_bvh_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_auction.xml b/indra/newview/skins/default/xui/zh/floater_auction.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_autoreplace.xml b/indra/newview/skins/default/xui/zh/floater_autoreplace.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar.xml b/indra/newview/skins/default/xui/zh/floater_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml b/indra/newview/skins/default/xui/zh/floater_avatar_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml b/indra/newview/skins/default/xui/zh/floater_avatar_textures.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_beacons.xml b/indra/newview/skins/default/xui/zh/floater_beacons.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_build_options.xml b/indra/newview/skins/default/xui/zh/floater_build_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml b/indra/newview/skins/default/xui/zh/floater_bulk_perms.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_bumps.xml b/indra/newview/skins/default/xui/zh/floater_bumps.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_contents.xml b/indra/newview/skins/default/xui/zh/floater_buy_contents.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_currency.xml b/indra/newview/skins/default/xui/zh/floater_buy_currency.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_currency_html.xml b/indra/newview/skins/default/xui/zh/floater_buy_currency_html.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_land.xml b/indra/newview/skins/default/xui/zh/floater_buy_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_buy_object.xml b/indra/newview/skins/default/xui/zh/floater_buy_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_camera.xml b/indra/newview/skins/default/xui/zh/floater_camera.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_chat_bar.xml b/indra/newview/skins/default/xui/zh/floater_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_choose_group.xml b/indra/newview/skins/default/xui/zh/floater_choose_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_color_picker.xml b/indra/newview/skins/default/xui/zh/floater_color_picker.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_conversation_log.xml b/indra/newview/skins/default/xui/zh/floater_conversation_log.xml
new file mode 100644
index 0000000000000000000000000000000000000000..37115a0310e59e6f4ae782a3f6c38bfcb4423b74
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_conversation_log.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_conversation_log" title="交談記錄">
+	<panel name="buttons_panel">
+		<filter_editor label="人員過濾器" name="people_filter_input"/>
+		<menu_button name="conversation_view_btn" tool_tip="檢視/排序的選項"/>
+		<menu_button name="conversations_gear_btn" tool_tip="對所選的人或群組採取動作"/>
+	</panel>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_conversation_preview.xml b/indra/newview/skins/default/xui/zh/floater_conversation_preview.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ece263f440d20a0ab56b5bbca5c53014a0891eab
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_conversation_preview.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="preview_conversation" title="交談:">
+	<floater.string name="Title">
+		交談:[NAME]
+	</floater.string>
+	<text name="page_label" value="頁"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_critical.xml b/indra/newview/skins/default/xui/zh/floater_critical.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_delete_env_preset.xml b/indra/newview/skins/default/xui/zh/floater_delete_env_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_destinations.xml b/indra/newview/skins/default/xui/zh/floater_destinations.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_display_name.xml b/indra/newview/skins/default/xui/zh/floater_display_name.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_edit_day_cycle.xml b/indra/newview/skins/default/xui/zh/floater_edit_day_cycle.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_edit_sky_preset.xml b/indra/newview/skins/default/xui/zh/floater_edit_sky_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_edit_water_preset.xml b/indra/newview/skins/default/xui/zh/floater_edit_water_preset.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_environment_settings.xml b/indra/newview/skins/default/xui/zh/floater_environment_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_event.xml b/indra/newview/skins/default/xui/zh/floater_event.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_fast_timers.xml b/indra/newview/skins/default/xui/zh/floater_fast_timers.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_font_test.xml b/indra/newview/skins/default/xui/zh/floater_font_test.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_gesture.xml b/indra/newview/skins/default/xui/zh/floater_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_god_tools.xml b/indra/newview/skins/default/xui/zh/floater_god_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_hardware_settings.xml b/indra/newview/skins/default/xui/zh/floater_hardware_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_help_browser.xml b/indra/newview/skins/default/xui/zh/floater_help_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_how_to.xml b/indra/newview/skins/default/xui/zh/floater_how_to.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_hud.xml b/indra/newview/skins/default/xui/zh/floater_hud.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_im_container.xml b/indra/newview/skins/default/xui/zh/floater_im_container.xml
old mode 100644
new mode 100755
index 2d66c659fe8329a287508b8eae555323e1e94f58..84ad869100c17172886107960119d84d707198ca
--- a/indra/newview/skins/default/xui/zh/floater_im_container.xml
+++ b/indra/newview/skins/default/xui/zh/floater_im_container.xml
@@ -1,2 +1,29 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<multi_floater name="floater_im_box" title="交談"/>
+<multi_floater name="floater_im_box" title="交談">
+	<string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<string name="expand_icon" value="Conv_toolbar_expand"/>
+	<layout_stack name="conversations_stack">
+		<layout_panel name="conversations_layout_panel">
+			<layout_stack name="conversations_pane_buttons_stack">
+				<layout_panel name="conversations_pane_buttons_expanded">
+					<menu_button name="sort_btn" tool_tip="檢視/排序的選項"/>
+					<button name="add_btn" tool_tip="開始新的交談"/>
+					<button name="speak_btn" tool_tip="用麥克風和大家交談"/>
+				</layout_panel>
+				<layout_panel name="conversations_pane_buttons_collapsed">
+					<button name="expand_collapse_btn" tool_tip="縮疊/展開這個清單"/>
+				</layout_panel>
+			</layout_stack>
+		</layout_panel>
+		<layout_panel name="messages_layout_panel">
+			<panel_container name="im_box_tab_container">
+				<panel name="stub_panel">
+					<button name="stub_collapse_btn" tool_tip="縮疊這一區塊"/>
+					<text name="stub_textbox">
+						這個交談另開了新視窗。   [secondlife:/// 把它收回來]
+					</text>
+				</panel>
+			</panel_container>
+		</layout_panel>
+	</layout_stack>
+</multi_floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_im_session.xml b/indra/newview/skins/default/xui/zh/floater_im_session.xml
old mode 100644
new mode 100755
index 808a0b6720d5d500b8dafb4ba9f8642d4287d31a..d63c5507db79470a69b24cb001aad9cedb43d9df
--- a/indra/newview/skins/default/xui/zh/floater_im_session.xml
+++ b/indra/newview/skins/default/xui/zh/floater_im_session.xml
@@ -1,8 +1,59 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <floater name="panel_im">
-	<layout_stack name="im_panels">
-		<layout_panel>
-			<line_editor label="至" name="chat_editor"/>
-		</layout_panel>
-	</layout_stack>
+	<floater.string name="call_btn_start">
+		Conv_toolbar_open_call
+	</floater.string>
+	<floater.string name="call_btn_stop">
+		Conv_toolbar_hang_up
+	</floater.string>
+	<floater.string name="collapseline_icon" value="Conv_collapse_to_one_line"/>
+	<floater.string name="expandline_icon" value="Conv_expand_one_line"/>
+	<floater.string name="collapse_icon" value="Conv_toolbar_collapse"/>
+	<floater.string name="expand_icon" value="Conv_toolbar_expand"/>
+	<floater.string name="tear_off_icon" value="Conv_toolbar_arrow_ne"/>
+	<floater.string name="return_icon" value="Conv_toolbar_arrow_sw"/>
+	<floater.string name="participant_added" value="[NAME] 已受邀加入交談。"/>
+	<floater.string name="multiple_participants_added" value="[NAME] 已受邀加入交談。"/>
+	<floater.string name="tooltip_to_separate_window" value="為這個交談另開新視窗"/>
+	<floater.string name="tooltip_to_main_window" value="將這個交談移回到主視窗"/>
+	<floater.string name="start_call_button_tooltip" value="建立語音通聯"/>
+	<floater.string name="end_call_button_tooltip" value="切斷語音通聯"/>
+	<floater.string name="expcol_button_not_tearoff_tooltip" value="縮疊這一區塊"/>
+	<floater.string name="expcol_button_tearoff_and_expanded_tooltip" value="縮疊參與者清單"/>
+	<floater.string name="expcol_button_tearoff_and_collapsed_tooltip" value="展開參與者清單"/>
+	<view name="contents_view">
+		<layout_stack name="main_stack">
+			<layout_panel name="toolbar_panel">
+				<menu_button name="view_options_btn" tool_tip="檢視/排序的選項"/>
+				<menu_button name="gear_btn" tool_tip="對選取的人採取動作"/>
+				<button name="add_btn" tool_tip="新增某人到這個交談"/>
+				<button name="voice_call_btn" tool_tip="建立語音通聯"/>
+				<button name="close_btn" tool_tip="結束這個交談"/>
+				<button name="expand_collapse_btn" tool_tip="縮疊/展開這個框"/>
+			</layout_panel>
+			<layout_panel name="body_panel">
+				<layout_stack name="im_panels">
+					<layout_panel name="right_part_holder">
+						<panel name="trnsAndChat_panel">
+							<layout_stack name="translate_and_chat_stack">
+								<layout_panel name="translate_chat_checkbox_lp">
+									<check_box label="翻譯聊天內容" name="translate_chat_checkbox"/>
+								</layout_panel>
+							</layout_stack>
+						</panel>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+			<layout_panel name="chat_layout_panel">
+				<layout_stack name="input_panels">
+					<layout_panel name="input_editor_layout_panel">
+						<chat_editor label="至" name="chat_editor"/>
+					</layout_panel>
+					<layout_panel name="input_button_layout_panel">
+						<button name="minz_btn" tool_tip="顯示/隱藏訊息框"/>
+					</layout_panel>
+				</layout_stack>
+			</layout_panel>
+		</layout_stack>
+	</view>
 </floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_image_preview.xml b/indra/newview/skins/default/xui/zh/floater_image_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_import_collada.xml b/indra/newview/skins/default/xui/zh/floater_import_collada.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_incoming_call.xml b/indra/newview/skins/default/xui/zh/floater_incoming_call.xml
old mode 100644
new mode 100755
index 45a003d3c8823cf11f48790bb257704f7d1d67be..4526eff21d8f9ade106ee5fe73de8cb1742bb156
--- a/indra/newview/skins/default/xui/zh/floater_incoming_call.xml
+++ b/indra/newview/skins/default/xui/zh/floater_incoming_call.xml
@@ -25,9 +25,9 @@
 		是否離開 [CURRENT_CHAT] 並加入這個語音聊天?
 	</floater.string>
 	<text name="question">
-		是否離開 [CURRENT_CHAT] 並加入這個語音聊天?
+		如果接聽,你將切斷目前的語音交談。
 	</text>
-	<button label="接受" label_selected="接受" name="Accept"/>
-	<button label="拒絕" label_selected="拒絕" name="Reject"/>
-	<button label="é–‹å§‹ IM" name="Start IM"/>
+	<button label="接聽" label_selected="接聽" name="Accept"/>
+	<button label="忽視" label_selected="忽視" name="Reject"/>
+	<button label="不接聽但開啟 IM" name="Start IM"/>
 </floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_inspect.xml b/indra/newview/skins/default/xui/zh/floater_inspect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml b/indra/newview/skins/default/xui/zh/floater_inventory_item_properties.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml b/indra/newview/skins/default/xui/zh/floater_inventory_view_finder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_joystick.xml b/indra/newview/skins/default/xui/zh/floater_joystick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_lagmeter.xml b/indra/newview/skins/default/xui/zh/floater_lagmeter.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_land_holdings.xml b/indra/newview/skins/default/xui/zh/floater_land_holdings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml b/indra/newview/skins/default/xui/zh/floater_live_lsleditor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_lsl_guide.xml b/indra/newview/skins/default/xui/zh/floater_lsl_guide.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_map.xml b/indra/newview/skins/default/xui/zh/floater_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_media_browser.xml b/indra/newview/skins/default/xui/zh/floater_media_browser.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_media_settings.xml b/indra/newview/skins/default/xui/zh/floater_media_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_mem_leaking.xml b/indra/newview/skins/default/xui/zh/floater_mem_leaking.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_merchant_outbox.xml b/indra/newview/skins/default/xui/zh/floater_merchant_outbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_model_preview.xml b/indra/newview/skins/default/xui/zh/floater_model_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_moveview.xml b/indra/newview/skins/default/xui/zh/floater_moveview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_mute_object.xml b/indra/newview/skins/default/xui/zh/floater_mute_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_my_appearance.xml b/indra/newview/skins/default/xui/zh/floater_my_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_my_inventory.xml b/indra/newview/skins/default/xui/zh/floater_my_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_notification.xml b/indra/newview/skins/default/xui/zh/floater_notification.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_notifications_console.xml b/indra/newview/skins/default/xui/zh/floater_notifications_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_object_weights.xml b/indra/newview/skins/default/xui/zh/floater_object_weights.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_openobject.xml b/indra/newview/skins/default/xui/zh/floater_openobject.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml b/indra/newview/skins/default/xui/zh/floater_outfit_save_as.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml b/indra/newview/skins/default/xui/zh/floater_outgoing_call.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_pathfinding_characters.xml b/indra/newview/skins/default/xui/zh/floater_pathfinding_characters.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml b/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml
old mode 100644
new mode 100755
index be009b54d88e38a44ad18deac2a6b52f8d051163..d0978b8b0101b68b244d293f2d0281438be03606
--- a/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml
+++ b/indra/newview/skins/default/xui/zh/floater_pathfinding_console.xml
@@ -71,7 +71,7 @@
 			<text name="show_label">
 				顯示:
 			</text>
-			<check_box label="世界" name="show_world"/>
+			<check_box label="測試" name="show_world"/>
 			<check_box label="僅限可移動的" name="show_world_movables_only"/>
 			<check_box label="導航網面" name="show_navmesh"/>
 			<text name="show_walkability_label">
diff --git a/indra/newview/skins/default/xui/zh/floater_pathfinding_linksets.xml b/indra/newview/skins/default/xui/zh/floater_pathfinding_linksets.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_pay.xml b/indra/newview/skins/default/xui/zh/floater_pay.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_pay_object.xml b/indra/newview/skins/default/xui/zh/floater_pay_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_people.xml b/indra/newview/skins/default/xui/zh/floater_people.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml b/indra/newview/skins/default/xui/zh/floater_perm_prefs.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_picks.xml b/indra/newview/skins/default/xui/zh/floater_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_places.xml b/indra/newview/skins/default/xui/zh/floater_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_post_process.xml b/indra/newview/skins/default/xui/zh/floater_post_process.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preferences.xml b/indra/newview/skins/default/xui/zh/floater_preferences.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preferences_proxy.xml b/indra/newview/skins/default/xui/zh/floater_preferences_proxy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_animation.xml b/indra/newview/skins/default/xui/zh/floater_preview_animation.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml b/indra/newview/skins/default/xui/zh/floater_preview_gesture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml b/indra/newview/skins/default/xui/zh/floater_preview_notecard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_sound.xml b/indra/newview/skins/default/xui/zh/floater_preview_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_preview_texture.xml b/indra/newview/skins/default/xui/zh/floater_preview_texture.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_price_for_listing.xml b/indra/newview/skins/default/xui/zh/floater_price_for_listing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_publish_classified.xml b/indra/newview/skins/default/xui/zh/floater_publish_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml b/indra/newview/skins/default/xui/zh/floater_region_debug_console.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_region_info.xml b/indra/newview/skins/default/xui/zh/floater_region_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_report_abuse.xml b/indra/newview/skins/default/xui/zh/floater_report_abuse.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_script_debug.xml b/indra/newview/skins/default/xui/zh/floater_script_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_script_debug_panel.xml b/indra/newview/skins/default/xui/zh/floater_script_debug_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_script_limits.xml b/indra/newview/skins/default/xui/zh/floater_script_limits.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_script_preview.xml b/indra/newview/skins/default/xui/zh/floater_script_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_script_queue.xml b/indra/newview/skins/default/xui/zh/floater_script_queue.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_script_search.xml b/indra/newview/skins/default/xui/zh/floater_script_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_search.xml b/indra/newview/skins/default/xui/zh/floater_search.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_select_key.xml b/indra/newview/skins/default/xui/zh/floater_select_key.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_sell_land.xml b/indra/newview/skins/default/xui/zh/floater_sell_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_settings_debug.xml b/indra/newview/skins/default/xui/zh/floater_settings_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_snapshot.xml b/indra/newview/skins/default/xui/zh/floater_snapshot.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_sound_devices.xml b/indra/newview/skins/default/xui/zh/floater_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_sound_preview.xml b/indra/newview/skins/default/xui/zh/floater_sound_preview.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_spellcheck.xml b/indra/newview/skins/default/xui/zh/floater_spellcheck.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_spellcheck_import.xml b/indra/newview/skins/default/xui/zh/floater_spellcheck_import.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_stats.xml b/indra/newview/skins/default/xui/zh/floater_stats.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_sys_well.xml b/indra/newview/skins/default/xui/zh/floater_sys_well.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_telehub.xml b/indra/newview/skins/default/xui/zh/floater_telehub.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_test_layout_stacks.xml b/indra/newview/skins/default/xui/zh/floater_test_layout_stacks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_test_text_vertical_aligment.xml b/indra/newview/skins/default/xui/zh/floater_test_text_vertical_aligment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml b/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml
old mode 100644
new mode 100755
index e909a67e2c6661687665b5160ce5e5f76fdeb211..02d06323d47d3721db1ddecbcefedde002438c73
--- a/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml
+++ b/indra/newview/skins/default/xui/zh/floater_texture_ctrl.xml
@@ -19,7 +19,7 @@
 	<button label="預設" label_selected="預設" name="Default"/>
 	<button label="空白" label_selected="空白" name="Blank"/>
 	<button label="ç„¡" label_selected="ç„¡" name="None"/>
-	<check_box initial_value="true" label="實時預覽" name="apply_immediate_check"/>
+	<check_box initial_value="true" label="立即套用" name="apply_immediate_check"/>
 	<text name="preview_disabled" value="已停用預覽"/>
 	<filter_editor label="材質過濾器" name="inventory search editor"/>
 	<check_box initial_value="false" label="顯示資料夾" name="show_folders_check"/>
diff --git a/indra/newview/skins/default/xui/zh/floater_texture_fetch_debugger.xml b/indra/newview/skins/default/xui/zh/floater_texture_fetch_debugger.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_tools.xml b/indra/newview/skins/default/xui/zh/floater_tools.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_top_objects.xml b/indra/newview/skins/default/xui/zh/floater_top_objects.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_tos.xml b/indra/newview/skins/default/xui/zh/floater_tos.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_toybox.xml b/indra/newview/skins/default/xui/zh/floater_toybox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_translation_settings.xml b/indra/newview/skins/default/xui/zh/floater_translation_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_url_entry.xml b/indra/newview/skins/default/xui/zh/floater_url_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_chat_volume.xml b/indra/newview/skins/default/xui/zh/floater_voice_chat_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..96caa7d3334f30d479874666cc760c47f26569c3
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_voice_chat_volume.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<floater name="floater_voice_volume" title="語音聊天音量">
+	<slider label="語音聊天" name="chat_voice_volume"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_controls.xml b/indra/newview/skins/default/xui/zh/floater_voice_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_effect.xml b/indra/newview/skins/default/xui/zh/floater_voice_effect.xml
old mode 100644
new mode 100755
index 81e0204262e185a5f3085e479b85e54385aa734e..aab5fa602890725a395728a420157acb64288aba
--- a/indra/newview/skins/default/xui/zh/floater_voice_effect.xml
+++ b/indra/newview/skins/default/xui/zh/floater_voice_effect.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
-<floater label="地點" name="voice_effects" title="語音變聲">
+<floater label="地點" name="voice_effects" title="語音變聲試聽">
 	<string name="no_voice_effect">
 		(無變聲效果)
 	</string>
diff --git a/indra/newview/skins/default/xui/zh/floater_voice_volume.xml b/indra/newview/skins/default/xui/zh/floater_voice_volume.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4260a8d3314ddbbaba15bb01255319c4319f64d1
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/floater_voice_volume.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<!--
+  Not can_close / no title to avoid window chrome
+  Single instance - only have one at a time, recycle it each spawn
+-->
+<floater name="floater_voice_volume" title="音量">
+	<slider name="volume_slider" tool_tip="音量" value="0.5"/>
+</floater>
diff --git a/indra/newview/skins/default/xui/zh/floater_web_content.xml b/indra/newview/skins/default/xui/zh/floater_web_content.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml b/indra/newview/skins/default/xui/zh/floater_whitelist_entry.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_window_size.xml b/indra/newview/skins/default/xui/zh/floater_window_size.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/floater_world_map.xml b/indra/newview/skins/default/xui/zh/floater_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/inspect_avatar.xml b/indra/newview/skins/default/xui/zh/inspect_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/inspect_group.xml b/indra/newview/skins/default/xui/zh/inspect_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/inspect_object.xml b/indra/newview/skins/default/xui/zh/inspect_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/inspect_remote_object.xml b/indra/newview/skins/default/xui/zh/inspect_remote_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_add_wearable_gear.xml b/indra/newview/skins/default/xui/zh/menu_add_wearable_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_other.xml b/indra/newview/skins/default/xui/zh/menu_attachment_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_attachment_self.xml b/indra/newview/skins/default/xui/zh/menu_attachment_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml b/indra/newview/skins/default/xui/zh/menu_avatar_icon.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_other.xml b/indra/newview/skins/default/xui/zh/menu_avatar_other.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_avatar_self.xml b/indra/newview/skins/default/xui/zh/menu_avatar_self.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_cof_attachment.xml b/indra/newview/skins/default/xui/zh/menu_cof_attachment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_cof_body_part.xml b/indra/newview/skins/default/xui/zh/menu_cof_body_part.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_cof_clothing.xml b/indra/newview/skins/default/xui/zh/menu_cof_clothing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_cof_gear.xml b/indra/newview/skins/default/xui/zh/menu_cof_gear.xml
old mode 100644
new mode 100755
index cd069f96017af11dbac2774059a827b7a467683e..eb7093a23c90759801b0ff14a0fdc5dc261d71b6
--- a/indra/newview/skins/default/xui/zh/menu_cof_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_cof_gear.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <toggleable_menu name="Gear COF">
 	<menu label="新衣服" name="COF.Gear.New_Clothes"/>
-	<menu label="新身體部位" name="COF.Geear.New_Body_Parts"/>
+	<menu label="新身體部位" name="COF.Gear.New_Body_Parts"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_conversation.xml b/indra/newview/skins/default/xui/zh/menu_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..507255d0c0426f11bcdb7348faa5f46810d3bf7b
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_conversation.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_participant">
+	<menu_item_call label="關閉交談" name="close_conversation"/>
+	<menu_item_call label="開啟語音交談" name="open_voice_conversation"/>
+	<menu_item_call label="切斷語音交談" name="disconnect_from_voice"/>
+	<menu_item_call label="察看檔案" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="發出瞬間傳送邀請" name="offer_teleport"/>
+	<menu_item_call label="語音通話" name="voice_call"/>
+	<menu_item_call label="聊天歷史……" name="chat_history"/>
+	<menu_item_call label="新增朋友" name="add_friend"/>
+	<menu_item_call label="移除朋友" name="remove_friend"/>
+	<menu_item_call label="移除朋友" name="remove_friends"/>
+	<menu_item_call label="邀請加入群組……" name="invite_to_group"/>
+	<menu_item_call label="放大" name="zoom_in"/>
+	<menu_item_call label="地圖" name="map"/>
+	<menu_item_call label="分享" name="share"/>
+	<menu_item_call label="支付" name="pay"/>
+	<menu_item_check label="禁止語音" name="block_unblock"/>
+	<menu_item_check label="禁止文字" name="MuteText"/>
+	<menu_item_call label="群組檔案" name="group_profile"/>
+	<menu_item_call label="啟用群組" name="activate_group"/>
+	<menu_item_call label="離開群組" name="leave_group"/>
+	<context_menu label="主持人選項" name="Moderator Options">
+		<menu_item_check label="允許文字聊天" name="AllowTextChat"/>
+		<menu_item_call label="將此人消音" name="ModerateVoiceMuteSelected"/>
+		<menu_item_call label="取消對此人的消音" name="ModerateVoiceUnMuteSelected"/>
+		<menu_item_call label="所有人消音" name="ModerateVoiceMute"/>
+		<menu_item_call label="取消所有人的消音" name="ModerateVoiceUnmute"/>
+	</context_menu>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_conversation_log_gear.xml b/indra/newview/skins/default/xui/zh/menu_conversation_log_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..49e91417e894a21ae5d0baa0896d9b4ebe705a14
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_conversation_log_gear.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Context Menu">
+	<menu_item_call label="IM…" name="IM"/>
+	<menu_item_call label="語音通話…" name="Call"/>
+	<menu_item_call label="開啟聊天歷史…" name="Chat history"/>
+	<menu_item_call label="察看檔案" name="View Profile"/>
+	<menu_item_call label="發給瞬間傳送請求" name="teleport"/>
+	<menu_item_call label="加為朋友" name="add_friend"/>
+	<menu_item_call label="移除朋友" name="remove_friend"/>
+	<menu_item_call label="邀請加入群組……" name="Invite"/>
+	<menu_item_call label="地圖" name="Map"/>
+	<menu_item_call label="分享" name="Share"/>
+	<menu_item_call label="支付" name="Pay"/>
+	<menu_item_check label="封鎖/不再封鎖" name="Block/Unblock"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_conversation_log_view.xml b/indra/newview/skins/default/xui/zh/menu_conversation_log_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3fa99a5cd7b939f361a7cef10795dc3b2a882c14
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_conversation_log_view.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_conversation_view">
+	<menu_item_check label="依名稱排序" name="sort_by_name"/>
+	<menu_item_check label="依日期排序" name="sort_by_date"/>
+	<menu_item_check label="將朋友列在頂端" name="sort_by_friends"/>
+	<menu_item_call label="檢視附近聊天歷史……" name="view_nearby_chat_history"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_edit.xml b/indra/newview/skins/default/xui/zh/menu_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_favorites.xml b/indra/newview/skins/default/xui/zh/menu_favorites.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml b/indra/newview/skins/default/xui/zh/menu_gesture_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_group_plus.xml b/indra/newview/skins/default/xui/zh/menu_group_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_hide_navbar.xml b/indra/newview/skins/default/xui/zh/menu_hide_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_im_conversation.xml b/indra/newview/skins/default/xui/zh/menu_im_conversation.xml
new file mode 100644
index 0000000000000000000000000000000000000000..815b0b594ccae988a7f629747da2cfdc0f67811a
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_im_conversation.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="Conversation Gear Menu">
+	<menu_item_call label="察看檔案" name="View Profile"/>
+	<menu_item_call label="加為朋友" name="Add Friend"/>
+	<menu_item_call label="移除朋友" name="remove_friend"/>
+	<menu_item_call label="發出瞬間傳送邀請" name="offer_teleport"/>
+	<menu_item_call label="邀請加入群組……" name="invite_to_group"/>
+	<menu_item_call label="聊天歷史……" name="chat_history"/>
+	<menu_item_call label="放大" name="zoom_in"/>
+	<menu_item_call label="地圖" name="map"/>
+	<menu_item_call label="分享" name="Share"/>
+	<menu_item_call label="支付" name="Pay"/>
+	<menu_item_check label="禁止語音" name="Block/Unblock"/>
+	<menu_item_check label="禁止文字" name="MuteText"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_im_session_showmodes.xml b/indra/newview/skins/default/xui/zh/menu_im_session_showmodes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a7006e524a3f1b51e45b262388c1baf78725de88
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_im_session_showmodes.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_modes">
+	<menu_item_check label="精簡視野" name="compact_view"/>
+	<menu_item_check label="全展視野" name="expanded_view"/>
+	<menu_item_check label="顯示時間" name="IMShowTime"/>
+	<menu_item_check label="一對一交談時顯示名字" name="IMShowNamesForP2PConv"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_adhoc.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_adhoc.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml b/indra/newview/skins/default/xui/zh/menu_imchiclet_p2p.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_avatar_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_object_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml b/indra/newview/skins/default/xui/zh/menu_inspect_self_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inv_offer_chiclet.xml b/indra/newview/skins/default/xui/zh/menu_inv_offer_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory.xml b/indra/newview/skins/default/xui/zh/menu_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_add.xml b/indra/newview/skins/default/xui/zh/menu_inventory_add.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/menu_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_land.xml b/indra/newview/skins/default/xui/zh/menu_land.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_landmark.xml b/indra/newview/skins/default/xui/zh/menu_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_login.xml b/indra/newview/skins/default/xui/zh/menu_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_media_ctrl.xml b/indra/newview/skins/default/xui/zh/menu_media_ctrl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_mini_map.xml b/indra/newview/skins/default/xui/zh/menu_mini_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_model_import_gear_default.xml b/indra/newview/skins/default/xui/zh/menu_model_import_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_navbar.xml b/indra/newview/skins/default/xui/zh/menu_navbar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml b/indra/newview/skins/default/xui/zh/menu_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_notification_well_button.xml b/indra/newview/skins/default/xui/zh/menu_notification_well_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_object.xml b/indra/newview/skins/default/xui/zh/menu_object.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_object_icon.xml b/indra/newview/skins/default/xui/zh/menu_object_icon.xml
old mode 100644
new mode 100755
index f4f93b0bdc21ded6d5457aaa1cb8d7a5bad071c5..9655732f2e06449069361605ec4a54dda30fb860
--- a/indra/newview/skins/default/xui/zh/menu_object_icon.xml
+++ b/indra/newview/skins/default/xui/zh/menu_object_icon.xml
@@ -2,4 +2,6 @@
 <menu name="Object Icon Menu">
 	<menu_item_call label="物件檔案..." name="Object Profile"/>
 	<menu_item_call label="封鎖…" name="Block"/>
+	<menu_item_call label="顯示在地圖上" name="show_on_map"/>
+	<menu_item_call label="瞬間傳送到物件位置" name="teleport_to_object"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
old mode 100644
new mode 100755
index e85b4b71821347865c3236c7446a4bd060e2c945..258d0d6b20e934f324c74c89caaab856132e8ad3
--- a/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
+++ b/indra/newview/skins/default/xui/zh/menu_outfit_gear.xml
@@ -23,6 +23,8 @@
 		<menu_item_call label="æ–°é ­é«®" name="New Hair"/>
 		<menu_item_call label="新眼睛" name="New Eyes"/>
 	</menu>
+	<menu_item_call label="展開全部資料夾" name="expand"/>
+	<menu_item_call label="摺疊全部資料夾" name="collapse"/>
 	<menu_item_call label="裝扮更名" name="rename"/>
 	<menu_item_call label="刪除裝扮" name="delete_outfit"/>
 </toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_outfit_tab.xml b/indra/newview/skins/default/xui/zh/menu_outfit_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_participant_list.xml b/indra/newview/skins/default/xui/zh/menu_participant_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_participant_view.xml b/indra/newview/skins/default/xui/zh/menu_participant_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8b35860eb607660d967824a898bc33b29029ec88
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_participant_view.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="participant_manu_view">
+	<menu_item_check label="將交談依類型排序" name="sort_sessions_by_type"/>
+	<menu_item_check label="將交談依名字排序" name="sort_sessions_by_name"/>
+	<menu_item_check label="將交談依最近活動排序" name="sort_sessions_by_recent"/>
+	<menu_item_check label="將參與者依名字排序" name="sort_participants_by_name"/>
+	<menu_item_check label="將參與者依最近活動排序" name="sort_participants_by_recent"/>
+	<menu_item_call label="聊天偏好設定……" name="chat_preferences"/>
+	<menu_item_call label="隱私偏好設定……" name="privacy_preferences"/>
+	<menu_item_check label="交談記錄……" name="Conversation"/>
+	<menu_item_check label="翻譯附近的聊天" name="Translate_chat"/>
+	<menu_item_check label="翻譯設定……" name="Translation_settings"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml b/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9a2a3c403d5a9ebb79e3dd16d1d66d475eafa121
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_blocked_gear.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_gear">
+	<menu_item_call label="解除封鎖" name="unblock"/>
+	<menu_item_call label="檔案..." name="profile"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_blocked_plus.xml b/indra/newview/skins/default/xui/zh/menu_people_blocked_plus.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a8cecb4e147f25a09d003926611bc742c53ac219
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_blocked_plus.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_plus">
+	<menu_item_call label="按名字封鎖居民……" name="block_resident_by_name"/>
+	<menu_item_call label="依名稱封鎖物件" name="block_object_by_name"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_blocked_view.xml b/indra/newview/skins/default/xui/zh/menu_people_blocked_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5b70cd35bffebfa6f039645fa3a7ed12061eb5ed
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_blocked_view.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_blocked_view">
+	<menu_item_check label="依名稱排序" name="sort_by_name"/>
+	<menu_item_check label="依類型排序" name="sort_by_type"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_friends_view.xml b/indra/newview/skins/default/xui/zh/menu_people_friends_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4251238fd95f8791449a97f688addffca95a5a53
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_friends_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="依名稱排序" name="sort_name"/>
+	<menu_item_check label="依狀態排序" name="sort_status"/>
+	<menu_item_check label="察看人群圖示" name="view_icons"/>
+	<menu_item_check label="察看許可權限" name="view_permissions"/>
+	<menu_item_check label="檢視交談記錄……" name="view_conversation"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_friends_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups.xml b/indra/newview/skins/default/xui/zh/menu_people_groups.xml
old mode 100644
new mode 100755
index 5768c554c9ce7124b01949067e3cfcee4c3e0c86..b4b566f5caec272cac740ccc24c7570d129278cf
--- a/indra/newview/skins/default/xui/zh/menu_people_groups.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_groups.xml
@@ -2,7 +2,7 @@
 <menu name="menu_group_plus">
 	<menu_item_call label="察看資訊" name="View Info"/>
 	<menu_item_call label="聊天" name="Chat"/>
-	<menu_item_call label="通話" name="Call"/>
+	<menu_item_call label="語音通話" name="Call"/>
 	<menu_item_call label="啟動" name="Activate"/>
 	<menu_item_call label="退出" name="Leave"/>
 </menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..05a30d938f2b3d398e29388362cd3878f47a6d9c
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_groups_view.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="顯示群組圖示" name="Display Group Icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_groups_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
old mode 100644
new mode 100755
index 38d5f3d324708eb72fa7da1f4a6990d51950c3c9..d25adaf8fb5cb673ab405b7272e09a823bd299ec
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby.xml
@@ -1,13 +1,16 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Avatar Context Menu">
-	<menu_item_call label="察看檔案" name="View Profile"/>
-	<menu_item_call label="加為朋友" name="Add Friend"/>
-	<menu_item_call label="移除朋友" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="通話" name="Call"/>
-	<menu_item_call label="地圖" name="Map"/>
-	<menu_item_call label="分享" name="Share"/>
-	<menu_item_call label="支付" name="Pay"/>
-	<menu_item_check label="封鎖/不再封鎖" name="Block/Unblock"/>
-	<menu_item_call label="發給瞬間傳送請求" name="teleport"/>
+	<menu_item_call label="察看檔案" name="view_profile"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="發給瞬間傳送請求" name="offer_teleport"/>
+	<menu_item_call label="語音通話" name="voice_call"/>
+	<menu_item_call label="檢視聊天歷史……" name="chat_history"/>
+	<menu_item_call label="加為朋友" name="add_friend"/>
+	<menu_item_call label="移除朋友" name="remove_friend"/>
+	<menu_item_call label="邀請加入群組……" name="invite_to_group"/>
+	<menu_item_call label="放大" name="zoom_in"/>
+	<menu_item_call label="地圖" name="map"/>
+	<menu_item_call label="分享" name="share"/>
+	<menu_item_call label="支付" name="pay"/>
+	<menu_item_check label="封鎖/不再封鎖" name="block_unblock"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
old mode 100644
new mode 100755
index 1380e0b307cb71f275a9a3502d06590ac0cf8f6d..69f0eab7dc9c2471a4d05ad990ede06ef23563d5
--- a/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_multiselect.xml
@@ -1,10 +1,10 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Multi-Selected People Context Menu">
-	<menu_item_call label="加為朋友" name="Add Friends"/>
-	<menu_item_call label="移除朋友" name="Remove Friend"/>
-	<menu_item_call label="IM" name="IM"/>
-	<menu_item_call label="通話" name="Call"/>
-	<menu_item_call label="分享" name="Share"/>
-	<menu_item_call label="支付" name="Pay"/>
-	<menu_item_call label="發給瞬間傳送請求" name="teleport"/>
+	<menu_item_call label="加為朋友" name="add_friends"/>
+	<menu_item_call label="移除朋友" name="remove_friends"/>
+	<menu_item_call label="IM" name="im"/>
+	<menu_item_call label="通話" name="call"/>
+	<menu_item_call label="分享" name="share"/>
+	<menu_item_call label="支付" name="pay"/>
+	<menu_item_call label="發給瞬間傳送請求" name="offer_teleport"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_view.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9bc56384726b26454c0fca498263cadcbb2c655a
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_nearby_view.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="依最近說話者排序" name="sort_by_recent_speakers"/>
+	<menu_item_check label="依名稱排序" name="sort_name"/>
+	<menu_item_check label="依距離排序" name="sort_distance"/>
+	<menu_item_check label="察看人群圖示" name="view_icons"/>
+	<menu_item_check label="察看地圖" name="view_map"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_nearby_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_people_recent_view.xml b/indra/newview/skins/default/xui/zh/menu_people_recent_view.xml
new file mode 100644
index 0000000000000000000000000000000000000000..382234c3ecf9258bcd5b65fcc4611eace79901fb
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/menu_people_recent_view.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<toggleable_menu name="menu_group_plus">
+	<menu_item_check label="依最近排序" name="sort_most"/>
+	<menu_item_check label="依名稱排序" name="sort_name"/>
+	<menu_item_check label="察看人群圖示" name="view_icons"/>
+</toggleable_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml b/indra/newview/skins/default/xui/zh/menu_people_recent_view_sort.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_picks.xml b/indra/newview/skins/default/xui/zh/menu_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_picks_plus.xml b/indra/newview/skins/default/xui/zh/menu_picks_plus.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_place.xml b/indra/newview/skins/default/xui/zh/menu_place.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_place_add_button.xml b/indra/newview/skins/default/xui/zh/menu_place_add_button.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml b/indra/newview/skins/default/xui/zh/menu_places_gear_folder.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_places_gear_landmark.xml b/indra/newview/skins/default/xui/zh/menu_places_gear_landmark.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_profile_overflow.xml b/indra/newview/skins/default/xui/zh/menu_profile_overflow.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_save_outfit.xml b/indra/newview/skins/default/xui/zh/menu_save_outfit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_script_chiclet.xml b/indra/newview/skins/default/xui/zh/menu_script_chiclet.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_slurl.xml b/indra/newview/skins/default/xui/zh/menu_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_gear.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml b/indra/newview/skins/default/xui/zh/menu_teleport_history_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_text_editor.xml b/indra/newview/skins/default/xui/zh/menu_text_editor.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_toolbars.xml b/indra/newview/skins/default/xui/zh/menu_toolbars.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_topinfobar.xml b/indra/newview/skins/default/xui/zh/menu_topinfobar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_agent.xml b/indra/newview/skins/default/xui/zh/menu_url_agent.xml
old mode 100644
new mode 100755
index 592bb6561e9f4bab2a98eaf05bec691be7d6049d..72629822d4bcb5ae29b6e206f2035ad5eba6fea6
--- a/indra/newview/skins/default/xui/zh/menu_url_agent.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_agent.xml
@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="顯示居民檔案" name="show_agent"/>
+	<menu_item_call label="察看檔案" name="show_agent"/>
+	<menu_item_call label="送出 IM..." name="send_im"/>
+	<menu_item_call label="加為朋友..." name="add_friend"/>
 	<menu_item_call label="覆製名稱到剪貼簿" name="url_copy_label"/>
 	<menu_item_call label="覆製 SLurl 到剪貼簿" name="url_copy"/>
 </context_menu>
diff --git a/indra/newview/skins/default/xui/zh/menu_url_group.xml b/indra/newview/skins/default/xui/zh/menu_url_group.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_http.xml b/indra/newview/skins/default/xui/zh/menu_url_http.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_inventory.xml b/indra/newview/skins/default/xui/zh/menu_url_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_map.xml b/indra/newview/skins/default/xui/zh/menu_url_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
old mode 100644
new mode 100755
index b344b21c62f56dd0886a5227e95169d4250ea6c1..9f3a9d58ffdc201c53d1d81cdde74a84d5031938
--- a/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
+++ b/indra/newview/skins/default/xui/zh/menu_url_objectim.xml
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <context_menu name="Url Popup">
-	<menu_item_call label="顯示物件資訊" name="show_object"/>
+	<menu_item_call label="物件檔案..." name="show_object"/>
 	<menu_item_call label="顯示在地圖上" name="show_on_map"/>
 	<menu_item_call label="瞬間傳送到物件位置" name="teleport_to_object"/>
 	<menu_item_call label="覆製物件名稱到剪貼簿" name="url_copy_label"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_url_parcel.xml b/indra/newview/skins/default/xui/zh/menu_url_parcel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_slapp.xml b/indra/newview/skins/default/xui/zh/menu_url_slapp.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_slurl.xml b/indra/newview/skins/default/xui/zh/menu_url_slurl.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_url_teleport.xml b/indra/newview/skins/default/xui/zh/menu_url_teleport.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_viewer.xml b/indra/newview/skins/default/xui/zh/menu_viewer.xml
old mode 100644
new mode 100755
index ac0e9e7e358e19c75d4ace097724b013b3cd8147..d4844b191b5f5e19c2e53d1775a2c680b40731b5
--- a/indra/newview/skins/default/xui/zh/menu_viewer.xml
+++ b/indra/newview/skins/default/xui/zh/menu_viewer.xml
@@ -16,10 +16,7 @@
 			<menu_item_call label="停止我身上的動作" name="Stop Animating My Avatar"/>
 			<menu_item_call label="行走 / 跑步 / 飛行…" name="Walk / run / fly"/>
 		</menu>
-		<menu label="狀態" name="Status">
-			<menu_item_call label="離開" name="Set Away"/>
-			<menu_item_call label="忙碌" name="Set Busy"/>
-		</menu>
+		<menu label="狀態" name="Status"/>
 		<menu_item_call label="購買 L$…" name="Buy and Sell L$"/>
 		<menu_item_call label="商家發件匣…" name="MerchantOutbox"/>
 		<menu_item_call label="帳戶主控臺…" name="Manage My Account"/>
@@ -30,14 +27,18 @@
 		<menu_item_call label="退出 [APP_NAME]" name="Quit"/>
 	</menu>
 	<menu label="溝通" name="Communicate">
-		<menu_item_check label="聊天…" name="Nearby Chat"/>
+		<menu_item_check label="交談……" name="Conversations"/>
+		<menu_item_check label="附近的聊天……" name="Nearby Chat"/>
 		<menu_item_check label="說話" name="Speak"/>
-		<menu_item_check label="語音設定…" name="Nearby Voice"/>
-		<menu_item_check label="語音變聲…" name="ShowVoice"/>
+		<menu label="語音變聲" name="VoiceMorphing">
+			<menu_item_check label="沒有變聲效果" name="NoVoiceMorphing"/>
+			<menu_item_check label="預覽……" name="Preview"/>
+			<menu_item_call label="訂閱……" name="Subscribe"/>
+		</menu>
 		<menu_item_check label="姿勢…" name="Gestures"/>
-		<menu_item_call label="朋友" name="My Friends"/>
-		<menu_item_call label="群組" name="My Groups"/>
-		<menu_item_call label="附近的人群" name="Active Speakers"/>
+		<menu_item_check label="朋友" name="My Friends"/>
+		<menu_item_check label="群組" name="My Groups"/>
+		<menu_item_check label="附近的人群" name="Active Speakers"/>
 		<menu_item_call label="封鎖清單" name="Block List"/>
 	</menu>
 	<menu label="世界" name="World">
@@ -113,7 +114,6 @@
 			<menu_item_call label="購買" name="Menu Object Buy"/>
 			<menu_item_call label="取得" name="Menu Object Take"/>
 			<menu_item_call label="取得副本" name="Take Copy"/>
-			<menu_item_call label="回存到我的收納區" name="Save Object Back to My Inventory"/>
 			<menu_item_call label="回存到物件內容" name="Save Object Back to Object Contents"/>
 			<menu_item_call label="退回物件" name="Return Object back to Owner"/>
 		</menu>
@@ -128,6 +128,7 @@
 			<menu_item_call label="聯結集…" name="pathfinding_linksets_menu_item"/>
 			<menu_item_call label="角色…" name="pathfinding_characters_menu_item"/>
 			<menu_item_call label="察看 / 測試…" name="pathfinding_console_menu_item"/>
+			<menu_item_call label="重新產出地區" name="pathfinding_rebake_navmesh_item"/>
 		</menu>
 		<menu label="選項" name="Options">
 			<menu_item_check label="顯示進階權限" name="DebugPermissions"/>
@@ -157,6 +158,13 @@
 	<menu label="幫助" name="Help">
 		<menu_item_call label="簡易教學…" name="How To"/>
 		<menu_item_call label="[SECOND_LIFE] 幫助" name="Second Life Help"/>
+		<menu_item_call label="使用者指南" name="User’s guide"/>
+		<menu_item_call label="知識庫" name="Knowledge Base"/>
+		<menu_item_call label="維基" name="Wiki"/>
+		<menu_item_call label="社群論壇" name="Community Forums"/>
+		<menu_item_call label="支援入口" name="Support portal"/>
+		<menu_item_call label="[SECOND_LIFE] 最新消息" name="Second Life News"/>
+		<menu_item_call label="[SECOND_LIFE] 部落格" name="Second Life Blogs"/>
 		<menu_item_call label="違規舉報" name="Report Abuse"/>
 		<menu_item_call label="回報臭蟲" name="Report Bug"/>
 		<menu_item_call label="關於 [APP_NAME]" name="About Second Life"/>
@@ -305,7 +313,7 @@
 			<menu_item_call label="已選取材質資訊基礎" name="Selected Texture Info Basis"/>
 			<menu_item_check label="線框" name="Wireframe"/>
 			<menu_item_check label="物件導向的遮蔽" name="Object-Object Occlusion"/>
-			<menu_item_check label="光線和陰影" name="Lighting and Shadows"/>
+			<menu_item_check label="光線和陰影" name="Advanced Lighting Model"/>
 			<menu_item_check label="來自日/月/投影物的陰影" name="Shadows from Sun/Moon/Projectors"/>
 			<menu_item_check label="屏幕空間環境光遮蔽和陰影平滑技術" name="SSAO and Shadow Smoothing"/>
 			<menu_item_check label="GL 除錯" name="Debug GL"/>
@@ -383,9 +391,14 @@
 				<menu_item_call label="女性測試" name="Test Female"/>
 				<menu_item_check label="允許選擇化身" name="Allow Select Avatar"/>
 			</menu>
+			<menu label="動作速度" name="Animation Speed">
+				<menu_item_call label="所有動作加快 10%" name="All Animations 10 Faster"/>
+				<menu_item_call label="所有動作放慢 10%" name="All Animations 10 Slower"/>
+				<menu_item_call label="將所有動作恢復原速" name="Reset All Animation Speed"/>
+				<menu_item_check label="慢動作" name="Slow Motion Animations"/>
+			</menu>
 			<menu_item_call label="強制參數為預設值" name="Force Params to Default"/>
 			<menu_item_check label="動作資訊" name="Animation Info"/>
-			<menu_item_check label="慢動作" name="Slow Motion Animations"/>
 			<menu_item_check label="顯示注視在" name="Show Look At"/>
 			<menu_item_check label="顯示指向在" name="Show Point At"/>
 			<menu_item_check label="除錯旋軸的更新" name="Debug Joint Updates"/>
diff --git a/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml b/indra/newview/skins/default/xui/zh/menu_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_wearing_gear.xml b/indra/newview/skins/default/xui/zh/menu_wearing_gear.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/menu_wearing_tab.xml b/indra/newview/skins/default/xui/zh/menu_wearing_tab.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/mime_types.xml b/indra/newview/skins/default/xui/zh/mime_types.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/mime_types_linux.xml b/indra/newview/skins/default/xui/zh/mime_types_linux.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/mime_types_mac.xml b/indra/newview/skins/default/xui/zh/mime_types_mac.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/notifications.xml b/indra/newview/skins/default/xui/zh/notifications.xml
old mode 100644
new mode 100755
index 9fecf2c104dc37e9cca55869654e0ae2911a2cba..59be26d43bf7688594ca5a92563d7e799a9446f7
--- a/indra/newview/skins/default/xui/zh/notifications.xml
+++ b/indra/newview/skins/default/xui/zh/notifications.xml
@@ -516,6 +516,24 @@
 		</url>
 		<usetemplate ignoretext="我的顯示驅動程式太老舊" name="okcancelignore" notext="否" yestext="是"/>
 	</notification>
+	<notification name="AMDOldDriver">
+		你的顯示卡很可能有新版的驅動程式。  更新顯示驅動程式會大幅改善性能。
+
+    前往 [_URL] 察看是否有新版驅動程式?
+		<url name="url">
+			http://support.amd.com/us/Pages/AMDSupportHub.aspx
+		</url>
+		<usetemplate ignoretext="我的顯示驅動程式太老舊" name="okcancelignore" notext="否" yestext="是"/>
+	</notification>
+	<notification name="NVIDIAOldDriver">
+		你的顯示卡很可能有新版的驅動程式。  更新顯示驅動程式會大幅改善性能。
+
+    前往 [_URL] 察看是否有新版驅動程式?
+		<url name="url">
+			http://www.nvidia.com/Download/index.aspx?lang=tw
+		</url>
+		<usetemplate ignoretext="我的顯示驅動程式太老舊" name="okcancelignore" notext="否" yestext="是"/>
+	</notification>
 	<notification name="UnknownGPU">
 		你的系統含有一個 [APP_NAME] 無法辨認的顯像卡。
 原因很可能是 [APP_NAME] 尚未針對新硬體完成測試。  這大概不會出問題,但你可能需要調整顯像設定。
@@ -1536,10 +1554,13 @@ SHA1 指紋:[MD5_DIGEST]
 		此時無法發出交友邀請。 請稍候再試。
 		<usetemplate name="okbutton" yestext="確定"/>
 	</notification>
-	<notification name="BusyModeSet">
-		已設為忙碌模式。
-聊天和即時訊息內容將被隱藏。 即時訊息發送者將收到你的「忙碌模式」回應。 所有的瞬間傳送邀請都將被婉拒。 此時起送給你的收納區物項都將丟入垃圾桶。
-		<usetemplate ignoretext="我變更我的狀態為忙碌模式" name="okignore" yestext="確定"/>
+	<notification name="DoNotDisturbModeSet">
+		「請勿打擾」模式目前是開啟狀態。  你將不會收到任何發給你的訊息通知。
+
+- 其他居民將收到你的「請勿打擾」回應(回應內容設於「偏好設定 &gt; 一般設定」)。
+- 所有瞬間傳送的邀請都將被婉拒。
+- 所有語音來電都將拒絕接聽。
+		<usetemplate ignoretext="我變更我的狀態為「請勿打擾」模式" name="okignore" yestext="確定"/>
 	</notification>
 	<notification name="JoinedTooManyGroupsMember">
 		你已達可同時加入的群組數上限。 請先離開另一個群組再加入這一個,或婉拒加入邀請。
@@ -2024,6 +2045,10 @@ SHA1 指紋:[MD5_DIGEST]
 		前往你的[http://secondlife.com/account/ 塗鴉牆]以察看你的帳戶歷史紀錄?
 		<usetemplate ignoretext="啟動我的瀏覽器以察看我的帳戶歷史紀錄" name="okcancelignore" notext="取消" yestext="前往頁面"/>
 	</notification>
+	<notification name="ConfirmAddingChatParticipants">
+		新增一個人到現有的交談,等於建立新的交談。  所有交談者將會收到新交談通知。
+		<usetemplate ignoretext="確認新增聊天者" name="okcancelignore" notext="取消" yestext="確定"/>
+	</notification>
 	<notification name="ConfirmQuit">
 		你確定你要結束退出?
 		<usetemplate ignoretext="當我結束退出時進行確認" name="okcancelignore" notext="不要結束退出" yestext="結束退出"/>
@@ -2098,14 +2123,14 @@ SHA1 指紋:[MD5_DIGEST]
 			<button ignore="絕不取代" name="No" text="取消"/>
 		</form>
 	</notification>
-	<notification label="忙碌模式警告" name="BusyModePay">
-		你現在處於忙碌模式,這意味著你付費後仍將不會收到任何物項。
+	<notification label="「請勿打擾」模式警告" name="DoNotDisturbModePay">
+		你已開啟「請勿打擾」。 你將不會收到任何付款購買的物項。
 
-你是否要先離開忙碌模式,再完成交易?
+是否要在完成交易之前,先關閉「請勿打擾」模式?
 		<form name="form">
-			<ignore name="ignore" text="當我在忙碌模式時,將要支付金錢或給他人物件"/>
-			<button ignore="總是離開忙碌模式" name="Yes" text="確定"/>
-			<button ignore="絕不離開忙碌模式" name="No" text="取消"/>
+			<ignore name="ignore" text="我即將在「請勿打擾」模式下,試圖付錢給他人或給一個物件"/>
+			<button ignore="固定選擇離開「請勿打擾」模式" name="Yes" text="確定"/>
+			<button ignore="永不離開「請勿打擾」模式" name="No" text="取消"/>
 		</form>
 	</notification>
 	<notification name="ConfirmDeleteProtectedCategory">
@@ -2240,11 +2265,8 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="GroupNotice">
 		主旨:[SUBJECT],訊息:[MESSAGE]
 	</notification>
-	<notification name="FriendOnline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; 目前在線上
-	</notification>
-	<notification name="FriendOffline">
-		&lt;nolink&gt;[NAME]&lt;/nolink&gt; 目前離線
+	<notification name="FriendOnlineOffline">
+		&lt;nolink&gt;[NAME]&lt;/nolink&gt; 目前狀態為 [STATUS]
 	</notification>
 	<notification name="AddSelfFriend">
 		雖然你人很好,你還是不能把自己加為朋友。
@@ -2472,13 +2494,6 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="DynamicPathfindingDisabled">
 		這地區並未啟用動態尋徑。  使用尋徑 LSL 呼叫的帶腳本物件,在此地區可能無法正常運作。
 	</notification>
-	<notification name="PathfindingRebakeNavmesh">
-		更改本地區的某些物件將導致其他移動物件的運作發生問題。  要使移動物件正常運作,請點按「重新產出地區」按鈕。  欲獲知詳情請選擇「幫助」。
-		<url name="url">
-			http://wiki.secondlife.com/wiki/Pathfinding_Tools_in_the_Second_Life_Viewer
-		</url>
-		<usetemplate helptext="幫助" ignoretext="更改本地區的某些物件將導致其他移動物件的運作發生問題。" name="okhelpignore" yestext="確定"/>
-	</notification>
 	<notification name="PathfindingCannotRebakeNavmesh">
 		發生錯誤。  問題可能出在網路或伺服器,也可能因為你無權建製物件。  有時,只要登出再登入即能解決這類問題。
 		<usetemplate name="okbutton" yestext="確定"/>
@@ -2741,7 +2756,7 @@ SHA1 指紋:[MD5_DIGEST]
 	<notification name="ScriptQuestionCaution">
 		警告:物件 &apos;&lt;nolink&gt;[OBJECTNAME]&lt;/nolink&gt;&apos; 要求全權存取你的林登幣帳戶。 你如果允許存取帳戶,它將可在任何時候從你帳戶取走資金,或完全加以清空,或定期取走部分資金,且不會發出警告。
   
-這很可能是種不當的要求。 如果你不完全瞭解它為何要求存取你的帳戶,請勿允准。
+如果你不完全瞭解它為何要求存取你的帳戶,請勿允准。
 		<form name="form">
 			<button name="Grant" text="允許全權存取"/>
 			<button name="Deny" text="拒絕"/>
@@ -3323,4 +3338,633 @@ SHA1 指紋:[MD5_DIGEST]
 		你正在刪除 [NUM_ITEMS] 個物項。  你確定你要繼續?
 		<usetemplate ignoretext="確定要刪除多個物項?" name="okcancelignore" notext="否" yestext="是"/>
 	</notification>
+	<notification name="AvatarFrozen">
+		[AV_FREEZER] 凍結了你。 你此時無法移動或與周遭互動。
+	</notification>
+	<notification name="AvatarFrozenDuration">
+		[AV_FREEZER] 凍結了你 [AV_FREEZE_TIME] 秒鐘。 你此時無法移動或與周遭互動。
+	</notification>
+	<notification name="YouFrozeAvatar">
+		化身已凍結。
+	</notification>
+	<notification name="AvatarHasUnFrozenYou">
+		[AV_FREEZER] 解除了對你的凍結。
+	</notification>
+	<notification name="AvatarUnFrozen">
+		化身已解除凍結。
+	</notification>
+	<notification name="AvatarFreezeFailure">
+		凍結失敗,因為你在該地段沒有管理員權限。
+	</notification>
+	<notification name="AvatarFreezeThaw">
+		你遭凍結的時間已過,請恢復正常活動。
+	</notification>
+	<notification name="AvatarCantFreeze">
+		抱歉,無法凍結該用戶。
+	</notification>
+	<notification name="NowOwnObject">
+		你現在是物件 [OBJECT_NAME] 的所有人
+	</notification>
+	<notification name="CantRezOnLand">
+		無法在 [OBJECT_POS] 產生物件,因為這土地的所有人不允許。  請用土地工具察看所有人。
+	</notification>
+	<notification name="RezFailTooManyRequests">
+		無法產生物件,此刻要求數目過多。
+	</notification>
+	<notification name="SitFailCantMove">
+		你無法坐下,因為此刻你不能移動。
+	</notification>
+	<notification name="SitFailNotAllowedOnLand">
+		你不能坐下,因為該土地不允許。
+	</notification>
+	<notification name="SitFailNotSameRegion">
+		請挨近一點。  無法坐在物件上,因為
+它和你不在同一個地區。
+	</notification>
+	<notification name="NoNewObjectRegionFull">
+		無法建立新物件。 地區已滿載。
+	</notification>
+	<notification name="FailedToPlaceObject">
+		無法將物件置於指定地點。  請再試一次。
+	</notification>
+	<notification name="NoOwnNoGardening">
+		你無法在別人的土地上建立樹和草。
+	</notification>
+	<notification name="NoCopyPermsNoObject">
+		複製失敗,你無權複製物件 &apos;[OBJ_NAME]&apos;。
+	</notification>
+	<notification name="NoTransPermsNoObject">
+		複製失敗,因為物件 &apos;[OBJ_NAME]&apos; 無法轉移給你。
+	</notification>
+	<notification name="AddToNavMeshNoCopy">
+		複製失敗,因為物件 &apos;[OBJ_NAME]&apos; 對導航網面有貢獻。
+	</notification>
+	<notification name="DupeWithNoRootsSelected">
+		選取了沒有根的重覆物件。
+	</notification>
+	<notification name="CantDupeCuzRegionIsFull">
+		無法複製物件,因為地區滿載。
+	</notification>
+	<notification name="CantDupeCuzParcelNotFound">
+		無法複製物件,找不到它們所在的地段。
+	</notification>
+	<notification name="CantCreateCuzParcelFull">
+		無法建立物件,因為 
+地段滿載。
+	</notification>
+	<notification name="RezAttemptFailed">
+		試圖產生物件失敗。
+	</notification>
+	<notification name="ToxicInvRezAttemptFailed">
+		無法建立已在此地區造成問題的物件。
+	</notification>
+	<notification name="InvItemIsBlacklisted">
+		該收納區物項已被列入黑名單。
+	</notification>
+	<notification name="NoCanRezObjects">
+		你此時無權建立物件。
+	</notification>
+	<notification name="LandSearchBlocked">
+		土地搜尋遭禁。
+你在短時間內進行了太多次土地搜尋。
+請稍候再試。
+	</notification>
+	<notification name="NotEnoughResourcesToAttach">
+		腳本資源不足,無法附著物件!
+	</notification>
+	<notification name="YouDiedAndGotTPHome">
+		你已經死亡並且被瞬間傳送回你的家的位置
+	</notification>
+	<notification name="EjectComingSoon">
+		你不再允許待在這裡,必須在 [EJECT_TIME] 秒內離開。
+	</notification>
+	<notification name="NoEnterServerFull">
+		你無法進入這地區,因為 
+伺服器滿載。
+	</notification>
+	<notification name="SaveBackToInvDisabled">
+		「儲存回收納區」功能已被停用。
+	</notification>
+	<notification name="NoExistNoSaveToContents">
+		無法將 &apos;[OBJ_NAME]&apos; 儲存到物件內容,因為產生它的來源物件已不存在。
+	</notification>
+	<notification name="NoModNoSaveToContents">
+		無法儲存 [OBJ_NAME] 到物件內容,你無權修改 &apos;[DEST_NAME]&apos; 物件。
+	</notification>
+	<notification name="NoSaveBackToInvDisabled">
+		無法將 &apos;[OBJ_NAME]&apos; 儲存回收納區,此動作已被停用。
+	</notification>
+	<notification name="NoCopyNoSelCopy">
+		無法複製你所選的,因為你無權複製物件 &apos;[OBJ_NAME]&apos;。
+	</notification>
+	<notification name="NoTransNoSelCopy">
+		無法選取複製,因為物件 &apos;[OBJ_NAME]&apos; 不可轉移。
+	</notification>
+	<notification name="NoTransNoCopy">
+		無法選取複製,因為物件 &apos;[OBJ_NAME]&apos; 不可轉移。
+	</notification>
+	<notification name="NoPermsNoRemoval">
+		權限系統不允許從模擬器移除物件 &apos;[OBJ_NAME]&apos;。
+	</notification>
+	<notification name="NoModNoSaveSelection">
+		無法儲存你所選的,因為你無權修改 &apos;[OBJ_NAME]&apos; 物件。
+	</notification>
+	<notification name="NoCopyNoSaveSelection">
+		無法儲存你所選的,因為物件 &apos;[OBJ_NAME]&apos; 不可複製。
+	</notification>
+	<notification name="NoModNoTaking">
+		無法拿取你所選的,因為你無權修改 &apos;[OBJ_NAME]&apos; 物件。
+	</notification>
+	<notification name="RezDestInternalError">
+		內部錯誤:未知的目的地類型。
+	</notification>
+	<notification name="DeleteFailObjNotFound">
+		刪除失敗,因為找不到物件
+	</notification>
+	<notification name="SorryCantEjectUser">
+		抱歉,無法踢出該用戶。
+	</notification>
+	<notification name="RegionSezNotAHome">
+		此地區不許你在此設定「我的家」。
+	</notification>
+	<notification name="HomeLocationLimits">
+		你只能在自己的土地或大陸資訊中心上設定「我的家」。
+	</notification>
+	<notification name="HomePositionSet">
+		我的家位置已定。
+	</notification>
+	<notification name="AvatarEjected">
+		化身已被踢出。
+	</notification>
+	<notification name="AvatarEjectFailed">
+		踢出失敗,因為你在該地段沒有管理員權限。
+	</notification>
+	<notification name="CantMoveObjectParcelFull">
+		無法移動 &apos;[OBJECT_NAME]&apos; 物件到
+地區 [REGION_NAME] 的 [OBJ_POSITION],因為該目標地段已滿載。
+	</notification>
+	<notification name="CantMoveObjectParcelPerms">
+		無法移動 &apos;[OBJECT_NAME]&apos; 物件到
+地區 [REGION_NAME] 的 [OBJ_POSITION],因為此地段不允許你的物件。
+	</notification>
+	<notification name="CantMoveObjectParcelResources">
+		無法移動 &apos;[OBJECT_NAME]&apos; 物件到
+ [REGION_NAME] 地區的 [OBJ_POSITION],因為此地段資源不足容納此物件。
+	</notification>
+	<notification name="CantMoveObjectRegionVersion">
+		無法移動 &apos;[OBJECT_NAME]&apos; 物件到
+ [REGION_NAME] 地區的 [OBJ_POSITION],因為該地區所執行的軟體版本過舊,不支援跨地區接受這個物件。
+	</notification>
+	<notification name="CantMoveObjectNavMesh">
+		無法移動 &apos;[OBJECT_NAME]&apos; 物件到
+地區 [REGION_NAME] 的 [OBJ_POSITION],因為你不得修改跨越地區界限的導航網面。
+	</notification>
+	<notification name="CantMoveObjectWTF">
+		無法移動 &apos;[OBJECT_NAME]&apos; 物件到
+地區 [REGION_NAME] 的 [OBJ_POSITION],原因不明。 ([FAILURE_TYPE])
+	</notification>
+	<notification name="NoPermModifyObject">
+		你無權變更該物件
+	</notification>
+	<notification name="CantEnablePhysObjContributesToNav">
+		對導航網面有貢獻的物件,無法啟用物理。
+	</notification>
+	<notification name="CantEnablePhysKeyframedObj">
+		鍵格動畫物件無法啟用物理。
+	</notification>
+	<notification name="CantEnablePhysNotEnoughLandResources">
+		無法啟用物件的物理——土地資源不足。
+	</notification>
+	<notification name="CantEnablePhysCostTooGreat">
+		物件的物理資源成本超過 [MAX_OBJECTS],無法啟用物理
+	</notification>
+	<notification name="PhantomWithConcavePiece">
+		此物件不得有凹面部件,因為物件是幻影物件,對導航網面有貢獻。
+	</notification>
+	<notification name="UnableAddItem">
+		無法新增項目!
+	</notification>
+	<notification name="UnableEditItem">
+		無法編輯這項目!
+	</notification>
+	<notification name="NoPermToEdit">
+		無權編輯這項目。
+	</notification>
+	<notification name="NoPermToCopyInventory">
+		無權複製該收納區。
+	</notification>
+	<notification name="CantSaveItemDoesntExist">
+		無法儲存到物件內容:該項目已不存在。
+	</notification>
+	<notification name="CantSaveItemAlreadyExists">
+		無法儲存到物件內容:收納區已存在同名稱的項目
+	</notification>
+	<notification name="CantSaveModifyAttachment">
+		無法儲存到物件內容:這麼做將修改附件的權限。
+	</notification>
+	<notification name="TooManyScripts">
+		腳本太多。
+	</notification>
+	<notification name="UnableAddScript">
+		無法新增腳本!
+	</notification>
+	<notification name="AssetServerTimeoutObjReturn">
+		資產伺服器未在正常時間內反應。  物件已返交模擬器。
+	</notification>
+	<notification name="RegionDisablePhysicsShapes">
+		本地區未啟用物理形狀。
+	</notification>
+	<notification name="NoModNavmeshAcrossRegions">
+		你無法變更跨越地區界限的導航網面。
+	</notification>
+	<notification name="NoSetPhysicsPropertiesOnObjectType">
+		該物件類型不得設定物理性質。
+	</notification>
+	<notification name="NoSetRootPrimWithNoShape">
+		根幾何元件無法設成無形狀。
+	</notification>
+	<notification name="NoRegionSupportPhysMats">
+		本地區未啟用物理材料。
+	</notification>
+	<notification name="OnlyRootPrimPhysMats">
+		只能調整根幾何元件的物理材料。
+	</notification>
+	<notification name="NoSupportCharacterPhysMats">
+		尚不支援角色設定物理材料。
+	</notification>
+	<notification name="InvalidPhysMatProperty">
+		指定的物理材料屬性中,至少有一個無效。
+	</notification>
+	<notification name="NoPermsAlterStitchingMeshObj">
+		網面物件的縫合類型不得變更。
+	</notification>
+	<notification name="NoPermsAlterShapeMeshObj">
+		網面物件的形狀不得變更。
+	</notification>
+	<notification name="FullRegionCantEnter">
+		你無法進入這地區,\n因為地區滿載。
+	</notification>
+	<notification name="LinkFailedOwnersDiffer">
+		聯結失敗——所有人不同
+	</notification>
+	<notification name="LinkFailedNoModNavmeshAcrossRegions">
+		聯結失敗——無法修改跨越地區界限的導航網面。
+	</notification>
+	<notification name="LinkFailedNoPermToEdit">
+		聯結失敗,你無權編輯。
+	</notification>
+	<notification name="LinkFailedTooManyPrims">
+		聯結失敗——幾何元件太多
+	</notification>
+	<notification name="LinkFailedCantLinkNoCopyNoTrans">
+		聯結失敗——無法將「禁止複製」和「禁止轉移」物件聯結起來
+	</notification>
+	<notification name="LinkFailedNothingLinkable">
+		聯結失敗——沒有可聯結的東西。
+	</notification>
+	<notification name="LinkFailedTooManyPathfindingChars">
+		聯結失敗——尋徑角色太多
+	</notification>
+	<notification name="LinkFailedInsufficientLand">
+		聯結失敗——土地資源不足
+	</notification>
+	<notification name="LinkFailedTooMuchPhysics">
+		物件使用了過多物理資源,其動態特性已被停用。
+	</notification>
+	<notification name="TeleportedHomeByObjectOnParcel">
+		你已被 &apos;[PARCEL_NAME]&apos; 地段的物件 &apos;[OBJECT_NAME]&apos; 成功瞬間傳送回家
+	</notification>
+	<notification name="TeleportedHomeByObject">
+		你已成功被物件 &apos;[OBJECT_NAME]&apos; 瞬間傳送回家
+	</notification>
+	<notification name="TeleportedByAttachment">
+		你已成功被 [ITEM_ID] 上的一個附件瞬間傳送
+	</notification>
+	<notification name="TeleportedByObjectOnParcel">
+		你已成功被 &apos;[PARCEL_NAME]&apos; 地段的物件 &apos;[OBJECT_NAME]&apos; 瞬間傳送
+	</notification>
+	<notification name="TeleportedByObjectOwnedBy">
+		你已成功被 [OWNER_ID] 擁有的物件 &apos;[OBJECT_NAME]&apos; 瞬間傳送
+	</notification>
+	<notification name="TeleportedByObjectUnknownUser">
+		你已成功被某未知用戶擁有的物件 &apos;[OBJECT_NAME]&apos; 瞬間傳送。
+	</notification>
+	<notification name="CantCreateObjectRegionFull">
+		無法建立要求的物件。 地區已滿載。
+	</notification>
+	<notification name="CantAttackMultipleObjOneSpot">
+		你不能將多個物件附著到同一個點。
+	</notification>
+	<notification name="CantCreateMultipleObjAtLoc">
+		你不能在此建立多個物件。
+	</notification>
+	<notification name="UnableToCreateObjTimeOut">
+		無法建立要求的物件。 物件在資料庫中找不到。
+	</notification>
+	<notification name="UnableToCreateObjUnknown">
+		無法建立要求的物件。 要求逾時,無法完成。 請再試一次。
+	</notification>
+	<notification name="UnableToCreateObjMissingFromDB">
+		無法建立要求的物件。 請再試一次。
+	</notification>
+	<notification name="RezFailureTookTooLong">
+		物件產生失敗,要求的物件載入時間太久。
+	</notification>
+	<notification name="FailedToPlaceObjAtLoc">
+		無法將物件置於指定地點。  請再試一次。
+	</notification>
+	<notification name="CantCreatePlantsOnLand">
+		你不得在這土地上建立植物。
+	</notification>
+	<notification name="CantRestoreObjectNoWorldPos">
+		無法恢復物件。 找不到虛擬世界的位置。
+	</notification>
+	<notification name="CantRezObjectInvalidMeshData">
+		無法產生物件,它的網面資料無效。
+	</notification>
+	<notification name="CantRezObjectTooManyScripts">
+		無法產生物件,因為這地區已有太多的腳本。
+	</notification>
+	<notification name="CantCreateObjectNoAccess">
+		你無權在此建立物件。
+	</notification>
+	<notification name="CantCreateObject">
+		你此時無權建立物件。
+	</notification>
+	<notification name="InvalidObjectParams">
+		無效的物件參數
+	</notification>
+	<notification name="CantDuplicateObjectNoAcess">
+		你權限不夠,無法在此複製物件。
+	</notification>
+	<notification name="CantChangeShape">
+		你無權變更這個形狀。
+	</notification>
+	<notification name="NoAccessToClaimObjects">
+		你權限不夠,無法在此收取物件。
+	</notification>
+	<notification name="DeedFailedNoPermToDeedForGroup">
+		讓渡失敗,你無權為你的群組讓渡物件。
+	</notification>
+	<notification name="NoPrivsToBuyObject">
+		你權限不夠,無法在此購買物件。
+	</notification>
+	<notification name="CantAttachObjectAvatarSittingOnIt">
+		無法附著物件,有個化身正坐在物件上。
+	</notification>
+	<notification name="WhyAreYouTryingToWearShrubbery">
+		樹和草不能當附件穿戴。
+	</notification>
+	<notification name="CantAttachGroupOwnedObjs">
+		無法附著群組所擁有的物件。
+	</notification>
+	<notification name="CantAttachObjectsNotOwned">
+		無法附著不是你擁有的物件。
+	</notification>
+	<notification name="CantAttachNavmeshObjects">
+		無法附著對導航網面有貢獻的物件。
+	</notification>
+	<notification name="CantAttachObjectNoMovePermissions">
+		無法附著物件,你無權移動該物件。
+	</notification>
+	<notification name="CantAttachNotEnoughScriptResources">
+		腳本資源不足,無法附著物件!
+	</notification>
+	<notification name="CantDropItemTrialUser">
+		你無法在此卸除物件,請到「自由嘗試」區域再試。
+	</notification>
+	<notification name="CantDropMeshAttachment">
+		你無法在此卸除附件。 請選擇把卸除附件送回收納區,再重新成形。
+	</notification>
+	<notification name="CantDropAttachmentNoPermission">
+		卸除附件失敗:你無權在此處卸除。
+	</notification>
+	<notification name="CantDropAttachmentInsufficientLandResources">
+		卸除附件失敗:可用土地資源不足。
+	</notification>
+	<notification name="CantDropAttachmentInsufficientResources">
+		卸除附件失敗:可用資源不足。
+	</notification>
+	<notification name="CantDropObjectFullParcel">
+		無法在此卸除物件。  地段滿載。
+	</notification>
+	<notification name="CantTouchObjectBannedFromParcel">
+		無法觸摸/抓取此物件,因為你在該土地地段遭禁。
+	</notification>
+	<notification name="PlzNarrowDeleteParams">
+		請將刪除參數範圍調小一點。
+	</notification>
+	<notification name="UnableToUploadAsset">
+		無法上傳資產。
+	</notification>
+	<notification name="CantTeleportCouldNotFindUser">
+		找不到要瞬間傳送到家的用戶
+	</notification>
+	<notification name="GodlikeRequestFailed">
+		要求神的權力失敗
+	</notification>
+	<notification name="GenericRequestFailed">
+		普通請求失敗
+	</notification>
+	<notification name="CantUploadPostcard">
+		無法上傳明信片。  請稍候再試一次。
+	</notification>
+	<notification name="CantFetchInventoryForGroupNotice">
+		無法取得群組通知的收納區細節。
+	</notification>
+	<notification name="CantSendGroupNoticeNotPermitted">
+		無法送出群組通知——未准許。
+	</notification>
+	<notification name="CantSendGroupNoticeCantConstructInventory">
+		無法送出群組通知——收納區建立失敗。
+	</notification>
+	<notification name="CantParceInventoryInNotice">
+		無法剖析通知裡的收納品項。
+	</notification>
+	<notification name="TerrainUploadFailed">
+		地形上傳失敗。
+	</notification>
+	<notification name="TerrainFileWritten">
+		地形檔案已寫入。
+	</notification>
+	<notification name="TerrainFileWrittenStartingDownload">
+		地形檔案已寫入,開始下載……
+	</notification>
+	<notification name="TerrainBaked">
+		地形已定貌。
+	</notification>
+	<notification name="TenObjectsDisabledPlzRefresh">
+		只成功停用前 10 個所選物件。 若有需要,請刷新之後再選取更多的項目。
+	</notification>
+	<notification name="UpdateViewerBuyParcel">
+		你必須先更新瀏覽器後,才可購買這個地段。
+	</notification>
+	<notification name="CantBuyParcelNotForSale">
+		無法購買,此地段不供出售。
+	</notification>
+	<notification name="CantBuySalePriceOrLandAreaChanged">
+		無法購買,售價或土地面積已變。
+	</notification>
+	<notification name="CantBuyParcelNotAuthorized">
+		你不是此地段的獲授權的買主。
+	</notification>
+	<notification name="CantBuyParcelAwaitingPurchaseAuth">
+		你無法購買此地段,該地段已在等候批准購買
+	</notification>
+	<notification name="CantBuildOverflowParcel">
+		你不得在此建立物件,這麼做將導致地段超載。
+	</notification>
+	<notification name="SelectedMultipleOwnedLand">
+		你選擇的土地範圍,為不同人所擁有。 請縮小選擇範圍,再試一次。
+	</notification>
+	<notification name="CantJoinTooFewLeasedParcels">
+		未選取足夠租用地段,無法合併。
+	</notification>
+	<notification name="CantDivideLandMultipleParcelsSelected">
+		無法分割土地,\n因為你選取了多個地段,\n請縮小所選土地。
+	</notification>
+	<notification name="CantDivideLandCantFindParcel">
+		無法分割土地。\n找不到地段。\n請到「幫助 &gt; 回報錯誤……」回報問題
+	</notification>
+	<notification name="CantDivideLandWholeParcelSelected">
+		無法分割土地。 選取了整個地段。\n請試著縮小所選的土地。
+	</notification>
+	<notification name="LandHasBeenDivided">
+		土地分割成功。
+	</notification>
+	<notification name="PassPurchased">
+		你購買了通行權。
+	</notification>
+	<notification name="RegionDisallowsClassifieds">
+		地區不允許分類廣告。
+	</notification>
+	<notification name="LandPassExpireSoon">
+		你在此土地的通行權即將到期失效。
+	</notification>
+	<notification name="CantSitNoSuitableSurface">
+		沒有合適的表面讓你坐下,請試一試別處。
+	</notification>
+	<notification name="CantSitNoRoom">
+		這裡沒有空間讓你坐下,請試試另一處。
+	</notification>
+	<notification name="ClaimObjectFailedNoPermission">
+		收取物件失敗,因為你權限不足。
+	</notification>
+	<notification name="ClaimObjectFailedNoMoney">
+		收取物件失敗,因為你 L$ 金額不足。
+	</notification>
+	<notification name="CantDeedGroupLand">
+		無法讓渡群組所擁有的土地。
+	</notification>
+	<notification name="BuyObjectFailedNoMoney">
+		購買物件失敗,你 L$ 金額不足。
+	</notification>
+	<notification name="BuyInventoryFailedNoMoney">
+		購買收納區失敗,你 L$ 金額不足。
+	</notification>
+	<notification name="BuyPassFailedNoMoney">
+		你的 L$ 不足,無法購買此土地的通行權。
+	</notification>
+	<notification name="CantBuyPassTryAgain">
+		此時無法購買通行權。  請稍候再試一次。
+	</notification>
+	<notification name="CantCreateObjectParcelFull">
+		無法建立物件,\n地段滿載。
+	</notification>
+	<notification name="FailedPlacingObject">
+		無法將物件置於指定地點。  請再試一次。
+	</notification>
+	<notification name="CantCreateLandmarkForEvent">
+		無法為活動建立地標。
+	</notification>
+	<notification name="GodBeatsFreeze">
+		你擁有的神力解除了凍結!
+	</notification>
+	<notification name="SpecialPowersRequestFailedLogged">
+		要求特殊能力失敗。 該要求已載入記錄。
+	</notification>
+	<notification name="ExpireExplanation">
+		系統此時無法處理你的要求。 要求逾時,無法完成。
+	</notification>
+	<notification name="DieExplanation">
+		系統無法處理你的要求。
+	</notification>
+	<notification name="AddPrimitiveFailure">
+		金額不足,無法建立幾何元件。
+	</notification>
+	<notification name="RezObjectFailure">
+		金額不足,無法建立物件。
+	</notification>
+	<notification name="ResetHomePositionNotLegal">
+		已重設「我的家」位置,因為前一個位置不合法。
+	</notification>
+	<notification name="CantInviteRegionFull">
+		此刻你無法邀請任何人到你的位置,因為地區滿載。 請稍候再試一次。
+	</notification>
+	<notification name="CantSetHomeAtRegion">
+		此地區不許你在此設定「我的家」。
+	</notification>
+	<notification name="ListValidHomeLocations">
+		你只能在自己的土地或大陸資訊中心上設定「我的家」。
+	</notification>
+	<notification name="SetHomePosition">
+		我的家位置已定。
+	</notification>
+	<notification name="CantDerezInventoryError">
+		收納區出錯,無法收納物件。
+	</notification>
+	<notification name="CantCreateRequestedInv">
+		無法建立要求的收納區。
+	</notification>
+	<notification name="CantCreateRequestedInvFolder">
+		無法建立要求的收納區資料夾。
+	</notification>
+	<notification name="CantCreateInventory">
+		無法建立該收納區。
+	</notification>
+	<notification name="CantCreateLandmark">
+		無法建立地標。
+	</notification>
+	<notification name="CantCreateOutfit">
+		此時無法建立裝扮。 請過一分鐘後再試。
+	</notification>
+	<notification name="InventoryNotForSale">
+		收納區沒有待售。
+	</notification>
+	<notification name="CantFindInvItem">
+		找不到收納區物項。
+	</notification>
+	<notification name="CantFindObject">
+		找不到物件。
+	</notification>
+	<notification name="CantTransfterMoneyRegionDisabled">
+		此地區目前未啟用轉移金錢給物件的功能。
+	</notification>
+	<notification name="CantPayNoAgent">
+		無法決定付款給誰。
+	</notification>
+	<notification name="CantDonateToPublicObjects">
+		你無法將 L$ 送給公共物件。
+	</notification>
+	<notification name="InventoryCreationInWorldObjectFailed">
+		針對虛擬世界物件建立收納區失敗。
+	</notification>
+	<notification name="UserBalanceOrLandUsageError">
+		發生內部錯誤,我們無法如常更新你的瀏覽器。  你瀏覽器顯示的 L$ 餘額或擁有地段,可能和伺服器上的正確數額不一致。
+	</notification>
+	<notification name="LargePrimAgentIntersect">
+		無法建立和其他參與者發生交截的大型幾何元件。  請等其他參與者移開後再試。
+	</notification>
+	<notification name="PreferenceChatClearLog">
+		這動作將刪除先前交談的記錄,和所有記錄備份。
+		<usetemplate ignoretext="刪除先前交談記錄前,先向我確認。" name="okcancelignore" notext="取消" yestext="確定"/>
+	</notification>
+	<notification name="PreferenceChatDeleteTranscripts">
+		這將刪除所有先前交談的內容記錄。 過去交談歷史清單不受影響。 資料夾 [FOLDER] 所有副檔名 .txt 和 txt.backup 的檔案都將刪除。
+		<usetemplate ignoretext="刪除交談內容記錄前先向我確認。" name="okcancelignore" notext="取消" yestext="確定"/>
+	</notification>
+	<notification name="PreferenceChatPathChanged">
+		無法移動檔案。 已恢復前一個路徑。
+		<usetemplate ignoretext="無法移動檔案。 已恢復前一個路徑。" name="okignore" yestext="確定"/>
+	</notification>
 </notifications>
diff --git a/indra/newview/skins/default/xui/zh/panel_active_object_row.xml b/indra/newview/skins/default/xui/zh/panel_active_object_row.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_adhoc_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml b/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml
old mode 100644
new mode 100755
index 1c8b56b3d62bdf11dd0227fd86e3ada3db3d1e4c..e0a49a0addb60c446f90a9b50dd54eb396144bb0
--- a/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml
+++ b/indra/newview/skins/default/xui/zh/panel_avatar_list_item.xml
@@ -27,5 +27,6 @@
 	<icon name="permission_edit_mine_icon" tool_tip="這位朋友能編輯、刪除或取得你的物件"/>
 	<icon name="permission_map_icon" tool_tip="這位朋友能在地圖上找到你的位置"/>
 	<icon name="permission_online_icon" tool_tip="這位朋友當你上線能看到訊息"/>
+	<button name="info_btn" tool_tip="詳情"/>
 	<button name="profile_btn" tool_tip="察看檔案"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_avatar_tag.xml b/indra/newview/skins/default/xui/zh/panel_avatar_tag.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
old mode 100644
new mode 100755
index 1dfa024138b840e65161e43b2cc29d94c3c08d04..9f59bb32f81ea7562225d992dccb691fb10068f5
--- a/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
+++ b/indra/newview/skins/default/xui/zh/panel_block_list_sidetray.xml
@@ -1,10 +1,11 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="block_list_panel">
-	<text name="title_text">
-		封鎖清單
-	</text>
-	<scroll_list name="blocked" tool_tip="目前封鎖的居民清單"/>
-	<button label="封鎖他人" name="Block resident..." tool_tip="挑選一位居民以進行封鎖"/>
-	<button label="依名稱封鎖物件" name="Block object by name..." tool_tip="依名稱挑選一個物件進行封鎖"/>
-	<button label="解除封鎖" name="Unblock" tool_tip="將居民或物件由封鎖清單中移除"/>
+	<panel label="bottom_panel" name="blocked_buttons_panel">
+		<filter_editor label="過濾器" name="blocked_filter_input"/>
+		<menu_button name="blocked_gear_btn" tool_tip="對所選的人或物件採取動作"/>
+		<menu_button name="view_btn" tool_tip="排序選項"/>
+		<menu_button name="plus_btn" tool_tip="挑選一位居民或物件,加以封鎖"/>
+		<button name="unblock_btn" tool_tip="將居民或物件由封鎖清單中移除"/>
+	</panel>
+	<block_list name="blocked" tool_tip="目前封鎖的居民清單"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml b/indra/newview/skins/default/xui/zh/panel_body_parts_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_bodyparts_list_button_bar.xml b/indra/newview/skins/default/xui/zh/panel_bodyparts_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_bottomtray_lite.xml b/indra/newview/skins/default/xui/zh/panel_bottomtray_lite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_chat_header.xml b/indra/newview/skins/default/xui/zh/panel_chat_header.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_chiclet_bar.xml b/indra/newview/skins/default/xui/zh/panel_chiclet_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_classified_info.xml b/indra/newview/skins/default/xui/zh/panel_classified_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_clothing_list_button_bar.xml b/indra/newview/skins/default/xui/zh/panel_clothing_list_button_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml b/indra/newview/skins/default/xui/zh/panel_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_cof_wearables.xml b/indra/newview/skins/default/xui/zh/panel_cof_wearables.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_conversation_list_item.xml b/indra/newview/skins/default/xui/zh/panel_conversation_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6524d4164568d7ddacb82c6793e73f7c44241583
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_conversation_list_item.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_list_item">
+	<layout_stack name="conversation_item_stack">
+		<layout_panel name="conversation_title_panel">
+			<text name="conversation_title" value="(載入中)"/>
+		</layout_panel>
+	</layout_stack>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_conversation_log_list_item.xml b/indra/newview/skins/default/xui/zh/panel_conversation_log_list_item.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8446ce21309c25f953e9b95b7ad795e7ba2b8609
--- /dev/null
+++ b/indra/newview/skins/default/xui/zh/panel_conversation_log_list_item.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<panel name="conversation_log_list_item">
+	<icon name="voice_session_icon" tool_tip="包含語音交談"/>
+	<icon name="unread_ims_icon" tool_tip="訊息在你登出期間傳來"/>
+	<button name="delete_btn" tool_tip="移除此項目"/>
+</panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_deletable_wearable_list_item.xml b/indra/newview/skins/default/xui/zh/panel_deletable_wearable_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_dummy_clothing_list_item.xml b/indra/newview/skins/default/xui/zh/panel_dummy_clothing_list_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml b/indra/newview/skins/default/xui/zh/panel_edit_alpha.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_classified.xml b/indra/newview/skins/default/xui/zh/panel_edit_classified.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_eyes.xml b/indra/newview/skins/default/xui/zh/panel_edit_eyes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_gloves.xml b/indra/newview/skins/default/xui/zh/panel_edit_gloves.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_hair.xml b/indra/newview/skins/default/xui/zh/panel_edit_hair.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_jacket.xml b/indra/newview/skins/default/xui/zh/panel_edit_jacket.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_pants.xml b/indra/newview/skins/default/xui/zh/panel_edit_pants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_physics.xml b/indra/newview/skins/default/xui/zh/panel_edit_physics.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_pick.xml b/indra/newview/skins/default/xui/zh/panel_edit_pick.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_profile.xml b/indra/newview/skins/default/xui/zh/panel_edit_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shape.xml b/indra/newview/skins/default/xui/zh/panel_edit_shape.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml b/indra/newview/skins/default/xui/zh/panel_edit_shirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml b/indra/newview/skins/default/xui/zh/panel_edit_shoes.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_skin.xml b/indra/newview/skins/default/xui/zh/panel_edit_skin.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml b/indra/newview/skins/default/xui/zh/panel_edit_skirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_socks.xml b/indra/newview/skins/default/xui/zh/panel_edit_socks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml b/indra/newview/skins/default/xui/zh/panel_edit_tattoo.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_underpants.xml b/indra/newview/skins/default/xui/zh/panel_edit_underpants.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml b/indra/newview/skins/default/xui/zh/panel_edit_undershirt.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml b/indra/newview/skins/default/xui/zh/panel_edit_wearable.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_group_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_general.xml b/indra/newview/skins/default/xui/zh/panel_group_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml b/indra/newview/skins/default/xui/zh/panel_group_info_sidetray.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_invite.xml b/indra/newview/skins/default/xui/zh/panel_group_invite.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_land_money.xml b/indra/newview/skins/default/xui/zh/panel_group_land_money.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_list_item.xml b/indra/newview/skins/default/xui/zh/panel_group_list_item.xml
old mode 100644
new mode 100755
index 175293cdf7fa8e9583ef0a99431e300107b53d40..fec4bb572ab791ce408f4d23c30ae3ad50eed625
--- a/indra/newview/skins/default/xui/zh/panel_group_list_item.xml
+++ b/indra/newview/skins/default/xui/zh/panel_group_list_item.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel name="group_list_item">
 	<text name="group_name" value="未知"/>
+	<button name="info_btn" tool_tip="詳情"/>
 	<button name="profile_btn" tool_tip="察看檔案"/>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_group_notices.xml b/indra/newview/skins/default/xui/zh/panel_group_notices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_notify.xml b/indra/newview/skins/default/xui/zh/panel_group_notify.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_group_roles.xml b/indra/newview/skins/default/xui/zh/panel_group_roles.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml b/indra/newview/skins/default/xui/zh/panel_im_control_panel.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_instant_message.xml b/indra/newview/skins/default/xui/zh/panel_instant_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_inventory_item.xml b/indra/newview/skins/default/xui/zh/panel_inventory_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_landmark_info.xml b/indra/newview/skins/default/xui/zh/panel_landmark_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_landmarks.xml b/indra/newview/skins/default/xui/zh/panel_landmarks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_login.xml b/indra/newview/skins/default/xui/zh/panel_login.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_main_inventory.xml b/indra/newview/skins/default/xui/zh/panel_main_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_me.xml b/indra/newview/skins/default/xui/zh/panel_me.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_permissions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml b/indra/newview/skins/default/xui/zh/panel_media_settings_security.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml b/indra/newview/skins/default/xui/zh/panel_navigation_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml b/indra/newview/skins/default/xui/zh/panel_navmesh_rebake.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_chat.xml b/indra/newview/skins/default/xui/zh/panel_nearby_chat.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml b/indra/newview/skins/default/xui/zh/panel_nearby_chat_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_nearby_media.xml b/indra/newview/skins/default/xui/zh/panel_nearby_media.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml b/indra/newview/skins/default/xui/zh/panel_notify_textbox.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_online_status_toast.xml b/indra/newview/skins/default/xui/zh/panel_online_status_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_outbox_inventory.xml b/indra/newview/skins/default/xui/zh/panel_outbox_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml b/indra/newview/skins/default/xui/zh/panel_outfit_edit.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml b/indra/newview/skins/default/xui/zh/panel_outfits_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_inventory_gear_default.xml b/indra/newview/skins/default/xui/zh/panel_outfits_inventory_gear_default.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_list.xml b/indra/newview/skins/default/xui/zh/panel_outfits_list.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml b/indra/newview/skins/default/xui/zh/panel_outfits_wearing.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_people.xml b/indra/newview/skins/default/xui/zh/panel_people.xml
old mode 100644
new mode 100755
index 59ea7b70e2dbe870d74b53c6e9db81ce8e093af8..5f7aca387a63067e49081123c2e003a38b9a7047
--- a/indra/newview/skins/default/xui/zh/panel_people.xml
+++ b/indra/newview/skins/default/xui/zh/panel_people.xml
@@ -14,81 +14,53 @@
 	<string name="no_filtered_friends_msg">
 		找不到你要找的嗎? 請試試[secondlife:///app/search/people/[SEARCH_TERM] 搜尋]。
 	</string>
-	<string name="people_filter_label" value="人員過濾器"/>
-	<string name="groups_filter_label" value="群組過濾器"/>
 	<string name="no_filtered_groups_msg" value="找不到你要找的嗎? 請試試[secondlife:///app/search/groups/[SEARCH_TERM] 搜尋]。"/>
 	<string name="no_groups_msg" value="要尋找群組考慮加入嗎? 請試試[secondlife:///app/search/groups 搜尋]。"/>
 	<string name="MiniMapToolTipMsg" value="[REGION](雙擊以開啟地圖,按下 shift 鍵拖曳來平移)"/>
 	<string name="AltMiniMapToolTipMsg" value="[REGION](雙擊以瞬間傳送,按下 shift 鍵拖曳來平移)"/>
-	<filter_editor label="過濾器" name="filter_input"/>
 	<tab_container name="tabs">
 		<panel label="附近" name="nearby_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="nearby_view_sort_btn" tool_tip="選項"/>
-				<button name="add_friend_btn" tool_tip="添加所選的居民到你的朋友清單"/>
+			<panel label="bottom_panel" name="nearby_buttons_panel">
+				<filter_editor label="人員過濾器" name="nearby_filter_input"/>
+				<button name="gear_btn" tool_tip="對選取的人採取動作"/>
+				<menu_button name="nearby_view_btn" tool_tip="檢視/排序的選項"/>
+				<button name="add_friend_btn" tool_tip="向某位居民發出交友邀請"/>
+				<dnd_button name="nearby_del_btn" tool_tip="將選取的人從朋友名單移除"/>
 			</panel>
 		</panel>
-		<panel label="我的朋友" name="friends_panel">
+		<panel label="朋友" name="friends_panel">
+			<panel label="bottom_panel" name="friends_buttons_panel">
+				<filter_editor label="人員過濾器" name="friends_filter_input"/>
+				<button name="gear_btn" tool_tip="對選取的人採取動作"/>
+				<menu_button name="friends_view_btn" tool_tip="檢視/排序的選項"/>
+				<button name="friends_add_btn" tool_tip="向某位居民發出交友邀請"/>
+				<dnd_button name="friends_del_btn" tool_tip="將選取的人從朋友名單移除"/>
+			</panel>
 			<accordion name="friends_accordion">
 				<accordion_tab name="tab_online" title="上線"/>
 				<accordion_tab name="tab_all" title="全部"/>
 			</accordion>
-			<panel label="bottom_panel" name="bottom_panel">
-				<layout_stack name="bottom_panel">
-					<layout_panel name="options_gear_btn_panel">
-						<menu_button name="friends_viewsort_btn" tool_tip="顯示額外選項"/>
-					</layout_panel>
-					<layout_panel name="add_btn_panel">
-						<button name="add_btn" tool_tip="向居民發出交友邀請"/>
-					</layout_panel>
-					<layout_panel name="trash_btn_panel">
-						<dnd_button name="del_btn" tool_tip="由你的朋友清單移除所選擇的人"/>
-					</layout_panel>
-				</layout_stack>
-			</panel>
 		</panel>
-		<panel label="我的群組" name="groups_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="groups_viewsort_btn" tool_tip="選項"/>
-				<button name="plus_btn" tool_tip="加入群組/創立新群組"/>
-				<button name="activate_btn" tool_tip="啟用所選擇的群組"/>
+		<panel label="群組" name="groups_panel">
+			<panel label="bottom_panel" name="groups_buttons_panel">
+				<filter_editor label="群組過濾器" name="groups_filter_input"/>
+				<menu_button name="groups_gear_btn" tool_tip="對所選群組採取動作"/>
+				<menu_button name="groups_view_btn" tool_tip="檢視/排序的選項"/>
+				<menu_button name="plus_btn" tool_tip="加入群組/創立新群組"/>
+				<dnd_button name="minus_btn" tool_tip="離開所選群組"/>
 			</panel>
 		</panel>
 		<panel label="最近" name="recent_panel">
-			<panel label="bottom_panel" name="bottom_panel">
-				<menu_button name="recent_viewsort_btn" tool_tip="選項"/>
-				<button name="add_friend_btn" tool_tip="添加所選的居民到你的朋友清單"/>
+			<panel label="bottom_panel" name="recent_buttons_panel">
+				<filter_editor label="人員過濾器" name="recent_filter_input"/>
+				<button name="gear_btn" tool_tip="對選取的人採取動作"/>
+				<menu_button name="recent_view_btn" tool_tip="檢視/排序的選項"/>
+				<button name="add_friend_btn" tool_tip="向某位居民發出交友邀請"/>
+				<dnd_button name="recent_del_btn" tool_tip="將選取的人從朋友名單移除"/>
 			</panel>
 		</panel>
+		<panel label="已封鎖的" name="blocked_panel">
+			<panel label="被封鎖的居民與物件" name="panel_block_list_sidetray"/>
+		</panel>
 	</tab_container>
-	<panel name="button_bar">
-		<layout_stack name="bottom_bar_ls">
-			<layout_panel name="view_profile_btn_lp">
-				<button label="檔案" name="view_profile_btn" tool_tip="顯示圖片、群組與其他居民資訊"/>
-			</layout_panel>
-			<layout_panel name="im_btn_lp">
-				<button label="IM" name="im_btn" tool_tip="開啟即時訊息會話"/>
-			</layout_panel>
-			<layout_panel name="call_btn_lp">
-				<button label="通話" name="call_btn" tool_tip="和這位居民通話"/>
-			</layout_panel>
-			<layout_panel name="share_btn_lp">
-				<button label="分享" name="share_btn" tool_tip="分享一個收納區物品"/>
-			</layout_panel>
-			<layout_panel name="teleport_btn_lp">
-				<button label="瞬間傳送" name="teleport_btn" tool_tip="發出瞬間傳送邀請"/>
-			</layout_panel>
-		</layout_stack>
-		<layout_stack name="bottom_bar_ls1">
-			<layout_panel name="group_info_btn_lp">
-				<button label="群組檔案" name="group_info_btn" tool_tip="顯示群組資訊"/>
-			</layout_panel>
-			<layout_panel name="chat_btn_lp">
-				<button label="群組聊天" name="chat_btn" tool_tip="開啟聊天會話"/>
-			</layout_panel>
-			<layout_panel name="group_call_btn_lp">
-				<button label="群組通話" name="group_call_btn" tool_tip="與此群組進行通話"/>
-			</layout_panel>
-		</layout_stack>
-	</panel>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_pick_info.xml b/indra/newview/skins/default/xui/zh/panel_pick_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_picks.xml b/indra/newview/skins/default/xui/zh/panel_picks.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_place_profile.xml b/indra/newview/skins/default/xui/zh/panel_place_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_places.xml b/indra/newview/skins/default/xui/zh/panel_places.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_postcard_message.xml b/indra/newview/skins/default/xui/zh/panel_postcard_message.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_postcard_settings.xml b/indra/newview/skins/default/xui/zh/panel_postcard_settings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml b/indra/newview/skins/default/xui/zh/panel_preferences_advanced.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml b/indra/newview/skins/default/xui/zh/panel_preferences_alerts.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
old mode 100644
new mode 100755
index cf2f81d3139cdd02913a4209022c2b4bceb4e142..e700e35516d49cb875d17c37dea1370678b73e1c
--- a/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_chat.xml
@@ -1,34 +1,86 @@
 <?xml version="1.0" encoding="utf-8" standalone="yes"?>
 <panel label="文字聊天" name="chat">
-	<text name="font_size">
-		字型尺寸:
-	</text>
-	<radio_group name="chat_font_size">
-		<radio_item label="小" name="radio" value="0"/>
-		<radio_item label="中" name="radio2" value="1"/>
-		<radio_item label="大" name="radio3" value="2"/>
-	</radio_group>
-	<check_box initial_value="true" label="聊天時播放打字動作" name="play_typing_animation"/>
-	<check_box label="當我離線時將收到的 IM 訊息郵寄給我" name="send_im_to_email"/>
-	<check_box label="啟用純本文 IM 與聊天歷史紀錄" name="plain_text_chat_history"/>
-	<check_box label="聊天泡泡" name="bubble_text_chat"/>
-	<text name="show_ims_in_label">
-		顯示 IMs 於:
-	</text>
-	<text name="requires_restart_label">
-		(須重新啟動)
-	</text>
-	<radio_group name="chat_window" tool_tip="顯示你的即時訊息在分開的浮動視窗,或是使用很多頁籤的單一浮動視窗(須重新啟動)">
-		<radio_item label="分開視窗" name="radio" value="0"/>
-		<radio_item label="頁籤" name="radio2" value="1"/>
-	</radio_group>
-	<text name="disable_toast_label">
-		啟用傳入聊天的突顯示視窗:
-	</text>
-	<check_box label="群組聊天" name="EnableGroupChatPopups" tool_tip="當群組聊天訊息抵達時查看突顯式視窗"/>
-	<check_box label="IM 聊天" name="EnableIMChatPopups" tool_tip="當即時訊息抵達時查看突顯式視窗"/>
-	<spinner label="附近聊天內容提示框停駐時間:" name="nearby_toasts_lifetime"/>
-	<spinner label="附近聊天內容提示框消退時間:" name="nearby_toasts_fadingtime"/>
+	<panel>
+		<check_box initial_value="true" label="聊天時播放打字動作" name="play_typing_animation"/>
+		<check_box label="當我離線時將收到的 IM 訊息郵寄給我" name="send_im_to_email"/>
+		<check_box label="只有我的朋友和群組可以 IM 或與我通話。" name="voice_call_friends_only_check"/>
+		<text name="font_size">
+			字型尺寸:
+		</text>
+		<combo_box name="chat_font_size">
+			<item label="小" name="Small" value="0"/>
+			<item label="中" name="Medium" value="1"/>
+			<item label="大" name="Large" value="2"/>
+		</combo_box>
+		<check_box label="聊天泡泡" name="bubble_text_chat"/>
+	</panel>
+	<panel>
+		<text name="notifications">
+			通知
+		</text>
+		<text name="friend_ims">
+			朋友 IM:
+		</text>
+		<combo_box name="FriendIMOptions">
+			<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="以突顯式視窗顯示訊息" name="PopUpMessage" value="toast"/>
+			<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
+			<item label="ç„¡" name="None" value="ç„¡"/>
+		</combo_box>
+		<text name="non_friend_ims">
+			非朋友 IM:
+		</text>
+		<combo_box name="NonFriendIMOptions">
+			<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="以突顯式視窗顯示訊息" name="PopUpMessage" value="toast"/>
+			<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
+			<item label="ç„¡" name="None" value="ç„¡"/>
+		</combo_box>
+		<text name="conference_ims">
+			多方交談 IM:
+		</text>
+		<combo_box name="ConferenceIMOptions">
+			<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="以突顯式視窗顯示訊息" name="PopUpMessage" value="toast"/>
+			<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
+			<item label="ç„¡" name="None" value="ç„¡"/>
+		</combo_box>
+		<text name="group_chat">
+			群組聊天:
+		</text>
+		<combo_box name="GroupChatOptions">
+			<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="以突顯式視窗顯示訊息" name="PopUpMessage" value="toast"/>
+			<item label="Flash 工具列按鈕" name="FlashToolbarButton" value="flash"/>
+			<item label="ç„¡" name="None" value="ç„¡"/>
+		</combo_box>
+		<text name="nearby_chat">
+			附近的聊天:
+		</text>
+		<combo_box name="NearbyChatOptions">
+			<item label="開啟交談視窗" name="OpenConversationsWindow" value="openconversations"/>
+			<item label="以突顯式視窗顯示訊息" name="PopUpMessage" value="toast"/>
+			<item label="Flash 工具列按鈕" name="FlashToolBarButton" value="flash"/>
+			<item label="ç„¡" name="None" value="ç„¡"/>
+		</combo_box>
+		<text name="notifications_alert">
+			若要暫時停止所有通知,請設定「溝通 &gt; 請勿打擾」。
+		</text>
+	</panel>
+	<panel>
+		<text name="play_sound">
+			播放聲音:
+		</text>
+		<check_box label="新交談" name="new_conversation"/>
+		<check_box label="語音通話來電" name="incoming_voice_call"/>
+		<check_box label="瞬間傳送邀請" name="teleport_offer"/>
+		<check_box label="收納物品贈送" name="inventory_offer"/>
+	</panel>
+	<panel>
+		<button label="清空記錄……" name="clear_log"/>
+		<button label="刪除交談內容記錄……" name="delete_transcripts"/>
+		<button label="瀏覽…" label_selected="瀏覽" name="log_path_button"/>
+	</panel>
 	<button label="翻譯…" name="ok_btn"/>
 	<button label="自動取代…" name="autoreplace_showgui"/>
 	<button label="拼字檢查…" name="spellcheck_showgui"/>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_colors.xml b/indra/newview/skins/default/xui/zh/panel_preferences_colors.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
old mode 100644
new mode 100755
index 7e67a0d02d0b2410de17e0bec1346ec415378dea..044edbed7014b51637de0a154db98c0bfa64d03b
--- a/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
+++ b/indra/newview/skins/default/xui/zh/panel_preferences_general.xml
@@ -68,9 +68,9 @@
 		<combo_box.item label="絕不" name="item4"/>
 	</combo_box>
 	<text name="text_box3">
-		忙碌模式回應:
+		「請勿打擾」預設回應:
 	</text>
-	<text_editor name="busy_response">
+	<text_editor name="do_not_disturb_response">
 		log_in_to_change
 	</text_editor>
 </panel>
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml b/indra/newview/skins/default/xui/zh/panel_preferences_graphics1.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_move.xml b/indra/newview/skins/default/xui/zh/panel_preferences_move.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml b/indra/newview/skins/default/xui/zh/panel_preferences_privacy.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml b/indra/newview/skins/default/xui/zh/panel_preferences_setup.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml b/indra/newview/skins/default/xui/zh/panel_preferences_sound.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml b/indra/newview/skins/default/xui/zh/panel_prim_media_controls.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_region_covenant.xml b/indra/newview/skins/default/xui/zh/panel_region_covenant.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_region_debug.xml b/indra/newview/skins/default/xui/zh/panel_region_debug.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_region_environment.xml b/indra/newview/skins/default/xui/zh/panel_region_environment.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_region_estate.xml b/indra/newview/skins/default/xui/zh/panel_region_estate.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_region_general.xml b/indra/newview/skins/default/xui/zh/panel_region_general.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_region_terrain.xml b/indra/newview/skins/default/xui/zh/panel_region_terrain.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_script_ed.xml b/indra/newview/skins/default/xui/zh/panel_script_ed.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml b/indra/newview/skins/default/xui/zh/panel_script_limits_my_avatar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml b/indra/newview/skins/default/xui/zh/panel_script_limits_region_memory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_script_question_toast.xml b/indra/newview/skins/default/xui/zh/panel_script_question_toast.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_scrolling_param.xml b/indra/newview/skins/default/xui/zh/panel_scrolling_param.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_scrolling_param_base.xml b/indra/newview/skins/default/xui/zh/panel_scrolling_param_base.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_side_tray_tab_caption.xml b/indra/newview/skins/default/xui/zh/panel_side_tray_tab_caption.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_local.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_local.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_options.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_postcard.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_postcard.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_snapshot_profile.xml b/indra/newview/skins/default/xui/zh/panel_snapshot_profile.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_sound_devices.xml b/indra/newview/skins/default/xui/zh/panel_sound_devices.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml b/indra/newview/skins/default/xui/zh/panel_stand_stop_flying.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_status_bar.xml b/indra/newview/skins/default/xui/zh/panel_status_bar.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_teleport_history.xml b/indra/newview/skins/default/xui/zh/panel_teleport_history.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml b/indra/newview/skins/default/xui/zh/panel_teleport_history_item.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_voice_effect.xml b/indra/newview/skins/default/xui/zh/panel_voice_effect.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_volume_pulldown.xml b/indra/newview/skins/default/xui/zh/panel_volume_pulldown.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/panel_world_map.xml b/indra/newview/skins/default/xui/zh/panel_world_map.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/role_actions.xml b/indra/newview/skins/default/xui/zh/role_actions.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml b/indra/newview/skins/default/xui/zh/sidepanel_appearance.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml b/indra/newview/skins/default/xui/zh/sidepanel_inventory.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_item_info.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
old mode 100644
new mode 100755
index 982dde40105d572eb35056556836693f753fad74..60f44a3d88f9f70e4bbf15ca0779929fd2818571
--- a/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
+++ b/indra/newview/skins/default/xui/zh/sidepanel_task_info.xml
@@ -72,6 +72,7 @@
 			<combo_box.item label="購買物件" name="Buyobject"/>
 			<combo_box.item label="支付物件" name="Payobject"/>
 			<combo_box.item label="打開" name="Open"/>
+			<combo_box.item label="縮放" name="Zoom"/>
 		</combo_box>
 		<panel name="perms_inv">
 			<text name="perm_modify">
diff --git a/indra/newview/skins/default/xui/zh/strings.xml b/indra/newview/skins/default/xui/zh/strings.xml
old mode 100644
new mode 100755
index 7e17ed68647bb8374873e8adbe251226c09c6785..31713ac2816819e1b6ba846409bcc00bba22f306
--- a/indra/newview/skins/default/xui/zh/strings.xml
+++ b/indra/newview/skins/default/xui/zh/strings.xml
@@ -614,8 +614,8 @@ http://secondlife.com/viewer-access-faq
 	<string name="AvatarAway">
 		離開
 	</string>
-	<string name="AvatarBusy">
-		忙碌
+	<string name="AvatarDoNotDisturb">
+		請勿打擾
 	</string>
 	<string name="AvatarMuted">
 		封鎖的
@@ -851,6 +851,12 @@ http://secondlife.com/viewer-access-faq
 	<string name="ST_NO_JOINT">
 		找不到 ROOT 或旋軸。
 	</string>
+	<string name="NearbyChatTitle">
+		附近的聊天中
+	</string>
+	<string name="NearbyChatLabel">
+		(附近的聊天)
+	</string>
 	<string name="whisper">
 		低語:
 	</string>
@@ -914,12 +920,15 @@ http://secondlife.com/viewer-access-faq
 	<string name="ControlYourCamera">
 		控制你的攝影機
 	</string>
-	<string name="TeleportYourAgent">
-		瞬間傳送你本人
-	</string>
 	<string name="NotConnected">
 		未聯接
 	</string>
+	<string name="AgentNameSubst">
+		(你)
+	</string>
+	<string name="TeleportYourAgent">
+		瞬間傳送你本人
+	</string>
 	<string name="SIM_ACCESS_PG">
 		一般普級
 	</string>
@@ -1001,18 +1010,6 @@ http://secondlife.com/viewer-access-faq
 	<string name="dictionary_files">
 		å­—å…¸
 	</string>
-	<string name="AvatarSetNotAway">
-		非離開
-	</string>
-	<string name="AvatarSetAway">
-		離開
-	</string>
-	<string name="AvatarSetNotBusy">
-		非忙碌
-	</string>
-	<string name="AvatarSetBusy">
-		忙碌
-	</string>
 	<string name="shape">
 		體形
 	</string>
@@ -1981,8 +1978,8 @@ http://secondlife.com/viewer-access-faq
 	<string name="PanelContentsNewScript">
 		新腳本
 	</string>
-	<string name="BusyModeResponseDefault">
-		你傳訊過去的居民目前處於忙碌狀態,這意味著他要求不被打擾。  你的訊息仍將留存並顯示於對方的 IM 面板上供稍後查閱。
+	<string name="DoNotDisturbModeResponseDefault">
+		這居民處於「請勿打擾」狀態,不會立即看到你的訊息。
 	</string>
 	<string name="MuteByName">
 		(按名稱)
@@ -2095,9 +2092,6 @@ http://secondlife.com/viewer-access-faq
 	<string name="GroupMoneyDate">
 		[weekday,datetime,utc] [mth,datetime,utc] [day,datetime,utc], [year,datetime,utc]
 	</string>
-	<string name="ViewerObjectContents">
-		內容
-	</string>
 	<string name="AcquiredItems">
 		取得物品
 	</string>
@@ -3869,7 +3863,7 @@ http://secondlife.com/viewer-access-faq
 		一般普級地區
 	</string>
 	<string name="LocationCtrlSeeAVsTooltip">
-		可看到本地段外的化身,並與之交談
+		這地段外的其他化身,看不見也聽不到位於地段裡的化身
 	</string>
 	<string name="LocationCtrlPathfindingDirtyTooltip">
 		地區重新產出之前,可移動物件可能無法正常運作。
@@ -3946,6 +3940,12 @@ http://secondlife.com/viewer-access-faq
 	<string name="IM_unblock_only_groups_friends">
 		要察看這訊息,你必須到「偏好設定 / 隱私」,取消勾選「只有我的朋友和群組可以 IM 或與我通話」。
 	</string>
+	<string name="OnlineStatus">
+		上線
+	</string>
+	<string name="OfflineStatus">
+		離線
+	</string>
 	<string name="answered_call">
 		你的通話已經接通
 	</string>
@@ -3955,6 +3955,9 @@ http://secondlife.com/viewer-access-faq
 	<string name="you_joined_call">
 		你發起了語音通話
 	</string>
+	<string name="you_auto_rejected_call-im">
+		因為處於「請勿打擾」模式,你已自動拒聽這通語音來電。
+	</string>
 	<string name="name_started_call">
 		[NAME] 發起了語音通話
 	</string>
@@ -3971,7 +3974,7 @@ http://secondlife.com/viewer-access-faq
 		聯接中...
 	</string>
 	<string name="conference-title">
-		臨時多方通話
+		多人聊天
 	</string>
 	<string name="conference-title-incoming">
 		和 [AGENT_NAME] 多方通話
@@ -4863,6 +4866,9 @@ http://secondlife.com/viewer-access-faq
 	<string name="Command_Chat_Label">
 		聊天
 	</string>
+	<string name="Command_Conversations_Label">
+		交談
+	</string>
 	<string name="Command_Compass_Label">
 		羅盤
 	</string>
@@ -4938,6 +4944,9 @@ http://secondlife.com/viewer-access-faq
 	<string name="Command_Chat_Tooltip">
 		透過文字和附近人們聊天
 	</string>
+	<string name="Command_Conversations_Tooltip">
+		和所有人交談
+	</string>
 	<string name="Command_Compass_Tooltip">
 		指南針
 	</string>
@@ -5067,4 +5076,13 @@ http://secondlife.com/viewer-access-faq
 	<string name="UserDictionary">
 		[User]
 	</string>
+	<string name="logging_calls_disabled_log_empty">
+		交談未留記錄。 若想開始留記錄,請到「偏好設定 &gt; 聊天」,選擇「儲存:只留歷史記錄」或「儲存:歷史記錄兼交談內容」。
+	</string>
+	<string name="logging_calls_disabled_log_not_empty">
+		將不再為交談留記錄。 若想恢復留存記錄,請到「偏好設定 &gt; 聊天」,選擇「儲存:只留歷史記錄」或「儲存:歷史記錄兼交談內容」。
+	</string>
+	<string name="logging_calls_enabled_log_empty">
+		目前沒有交談記錄。 在你聯絡某人或某人聯絡你之後,這裡將留存記錄。
+	</string>
 </strings>
diff --git a/indra/newview/skins/default/xui/zh/teleport_strings.xml b/indra/newview/skins/default/xui/zh/teleport_strings.xml
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/gpus_results.txt b/indra/newview/tests/gpus_results.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/gpus_seen.txt b/indra/newview/tests/gpus_seen.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llagentaccess_test.cpp b/indra/newview/tests/llagentaccess_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llcapabilitylistener_test.cpp b/indra/newview/tests/llcapabilitylistener_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lldateutil_test.cpp b/indra/newview/tests/lldateutil_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lldir_stub.cpp b/indra/newview/tests/lldir_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llglslshader_stub.cpp b/indra/newview/tests/llglslshader_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lllogininstance_test.cpp b/indra/newview/tests/lllogininstance_test.cpp
old mode 100644
new mode 100755
index 7705b4c567d9ae1f9d81cb37c1ede30824ea67d1..f038112fd07ccf4ccea9bf7e6d78bea82450c343
--- a/indra/newview/tests/lllogininstance_test.cpp
+++ b/indra/newview/tests/lllogininstance_test.cpp
@@ -50,7 +50,7 @@ const std::string VIEWERLOGIN_GRIDLABEL("viewerlogin_grid");
 const std::string APPVIEWER_SERIALNUMBER("appviewer_serialno");
 
 const std::string VIEWERLOGIN_CHANNEL("invalid_channel");
-const std::string VIEWERLOGIN_VERSION_CHANNEL("invalid_version");
+const std::string VIEWERLOGIN_VERSION("invalid_version");
 
 // Link seams.
 
@@ -73,7 +73,7 @@ void LLViewerWindow::setShowProgress(BOOL show) {}
 LLProgressView * LLViewerWindow::getProgressView(void) const { return 0; }
 
 LLViewerWindow* gViewerWindow;
-
+	
 class LLLogin::Impl
 {
 };
@@ -183,7 +183,7 @@ void LLUIColorTable::saveUserSettings(void)const {}
 
 //-----------------------------------------------------------------------------
 #include "../llversioninfo.h"
-const std::string &LLVersionInfo::getChannelAndVersion() { return VIEWERLOGIN_VERSION_CHANNEL; }
+const std::string &LLVersionInfo::getVersion() { return VIEWERLOGIN_VERSION; }
 const std::string &LLVersionInfo::getChannel() { return VIEWERLOGIN_CHANNEL; }
 
 //-----------------------------------------------------------------------------
@@ -208,11 +208,15 @@ std::string const & LLUpdaterService::pumpName(void)
 	return wakka;
 }
 bool LLUpdaterService::updateReadyToInstall(void) { return false; }
-void LLUpdaterService::initialize(const std::string& protocol_version,
-				const std::string& url, 
-				const std::string& path,
-				const std::string& channel,
-								  const std::string& version) {}
+void LLUpdaterService::initialize(const std::string& url, 
+								  const std::string& path,
+								  const std::string& channel,
+								  const std::string& version,
+								  const std::string& platform,
+								  const std::string& platform_version,
+								  const unsigned char uniqueid[MD5HEX_STR_SIZE],
+								  const bool&         willing_to_test
+								  ) {}
 
 void LLUpdaterService::setCheckPeriod(unsigned int seconds) {}
 void LLUpdaterService::startChecking(bool install_if_ready) {}
@@ -221,6 +225,12 @@ bool LLUpdaterService::isChecking() { return false; }
 LLUpdaterService::eUpdaterState LLUpdaterService::getState() { return INITIAL; }
 std::string LLUpdaterService::updatedVersion() { return ""; }
 
+bool llHashedUniqueID(unsigned char* id) 
+{
+	memcpy( id, "66666666666666666666666666666666", MD5HEX_STR_SIZE );
+	return true;
+}
+
 //-----------------------------------------------------------------------------
 #include "llnotifications.h"
 #include "llfloaterreg.h"
@@ -360,6 +370,7 @@ namespace tut
 			accountCredential->setCredentialData(identifier, authenticator);			
 
 			logininstance->setNotificationsInterface(&notifications);
+			logininstance->setPlatformInfo("win", "1.3.5");
 		}
 
 		LLLoginInstance* logininstance;
diff --git a/indra/newview/tests/llmediadataclient_test.cpp b/indra/newview/tests/llmediadataclient_test.cpp
old mode 100644
new mode 100755
index 41cb344808371cf9dc9c87fe31c28b7f09a9782d..3e55336f2de25e454488a1e37b190210bb273de3
--- a/indra/newview/tests/llmediadataclient_test.cpp
+++ b/indra/newview/tests/llmediadataclient_test.cpp
@@ -39,6 +39,7 @@
 #include "../llvovolume.h"
 
 #include "../../llprimitive/llmediaentry.cpp"
+#include "../../llprimitive/llmaterialid.cpp"
 #include "../../llprimitive/lltextureentry.cpp"
 #include "../../llmessage/tests/llcurl_stub.cpp"
 
diff --git a/indra/newview/tests/llpipeline_stub.cpp b/indra/newview/tests/llpipeline_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llremoteparcelrequest_test.cpp b/indra/newview/tests/llremoteparcelrequest_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llsecapi_test.cpp b/indra/newview/tests/llsecapi_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llsechandler_basic_test.cpp b/indra/newview/tests/llsechandler_basic_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llsimplestat_test.cpp b/indra/newview/tests/llsimplestat_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llsky_stub.cpp b/indra/newview/tests/llsky_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llslurl_test.cpp b/indra/newview/tests/llslurl_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lltextureinfo_test.cpp b/indra/newview/tests/lltextureinfo_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lltextureinfodetails_test.cpp b/indra/newview/tests/lltextureinfodetails_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lltexturestatsuploader_test.cpp b/indra/newview/tests/lltexturestatsuploader_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/lltranslate_test.cpp b/indra/newview/tests/lltranslate_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llversioninfo_test.cpp b/indra/newview/tests/llversioninfo_test.cpp
old mode 100644
new mode 100755
index 398d8f16ed4c2a75991d1e6db310ba0072d45cb2..6b0be29c2d284ab96b19ff4f8a2bff750196c8b9
--- a/indra/newview/tests/llversioninfo_test.cpp
+++ b/indra/newview/tests/llversioninfo_test.cpp
@@ -28,7 +28,6 @@
 #include "../test/lltut.h"
 
 #include "../llversioninfo.h"
-#include "llversionviewer.h"
 
 namespace tut
 {
@@ -38,20 +37,20 @@ namespace tut
 			: mResetChannel("Reset Channel")
 		{
 			std::ostringstream stream;
-			stream << LL_VERSION_MAJOR << "."
-				   << LL_VERSION_MINOR << "."
-				   << LL_VERSION_PATCH << "."
-				   << LL_VERSION_BUILD;
+			stream << LL_VIEWER_VERSION_MAJOR << "."
+				   << LL_VIEWER_VERSION_MINOR << "."
+				   << LL_VIEWER_VERSION_PATCH << "."
+				   << LL_VIEWER_VERSION_BUILD;
 			mVersion = stream.str();
 			stream.str("");
 
-			stream << LL_VERSION_MAJOR << "."
-				   << LL_VERSION_MINOR << "."
-				   << LL_VERSION_PATCH;
+			stream << LL_VIEWER_VERSION_MAJOR << "."
+				   << LL_VIEWER_VERSION_MINOR << "."
+				   << LL_VIEWER_VERSION_PATCH;
 			mShortVersion = stream.str();
 			stream.str("");
 
-			stream << LL_CHANNEL
+			stream << LL_VIEWER_CHANNEL
 				   << " "
 				   << mVersion;
 			mVersionAndChannel = stream.str();
@@ -78,20 +77,19 @@ namespace tut
 	{
 		ensure_equals("Major version", 
 					  LLVersionInfo::getMajor(), 
-					  LL_VERSION_MAJOR);
+					  LL_VIEWER_VERSION_MAJOR);
 		ensure_equals("Minor version", 
 					  LLVersionInfo::getMinor(), 
-					  LL_VERSION_MINOR);
+					  LL_VIEWER_VERSION_MINOR);
 		ensure_equals("Patch version", 
 					  LLVersionInfo::getPatch(), 
-					  LL_VERSION_PATCH);
+					  LL_VIEWER_VERSION_PATCH);
 		ensure_equals("Build version", 
 					  LLVersionInfo::getBuild(), 
-					  LL_VERSION_BUILD);
+					  LL_VIEWER_VERSION_BUILD);
 		ensure_equals("Channel version", 
 					  LLVersionInfo::getChannel(), 
-					  LL_CHANNEL);
-
+					  LL_VIEWER_CHANNEL);
 		ensure_equals("Version String", 
 					  LLVersionInfo::getVersion(), 
 					  mVersion);
diff --git a/indra/newview/tests/llviewerhelputil_test.cpp b/indra/newview/tests/llviewerhelputil_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llviewernetwork_test.cpp b/indra/newview/tests/llviewernetwork_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llviewershadermgr_stub.cpp b/indra/newview/tests/llviewershadermgr_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llwlanimator_stub.cpp b/indra/newview/tests/llwlanimator_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llwldaycycle_stub.cpp b/indra/newview/tests/llwldaycycle_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llwlparammanager_test.cpp b/indra/newview/tests/llwlparammanager_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llwlparamset_stub.cpp b/indra/newview/tests/llwlparamset_stub.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llworldmap_test.cpp b/indra/newview/tests/llworldmap_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llworldmipmap_test.cpp b/indra/newview/tests/llworldmipmap_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/llxmlrpclistener_test.cpp b/indra/newview/tests/llxmlrpclistener_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/newview/tests/test_llxmlrpc_peer.py b/indra/newview/tests/test_llxmlrpc_peer.py
old mode 100644
new mode 100755
diff --git a/indra/newview/tr.lproj/language.txt b/indra/newview/tr.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/uk.lproj/language.txt b/indra/newview/uk.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py
old mode 100644
new mode 100755
index fcd26c8620db8b83b32c3c6b5fd649204931c72d..5e08e54b7c6de60882f99a135e607a8957065278
--- a/indra/newview/viewer_manifest.py
+++ b/indra/newview/viewer_manifest.py
@@ -154,20 +154,10 @@ def construct(self):
 
             # Files in the newview/ directory
             self.path("gpu_table.txt")
-
-            # The summary.json file gets left in the base checkout dir by
-            # build.sh. It's only created for a build.sh build.
-            if not self.path2basename(os.path.join(os.pardir, os.pardir), "summary.json"):
+            # The summary.json file gets left in the build directory by newview/CMakeLists.txt.
+            if not self.path2basename(os.pardir, "summary.json"):
                 print "No summary.json file"
 
-    def login_channel(self):
-        """Channel reported for login and upgrade purposes ONLY;
-        used for A/B testing"""
-        # NOTE: Do not return the normal channel if login_channel
-        # is not specified, as some code may branch depending on
-        # whether or not this is present
-        return self.args.get('login_channel')
-
     def grid(self):
         return self.args['grid']
     def channel(self):
@@ -179,16 +169,24 @@ def channel_oneword(self):
     def channel_lowerword(self):
         return self.channel_oneword().lower()
 
+    def app_name(self):
+        app_suffix='Test'
+        channel_type=self.channel_lowerword()
+        if channel_type.startswith('release') :
+            app_suffix='Viewer'
+        elif re.match('^(beta|project).*',channel_type) :
+            app_suffix=self.channel_unique()
+        return "Second Life "+app_suffix
+        
     def icon_path(self):
         icon_path="icons/"
         channel_type=self.channel_lowerword()
-        if channel_type == 'release' \
-        or channel_type == 'development' \
-        :
-            icon_path += channel_type
-        elif channel_type == 'betaviewer' :
+        print "Icon channel type '%s'" % channel_type
+        if channel_type.startswith('release') :
+            icon_path += 'release'
+        elif re.match('^beta.*',channel_type) :
             icon_path += 'beta'
-        elif re.match('project.*',channel_type) :
+        elif re.match('^project.*',channel_type) :
             icon_path += 'project'
         else :
             icon_path += 'test'
@@ -205,14 +203,6 @@ def flags_list(self):
                          "--helperuri http://preview-%(grid)s.secondlife.com/helpers/" %\
                            {'grid':self.grid()}
 
-        # set command line flags for channel
-        channel_flags = ''
-        if self.login_channel() and self.login_channel() != self.channel():
-            # Report a special channel during login, but use default
-            channel_flags = '--channel "%s"' % (self.login_channel())
-        elif not self.default_channel():
-            channel_flags = '--channel "%s"' % self.channel()
-
         # Deal with settings 
         setting_flags = ''
         if not self.default_channel() or not self.default_grid():
@@ -223,7 +213,7 @@ def flags_list(self):
                 setting_flags = '--settings settings_%s_%s.xml'\
                                 % (self.grid(), self.channel_lowerword())
                                                 
-        return " ".join((channel_flags, grid_flags, setting_flags)).strip()
+        return " ".join((grid_flags, setting_flags)).strip()
 
     def extract_names(self,src):
         try:
@@ -250,13 +240,13 @@ def extract_names(self,src):
 
 class WindowsManifest(ViewerManifest):
     def final_exe(self):
-        if self.default_channel():
-            if self.default_grid():
-                return "SecondLife.exe"
-            else:
-                return "SecondLifePreview.exe"
-        else:
-            return ''.join(self.channel().split()) + '.exe'
+        app_suffix="Test"
+        channel_type=self.channel_lowerword()
+        if channel_type.startswith('release') :
+            app_suffix=''
+        elif re.match('^(beta|project).*',channel_type) :
+            app_suffix=''.join(self.channel_unique().split())
+        return "SecondLife"+app_suffix+".exe"
 
     def test_msvcrt_and_copy_action(self, src, dst):
         # This is used to test a dll manifest.
@@ -304,26 +294,9 @@ def test_for_no_msvcrt_manifest_and_copy_action(self, src, dst):
         else:
             print "Doesn't exist:", src
         
-    ### DISABLED MANIFEST CHECKING for vs2010.  we may need to reenable this
-    # shortly.  If this hasn't been reenabled by the 2.9 viewer release then it
-    # should be deleted -brad
-    #def enable_crt_manifest_check(self):
-    #    if self.is_packaging_viewer():
-    #       WindowsManifest.copy_action = WindowsManifest.test_msvcrt_and_copy_action
-
-    #def enable_no_crt_manifest_check(self):
-    #    if self.is_packaging_viewer():
-    #        WindowsManifest.copy_action = WindowsManifest.test_for_no_msvcrt_manifest_and_copy_action
-
-    #def disable_manifest_check(self):
-    #    if self.is_packaging_viewer():
-    #        del WindowsManifest.copy_action
-
     def construct(self):
         super(WindowsManifest, self).construct()
 
-        #self.enable_crt_manifest_check()
-
         if self.is_packaging_viewer():
             # Find secondlife-bin.exe in the 'configuration' dir, then rename it to the result of final_exe.
             self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe())
@@ -333,15 +306,11 @@ def construct(self):
                                         'llplugin', 'slplugin', self.args['configuration']),
                            "slplugin.exe")
         
-        #self.disable_manifest_check()
-
         self.path2basename("../viewer_components/updater/scripts/windows", "update_install.bat")
         # Get shared libs from the shared libs staging directory
         if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']),
                        dst=""):
 
-            #self.enable_crt_manifest_check()
-            
             # Get llcommon and deps. If missing assume static linkage and continue.
             try:
                 self.path('llcommon.dll')
@@ -353,8 +322,6 @@ def construct(self):
                 print err.message
                 print "Skipping llcommon.dll (assuming llcommon was linked statically)"
 
-            #self.disable_manifest_check()
-
             # Mesh 3rd party libs needed for auto LOD and collada reading
             try:
                 if self.args['configuration'].lower() == 'debug':
@@ -367,10 +334,14 @@ def construct(self):
                 print err.message
                 print "Skipping COLLADA and GLOD libraries (assumming linked statically)"
 
-
-            # Get fmod dll, continue if missing
-            if not self.path("fmod.dll"):
-                print "Skipping fmod.dll"
+            # Get fmodex dll, continue if missing
+            try:
+                if self.args['configuration'].lower() == 'debug':
+                    self.path("fmodexL.dll")
+                else:
+                    self.path("fmodex.dll")
+            except:
+                print "Skipping fmodex audio library(assuming other audio engine)"
 
             # For textures
             if self.args['configuration'].lower() == 'debug':
@@ -419,8 +390,6 @@ def construct(self):
         self.path("featuretable.txt")
         self.path("featuretable_xp.txt")
 
-        #self.enable_no_crt_manifest_check()
-
         # Media plugins - QuickTime
         if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"):
             self.path("media_plugin_quicktime.dll")
@@ -500,15 +469,10 @@ def construct(self):
 
                 self.end_prefix()
 
-        #self.disable_manifest_check()
-
         # pull in the crash logger and updater from other projects
         # tag:"crash-logger" here as a cue to the exporter
         self.path(src='../win_crash_logger/%s/windows-crash-logger.exe' % self.args['configuration'],
                   dst="win_crash_logger.exe")
-# For CHOP-397, windows updater no longer used.
-#        self.path(src='../win_updater/%s/windows-updater.exe' % self.args['configuration'],
-#                  dst="updater.exe")
 
         if not self.is_packaging_viewer():
             self.package_file = "copied_deps"    
@@ -571,6 +535,7 @@ def package_finish(self):
             'channel':self.channel(),
             'channel_oneword':self.channel_oneword(),
             'channel_unique':self.channel_unique(),
+            'subchannel_underscores':'_'.join(self.channel_unique().split())
             }
 
         version_vars = """
@@ -592,7 +557,7 @@ def package_finish(self):
                 Caption "Second Life"
                 """
             else:
-                # beta grid viewer
+                # alternate grid viewer
                 installer_file = "Second_Life_%(version_dashes)s_(%(grid_caps)s)_Setup.exe"
                 grid_vars_template = """
                 OutFile "%(installer_file)s"
@@ -604,8 +569,8 @@ def package_finish(self):
                 Caption "Second Life %(grid)s ${VERSION}"
                 """
         else:
-            # some other channel on some grid
-            installer_file = "Second_Life_%(version_dashes)s_%(channel_oneword)s_Setup.exe"
+            # some other channel (grid name not used)
+            installer_file = "Second_Life_%(version_dashes)s_%(subchannel_underscores)s_Setup.exe"
             grid_vars_template = """
             OutFile "%(installer_file)s"
             !define INSTFLAGS "%(flags)s"
@@ -667,13 +632,15 @@ def construct(self):
         self.path(self.args['configuration'] + "/Second Life.app", dst="")
 
         if self.prefix(src="", dst="Contents"):  # everything goes in Contents
-            self.path("Info-SecondLife.plist", dst="Info.plist")
+            self.path("Info.plist", dst="Info.plist")
 
             # copy additional libs in <bundle>/Contents/MacOS/
             self.path("../packages/lib/release/libndofdev.dylib", dst="Resources/libndofdev.dylib")
             self.path("../packages/lib/release/libhunspell-1.3.0.dylib", dst="Resources/libhunspell-1.3.0.dylib")
 
-            self.path("../viewer_components/updater/scripts/darwin/update_install", "MacOS/update_install")
+            if self.prefix(dst="MacOS"):
+                self.path2basename("../viewer_components/updater/scripts/darwin", "*.py")
+                self.end_prefix()
 
             # most everything goes in the Resources directory
             if self.prefix(src="", dst="Resources"):
@@ -695,7 +662,11 @@ def construct(self):
                 self.path("SecondLife.nib")
                 
                 # Translations
-                self.path("English.lproj")
+                self.path("English.lproj/language.txt")
+                self.replace_in(src="English.lproj/InfoPlist.strings",
+                                dst="English.lproj/InfoPlist.strings",
+                                searchdict={'%%VERSION%%':'.'.join(self.args['version'])}
+                                )
                 self.path("German.lproj")
                 self.path("Japanese.lproj")
                 self.path("Korean.lproj")
@@ -744,6 +715,7 @@ def path_optional(src, dst):
                                 "libcollada14dom.dylib",
                                 "libexpat.1.5.2.dylib",
                                 "libexception_handler.dylib",
+                                "libfmodex.dylib",
                                 "libGLOD.dylib",
                                 ):
                     dylibs += path_optional(os.path.join(libdir, libfile), libfile)
@@ -760,13 +732,8 @@ def path_optional(src, dst):
                                 ):
                      self.path2basename(libdir, libfile)
                 
-                # FMOD for sound
-                libfile = "libfmodwrapper.dylib"
-                path_optional(os.path.join(self.args['configuration'], libfile), libfile)
-                
                 # our apps
                 for app_bld_dir, app in (("mac_crash_logger", "mac-crash-logger.app"),
-                                         ("mac_updater", "mac-updater.app"),
                                          # plugin launcher
                                          (os.path.join("llplugin", "slplugin"), "SLPlugin.app"),
                                          ):
@@ -812,7 +779,7 @@ def path_optional(src, dst):
     def copy_finish(self):
         # Force executable permissions to be set for scripts
         # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802
-        for script in 'Contents/MacOS/update_install',:
+        for script in 'Contents/MacOS/update_install.py',:
             self.run_command("chmod +x %r" % os.path.join(self.get_dst_prefix(), script))
 
     def package_finish(self):
@@ -881,10 +848,7 @@ def package_finish(self):
 
             # Copy everything in to the mounted .dmg
 
-            if self.default_channel() and not self.default_grid():
-                app_name = "Second Life " + self.args['grid']
-            else:
-                app_name = channel_standin.strip()
+            app_name = self.app_name()
 
             # Hack:
             # Because there is no easy way to coerce the Finder into positioning
@@ -1069,15 +1033,13 @@ def construct(self):
             self.path("libaprutil-1.so")
             self.path("libaprutil-1.so.0")
             self.path("libaprutil-1.so.0.4.1")
+            self.path("libboost_context-mt.so.*")
+            self.path("libboost_filesystem-mt.so.*")
             self.path("libboost_program_options-mt.so.*")
             self.path("libboost_regex-mt.so.*")
-            self.path("libboost_thread-mt.so.*")
-            self.path("libboost_filesystem-mt.so.*")
             self.path("libboost_signals-mt.so.*")
             self.path("libboost_system-mt.so.*")
-            self.path("libbreakpad_client.so.0.0.0")
-            self.path("libbreakpad_client.so.0")
-            self.path("libbreakpad_client.so")
+            self.path("libboost_thread-mt.so.*")
             self.path("libcollada14dom.so")
             self.path("libdb*.so")
             self.path("libcrypto.so.*")
@@ -1124,11 +1086,13 @@ def construct(self):
                 pass
 
             try:
-                    self.path("libfmod-3.75.so")
+                    self.path("libfmodex-*.so")
+                    self.path("libfmodex.so")
                     pass
             except:
-                    print "Skipping libfmod-3.75.so - not found"
+                    print "Skipping libfmodex.so - not found"
                     pass
+
             self.end_prefix("lib")
 
             # Vivox runtimes
diff --git a/indra/newview/zh-Hans.lproj/language.txt b/indra/newview/zh-Hans.lproj/language.txt
old mode 100644
new mode 100755
diff --git a/indra/test/CMakeLists.txt b/indra/test/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/test/blowfish.1.bin b/indra/test/blowfish.1.bin
old mode 100644
new mode 100755
diff --git a/indra/test/blowfish.2.bin b/indra/test/blowfish.2.bin
old mode 100644
new mode 100755
diff --git a/indra/test/blowfish.digits.txt b/indra/test/blowfish.digits.txt
old mode 100644
new mode 100755
diff --git a/indra/test/catch_and_store_what_in.h b/indra/test/catch_and_store_what_in.h
old mode 100644
new mode 100755
diff --git a/indra/test/debug.h b/indra/test/debug.h
old mode 100644
new mode 100755
diff --git a/indra/test/io.cpp b/indra/test/io.cpp
old mode 100644
new mode 100755
index 47a67deed00c80957fbfdc0136cbfe8417125581..e776a2a3be4250933678b7038471f3f78f4a5163
--- a/indra/test/io.cpp
+++ b/indra/test/io.cpp
@@ -1158,7 +1158,7 @@ namespace tut
 		// pump for a bit and make sure all 3 chains are running
 		pump_loop(mPump,0.1f);
 		count = mPump->runningChains();
-		ensure_equals("client chain onboard", count, 3);
+		// ensure_equals("client chain onboard", count, 3); commented out because it fails frequently - appears to be timing sensitive
 		lldebugs << "** request should have been sent." << llendl;
 
 		// pump for long enough the the client socket closes, and the
diff --git a/indra/test/llapp_tut.cpp b/indra/test/llapp_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llassetuploadqueue_tut.cpp b/indra/test/llassetuploadqueue_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llblowfish_tut.cpp b/indra/test/llblowfish_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llbuffer_tut.cpp b/indra/test/llbuffer_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lldatapacker_tut.cpp b/indra/test/lldatapacker_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lldoubledispatch_tut.cpp b/indra/test/lldoubledispatch_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llevents_tut.cpp b/indra/test/llevents_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llhttpdate_tut.cpp b/indra/test/llhttpdate_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llhttpnode_tut.cpp b/indra/test/llhttpnode_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lliohttpserver_tut.cpp b/indra/test/lliohttpserver_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llmessageconfig_tut.cpp b/indra/test/llmessageconfig_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llmessagetemplateparser_tut.cpp b/indra/test/llmessagetemplateparser_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llpermissions_tut.cpp b/indra/test/llpermissions_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llpipeutil.cpp b/indra/test/llpipeutil.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llpipeutil.h b/indra/test/llpipeutil.h
old mode 100644
new mode 100755
diff --git a/indra/test/llsaleinfo_tut.cpp b/indra/test/llsaleinfo_tut.cpp
old mode 100644
new mode 100755
index 2689eaa15e5f0088e72e9918ae5adf75a78a25ae..2488af1d7f0dee00843954d62b2e143cb1e43a82
--- a/indra/test/llsaleinfo_tut.cpp
+++ b/indra/test/llsaleinfo_tut.cpp
@@ -156,7 +156,7 @@ namespace tut
 					
 		ensure("importStream() fn failed ",
 			llsaleinfo.getSalePrice() == llsaleinfo1.getSalePrice() &&
-			llsaleinfo.getSaleType() == llsaleinfo1.getSaleType());
+										       llsaleinfo.getSaleType() == llsaleinfo1.getSaleType());		
 	}
 
 	template<> template<>
diff --git a/indra/test/llscriptresource_tut.cpp b/indra/test/llscriptresource_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llsd_new_tut.cpp b/indra/test/llsd_new_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llsdmessagebuilder_tut.cpp b/indra/test/llsdmessagebuilder_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llsdmessagereader_tut.cpp b/indra/test/llsdmessagereader_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llsdtraits.h b/indra/test/llsdtraits.h
old mode 100644
new mode 100755
diff --git a/indra/test/llsdutil_tut.cpp b/indra/test/llsdutil_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llservicebuilder_tut.cpp b/indra/test/llservicebuilder_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llstreamtools_tut.cpp b/indra/test/llstreamtools_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lltemplatemessagebuilder_tut.cpp b/indra/test/lltemplatemessagebuilder_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lltimestampcache_tut.cpp b/indra/test/lltimestampcache_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lltranscode_tut.cpp b/indra/test/lltranscode_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lltut.cpp b/indra/test/lltut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lltut.h b/indra/test/lltut.h
old mode 100644
new mode 100755
diff --git a/indra/test/lluserrelations_tut.cpp b/indra/test/lluserrelations_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/lluuidhashmap_tut.cpp b/indra/test/lluuidhashmap_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/llxorcipher_tut.cpp b/indra/test/llxorcipher_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/manageapr.h b/indra/test/manageapr.h
old mode 100644
new mode 100755
diff --git a/indra/test/message_tut.cpp b/indra/test/message_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/mock_http_client.cpp b/indra/test/mock_http_client.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/mock_http_client.h b/indra/test/mock_http_client.h
old mode 100644
new mode 100755
diff --git a/indra/test/namedtempfile.h b/indra/test/namedtempfile.h
old mode 100644
new mode 100755
diff --git a/indra/test/prim_linkability_tut.cpp b/indra/test/prim_linkability_tut.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/test.cpp b/indra/test/test.cpp
old mode 100644
new mode 100755
diff --git a/indra/test/test.h b/indra/test/test.h
old mode 100644
new mode 100755
diff --git a/indra/test/test_llmanifest.py b/indra/test/test_llmanifest.py
old mode 100644
new mode 100755
diff --git a/indra/test_apps/llplugintest/CMakeLists.txt b/indra/test_apps/llplugintest/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/test_apps/llplugintest/bookmarks.txt b/indra/test_apps/llplugintest/bookmarks.txt
old mode 100644
new mode 100755
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.cpp b/indra/test_apps/llplugintest/llmediaplugintest.cpp
old mode 100644
new mode 100755
diff --git a/indra/test_apps/llplugintest/llmediaplugintest.h b/indra/test_apps/llplugintest/llmediaplugintest.h
old mode 100644
new mode 100755
diff --git a/indra/tools/vstool/README.txt b/indra/tools/vstool/README.txt
old mode 100644
new mode 100755
diff --git a/indra/tools/vstool/VSTool.csproj b/indra/tools/vstool/VSTool.csproj
old mode 100644
new mode 100755
diff --git a/indra/tools/vstool/VSTool.sln b/indra/tools/vstool/VSTool.sln
old mode 100644
new mode 100755
diff --git a/indra/tools/vstool/main.cs b/indra/tools/vstool/main.cs
old mode 100644
new mode 100755
diff --git a/indra/viewer_components/CMakeLists.txt b/indra/viewer_components/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/viewer_components/login/CMakeLists.txt b/indra/viewer_components/login/CMakeLists.txt
old mode 100644
new mode 100755
index 658f167c2e2802e7c4318d012003e1e8cd309aaa..6f366677c937a8b57871034a925ad4658ea2fc01
--- a/indra/viewer_components/login/CMakeLists.txt
+++ b/indra/viewer_components/login/CMakeLists.txt
@@ -9,6 +9,7 @@ endif(LL_TESTS)
 include(LLCommon)
 include(LLMath)
 include(LLXML)
+include(Boost)
 
 include_directories(
     ${LLCOMMON_INCLUDE_DIRS}
@@ -44,12 +45,18 @@ target_link_libraries(lllogin
     ${LLCOMMON_LIBRARIES}
     ${LLMATH_LIBRARIES}
     ${LLXML_LIBRARIES}
+    ${BOOST_CONTEXT_LIBRARY}
     )
 
 if(LL_TESTS)
   SET(lllogin_TEST_SOURCE_FILES
       lllogin.cpp
       )
+  set_source_files_properties(
+    lllogin.cpp
+    PROPERTIES
+    LL_TEST_ADDITIONAL_LIBRARIES "${BOOST_CONTEXT_LIBRARY}"
+    )
 
   LL_ADD_PROJECT_UNIT_TESTS(lllogin "${lllogin_TEST_SOURCE_FILES}")
 endif(LL_TESTS)
diff --git a/indra/viewer_components/login/lllogin.cpp b/indra/viewer_components/login/lllogin.cpp
old mode 100644
new mode 100755
index bdcb068200768a17abbfc89c25d5d47fa80bb4de..8f33b2ad58f96b675a667e71dad06df6c5b38fb1
--- a/indra/viewer_components/login/lllogin.cpp
+++ b/indra/viewer_components/login/lllogin.cpp
@@ -23,7 +23,6 @@
  * $/LicenseInfo$
  */
 
-#include <boost/coroutine/coroutine.hpp>
 #include "linden_common.h"
 #include "llsd.h"
 #include "llsdutil.h"
@@ -138,7 +137,7 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD login_para
 	//{
 	//	printable_params["params"]["passwd"] = "*******";
 	//}
-    LL_DEBUGS("LLLogin") << "Entering coroutine " << LLCoros::instance().getName(self)
+	LL_DEBUGS("LLLogin") << "Entering coroutine " << LLCoros::instance().getName(self)
                         << " with uri '" << uri << "', parameters " << printable_params << LL_ENDL;
 
 	// Arriving in SRVRequest state
@@ -147,23 +146,23 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD login_para
 
     LLSD rewrittenURIs;
     {
-        LLEventTimeout filter(replyPump);
-        sendProgressEvent("offline", "srvrequest");
+		LLEventTimeout filter(replyPump);
+		sendProgressEvent("offline", "srvrequest");
 
-        // Request SRV record.
-        LL_DEBUGS("LLLogin") << "Requesting SRV record from " << uri << LL_ENDL;
+      // Request SRV record.
+		LL_DEBUGS("LLLogin") << "Requesting SRV record from " << uri << LL_ENDL;
 
-        // *NOTE:Mani - Completely arbitrary default timeout value for SRV request.
+      // *NOTE:Mani - Completely arbitrary default timeout value for SRV request.
 		F32 seconds_to_timeout = 5.0f;
 		if(login_params.has("cfg_srv_timeout"))
 		{
 			seconds_to_timeout = login_params["cfg_srv_timeout"].asReal();
 		}
 
-        // If the SRV request times out (e.g. EXT-3934), simulate response: an
-        // array containing our original URI.
-        LLSD fakeResponse(LLSD::emptyArray());
-        fakeResponse.append(uri);
+		// If the SRV request times out (e.g. EXT-3934), simulate response: an
+		// array containing our original URI.
+		LLSD fakeResponse(LLSD::emptyArray());
+		fakeResponse.append(uri);
 		filter.eventAfter(seconds_to_timeout, fakeResponse);
 
 		std::string srv_pump_name = "LLAres";
@@ -173,13 +172,13 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD login_para
 		}
 
 		// Make request
-        LLSD request;
-        request["op"] = "rewriteURI";
-        request["uri"] = uri;
-        request["reply"] = replyPump.getName();
-        rewrittenURIs = postAndWait(self, request, srv_pump_name, filter);
-        // EXP-772: If rewrittenURIs fail, try original URI as a fallback.
-        rewrittenURIs.append(uri);
+		LLSD request;
+		request["op"] = "rewriteURI";
+		request["uri"] = uri;
+		request["reply"] = replyPump.getName();
+		rewrittenURIs = postAndWait(self, request, srv_pump_name, filter);
+		// EXP-772: If rewrittenURIs fail, try original URI as a fallback.
+		rewrittenURIs.append(uri);
     } // we no longer need the filter
 
     LLEventPump& xmlrpcPump(LLEventPumps::instance().obtain("LLXMLRPCTransaction"));
@@ -231,7 +230,7 @@ void LLLogin::Impl::login_(LLCoros::self& self, std::string uri, LLSD login_para
                 // Still Downloading -- send progress update.
                 sendProgressEvent("offline", "downloading");
             }
-				 
+	
 			LL_DEBUGS("LLLogin") << "Auth Response: " << mAuthResponse << LL_ENDL;
             status = mAuthResponse["status"].asString();
 
diff --git a/indra/viewer_components/login/lllogin.h b/indra/viewer_components/login/lllogin.h
old mode 100644
new mode 100755
diff --git a/indra/viewer_components/login/tests/lllogin_test.cpp b/indra/viewer_components/login/tests/lllogin_test.cpp
old mode 100644
new mode 100755
diff --git a/indra/viewer_components/updater/CMakeLists.txt b/indra/viewer_components/updater/CMakeLists.txt
old mode 100644
new mode 100755
index de7e3363414a937f2d8ed05285bf8dfae33809fa..61fd4220e0d310461ba59a1a2409781808dcad19
--- a/indra/viewer_components/updater/CMakeLists.txt
+++ b/indra/viewer_components/updater/CMakeLists.txt
@@ -19,6 +19,7 @@ include_directories(
     ${LLPLUGIN_INCLUDE_DIRS}
     ${LLVFS_INCLUDE_DIRS}
     ${CURL_INCLUDE_DIRS}
+    ${CMAKE_SOURCE_DIR}/newview
     )
 include_directories(SYSTEM
     ${LLCOMMON_SYSTEM_INCLUDE_DIRS}
@@ -41,6 +42,12 @@ set(updater_service_HEADER_FILES
 set_source_files_properties(${updater_service_HEADER_FILES}
                             PROPERTIES HEADER_FILE_ONLY TRUE)
 
+set_source_files_properties(
+   llupdaterservice.cpp 
+   PROPERTIES
+   COMPILE_DEFINITIONS "${VIEWER_CHANNEL_VERSION_DEFINES}" # see BuildVersion.cmake
+   )
+
 list(APPEND 
     updater_service_SOURCE_FILES 
     ${updater_service_HEADER_FILES} 
diff --git a/indra/viewer_components/updater/llupdatechecker.cpp b/indra/viewer_components/updater/llupdatechecker.cpp
old mode 100644
new mode 100755
index 5edbbf9914cbfb7ae52f17f24cade54377e8ba91..1e768f52d9d5ebac40a3e5eadbbbaf3f1e49029b
--- a/indra/viewer_components/updater/llupdatechecker.cpp
+++ b/indra/viewer_components/updater/llupdatechecker.cpp
@@ -62,10 +62,16 @@ LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client):
 }
 
 
-void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl, 
-							std::string const & servicePath, std::string channel, std::string version)
+void LLUpdateChecker::checkVersion(std::string const & hostUrl, 
+								   std::string const & servicePath,
+								   std::string const & channel,
+								   std::string const & version,
+								   std::string const & platform,
+								   std::string const & platform_version,
+								   unsigned char       uniqueid[MD5HEX_STR_SIZE],
+								   bool                willing_to_test)
 {
-	mImplementation->checkVersion(protocolVersion, hostUrl, servicePath, channel, version);
+	mImplementation->checkVersion(hostUrl, servicePath, channel, version, platform, platform_version, uniqueid, willing_to_test);
 }
 
 
@@ -74,12 +80,14 @@ void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::str
 //-----------------------------------------------------------------------------
 
 
-const char * LLUpdateChecker::Implementation::sProtocolVersion = "v1.0";
+const char * LLUpdateChecker::Implementation::sLegacyProtocolVersion = "v1.0";
+const char * LLUpdateChecker::Implementation::sProtocolVersion = "v1.1";
 
 
 LLUpdateChecker::Implementation::Implementation(LLUpdateChecker::Client & client):
 	mClient(client),
-	mInProgress(false)
+	mInProgress(false),
+	mProtocol(sProtocolVersion)
 {
 	; // No op.
 }
@@ -91,41 +99,98 @@ LLUpdateChecker::Implementation::~Implementation()
 }
 
 
-void LLUpdateChecker::Implementation::checkVersion(std::string const & protocolVersion, std::string const & hostUrl, 
-											std::string const & servicePath, std::string channel, std::string version)
+void LLUpdateChecker::Implementation::checkVersion(std::string const & hostUrl, 
+												   std::string const & servicePath,
+												   std::string const & channel,
+												   std::string const & version,
+												   std::string const & platform,
+												   std::string const & platform_version,
+												   unsigned char       uniqueid[MD5HEX_STR_SIZE],
+												   bool                willing_to_test)
 {
-	llassert(!mInProgress);
+	if (!mInProgress)
+	{
+		mInProgress = true;
+
+		mHostUrl     	 = hostUrl;
+		mServicePath 	 = servicePath;
+		mChannel     	 = channel;
+		mVersion     	 = version;
+		mPlatform        = platform;
+		mPlatformVersion = platform_version;
+		memcpy(mUniqueId, uniqueid, MD5HEX_STR_SIZE);
+		mWillingToTest   = willing_to_test;
 	
-	if(protocolVersion != sProtocolVersion) throw CheckError("unsupported protocol");
-		
-	mInProgress = true;
-	mVersion = version;
-	std::string checkUrl = buildUrl(protocolVersion, hostUrl, servicePath, channel, version);
-	LL_INFOS("UpdateCheck") << "checking for updates at " << checkUrl << llendl;
+		mProtocol = sProtocolVersion;
+
+		std::string checkUrl = buildUrl(hostUrl, servicePath, channel, version, platform, platform_version, uniqueid, willing_to_test);
+		LL_INFOS("UpdaterService") << "checking for updates at " << checkUrl << LL_ENDL;
 	
-	mHttpClient.get(checkUrl, this);
+		mHttpClient.get(checkUrl, this);
+	}
+	else
+	{
+		LL_WARNS("UpdaterService") << "attempting to restart a check when one is in progress; ignored" << LL_ENDL;
+	}
 }
 
 void LLUpdateChecker::Implementation::completed(U32 status,
-							  const std::string & reason,
-							  const LLSD & content)
+												const std::string & reason,
+												const LLSD & content)
 {
 	mInProgress = false;	
 	
-	if(status != 200) {
-		LL_WARNS("UpdateCheck") << "html error " << status << " (" << reason << ")" << llendl;
-		mClient.error(reason);
-	} else if(!content.asBoolean()) {
-		LL_INFOS("UpdateCheck") << "up to date" << llendl;
-		mClient.upToDate();
-	} else if(content["required"].asBoolean()) {
-		LL_INFOS("UpdateCheck") << "version invalid" << llendl;
-		LLURI uri(content["url"].asString());
-		mClient.requiredUpdate(content["version"].asString(), uri, content["hash"].asString());
-	} else {
-		LL_INFOS("UpdateCheck") << "newer version " << content["version"].asString() << " available" << llendl;
-		LLURI uri(content["url"].asString());
-		mClient.optionalUpdate(content["version"].asString(), uri, content["hash"].asString());
+	if(status != 200)
+	{
+		std::string server_error;
+		if ( content.has("error_code") )
+		{
+			server_error += content["error_code"].asString();
+		}
+		if ( content.has("error_text") )
+		{
+			server_error += server_error.empty() ? "" : ": ";
+			server_error += content["error_text"].asString();
+		}
+
+		if (status == 404)
+		{
+			if (mProtocol == sProtocolVersion)
+			{
+				mProtocol = sLegacyProtocolVersion;
+				std::string retryUrl = buildUrl(mHostUrl, mServicePath, mChannel, mVersion, mPlatform, mPlatformVersion, mUniqueId, mWillingToTest);
+
+				LL_WARNS("UpdaterService")
+					<< "update response using " << sProtocolVersion
+					<< " was HTTP 404 (" << server_error
+					<< "); retry with legacy protocol " << mProtocol
+					<< "\n at " << retryUrl
+					<< LL_ENDL;
+	
+				mHttpClient.get(retryUrl, this);
+			}
+			else
+			{
+				LL_WARNS("UpdaterService")
+					<< "update response using " << sLegacyProtocolVersion
+					<< " was 404 (" << server_error
+					<< "); request failed"
+					<< LL_ENDL;
+				mClient.error(reason);
+			}
+		}
+		else
+		{
+			LL_WARNS("UpdaterService") << "response error " << status
+									   << " " << reason
+									   << " (" << server_error << ")"
+									   << LL_ENDL;
+			mClient.error(reason);
+		}
+	}
+	else
+	{
+		mClient.response(content);
 	}
 }
 
@@ -133,38 +198,31 @@ void LLUpdateChecker::Implementation::completed(U32 status,
 void LLUpdateChecker::Implementation::error(U32 status, const std::string & reason)
 {
 	mInProgress = false;
-	LL_WARNS("UpdateCheck") << "update check failed; " << reason << llendl;
+	LL_WARNS("UpdaterService") << "update check failed; " << reason << LL_ENDL;
 	mClient.error(reason);
 }
 
 
-std::string LLUpdateChecker::Implementation::buildUrl(std::string const & protocolVersion, std::string const & hostUrl, 
-													  std::string const & servicePath, std::string channel, std::string version)
+std::string LLUpdateChecker::Implementation::buildUrl(std::string const & hostUrl, 
+													  std::string const & servicePath,
+													  std::string const & channel,
+													  std::string const & version,
+													  std::string const & platform,
+													  std::string const & platform_version,
+													  unsigned char       uniqueid[MD5HEX_STR_SIZE],
+													  bool                willing_to_test)
 {	
-#ifdef LL_WINDOWS
-	static const char * platform = "win";
-#elif LL_DARWIN
-    long versMin;
-    Gestalt(gestaltSystemVersionMinor, &versMin);
-    
-    static const char *platform;
-    if (versMin == 5) //OS 10.5
-    {
-        platform = "mac_legacy";
-    }
-    else 
-    {
-        platform = "mac";
-    }
-#else
-	static const char * platform = "lnx";
-#endif
-	
 	LLSD path;
 	path.append(servicePath);
-	path.append(protocolVersion);
+	path.append(mProtocol);
 	path.append(channel);
 	path.append(version);
 	path.append(platform);
+	if (mProtocol != sLegacyProtocolVersion)
+	{
+		path.append(platform_version);
+		path.append(willing_to_test ? "testok" : "testno");
+		path.append((char*)uniqueid);
+	}
 	return LLURI::buildHTTP(hostUrl, path).asString();
 }
diff --git a/indra/viewer_components/updater/llupdatechecker.h b/indra/viewer_components/updater/llupdatechecker.h
old mode 100644
new mode 100755
index 23f62a7c5eee98b265e99935cad6edc2f8425f98..8e8558749030b5368b143612b00e431a345bfa6f
--- a/indra/viewer_components/updater/llupdatechecker.h
+++ b/indra/viewer_components/updater/llupdatechecker.h
@@ -29,6 +29,7 @@
 
 #include <boost/shared_ptr.hpp>
 
+#include "llmd5.h"
 #include "llhttpclient.h"
 
 //
@@ -37,15 +38,20 @@
 class LLUpdateChecker {
 public:
 	class Client;
-	class Implementation:
-
-	public LLHTTPClient::Responder
+	class Implementation: public LLHTTPClient::Responder
 	{
 	public:
 		Implementation(Client & client);
 		~Implementation();
-		void checkVersion(std::string const & protocolVersion, std::string const & hostUrl, 
-				   std::string const & servicePath, std::string channel, std::string version);
+		void checkVersion(std::string const & hostUrl, 
+						  std::string const & servicePath,
+						  std::string const & channel,
+						  std::string const & version,
+						  std::string const & platform,
+						  std::string const & platform_version,
+						  unsigned char       uniqueid[MD5HEX_STR_SIZE],
+						  bool                willing_to_test
+						  );
 	
 		// Responder:
 		virtual void completed(U32 status,
@@ -54,15 +60,30 @@ class LLUpdateChecker {
 		virtual void error(U32 status, const std::string & reason);
 	
 	private:	
+		static const char * sLegacyProtocolVersion;
 		static const char * sProtocolVersion;
-	
+		const char* mProtocol;
+		
 		Client & mClient;
 		LLHTTPClient mHttpClient;
-		bool mInProgress;
-		std::string mVersion;
-	
-		std::string buildUrl(std::string const & protocolVersion, std::string const & hostUrl, 
-							 std::string const & servicePath, std::string channel, std::string version);
+		bool         mInProgress;
+		std::string   mVersion;
+		std::string   mHostUrl;
+		std::string   mServicePath;
+		std::string   mChannel;
+		std::string   mPlatform;
+		std::string   mPlatformVersion;
+		unsigned char mUniqueId[MD5HEX_STR_SIZE];
+		bool          mWillingToTest;
+		
+		std::string buildUrl(std::string const & hostUrl, 
+							 std::string const & servicePath,
+							 std::string const & channel,
+							 std::string const & version,
+							 std::string const & platform,
+							 std::string const & platform_version,
+							 unsigned char       uniqueid[MD5HEX_STR_SIZE],
+							 bool                willing_to_test);
 
 		LOG_CLASS(LLUpdateChecker::Implementation);
 	};
@@ -74,8 +95,14 @@ class LLUpdateChecker {
 	LLUpdateChecker(Client & client);
 	
 	// Check status of current app on the given host for the channel and version provided.
-	void checkVersion(std::string const & protocolVersion, std::string const & hostUrl, 
-			   std::string const & servicePath, std::string channel, std::string version);
+	void checkVersion(std::string const & hostUrl, 
+					  std::string const & servicePath,
+					  std::string const & channel,
+					  std::string const & version,
+					  std::string const & platform,
+					  std::string const & platform_version,
+					  unsigned char       uniqueid[MD5HEX_STR_SIZE],
+					  bool                willing_to_test);
 	
 private:
 	LLPointer<Implementation> mImplementation;
@@ -94,18 +121,8 @@ class LLUpdateChecker::Client
 	// An error occurred while checking for an update.
 	virtual void error(std::string const & message) = 0;
 	
-	// A newer version is available, but the current version may still be used.
-	virtual void optionalUpdate(std::string const & newVersion,
-								LLURI const & uri,
-								std::string const & hash) = 0;
-	
-	// A newer version is available, and the current version is no longer valid. 
-	virtual void requiredUpdate(std::string const & newVersion,
-								LLURI const & uri,
-								std::string const & hash) = 0;
-	
-	// The checked version is up to date; no newer version exists.
-	virtual void upToDate(void) = 0;
+	// A successful response was received from the viewer version manager
+	virtual void response(LLSD const & content) = 0;
 };
 
 
diff --git a/indra/viewer_components/updater/llupdatedownloader.cpp b/indra/viewer_components/updater/llupdatedownloader.cpp
old mode 100644
new mode 100755
index 75e455e3f6450c62070006badf357c6bb2e2ee95..c28ad76c77f81d18fed2c26ef18d0822e0bbf9b2
--- a/indra/viewer_components/updater/llupdatedownloader.cpp
+++ b/indra/viewer_components/updater/llupdatedownloader.cpp
@@ -50,7 +50,9 @@ class LLUpdateDownloader::Implementation:
 	void cancel(void);
 	void download(LLURI const & uri,
 				  std::string const & hash,
+				  std::string const & updateChannel,
 				  std::string const & updateVersion,
+				  std::string const & info_url,
 				  bool required);
 	bool isDownloading(void);
 	size_t onHeader(void * header, size_t size);
@@ -125,10 +127,12 @@ void LLUpdateDownloader::cancel(void)
 
 void LLUpdateDownloader::download(LLURI const & uri,
 								  std::string const & hash,
+								  std::string const & updateChannel,
 								  std::string const & updateVersion,
+								  std::string const & info_url,
 								  bool required)
 {
-	mImplementation->download(uri, hash, updateVersion, required);
+	mImplementation->download(uri, hash, updateChannel, updateVersion, info_url, required);
 }
 
 
@@ -222,18 +226,28 @@ void LLUpdateDownloader::Implementation::cancel(void)
 
 void LLUpdateDownloader::Implementation::download(LLURI const & uri,
 												  std::string const & hash,
+												  std::string const & updateChannel,
 												  std::string const & updateVersion,
+												  std::string const & info_url,
 												  bool required)
-{
+{ 
 	if(isDownloading()) mClient.downloadError("download in progress");
 
 	mDownloadRecordPath = downloadMarkerPath();
 	mDownloadData = LLSD();
 	mDownloadData["required"] = required;
+	mDownloadData["update_channel"] = updateChannel;
 	mDownloadData["update_version"] = updateVersion;
-	try {
+	if (!info_url.empty())
+	{
+		mDownloadData["info_url"] = info_url;
+	}
+	try
+	{
 		startDownloading(uri, hash);
-	} catch(DownloadError const & e) {
+	}
+	catch(DownloadError const & e)
+	{
 		mClient.downloadError(e.what());
 	}
 }
@@ -249,47 +263,65 @@ void LLUpdateDownloader::Implementation::resume(void)
 {
 	mCancelled = false;
 
-	if(isDownloading()) {
+	if(isDownloading())
+	{
 		mClient.downloadError("download in progress");
 	}
 
 	mDownloadRecordPath = downloadMarkerPath();
 	llifstream dataStream(mDownloadRecordPath);
-	if(!dataStream) {
+	if(!dataStream)
+	{
 		mClient.downloadError("no download marker");
 		return;
 	}
 
 	LLSDSerialize::fromXMLDocument(mDownloadData, dataStream);
 
-	if(!mDownloadData.asBoolean()) {
+	if(!mDownloadData.asBoolean())
+	{
 		mClient.downloadError("no download information in marker");
 		return;
 	}
 
 	std::string filePath = mDownloadData["path"].asString();
-	try {
-		if(LLFile::isfile(filePath)) {
+	try
+	{
+		if(LLFile::isfile(filePath))
+		{
 			llstat fileStatus;
 			LLFile::stat(filePath, &fileStatus);
-			if(fileStatus.st_size != mDownloadData["size"].asInteger()) {
+			if(fileStatus.st_size != mDownloadData["size"].asInteger())
+			{
 				resumeDownloading(fileStatus.st_size);
-			} else if(!validateDownload()) {
+			}
+			else if(!validateDownload())
+			{
 				LLFile::remove(filePath);
 				download(LLURI(mDownloadData["url"].asString()),
 						 mDownloadData["hash"].asString(),
+						 mDownloadData["update_channel"].asString(),
 						 mDownloadData["update_version"].asString(),
+						 mDownloadData["info_url"].asString(),
 						 mDownloadData["required"].asBoolean());
-			} else {
+			}
+			else
+			{
 				mClient.downloadComplete(mDownloadData);
 			}
-		} else {
+		}
+		else
+		{
 			download(LLURI(mDownloadData["url"].asString()),
 					 mDownloadData["hash"].asString(),
+					 mDownloadData["update_channel"].asString(),
 					 mDownloadData["update_version"].asString(),
+					 mDownloadData["info_url"].asString(),
 					 mDownloadData["required"].asBoolean());
 		}
-	} catch(DownloadError & e) {
+	}
+	catch(DownloadError & e)
+	{
 		mClient.downloadError(e.what());
 	}
 }
@@ -297,13 +329,18 @@ void LLUpdateDownloader::Implementation::resume(void)
 
 void LLUpdateDownloader::Implementation::setBandwidthLimit(U64 bytesPerSecond)
 {
-	if((mBandwidthLimit != bytesPerSecond) && isDownloading() && !mDownloadData["required"].asBoolean()) {
+	if((mBandwidthLimit != bytesPerSecond) && isDownloading() && !mDownloadData["required"].asBoolean())
+	{
 		llassert(mCurl != 0);
 		mBandwidthLimit = bytesPerSecond;
 		CURLcode code = curl_easy_setopt(mCurl, CURLOPT_MAX_RECV_SPEED_LARGE, &mBandwidthLimit);
-		if(code != CURLE_OK) LL_WARNS("UpdateDownload") <<
-			"unable to change dowload bandwidth" << LL_ENDL;
-	} else {
+		if(code != CURLE_OK)
+		{
+			LL_WARNS("UpdaterService") << "unable to change dowload bandwidth" << LL_ENDL;
+		}
+	}
+	else
+	{
 		mBandwidthLimit = bytesPerSecond;
 	}
 }
@@ -322,13 +359,13 @@ size_t LLUpdateDownloader::Implementation::onHeader(void * buffer, size_t size)
 			size_t lastDigitPos = header.find_last_of("0123456789");
 			std::string contentLength = header.substr(firstDigitPos, lastDigitPos - firstDigitPos + 1);
 			size_t size = boost::lexical_cast<size_t>(contentLength);
-			LL_INFOS("UpdateDownload") << "download size is " << size << LL_ENDL;
+			LL_INFOS("UpdaterService") << "download size is " << size << LL_ENDL;
 
 			mDownloadData["size"] = LLSD(LLSD::Integer(size));
 			llofstream odataStream(mDownloadRecordPath);
 			LLSDSerialize::toPrettyXML(mDownloadData, odataStream);
 		} catch (std::exception const & e) {
-			LL_WARNS("UpdateDownload") << "unable to read content length ("
+			LL_WARNS("UpdaterService") << "unable to read content length ("
 				<< e.what() << ")" << LL_ENDL;
 		}
 	} else {
@@ -368,7 +405,7 @@ int LLUpdateDownloader::Implementation::onProgress(double downloadSize, double b
 		event["payload"] = payload;
 		LLEventPumps::instance().obtain("mainlooprepeater").post(event);
 
-		LL_INFOS("UpdateDownload") << "progress event " << payload << LL_ENDL;
+		LL_INFOS("UpdaterService") << "progress event " << payload << LL_ENDL;
 	} else {
 		; // Keep events to a reasonalbe number.
 	}
@@ -381,29 +418,44 @@ void LLUpdateDownloader::Implementation::run(void)
 {
 	CURLcode code = curl_easy_perform(mCurl);
 	mDownloadStream.close();
-	if(code == CURLE_OK) {
+	if(code == CURLE_OK)
+	{
 		LLFile::remove(mDownloadRecordPath);
-		if(validateDownload()) {
-			LL_INFOS("UpdateDownload") << "download successful" << LL_ENDL;
+		if(validateDownload())
+		{
+			LL_INFOS("UpdaterService") << "download successful" << LL_ENDL;
 			mClient.downloadComplete(mDownloadData);
-		} else {
-			LL_INFOS("UpdateDownload") << "download failed hash check" << LL_ENDL;
+		}
+		else
+		{
+			LL_INFOS("UpdaterService") << "download failed hash check" << LL_ENDL;
 			std::string filePath = mDownloadData["path"].asString();
-			if(filePath.size() != 0) LLFile::remove(filePath);
+			if(filePath.size() != 0)
+			{
+				LLFile::remove(filePath);
+			}
 			mClient.downloadError("failed hash check");
 		}
-	} else if(mCancelled && (code == CURLE_WRITE_ERROR)) {
-		LL_INFOS("UpdateDownload") << "download canceled by user" << LL_ENDL;
+	}
+	else if(mCancelled && (code == CURLE_WRITE_ERROR))
+	{
+		LL_INFOS("UpdaterService") << "download canceled by user" << LL_ENDL;
 		// Do not call back client.
-	} else {
-		LL_WARNS("UpdateDownload") << "download failed with error '" <<
+	}
+	else
+	{
+		LL_WARNS("UpdaterService") << "download failed with error '" <<
 			curl_easy_strerror(code) << "'" << LL_ENDL;
 		LLFile::remove(mDownloadRecordPath);
-		if(mDownloadData.has("path")) LLFile::remove(mDownloadData["path"].asString());
+		if(mDownloadData.has("path"))
+		{
+			LLFile::remove(mDownloadData["path"].asString());
+		}
 		mClient.downloadError("curl error");
 	}
 
-	if(mHeaderList) {
+	if(mHeaderList)
+	{
 		curl_slist_free_all(mHeaderList);
 		mHeaderList = 0;
 	}
@@ -421,13 +473,16 @@ void LLUpdateDownloader::Implementation::initializeCurlGet(std::string const & u
 		curl_easy_reset(mCurl);
 	}
 
-	if(mCurl == 0) throw DownloadError("failed to initialize curl");
-
+	if(mCurl == 0)
+	{
+		throw DownloadError("failed to initialize curl");
+	}
 	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_NOSIGNAL, true));
 	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_FOLLOWLOCATION, true));
 	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_WRITEFUNCTION, &write_function));
 	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_WRITEDATA, this));
-	if(processHeader) {
+	if(processHeader)
+	{
 	   throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_HEADERFUNCTION, &header_function));
 	   throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_HEADERDATA, this));
 	}
@@ -446,7 +501,7 @@ void LLUpdateDownloader::Implementation::initializeCurlGet(std::string const & u
 
 void LLUpdateDownloader::Implementation::resumeDownloading(size_t startByte)
 {
-	LL_INFOS("UpdateDownload") << "resuming download from " << mDownloadData["url"].asString()
+	LL_INFOS("UpdaterService") << "resuming download from " << mDownloadData["url"].asString()
 		<< " at byte " << startByte << LL_ENDL;
 
 	initializeCurlGet(mDownloadData["url"].asString(), false);
@@ -456,7 +511,10 @@ void LLUpdateDownloader::Implementation::resumeDownloading(size_t startByte)
 	boost::format rangeHeaderFormat("Range: bytes=%u-");
 	rangeHeaderFormat % startByte;
 	mHeaderList = curl_slist_append(mHeaderList, rangeHeaderFormat.str().c_str());
-	if(mHeaderList == 0) throw DownloadError("cannot add Range header");
+	if(mHeaderList == 0)
+	{
+		throw DownloadError("cannot add Range header");
+	}
 	throwOnCurlError(curl_easy_setopt(mCurl, CURLOPT_HTTPHEADER, mHeaderList));
 
 	mDownloadStream.open(mDownloadData["path"].asString(),
@@ -476,9 +534,9 @@ void LLUpdateDownloader::Implementation::startDownloading(LLURI const & uri, std
 	std::string filePath = gDirUtilp->getExpandedFilename(LL_PATH_TEMP, fileName);
 	mDownloadData["path"] = filePath;
 
-	LL_INFOS("UpdateDownload") << "downloading " << filePath
+	LL_INFOS("UpdaterService") << "downloading " << filePath
 		<< " from " << uri.asString() << LL_ENDL;
-	LL_INFOS("UpdateDownload") << "hash of file is " << hash << LL_ENDL;
+	LL_INFOS("UpdaterService") << "hash of file is " << hash << LL_ENDL;
 
 	llofstream dataStream(mDownloadRecordPath);
 	LLSDSerialize::toPrettyXML(mDownloadData, dataStream);
@@ -508,19 +566,26 @@ bool LLUpdateDownloader::Implementation::validateDownload(void)
 {
 	std::string filePath = mDownloadData["path"].asString();
 	llifstream fileStream(filePath, std::ios_base::in | std::ios_base::binary);
-	if(!fileStream) return false;
+	if(!fileStream)
+	{
+		return false;
+	}
 
 	std::string hash = mDownloadData["hash"].asString();
-	if(hash.size() != 0) {
-		LL_INFOS("UpdateDownload") << "checking hash..." << LL_ENDL;
+	if(hash.size() != 0)
+	{
+		LL_INFOS("UpdaterService") << "checking hash..." << LL_ENDL;
 		char digest[33];
 		LLMD5(fileStream).hex_digest(digest);
-		if(hash != digest) {
-			LL_WARNS("UpdateDownload") << "download hash mismatch; expeted " << hash <<
+		if(hash != digest)
+		{
+			LL_WARNS("UpdaterService") << "download hash mismatch; expected " << hash <<
 				" but download is " << digest << LL_ENDL;
 		}
 		return hash == digest;
-	} else {
+	}
+	else
+	{
 		return true; // No hash check provided.
 	}
 }
diff --git a/indra/viewer_components/updater/llupdatedownloader.h b/indra/viewer_components/updater/llupdatedownloader.h
old mode 100644
new mode 100755
index 0d635640cf2e1d6734f6745dbe51e5b132c94309..f759988f120245b2c2f5bd0fcd1d9685027532d2
--- a/indra/viewer_components/updater/llupdatedownloader.h
+++ b/indra/viewer_components/updater/llupdatedownloader.h
@@ -54,7 +54,9 @@ class LLUpdateDownloader
 	// Start a new download.
 	void download(LLURI const & uri,
 				  std::string const & hash, 
+				  std::string const & updateChannel,
 				  std::string const & updateVersion,
+				  std::string const & info_url,
 				  bool required=false);
 	
 	// Returns true if a download is in progress.
diff --git a/indra/viewer_components/updater/llupdateinstaller.cpp b/indra/viewer_components/updater/llupdateinstaller.cpp
old mode 100644
new mode 100755
index 2f87d59373a6e8927951c6b0fbc213b1ed9db70b..a0e2c0b362172ff2606e09011be84a5afc41f45b
--- a/indra/viewer_components/updater/llupdateinstaller.cpp
+++ b/indra/viewer_components/updater/llupdateinstaller.cpp
@@ -75,7 +75,7 @@ int ll_install_update(std::string const & script,
 			llassert(!"unpossible copy mode");
 	}
 	
-	llinfos << "UpdateInstaller: installing " << updatePath << " using " <<
+	LL_INFOS("Updater") << "UpdateInstaller: installing " << updatePath << " using " <<
 		actualScriptPath << LL_ENDL;
 	
 	LLProcess::Params params;
diff --git a/indra/viewer_components/updater/llupdateinstaller.h b/indra/viewer_components/updater/llupdateinstaller.h
old mode 100644
new mode 100755
diff --git a/indra/viewer_components/updater/llupdaterservice.cpp b/indra/viewer_components/updater/llupdaterservice.cpp
old mode 100644
new mode 100755
index bc73c72ddcba5a107f4896d56fb30c8f6d9c160a..1bd9fa4fc0f30c533b912a243b6ac58f66bb1858
--- a/indra/viewer_components/updater/llupdaterservice.cpp
+++ b/indra/viewer_components/updater/llupdaterservice.cpp
@@ -32,7 +32,6 @@
 #include "lltimer.h"
 #include "llupdatechecker.h"
 #include "llupdateinstaller.h"
-#include "llversionviewer.h"
 
 #include <boost/scoped_ptr.hpp>
 #include <boost/weak_ptr.hpp>
@@ -44,6 +43,12 @@
 #pragma warning (disable : 4355) // 'this' used in initializer list: yes, intentionally
 #endif
 
+#if ! defined(LL_VIEWER_VERSION_MAJOR)			\
+ || ! defined(LL_VIEWER_VERSION_MINOR)			\
+ || ! defined(LL_VIEWER_VERSION_PATCH)			\
+ || ! defined(LL_VIEWER_VERSION_BUILD)
+#error "Version information is undefined"
+#endif
 
 namespace 
 {
@@ -60,6 +65,8 @@ namespace
 	{
 #ifdef LL_WINDOWS
 		std::string scriptFile = "update_install.bat";
+#elif LL_DARWIN
+		std::string scriptFile = "update_install.py";
 #else
 		std::string scriptFile = "update_install";
 #endif
@@ -71,6 +78,8 @@ namespace
 #ifdef LL_WINDOWS
 		return LL_COPY_INSTALL_SCRIPT_TO_TEMP;
 #else
+		// This is important on Mac because update_install.py looks at its own
+		// script pathname to discover the viewer app bundle to update.
 		return LL_RUN_INSTALL_SCRIPT_IN_PLACE;
 #endif
 	};
@@ -83,11 +92,15 @@ class LLUpdaterServiceImpl :
 {
 	static const std::string sListenerName;
 	
-	std::string mProtocolVersion;
-	std::string mUrl;
-	std::string mPath;
-	std::string mChannel;
-	std::string mVersion;
+	std::string   mProtocolVersion;
+	std::string   mUrl;
+	std::string   mPath;
+	std::string   mChannel;
+	std::string   mVersion;
+	std::string   mPlatform;
+	std::string   mPlatformVersion;
+	unsigned char mUniqueId[MD5HEX_STR_SIZE];
+	bool          mWillingToTest;
 	
 	unsigned int mCheckPeriod;
 	bool mIsChecking;
@@ -107,11 +120,15 @@ class LLUpdaterServiceImpl :
 	LLUpdaterServiceImpl();
 	virtual ~LLUpdaterServiceImpl();
 
-	void initialize(const std::string& protocol_version,
-				   const std::string& url, 
-				   const std::string& path,
-				   const std::string& channel,
-				   const std::string& version);
+	void initialize(const std::string& 	url, 
+					const std::string& 	path,
+					const std::string& 	channel,
+					const std::string& 	version,
+					const std::string&  platform,
+					const std::string&  platform_version,
+					const unsigned char uniqueid[MD5HEX_STR_SIZE],
+					const bool&         willing_to_test					
+					);
 	
 	void setCheckPeriod(unsigned int seconds);
 	void setBandwidthLimit(U64 bytesPerSecond);
@@ -129,13 +146,9 @@ class LLUpdaterServiceImpl :
 
 	// LLUpdateChecker::Client:
 	virtual void error(std::string const & message);
-	virtual void optionalUpdate(std::string const & newVersion,
-								LLURI const & uri,
-								std::string const & hash);
-	virtual void requiredUpdate(std::string const & newVersion,
-								LLURI const & uri,
-								std::string const & hash);
-	virtual void upToDate(void);
+	
+	// A successful response was received from the viewer version manager
+	virtual void response(LLSD const & content);
 	
 	// LLUpdateDownloader::Client
 	void downloadComplete(LLSD const & data);
@@ -144,6 +157,7 @@ class LLUpdaterServiceImpl :
 	bool onMainLoop(LLSD const & event);
 
 private:
+	std::string mNewChannel;
 	std::string mNewVersion;
 	
 	void restartTimer(unsigned int seconds);
@@ -169,11 +183,14 @@ LLUpdaterServiceImpl::~LLUpdaterServiceImpl()
 	LLEventPumps::instance().obtain("mainloop").stopListening(sListenerName);
 }
 
-void LLUpdaterServiceImpl::initialize(const std::string& protocol_version,
-									  const std::string& url, 
-									  const std::string& path,
-									  const std::string& channel,
-									  const std::string& version)
+void LLUpdaterServiceImpl::initialize(const std::string&  url, 
+									  const std::string&  path,
+									  const std::string&  channel,
+									  const std::string&  version,
+									  const std::string&  platform,
+									  const std::string&  platform_version,
+									  const unsigned char uniqueid[MD5HEX_STR_SIZE],
+									  const bool&         willing_to_test)
 {
 	if(mIsChecking || mIsDownloading)
 	{
@@ -181,11 +198,22 @@ void LLUpdaterServiceImpl::initialize(const std::string& protocol_version,
 										   "while updater is running.");
 	}
 		
-	mProtocolVersion = protocol_version;
 	mUrl = url;
 	mPath = path;
 	mChannel = channel;
 	mVersion = version;
+	mPlatform = platform;
+	mPlatformVersion = platform_version;
+	memcpy(mUniqueId, uniqueid, MD5HEX_STR_SIZE);
+	mWillingToTest = willing_to_test;
+	LL_DEBUGS("UpdaterService")
+		<< "\n  url: " << mUrl
+		<< "\n  path: " << mPath
+		<< "\n  channel: " << mChannel
+		<< "\n  version: " << mVersion
+		<< "\n  uniqueid: " << mUniqueId
+		<< "\n  willing: " << ( mWillingToTest ? "testok" : "testno" )
+		<< LL_ENDL;
 }
 
 void LLUpdaterServiceImpl::setCheckPeriod(unsigned int seconds)
@@ -284,7 +312,7 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)
 			// the update.  Do not install this update.
 			if(!path.asString().empty())
 			{
-				llinfos << "ignoring update dowloaded by different client version" << llendl;
+				LL_INFOS("UpdaterService") << "ignoring update dowloaded by different client version" << LL_ENDL;;
 				LLFile::remove(path.asString());
 				LLFile::remove(update_marker_path());
 			}
@@ -311,9 +339,13 @@ bool LLUpdaterServiceImpl::checkForInstall(bool launchInstaller)
 				if((result == 0) && mAppExitCallback)
 				{
 					mAppExitCallback();
-				} else if(result != 0) {
-					llwarns << "failed to run update install script" << LL_ENDL;
-				} else {
+				}
+				else if(result != 0)
+				{
+					LL_WARNS("UpdaterService") << "failed to run update install script" << LL_ENDL;
+				}
+				else
+				{
 					; // No op.
 				}
 			}
@@ -341,15 +373,19 @@ bool LLUpdaterServiceImpl::checkForResume()
 			{
 				mIsDownloading = true;
 				mNewVersion = download_info["update_version"].asString();
+				mNewChannel = download_info["update_channel"].asString();
 				mUpdateDownloader.resume();
 				result = true;
 			}
 			else 
 			{
 				// The viewer that started this download is not the same as this viewer; ignore.
-				llinfos << "ignoring partial download from different viewer version" << llendl;
+				LL_INFOS("UpdaterService") << "ignoring partial download from different viewer version" << LL_ENDL;;
 				std::string path = download_info["path"].asString();
-				if(!path.empty()) LLFile::remove(path);
+				if(!path.empty())
+				{
+					LLFile::remove(path);
+				}
 				LLFile::remove(download_marker_path);
 			}
 		} 
@@ -366,36 +402,43 @@ void LLUpdaterServiceImpl::error(std::string const & message)
 	}
 }
 
-void LLUpdaterServiceImpl::optionalUpdate(std::string const & newVersion,
-										  LLURI const & uri,
-										  std::string const & hash)
+// A successful response was received from the viewer version manager
+void LLUpdaterServiceImpl::response(LLSD const & content)
 {
-	stopTimer();
-	mNewVersion = newVersion;
-	mIsDownloading = true;
-	setState(LLUpdaterService::DOWNLOADING);
-	mUpdateDownloader.download(uri, hash, newVersion, false);
-}
-
-void LLUpdaterServiceImpl::requiredUpdate(std::string const & newVersion,
-										  LLURI const & uri,
-										  std::string const & hash)
-{
-	stopTimer();
-	mNewVersion = newVersion;
-	mIsDownloading = true;
-	setState(LLUpdaterService::DOWNLOADING);
-	mUpdateDownloader.download(uri, hash, newVersion, true);
-}
-
-void LLUpdaterServiceImpl::upToDate(void)
-{
-	if(mIsChecking)
+	if(!content.asBoolean()) // an empty response means "no update"
 	{
-		restartTimer(mCheckPeriod);
-	}
+		LL_INFOS("UpdaterService") << "up to date" << LL_ENDL;
+		if(mIsChecking)
+		{
+			restartTimer(mCheckPeriod);
+		}
 	
-	setState(LLUpdaterService::UP_TO_DATE);
+		setState(LLUpdaterService::UP_TO_DATE);
+	}
+	else
+	{
+		// there is an update available...
+		stopTimer();
+		mNewChannel = content["channel"].asString();
+		if (mNewChannel.empty())
+		{
+			LL_INFOS("UpdaterService") << "no channel supplied, assuming current channel" << LL_ENDL;
+			mNewChannel = mChannel;
+		}
+		mNewVersion = content["version"].asString();
+		mIsDownloading = true;
+		setState(LLUpdaterService::DOWNLOADING);
+		BOOL required = content["required"].asBoolean();
+		LLURI url(content["url"].asString());
+		std::string more_info = content["more_info"].asString();
+		LL_DEBUGS("UpdaterService")
+			<< "Starting download of "
+			<< ( required ? "required" : "optional" ) << " update"
+			<< " to channel '" << mNewChannel << "' version " << mNewVersion
+			<< " more info '" << more_info << "'"
+			<< LL_ENDL;
+		mUpdateDownloader.download(url, content["hash"].asString(), mNewChannel, mNewVersion, more_info, required);
+	}
 }
 
 void LLUpdaterServiceImpl::downloadComplete(LLSD const & data) 
@@ -413,9 +456,19 @@ void LLUpdaterServiceImpl::downloadComplete(LLSD const & data)
 	payload["type"] = LLSD(LLUpdaterService::DOWNLOAD_COMPLETE);
 	payload["required"] = data["required"];
 	payload["version"] = mNewVersion;
+	payload["channel"] = mNewChannel;
+	payload["info_url"] = data["info_url"];
 	event["payload"] = payload;
+	LL_DEBUGS("UpdaterService")
+		<< "Download complete "
+		<< ( data["required"].asBoolean() ? "required" : "optional" )
+		<< " channel " << mNewChannel
+		<< " version " << mNewVersion
+		<< " info " << data["info_url"].asString()
+		<< LL_ENDL;
+
 	LLEventPumps::instance().obtain("mainlooprepeater").post(event);
-	
+
 	setState(LLUpdaterService::TERMINAL);
 }
 
@@ -489,15 +542,18 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
 		// Check for failed install.
 		if(LLFile::isfile(ll_install_failed_marker_path()))
 		{
+			LL_DEBUGS("UpdaterService") << "found marker " << ll_install_failed_marker_path() << LL_ENDL;;
 			int requiredValue = 0; 
 			{
 				llifstream stream(ll_install_failed_marker_path());
 				stream >> requiredValue;
-				if(stream.fail()) requiredValue = 0;
+				if(stream.fail())
+				{
+					requiredValue = 0;
+				}
 			}
 			// TODO: notify the user.
-			llinfos << "found marker " << ll_install_failed_marker_path() << llendl;
-			llinfos << "last install attempt failed" << llendl;
+			LL_WARNS("UpdaterService") << "last install attempt failed" << LL_ENDL;;
 			LLFile::remove(ll_install_failed_marker_path());
 			
 			LLSD event;
@@ -509,7 +565,7 @@ bool LLUpdaterServiceImpl::onMainLoop(LLSD const & event)
 		}
 		else
 		{
-			mUpdateChecker.checkVersion(mProtocolVersion, mUrl, mPath, mChannel, mVersion);
+			mUpdateChecker.checkVersion(mUrl, mPath, mChannel, mVersion, mPlatform, mPlatformVersion, mUniqueId, mWillingToTest);
 			setState(LLUpdaterService::CHECKING_FOR_UPDATE);
 		}
 	} 
@@ -554,13 +610,17 @@ LLUpdaterService::~LLUpdaterService()
 {
 }
 
-void LLUpdaterService::initialize(const std::string& protocol_version,
-								 const std::string& url, 
-								 const std::string& path,
-								 const std::string& channel,
-								 const std::string& version)
+void LLUpdaterService::initialize(const std::string& url, 
+								  const std::string& path,
+								  const std::string& channel,
+								  const std::string& version,
+								  const std::string& platform,
+								  const std::string& platform_version,
+								  const unsigned char uniqueid[MD5HEX_STR_SIZE],
+								  const bool&         willing_to_test
+)
 {
-	mImpl->initialize(protocol_version, url, path, channel, version);
+	mImpl->initialize(url, path, channel, version, platform, platform_version, uniqueid, willing_to_test);
 }
 
 void LLUpdaterService::setCheckPeriod(unsigned int seconds)
@@ -609,10 +669,10 @@ std::string const & ll_get_version(void) {
 	
 	if (version.empty()) {
 		std::ostringstream stream;
-		stream << LL_VERSION_MAJOR << "."
-		<< LL_VERSION_MINOR << "."
-		<< LL_VERSION_PATCH << "."
-		<< LL_VERSION_BUILD;
+		stream << LL_VIEWER_VERSION_MAJOR << "."
+			   << LL_VIEWER_VERSION_MINOR << "."
+			   << LL_VIEWER_VERSION_PATCH << "."
+			   << LL_VIEWER_VERSION_BUILD;
 		version = stream.str();
 	}
 	
diff --git a/indra/viewer_components/updater/llupdaterservice.h b/indra/viewer_components/updater/llupdaterservice.h
old mode 100644
new mode 100755
index 450f19c1c6d18cbffc4b4f0c95621f0a6b9717ba..982f99b86135032c26842c93373356331e516ce3
--- a/indra/viewer_components/updater/llupdaterservice.h
+++ b/indra/viewer_components/updater/llupdaterservice.h
@@ -28,6 +28,7 @@
 
 #include <boost/shared_ptr.hpp>
 #include <boost/function.hpp>
+#include "llhasheduniqueid.h"
 
 class LLUpdaterServiceImpl;
 
@@ -70,11 +71,15 @@ class LLUpdaterService
 	LLUpdaterService();
 	~LLUpdaterService();
 
-	void initialize(const std::string& protocol_version,
-				    const std::string& url, 
-				    const std::string& path,
-				    const std::string& channel,
-				    const std::string& version);
+	void initialize(const std::string& 	url, 
+				    const std::string& 	path,
+				    const std::string& 	channel,
+				    const std::string& 	version,
+					const std::string&  platform,
+					const std::string&  platform_version,
+					const unsigned char uniqueid[MD5HEX_STR_SIZE],
+					const bool&         willing_to_test
+					);
 
 	void setCheckPeriod(unsigned int seconds);
 	void setBandwidthLimit(U64 bytesPerSecond);
diff --git a/indra/viewer_components/updater/scripts/darwin/janitor.py b/indra/viewer_components/updater/scripts/darwin/janitor.py
new file mode 100644
index 0000000000000000000000000000000000000000..cdf33df731b93baeebdc50aba63274c9a9c1f7c3
--- /dev/null
+++ b/indra/viewer_components/updater/scripts/darwin/janitor.py
@@ -0,0 +1,133 @@
+#!/usr/bin/python
+"""\
+@file   janitor.py
+@author Nat Goodspeed
+@date   2011-09-14
+@brief  Janitor class to clean up arbitrary resources
+
+2013-01-04 cloned from vita because it's exactly what update_install.py needs.
+
+$LicenseInfo:firstyear=2011&license=viewerlgpl$
+Copyright (c) 2011, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import sys
+import functools
+import itertools
+
+class Janitor(object):
+    """
+    Usage:
+
+    Basic:
+    self.janitor = Janitor(sys.stdout) # report cleanup actions on stdout
+    ...
+    self.janitor.later(os.remove, some_temp_file)
+    self.janitor.later(os.remove, some_other_file)
+    ...
+    self.janitor.cleanup()          # perform cleanup actions
+
+    Context Manager:
+    with Janitor() as janitor:      # clean up quietly
+        ...
+        janitor.later(shutil.rmtree, some_temp_directory)
+        ...
+    # exiting 'with' block performs cleanup
+
+    Test Class:
+    class TestMySoftware(unittest.TestCase, Janitor):
+        def __init__(self):
+            Janitor.__init__(self)  # quiet cleanup
+            ...
+
+        def setUp(self):
+            ...
+            self.later(os.rename, saved_file, original_location)
+            ...
+
+        def tearDown(self):
+            Janitor.tearDown(self)  # calls cleanup()
+            ...
+            # Or, if you have no other tearDown() logic for
+            # TestMySoftware, you can omit the TestMySoftware.tearDown()
+            # def entirely and let it inherit Janitor.tearDown().
+    """
+    def __init__(self, stream=None):
+        """
+        If you pass stream= (e.g.) sys.stdout or sys.stderr, Janitor will
+        report its cleanup operations as it performs them. If you don't, it
+        will perform them quietly -- unless one or more of the actions throws
+        an exception, in which case you'll get output on stderr.
+        """
+        self.stream   = stream
+        self.cleanups = []
+
+    def later(self, func, *args, **kwds):
+        """
+        Pass the callable you want to call at cleanup() time, plus any
+        positional or keyword args you want to pass it.
+        """
+        # Get a name string for 'func'
+        try:
+            # A free function has a __name__
+            name = func.__name__
+        except AttributeError:
+            try:
+                # A class object (even builtin objects like ints!) support
+                # __class__.__name__
+                name = func.__class__.__name__
+            except AttributeError:
+                # Shrug! Just use repr() to get a string describing this func.
+                name = repr(func)
+        # Construct a description of this operation in Python syntax from
+        # args, kwds.
+        desc = "%s(%s)" % \
+               (name, ", ".join(itertools.chain((repr(a) for a in args),
+                                                ("%s=%r" % (k, v) for (k, v) in kwds.iteritems()))))
+        # Use functools.partial() to bind passed args and keywords to the
+        # passed func so we get a nullary callable that does what caller
+        # wants.
+        bound = functools.partial(func, *args, **kwds)
+        self.cleanups.append((desc, bound))
+
+    def cleanup(self):
+        """
+        Perform all the actions saved with later() calls.
+        """
+        # Typically one allocates resource A, then allocates resource B that
+        # depends on it. In such a scenario it's appropriate to delete B
+        # before A -- so perform cleanup actions in reverse order. (This is
+        # the same strategy used by atexit().)
+        while self.cleanups:
+            # Until our list is empty, pop the last pair.
+            desc, bound = self.cleanups.pop(-1)
+
+            # If requested, report the action.
+            if self.stream is not None:
+                print >>self.stream, desc
+
+            try:
+                # Call the bound callable
+                bound()
+            except Exception, err:
+                # This is cleanup. Report the problem but continue.
+                print >>(self.stream or sys.stderr), "Calling %s\nraised  %s: %s" % \
+                      (desc, err.__class__.__name__, err)
+
+    def tearDown(self):
+        """
+        If a unittest.TestCase subclass (or a nose test class) adds Janitor as
+        one of its base classes, and has no other tearDown() logic, let it
+        inherit Janitor.tearDown().
+        """
+        self.cleanup()
+
+    def __enter__(self):
+        return self
+
+    def __exit__(self, type, value, tb):
+        # Perform cleanup no matter how we exit this 'with' statement
+        self.cleanup()
+        # Propagate any exception from the 'with' statement, don't swallow it
+        return False
diff --git a/indra/viewer_components/updater/scripts/darwin/messageframe.py b/indra/viewer_components/updater/scripts/darwin/messageframe.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f58848882a069bf4caeed0c34c41df11f36dcda
--- /dev/null
+++ b/indra/viewer_components/updater/scripts/darwin/messageframe.py
@@ -0,0 +1,66 @@
+#!/usr/bin/python
+"""\
+@file   messageframe.py
+@author Nat Goodspeed
+@date   2013-01-03
+@brief  Define MessageFrame class for popping up messages from a command-line
+        script.
+
+$LicenseInfo:firstyear=2013&license=viewerlgpl$
+Copyright (c) 2013, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import Tkinter as tk
+import os
+
+# Tricky way to obtain the filename of the main script (default title string)
+import __main__
+
+# This class is intended for displaying messages from a command-line script.
+# Getting the base class right took a bit of trial and error.
+# If you derive from tk.Frame, the destroy() method doesn't actually close it.
+# If you derive from tk.Toplevel, it pops up a separate Tk frame too. destroy()
+# closes this frame, but not that one.
+# Deriving from tk.Tk appears to do the right thing.
+class MessageFrame(tk.Tk):
+    def __init__(self, text="", title=os.path.splitext(os.path.basename(__main__.__file__))[0],
+                 width=320, height=120):
+        tk.Tk.__init__(self)
+        self.grid()
+        self.title(title)
+        self.var = tk.StringVar()
+        self.var.set(text)
+        self.msg = tk.Label(self, textvariable=self.var)
+        self.msg.grid()
+        # from http://stackoverflow.com/questions/3352918/how-to-center-a-window-on-the-screen-in-tkinter :
+        self.update_idletasks()
+
+        # The constants below are to adjust for typical overhead from the
+        # frame borders.
+        xp = (self.winfo_screenwidth()  / 2) - (width  / 2) - 8
+        yp = (self.winfo_screenheight() / 2) - (height / 2) - 20
+        self.geometry('{0}x{1}+{2}+{3}'.format(width, height, xp, yp))
+        self.update()
+
+    def set(self, text):
+        self.var.set(text)
+        self.update()
+
+if __name__ == "__main__":
+    # When run as a script, just test the MessageFrame.
+    import sys
+    import time
+
+    frame = MessageFrame("something in the way she moves....")
+    time.sleep(3)
+    frame.set("smaller")
+    time.sleep(3)
+    frame.set("""this has
+several
+lines""")
+    time.sleep(3)
+    frame.destroy()
+    print "Destroyed!"
+    sys.stdout.flush()
+    time.sleep(3)
diff --git a/indra/viewer_components/updater/scripts/darwin/update_install b/indra/viewer_components/updater/scripts/darwin/update_install
deleted file mode 100644
index e7f36dc5a360faee7dbc2a4d4c5e6f9b80130f33..0000000000000000000000000000000000000000
--- a/indra/viewer_components/updater/scripts/darwin/update_install
+++ /dev/null
@@ -1,10 +0,0 @@
-#! /bin/bash
-
-#
-# The first argument contains the path to the installer app.  The second a path
-# to a marker file which should be created if the installer fails.q
-#
-
-cd "$(dirname "$0")"
-(../Resources/mac-updater.app/Contents/MacOS/mac-updater -dmg "$1" -name "Second Life Viewer"; if [ $? -ne 0 ]; then echo $3 >> "$2"; fi;) &
-exit 0
diff --git a/indra/viewer_components/updater/scripts/darwin/update_install.py b/indra/viewer_components/updater/scripts/darwin/update_install.py
new file mode 100755
index 0000000000000000000000000000000000000000..2fc6fcdb29e1b04a33feb56014cc96af7b84d131
--- /dev/null
+++ b/indra/viewer_components/updater/scripts/darwin/update_install.py
@@ -0,0 +1,373 @@
+#!/usr/bin/python
+"""\
+@file   update_install.py
+@author Nat Goodspeed
+@date   2012-12-20
+@brief  Update the containing Second Life application bundle to the version in
+        the specified disk image file.
+
+        This Python implementation is derived from the previous mac-updater
+        application, a funky mix of C++, classic C and Objective-C.
+
+$LicenseInfo:firstyear=2012&license=viewerlgpl$
+Copyright (c) 2012, Linden Research, Inc.
+$/LicenseInfo$
+"""
+
+import os
+import sys
+import cgitb
+import errno
+import glob
+import plistlib
+import re
+import shutil
+import subprocess
+import tempfile
+import time
+from janitor import Janitor
+from messageframe import MessageFrame
+import Tkinter, tkMessageBox
+
+TITLE = "Second Life Viewer Updater"
+# Magic bundle identifier used by all Second Life viewer bundles
+BUNDLE_IDENTIFIER = "com.secondlife.indra.viewer"
+
+# Global handle to the MessageFrame so we can update message
+FRAME = None
+# Global handle to logfile, once it's open
+LOGF  = None
+
+# ****************************************************************************
+#   Logging and messaging
+#
+#   This script is normally run implicitly by the old viewer to update to the
+#   new viewer. Its UI consists of a MessageFrame and possibly a Tk error box.
+#   Log details to updater.log -- especially uncaught exceptions!
+# ****************************************************************************
+def log(message):
+    """write message only to LOGF (also called by status() and fail())"""
+    # If we don't even have LOGF open yet, at least write to Console log
+    logf = LOGF or sys.stderr
+    logf.writelines((time.strftime("%Y-%m-%dT%H:%M:%SZ ", time.gmtime()), message, '\n'))
+    logf.flush()
+
+def status(message):
+    """display and log normal progress message"""
+    log(message)
+
+    global FRAME
+    if not FRAME:
+        FRAME = MessageFrame(message, TITLE)
+    else:
+        FRAME.set(message)
+
+def fail(message):
+    """log message, produce error box, then terminate with nonzero rc"""
+    log(message)
+
+    # If we haven't yet called status() (we don't yet have a FRAME), perform a
+    # bit of trickery to bypass the spurious "main window" that Tkinter would
+    # otherwise pop up if the first call is showerror().
+    if not FRAME:
+        root = Tkinter.Tk()
+        root.withdraw()
+
+    # If we do have a LOGF available, mention it in the error box.
+    if LOGF:
+        message = "%s\n(Updater log in %s)" % (message, LOGF.name)
+
+    # We explicitly specify the WARNING icon because, at least on the Tkinter
+    # bundled with the system-default Python 2.7 on Mac OS X 10.7.4, the
+    # ERROR, QUESTION and INFO icons are all the silly Tk rocket ship. At
+    # least WARNING has an exclamation in a yellow triangle, even though
+    # overlaid by a smaller image of the rocket ship.
+    tkMessageBox.showerror(TITLE,
+"""An error occurred while updating Second Life:
+%s
+Please download the latest viewer from www.secondlife.com.""" % message,
+                           icon=tkMessageBox.WARNING)
+    sys.exit(1)
+
+def exception(err):
+    """call fail() with an exception instance"""
+    fail("%s exception: %s" % (err.__class__.__name__, str(err)))
+
+def excepthook(type, value, traceback):
+    """
+    Store this hook function into sys.excepthook until we have a logfile.
+    """
+    # At least in older Python versions, it could be tricky to produce a
+    # string from 'type' and 'value'. For instance, an OSError exception would
+    # pass type=OSError and value=some_tuple. Empirically, this funky
+    # expression seems to work.
+    exception(type(*value))
+sys.excepthook = excepthook
+
+class ExceptHook(object):
+    """
+    Store an instance of this class into sys.excepthook once we have a logfile
+    open.
+    """
+    def __init__(self, logfile):
+        # There's no magic to the cgitb.enable() function -- it merely stores
+        # an instance of cgitb.Hook into sys.excepthook, passing enable()'s
+        # params into Hook.__init__(). Sadly, enable() doesn't forward all its
+        # params using (*args, **kwds) syntax -- another story. But the point
+        # is that all the goodness is in the cgitb.Hook class. Capture an
+        # instance.
+        self.hook = cgitb.Hook(file=logfile, format="text")
+
+    def __call__(self, type, value, traceback):
+        # produce nice text traceback to logfile
+        self.hook(type, value, traceback)
+        # Now display an error box.
+        excepthook(type, value, traceback)
+
+def write_marker(markerfile, markertext):
+    log("writing %r to %s" % (markertext, markerfile))
+    try:
+        with open(markerfile, "w") as markerf:
+            markerf.write(markertext)
+    except IOError, err:
+        # write_marker() is invoked by fail(), and fail() is invoked by other
+        # error-handling functions. If we try to invoke any of those, we'll
+        # get infinite recursion. If for any reason we can't write markerfile,
+        # try to log it -- otherwise shrug.
+        log("%s exception: %s" % (err.__class__.__name__, err))
+
+# ****************************************************************************
+#   Main script logic
+# ****************************************************************************
+def main(dmgfile, markerfile, markertext):
+    # Should we fail, we're supposed to write 'markertext' to 'markerfile'.
+    # Wrap the fail() function so we do that.
+    global fail
+    oldfail = fail
+    def fail(message):
+        write_marker(markerfile, markertext)
+        oldfail(message)
+
+    try:
+        # Starting with the Cocoafied viewer, we'll find viewer logs in
+        # ~/Library/Application Support/$CFBundleIdentifier/logs rather than in
+        # ~/Library/Application Support/SecondLife/logs as before. This could be
+        # obnoxious -- but we Happen To Know that markerfile is a path specified
+        # within the viewer's logs directory. Use that.
+        logsdir = os.path.dirname(markerfile)
+
+        # Move the old updater.log file out of the way
+        logname = os.path.join(logsdir, "updater.log")
+        try:
+            os.rename(logname, logname + ".old")
+        except OSError, err:
+            # Nonexistence is okay. Anything else, not so much.
+            if err.errno != errno.ENOENT:
+                raise
+
+        # Open new updater.log.
+        global LOGF
+        LOGF = open(logname, "w")
+
+        # Now that LOGF is in fact open for business, use it to log any further
+        # uncaught exceptions.
+        sys.excepthook = ExceptHook(LOGF)
+
+        # log how this script was invoked
+        log(' '.join(repr(arg) for arg in sys.argv))
+
+        # prepare for other cleanup
+        with Janitor(LOGF) as janitor:
+
+            # Try to derive the name of the running viewer app bundle from our
+            # own pathname. (Hopefully the old viewer won't copy this script
+            # to a temp dir before running!)
+            # Somewhat peculiarly, this script is currently packaged in
+            # Appname.app/Contents/MacOS with the viewer executable. But even
+            # if we decide to move it to Appname.app/Contents/Resources, we'll
+            # still find Appname.app two levels up from dirname(__file__).
+            appdir = os.path.abspath(os.path.join(os.path.dirname(__file__),
+                                                  os.pardir, os.pardir))
+            if not appdir.endswith(".app"):
+                # This can happen if either this script has been copied before
+                # being executed, or if it's in an unexpected place in the app
+                # bundle.
+                fail(appdir + " is not an application directory")
+
+            # We need to install into appdir's parent directory -- can we?
+            installdir = os.path.abspath(os.path.join(appdir, os.pardir))
+            if not os.access(installdir, os.W_OK):
+                fail("Can't modify " + installdir)
+
+            # invent a temporary directory
+            tempdir = tempfile.mkdtemp()
+            log("created " + tempdir)
+            # clean it up when we leave
+            janitor.later(shutil.rmtree, tempdir)
+
+            status("Mounting image...")
+
+            mntdir = os.path.join(tempdir, "mnt")
+            log("mkdir " + mntdir)
+            os.mkdir(mntdir)
+            command = ["hdiutil", "attach", dmgfile, "-mountpoint", mntdir]
+            log(' '.join(command))
+            # Instantiating subprocess.Popen launches a child process with the
+            # specified command line. stdout=PIPE passes a pipe to its stdout.
+            hdiutil = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=LOGF)
+            # Popen.communicate() reads that pipe until the child process
+            # terminates, returning (stdout, stderr) output. Select just stdout.
+            hdiutil_out = hdiutil.communicate()[0]
+            if hdiutil.returncode != 0:
+                fail("Couldn't mount " + dmgfile)
+            # hdiutil should report the devnode. Find that.
+            found = re.search(r"/dev/[^ ]*\b", hdiutil_out)
+            if not found:
+                # If we don't spot the devnode, log it and continue -- we only
+                # use it to detach it. Don't fail the whole update if we can't
+                # clean up properly.
+                log("Couldn't spot devnode in hdiutil output:\n" + hdiutil_out)
+            else:
+                # If we do spot the devnode, detach it when done.
+                janitor.later(subprocess.call, ["hdiutil", "detach", found.group(0)],
+                              stdout=LOGF, stderr=subprocess.STDOUT)
+
+            status("Searching for app bundle...")
+
+            for candidate in glob.glob(os.path.join(mntdir, "*.app")):
+                log("Considering " + candidate)
+                try:
+                    # By convention, a valid Mac app bundle has a
+                    # Contents/Info.plist file containing at least
+                    # CFBundleIdentifier.
+                    CFBundleIdentifier = \
+                        plistlib.readPlist(os.path.join(candidate, "Contents",
+                                                        "Info.plist"))["CFBundleIdentifier"]
+                except Exception, err:
+                    # might be IOError, xml.parsers.expat.ExpatError, KeyError
+                    # Any of these means it's not a valid app bundle. Instead
+                    # of aborting, just skip this candidate and continue.
+                    log("%s not a valid app bundle: %s: %s" %
+                        (candidate, err.__class__.__name__, err))
+                    continue
+
+                if CFBundleIdentifier == BUNDLE_IDENTIFIER:
+                    break
+
+                log("unrecognized CFBundleIdentifier: " + CFBundleIdentifier)
+
+            else:
+                fail("Could not find Second Life viewer in " + dmgfile)
+
+            # Here 'candidate' is the new viewer to install
+            log("Found " + candidate)
+
+            # This logic was changed to make Mac updates behave more like
+            # Windows. Most of the time, the user doesn't change the name of
+            # the app bundle on our .dmg installer (e.g. "Second Life Beta
+            # Viewer.app"). Most of the time, the version manager directs a
+            # given viewer to update to another .dmg containing an app bundle
+            # with THE SAME name. In that case, everything behaves as usual.
+
+            # The case that was changed is when the version manager offers (or
+            # mandates) an update to a .dmg containing a different app bundle
+            # name. This can happen, for instance, to a user who's downloaded
+            # a "project beta" viewer, and the project subsequently publishes
+            # a Release Candidate viewer. Say the project beta's app bundle
+            # name is something like "Second Life Beta Neato.app". Anyone
+            # launching that viewer will be offered an update to the
+            # corresponding Release Candidate viewer -- which will be built as
+            # a release viewer, with app bundle name "Second Life Viewer.app".
+
+            # On Windows, we run the NSIS installer, which will update/replace
+            # the embedded install directory name, e.g. Second Life Viewer.
+            # But the Mac installer used to locate the app bundle name in the
+            # mounted .dmg file, then ignore that name, copying its contents
+            # into the app bundle directory of the running viewer. That is,
+            # we'd install the Release Candidate from the .dmg's "Second
+            # Life.app" into "/Applications/Second Life Beta Neato.app". This
+            # is undesired behavior.
+
+            # Instead, having found the app bundle name on the mounted .dmg,
+            # we try to install that app bundle name into the parent directory
+            # of the running app bundle.
+
+            # Are we installing a different app bundle name? If so, call it
+            # out, both in the log and for the user -- this is an odd case.
+            # (Presumably they've already agreed to a similar notification in
+            # the viewer before the viewer launched this script, but still.)
+            bundlename = os.path.basename(candidate)
+            if os.path.basename(appdir) == bundlename:
+                # updating the running app bundle, which we KNOW exists
+                appexists = True
+            else:
+                # installing some other app bundle
+                newapp = os.path.join(installdir, bundlename)
+                appexists = os.path.exists(newapp)
+                message = "Note: %s %s %s" % \
+                          (appdir, "updating" if appexists else "installing new", newapp)
+                status(message)
+                # okay, we have no further need of the name of the running app
+                # bundle.
+                appdir = newapp
+
+            status("Preparing to copy files...")
+
+            if appexists:
+                # move old viewer to temp location in case copy from .dmg fails
+                aside = os.path.join(tempdir, os.path.basename(appdir))
+                log("mv %r %r" % (appdir, aside))
+                # Use shutil.move() instead of os.rename(). move() first tries
+                # os.rename(), but falls back to shutil.copytree() if the dest is
+                # on a different filesystem.
+                shutil.move(appdir, aside)
+
+            status("Copying files...")
+
+            # shutil.copytree()'s target must not already exist. But we just
+            # moved appdir out of the way.
+            log("cp -p %r %r" % (candidate, appdir))
+            try:
+                # The viewer app bundle does include internal symlinks. Keep them
+                # as symlinks.
+                shutil.copytree(candidate, appdir, symlinks=True)
+            except Exception, err:
+                # copy failed -- try to restore previous viewer before crumping
+                type, value, traceback = sys.exc_info()
+                if appexists:
+                    log("exception response: mv %r %r" % (aside, appdir))
+                    shutil.move(aside, appdir)
+                # let our previously-set sys.excepthook handle this
+                raise type, value, traceback
+
+            status("Cleaning up...")
+
+            log("touch " + appdir)
+            os.utime(appdir, None)      # set to current time
+
+            command = ["open", appdir]
+            log(' '.join(command))
+            subprocess.check_call(command, stdout=LOGF, stderr=subprocess.STDOUT)
+
+    except Exception, err:
+        # Because we carefully set sys.excepthook -- and even modify it to log
+        # the problem once we have our log file open -- you might think we
+        # could just let exceptions propagate. But when we do that, on
+        # exception in this block, we FIRST restore the no-side-effects fail()
+        # and THEN implicitly call sys.excepthook(), which calls the (no-side-
+        # effects) fail(). Explicitly call sys.excepthook() BEFORE restoring
+        # fail(). Only then do we get the enriched fail() behavior.
+        sys.excepthook(*sys.exc_info())
+
+    finally:
+        # When we leave main() -- for whatever reason -- reset fail() the way
+        # it was before, because the bound markerfile, markertext params
+        # passed to this main() call are no longer applicable.
+        fail = oldfail
+
+if __name__ == "__main__":
+    # We expect this script to be invoked with:
+    # - the pathname to the .dmg we intend to install;
+    # - the pathname to an update-error marker file to create on failure;
+    # - the content to write into the marker file.
+    main(*sys.argv[1:])
diff --git a/indra/viewer_components/updater/scripts/linux/update_install b/indra/viewer_components/updater/scripts/linux/update_install
old mode 100644
new mode 100755
diff --git a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp
old mode 100644
new mode 100755
index de07beee7c8ebe2ab9fa7e116e4257faba8cb443..4812272ebc12c919f97a692ef1edf5825d40e0f1
--- a/indra/viewer_components/updater/tests/llupdaterservice_test.cpp
+++ b/indra/viewer_components/updater/tests/llupdaterservice_test.cpp
@@ -44,11 +44,17 @@
 *****************************************************************************/
 LLUpdateChecker::LLUpdateChecker(LLUpdateChecker::Client & client)
 {}
-void LLUpdateChecker::checkVersion(std::string const & protocolVersion, std::string const & hostUrl, 
-								  std::string const & servicePath, std::string channel, std::string version)
+void LLUpdateChecker::checkVersion(std::string const & hostUrl, 
+								   std::string const & servicePath,
+								   std::string const & channel,
+								   std::string const & version,
+								   std::string const & platform,
+								   std::string const & platform_version,
+								   unsigned char       uniqueid[MD5HEX_STR_SIZE],
+								   bool                willing_to_test)
 {}
 LLUpdateDownloader::LLUpdateDownloader(Client & ) {}
-void LLUpdateDownloader::download(LLURI const & , std::string const &, std::string const &, bool){}
+void LLUpdateDownloader::download(LLURI const & , std::string const &, std::string const &, std::string const &, std::string const &, bool){}
 
 class LLDir_Mock : public LLDir
 {
@@ -172,9 +178,11 @@ namespace tut
 		bool got_usage_error = false;
 		try
 		{
-			updater.initialize("1.0",test_url, "update" ,test_channel, test_version);
+			unsigned char id1[MD5HEX_STR_SIZE] = "11111111111111111111111111111111";
+			updater.initialize(test_url, "update" ,test_channel, test_version, "win", "1.2.3", id1, true);
 			updater.startChecking();
-			updater.initialize("1.0", "other_url", "update", test_channel, test_version);
+			unsigned char id2[MD5HEX_STR_SIZE] = "22222222222222222222222222222222";
+			updater.initialize("other_url", "update", test_channel, test_version, "win", "4.5.6", id2, true);
 		}
 		catch(LLUpdaterService::UsageError)
 		{
@@ -188,7 +196,8 @@ namespace tut
     {
         DEBUG;
 		LLUpdaterService updater;
-		updater.initialize("1.0", test_url, "update", test_channel, test_version);
+		unsigned char id[MD5HEX_STR_SIZE] = "33333333333333333333333333333333";
+		updater.initialize(test_url, "update", test_channel, test_version, "win", "7.8.9", id, true);
 		updater.startChecking();
 		ensure(updater.isChecking());
 		updater.stopChecking();
diff --git a/indra/win_crash_logger/CMakeLists.txt b/indra/win_crash_logger/CMakeLists.txt
old mode 100644
new mode 100755
index aa35c3b05ea885aa6a13abc02cde879a21c28a3f..3c9a4b97569706542b4a056b99df2d3238fb1bdb
--- a/indra/win_crash_logger/CMakeLists.txt
+++ b/indra/win_crash_logger/CMakeLists.txt
@@ -82,6 +82,7 @@ target_link_libraries(windows-crash-logger
     gdi32
     ole32
     oleaut32
+    wininet
     Wldap32
     )
     
diff --git a/indra/win_crash_logger/StdAfx.cpp b/indra/win_crash_logger/StdAfx.cpp
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/StdAfx.h b/indra/win_crash_logger/StdAfx.h
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/ll_icon.ico b/indra/win_crash_logger/ll_icon.ico
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/llcrashloggerwindows.cpp b/indra/win_crash_logger/llcrashloggerwindows.cpp
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/llcrashloggerwindows.h b/indra/win_crash_logger/llcrashloggerwindows.h
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/resource.h b/indra/win_crash_logger/resource.h
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/win_crash_logger.cpp b/indra/win_crash_logger/win_crash_logger.cpp
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/win_crash_logger.h b/indra/win_crash_logger/win_crash_logger.h
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/win_crash_logger.ico b/indra/win_crash_logger/win_crash_logger.ico
old mode 100644
new mode 100755
diff --git a/indra/win_crash_logger/win_crash_logger.rc b/indra/win_crash_logger/win_crash_logger.rc
old mode 100644
new mode 100755
diff --git a/indra/win_updater/CMakeLists.txt b/indra/win_updater/CMakeLists.txt
old mode 100644
new mode 100755
diff --git a/indra/win_updater/updater.cpp b/indra/win_updater/updater.cpp
old mode 100644
new mode 100755
diff --git a/scripts/build_version.py b/scripts/build_version.py
deleted file mode 100755
index 203d76fe9ee904d0f8ffe73f04da66d251bda019..0000000000000000000000000000000000000000
--- a/scripts/build_version.py
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/usr/bin/env python
-"""\
-@file   build_version.py
-@brief Print the build information embedded in a header file.
-
-  Expects to be invoked from the command line with a file name and a
-  list of directories to search.  The file name will be one of the
-  following:
-
-    llversionserver.h
-    llversionviewer.h
-
-  The directory list that follows will include indra/llcommon, where
-  these files live.
-
-$LicenseInfo:firstyear=2010&license=viewerlgpl$
-Second Life Viewer Source Code
-Copyright (C) 2010-2011, Linden Research, Inc.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation;
-version 2.1 of the License only.
-
-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
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser 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
-
-Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-$/LicenseInfo$
-"""
-
-import errno, os, re
-
-def get_version(filename):
-    fp = open(filename)
-    data = fp.read()
-    fp.close()
-
-    vals = {}
-    m = re.search('const S32 LL_VERSION_MAJOR = (\d+);', data)
-    vals['major'] = m.group(1)
-    m = re.search('const S32 LL_VERSION_MINOR = (\d+);', data)
-    vals['minor'] = m.group(1)
-    m = re.search('const S32 LL_VERSION_PATCH = (\d+);', data)
-    vals['patch'] = m.group(1)
-    m = re.search('const S32 LL_VERSION_BUILD = (\d+);', data)
-    vals['build'] = m.group(1)
-
-    return "%(major)s.%(minor)s.%(patch)s.%(build)s" % vals
-
-if __name__ == '__main__':
-    import sys
-
-    try:
-        for path in sys.argv[2:]:
-            name = os.path.join(path, sys.argv[1])
-            try:
-                print get_version(name)
-                break
-            except OSError, err:
-                if err.errno != errno.ENOENT:
-                    raise
-        else:
-            print >> sys.stderr, 'File not found:', sys.argv[1]
-            sys.exit(1)
-    except AttributeError:
-        print >> sys.stderr, 'Error: malformatted file: ', name
-        sys.exit(1)
-    except IndexError:
-        print >> sys.stderr, ('Usage: %s llversion[...].h [directories]' %
-                              sys.argv[0])
diff --git a/scripts/messages/message_template.msg b/scripts/messages/message_template.msg
old mode 100644
new mode 100755
diff --git a/scripts/messages/message_template.msg.sha1 b/scripts/messages/message_template.msg.sha1
old mode 100644
new mode 100755
diff --git a/scripts/setup-path.py b/scripts/setup-path.py
old mode 100644
new mode 100755
diff --git a/scripts/template_verifier.py b/scripts/template_verifier.py
old mode 100644
new mode 100755
diff --git a/scripts/templates/template-cpp.cpp b/scripts/templates/template-cpp.cpp
old mode 100644
new mode 100755
diff --git a/scripts/templates/template-h.h b/scripts/templates/template-h.h
old mode 100644
new mode 100755
diff --git a/scripts/update_version_files.py b/scripts/update_version_files.py
deleted file mode 100755
index 87036dc1c05e2a0f632c768e827fc27894a16418..0000000000000000000000000000000000000000
--- a/scripts/update_version_files.py
+++ /dev/null
@@ -1,343 +0,0 @@
-#!/usr/bin/env python
-"""\
-@file   update_version_files.py
-@brief  Update all of the various files in the repository to a new version number,
-instead of having to figure it out by hand
-
-$LicenseInfo:firstyear=2010&license=viewerlgpl$
-Second Life Viewer Source Code
-Copyright (C) 2010-2011, Linden Research, Inc.
-
-This library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Lesser General Public
-License as published by the Free Software Foundation;
-version 2.1 of the License only.
-
-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
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser 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
-
-Linden Research, Inc., 945 Battery Street, San Francisco, CA  94111  USA
-$/LicenseInfo$
-"""
-
-import sys
-import os.path
-
-# Look for indra/lib/python in all possible parent directories ...
-# This is an improvement over the setup-path.py method used previously:
-#  * the script may blocated anywhere inside the source tree
-#  * it doesn't depend on the current directory
-#  * it doesn't depend on another file being present.
-
-def add_indra_lib_path():
-    root = os.path.realpath(__file__)
-    # always insert the directory of the script in the search path
-    dir = os.path.dirname(root)
-    if dir not in sys.path:
-        sys.path.insert(0, dir)
-
-    # Now go look for indra/lib/python in the parent dies
-    while root != os.path.sep:
-        root = os.path.dirname(root)
-        dir = os.path.join(root, 'indra', 'lib', 'python')
-        if os.path.isdir(dir):
-            if dir not in sys.path:
-                sys.path.insert(0, dir)
-            break
-    else:
-        print >>sys.stderr, "This script is not inside a valid installation."
-        sys.exit(1)
-
-add_indra_lib_path()
-
-import getopt, os, re, commands
-from indra.util import llversion
-
-def usage():
-    print "Usage:"
-    print sys.argv[0] + """ [options]
-
-Options:
-  --version
-   Specify the version string to replace current version.
-  --revision
-   Specify the revision to replace the last digit of the version.
-   By default, revision is computed from the version control system.
-  --skip-on-branch
-   Specify a regular expression against which the current branch
-   is matched. If it matches, then leave version strings alone.
-   Use this to avoid changing version strings on release candidate
-   builds.
-  --server
-   Update llversionserver.h only with new version
-  --viewer
-   Update llversionviewer.h only with new version
-  --channel
-   Specify the viewer channel string to replace current channel.
-  --server_channel
-   Specify the server channel string to replace current channel.
-  --verbose
-  --help
-   Print this message and exit.
-
-Common Uses:
-   # Update server and viewer build numbers to the current hg revision:
-   update_version_files.py
-
-   # Update build numbers unless we are on a release branch:
-   update_version_files.py --skip-on-branch='^Branch_'
-
-   # Update server and viewer version numbers explicitly:
-   update_version_files.py --version=1.18.1.6     
-                               
-   # Update just the viewer version number explicitly:
-   update_version_files.py --viewer --version=1.18.1.6     
-
-   # Update just the server build number to the current hg revision:
-   update_version_files.py --server
-                               
-   # Update the viewer channel
-   update_version_files.py --channel="First Look Puppeteering"
-                               
-   # Update the server channel
-   update_version_files.py --server_channel="Het Grid"
-   
-"""
-def _getstatusoutput(cmd):
-    """Return Win32 (status, output) of executing cmd
-in a shell."""
-    if os.path.sep != "/":
-        # stupid #%#$$ windows
-        cmd = 'cmd.exe /c "'+cmd+'"'
-    pipe = os.popen(cmd, 'r')
-    text = pipe.read()
-    sts = pipe.close()
-    if sts is None: sts = 0
-    if text[-1:] == '\n': text = text[:-1]
-    return sts, text
-
-re_map = {}
-
-#re_map['filename'] = (('pattern', 'replacement'),
-#                      ('pattern', 'replacement')
-re_map['indra/llcommon/llversionviewer.h'] = \
-    (('const S32 LL_VERSION_MAJOR = (\d+);',
-      'const S32 LL_VERSION_MAJOR = %(VER_MAJOR)s;'),
-     ('const S32 LL_VERSION_MINOR = (\d+);',
-      'const S32 LL_VERSION_MINOR = %(VER_MINOR)s;'),
-     ('const S32 LL_VERSION_PATCH = (\d+);',
-      'const S32 LL_VERSION_PATCH = %(VER_PATCH)s;'),
-     ('const S32 LL_VERSION_BUILD = (\d+);',
-      'const S32 LL_VERSION_BUILD = %(VER_BUILD)s;'),
-     ('const char \* const LL_CHANNEL = "(.+)";',
-      'const char * const LL_CHANNEL = "%(VIEWER_CHANNEL)s";'))
-re_map['indra/llcommon/llversionserver.h'] = \
-    (('const S32 LL_VERSION_MAJOR = (\d+);',
-      'const S32 LL_VERSION_MAJOR = %(SERVER_VER_MAJOR)s;'),
-     ('const S32 LL_VERSION_MINOR = (\d+);',
-      'const S32 LL_VERSION_MINOR = %(SERVER_VER_MINOR)s;'),
-     ('const S32 LL_VERSION_PATCH = (\d+);',
-      'const S32 LL_VERSION_PATCH = %(SERVER_VER_PATCH)s;'),
-     ('const S32 LL_VERSION_BUILD = (\d+);',
-      'const S32 LL_VERSION_BUILD = %(SERVER_VER_BUILD)s;'),
-     ('const char \* const LL_CHANNEL = "(.+)";',
-      'const char * const LL_CHANNEL = "%(SERVER_CHANNEL)s";'))
-re_map['indra/newview/res/viewerRes.rc'] = \
-    (('FILEVERSION [0-9,]+',
-      'FILEVERSION %(VER_MAJOR)s,%(VER_MINOR)s,%(VER_PATCH)s,%(VER_BUILD)s'),
-     ('PRODUCTVERSION [0-9,]+',
-      'PRODUCTVERSION %(VER_MAJOR)s,%(VER_MINOR)s,%(VER_PATCH)s,%(VER_BUILD)s'),
-     ('VALUE "FileVersion", "[0-9.]+"',
-      'VALUE "FileVersion", "%(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s"'),
-     ('VALUE "ProductVersion", "[0-9.]+"',
-      'VALUE "ProductVersion", "%(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s"'))
-
-# Trailing ',' in top level tuple is special form to avoid parsing issues with one element tuple
-re_map['indra/newview/Info-SecondLife.plist'] = \
-    (('<key>CFBundleVersion</key>\n\t<string>[0-9.]+</string>',
-      '<key>CFBundleVersion</key>\n\t<string>%(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s</string>'),)
-
-# This will probably only work as long as InfoPlist.strings is NOT UTF16, which is should be...
-re_map['indra/newview/English.lproj/InfoPlist.strings'] = \
-    (('CFBundleShortVersionString = "Second Life version [0-9.]+";',
-      'CFBundleShortVersionString = "Second Life version %(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s";'),
-     ('CFBundleGetInfoString = "Second Life version [0-9.]+',
-      'CFBundleGetInfoString = "Second Life version %(VER_MAJOR)s.%(VER_MINOR)s.%(VER_PATCH)s.%(VER_BUILD)s'))
-
-
-version_re = re.compile('(\d+).(\d+).(\d+).(\d+)')
-
-def main():
-    script_path = os.path.dirname(__file__)
-    src_root = script_path + "/../"
-    verbose = False
-
-    opts, args = getopt.getopt(sys.argv[1:],
-                               "",
-                               ['version=',
-                                'revision=',
-                                'channel=',
-                                'server_channel=',
-                                'skip-on-branch=',
-                                'verbose',
-                                'server',
-                                'viewer',
-                                'help'])
-    update_server = False
-    update_viewer = False
-    new_version = None
-    new_revision = None
-    new_viewer_channel = None
-    new_server_channel = None
-    skip_on_branch_re = None
-    for o,a in opts:
-        if o in ('--version'):
-            new_version = a
-        if o in ('--revision'):
-            new_revision = a
-        if o in ('--skip-on-branch'):
-            skip_on_branch_re = re.compile(a)
-        if o in ('--channel'):
-            new_viewer_channel = a
-        if o in ('--server_channel'):
-            new_server_channel = a
-        if o in ('--verbose'):
-            verbose = True
-        if o in ('--server'):
-            update_server = True
-        if o in ('--viewer'):
-            update_viewer = True
-        if o in ('--help'):
-            usage()
-            return 0
-
-    if not(update_server or update_viewer):
-        update_server = True
-        update_viewer = True
-
-    # Get current channel/version from llversion*.h
-    try:
-        viewer_channel = llversion.get_viewer_channel()
-        viewer_version = llversion.get_viewer_version()
-    except IOError:
-        print "Viewer version file not present, skipping..."
-        viewer_channel = None
-        viewer_version = None
-        update_viewer = False
-
-    try:
-        server_channel = llversion.get_server_channel()
-        server_version = llversion.get_server_version()
-    except IOError:
-        print "Server version file not present, skipping..."
-        server_channel = None
-        server_version = None
-        update_server = False
-
-    if verbose:
-        print "Source Path:", src_root
-        if viewer_channel != None:
-            print "Current viewer channel/version: '%(viewer_channel)s' / '%(viewer_version)s'" % locals()
-        if server_channel != None:          
-            print "Current server channel/version: '%(server_channel)s' / '%(server_version)s'" % locals()
-        print
-
-    # Determine new channel(s)
-    if new_viewer_channel != None and len(new_viewer_channel) > 0:
-        viewer_channel = new_viewer_channel
-    if new_server_channel != None and len(new_server_channel) > 0:
-        server_channel = new_server_channel
-
-    # Determine new version(s)
-    if new_version:
-        m = version_re.match(new_version)
-        if not m:
-            print "Invalid version string specified!"
-            return -1
-        if update_viewer:
-            viewer_version = new_version
-        if update_server:
-            server_version = new_version
-    else:
-
-        if llversion.using_hg():
-            if new_revision:
-                revision = new_revision
-            else:
-                revision = llversion.get_hg_changeset()
-            branch = llversion.get_hg_repo()
-        elif new_revision:
-            revision = new_revision
-            branch = "unknown"
-        else:
-            print >>sys.stderr, "ERROR: could not determine revision and branch"
-            return -1
-        
-        if skip_on_branch_re and skip_on_branch_re.match(branch):
-            print "Release Candidate Build, leaving version files untouched."
-            return 0
-        if update_viewer:
-            m = version_re.match(viewer_version)
-            viewer_version = m.group(1)+"."+m.group(2)+"."+m.group(3)+"."+revision
-        if update_server:
-            m = version_re.match(server_version)
-            server_version = m.group(1)+"."+m.group(2)+"."+m.group(3)+"."+revision
-
-    if verbose:
-        if update_viewer:
-            print "Setting viewer channel/version: '%(viewer_channel)s' / '%(viewer_version)s'" % locals()
-        if update_server:
-            print "Setting server channel/version: '%(server_channel)s' / '%(server_version)s'" % locals()
-        print
-
-    # split out version parts
-    if viewer_version != None:
-        m = version_re.match(viewer_version)
-        VER_MAJOR = m.group(1)
-        VER_MINOR = m.group(2)
-        VER_PATCH = m.group(3)
-        VER_BUILD = m.group(4)
-
-    if server_version != None:
-        m = version_re.match(server_version)
-        SERVER_VER_MAJOR = m.group(1)
-        SERVER_VER_MINOR = m.group(2)
-        SERVER_VER_PATCH = m.group(3)
-        SERVER_VER_BUILD = m.group(4)
-
-    # For readability and symmetry with version strings:
-    VIEWER_CHANNEL = viewer_channel
-    SERVER_CHANNEL = server_channel
-
-    # Iterate through all of the files in the map, and apply the
-    # substitution filters
-    for filename in re_map.keys():
-        try:
-            # Read the entire file into a string
-            full_fn = src_root + '/' + filename
-            file = open(full_fn,"r")
-            file_str = file.read()
-            file.close()
-
-            if verbose:
-                print "Processing file:",filename
-            for rule in re_map[filename]:
-                repl = rule[1] % locals()
-                file_str = re.sub(rule[0], repl, file_str)
-
-            file = open(full_fn,"w")
-            file.write(file_str)
-            file.close()
-        except IOError:
-            print "File %(filename)s not present, skipping..." % locals()
-    return 0
-
-if __name__ == '__main__':
-    sys.exit(main())
-