diff --git a/Engine/Binaries/ThirdParty/AppLocalDependencies/WinDbg.tps b/Engine/Binaries/ThirdParty/AppLocalDependencies/WinDbg.tps new file mode 100644 index 000000000000..5da1716a34d6 --- /dev/null +++ b/Engine/Binaries/ThirdParty/AppLocalDependencies/WinDbg.tps @@ -0,0 +1,13 @@ + + + Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (WinDbg) + Engine/Binaries/ThirdParty/AppLocalDependencies/Win64/DbgHelp/dbghelp.dll + Used for retrieving a callstack from a minidump. + https://www.microsoft.com/en-us/download/details.aspx?id=3138 + + Licensees + Git + P4 + + N/A + \ No newline at end of file diff --git a/Engine/Build/Android/Java/aar-imports-ant.txt b/Engine/Build/Android/Java/aar-imports-ant.txt new file mode 100644 index 000000000000..93e43560a672 --- /dev/null +++ b/Engine/Build/Android/Java/aar-imports-ant.txt @@ -0,0 +1,6 @@ +repositories $(ANDROID_HOME)/extras +repositories $(ENGINEDIR)/Source/ThirdParty/Android/extras +com.google.android.gms,play-services-auth,11.0.4 +com.google.android.gms,play-services-games,11.0.4 +com.google.android.gms,play-services-nearby,11.0.4 +com.google.android.gms,play-services-plus,11.0.4 diff --git a/Engine/Build/Android/Java/aar-imports.txt b/Engine/Build/Android/Java/aar-imports.txt index 93e43560a672..dd637110b367 100644 --- a/Engine/Build/Android/Java/aar-imports.txt +++ b/Engine/Build/Android/Java/aar-imports.txt @@ -1,6 +1,6 @@ repositories $(ANDROID_HOME)/extras repositories $(ENGINEDIR)/Source/ThirdParty/Android/extras -com.google.android.gms,play-services-auth,11.0.4 -com.google.android.gms,play-services-games,11.0.4 -com.google.android.gms,play-services-nearby,11.0.4 -com.google.android.gms,play-services-plus,11.0.4 +com.google.android.gms,play-services-auth,11.8.0 +com.google.android.gms,play-services-games,11.8.0 +com.google.android.gms,play-services-nearby,11.8.0 +com.google.android.gms,play-services-plus,11.8.0 diff --git a/Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java b/Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template similarity index 89% rename from Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java rename to Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template index 45c55f37147f..c970f873e60d 100644 --- a/Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java +++ b/Engine/Build/Android/Java/src/com/epicgames/ue4/GameActivity.java.template @@ -45,6 +45,7 @@ import android.text.TextWatcher; import android.view.inputmethod.EditorInfo; import android.content.ClipboardManager; import android.content.ClipData; +import android.content.ComponentCallbacks2; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; @@ -58,6 +59,7 @@ import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.FeatureInfo; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; +import android.provider.Settings; import android.provider.Settings.Secure; import android.content.pm.PackageInfo; @@ -153,24 +155,35 @@ import android.content.BroadcastReceiver; public class GameActivity extends NativeActivity implements SurfaceHolder.Callback2, GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, - SensorEventListener + SensorEventListener, + ComponentCallbacks2 { + private boolean bAllowIMU = true; private SensorManager sensorManager; private Sensor accelerometer; private Sensor magnetometer; private Sensor gyroscope; + static boolean first_acceleration_sample = true; + static final float SampleDecayRate = 0.85f; private final float[] rotationMatrix = new float[9]; private final float[] orientationAngles = new float[3]; - static float[] last_accelerometer = new float[]{0, 0, 0}; - static float[] last_magnetometer = new float[]{0, 0, 0}; - // Buffered, historical, motion data. - static float[] last_tilt = new float[]{0, 0, 0}; - static float[] last_gravity = new float[]{0, 0, 0}; + static float[] current_accelerometer = new float[]{0, 0, 0}; + static float[] current_gyroscope = new float[]{0, 0, 0}; + static float[] current_magnetometer = new float[]{0, 0, 0}; + + static float[] filtered_gravity = new float[]{0, 0, 0}; + static float[] last_gravity = new float[]{0, 0, 0}; + static float[] last_tilt = new float[]{0, 0, 0}; + + // active motion state to return to application on request + boolean bSensorDataUpdated = false; + float[] current_tilt = new float[]{0, 0, 0}; + static float[] current_rotation_rate = new float[]{0, 0, 0}; + static float[] current_gravity = new float[]{0, 0, 0}; + static float[] current_acceleration = new float[]{0, 0, 0}; - static boolean first_acceleration_sample = true; - static final float SampleDecayRate = 0.85f; public static Logger Log = new Logger("UE4"); // From cpufeatures.h AndroidCpuFamily enum @@ -181,6 +194,15 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba private static final int ANDROID_CPU_FAMILY_ARM64 = 4; private static final int ANDROID_CPU_FAMILY_X86_64 = 5; private static final int ANDROID_CPU_FAMILY_MIPS64 = 6; + + // For GetNetworkConnectionType + private static final int CONNECTION_TYPE_NONE = 0; + private static final int CONNECTION_TYPE_AIRPLANEMODE = 1; + private static final int CONNECTION_TYPE_ETHERNET = 2; + private static final int CONNECTION_TYPE_CELL = 3; + private static final int CONNECTION_TYPE_WIFI = 4; + private static final int CONNECTION_TYPE_WIMAX = 5; + private static final int CONNECTION_TYPE_BLUETOOTH = 6; public static final int DOWNLOAD_ACTIVITY_ID = 80001; // so we can identify the activity later public static final int DOWNLOAD_NO_RETURN_CODE = 0; // we didn't get a return code - will need to log and debug as this shouldn't happen @@ -195,9 +217,11 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba public static enum VirtualKeyboardCommand { VK_CMD_NONE, VK_CMD_SHOW, VK_CMD_HIDE }; public static VirtualKeyboardCommand lastVirtualKeyboardCommand = VirtualKeyboardCommand.VK_CMD_NONE; public static final int lastVirtualKeyboardCommandDelay = 200; + public static final int checkLastVirtualKeyboardCommandDelay = 500; static GameActivity _activity; static Bundle _bundle; + static Bundle _extrasBundle; protected Dialog mSplashDialog; private int noActionAnimID = -1; @@ -422,18 +446,23 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER); magnetometer = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD); gyroscope = sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE); + // create splashscreen dialog (if launched by SplashActivity) - Bundle intentBundle = getIntent().getExtras(); - if (intentBundle != null) + _extrasBundle = getIntent().getExtras(); + if (_extrasBundle != null) { - ShouldHideUI = intentBundle.getString("ShouldHideUI") != null; - if (intentBundle.getString("UseSplashScreen") != null) + ShouldHideUI = _extrasBundle.getString("ShouldHideUI") != null; + if (_extrasBundle.getString("UseSplashScreen") != null) { try { // try to get the splash theme (can't use R.style.UE4SplashTheme since we don't know the package name until runtime) int SplashThemeId = getResources().getIdentifier("UE4SplashTheme", "style", getPackageName()); mSplashDialog = new Dialog(this, SplashThemeId); mSplashDialog.setCancelable(false); + + // Setting NOT_FOCUSABLE prevents the splash dialog from kicking some devices out of immersive mode. + mSplashDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); + if (ShouldHideUI) { View decorView = mSplashDialog.getWindow().getDecorView(); @@ -762,6 +791,12 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba Log.debug( "bUseExternalFilesDir not found. Leaving as " + UseExternalFilesDir); } + if(bundle.containsKey("com.epicgames.ue4.GameActivity.bAllowIMU")) + { + bAllowIMU = bundle.getBoolean("com.epicgames.ue4.GameActivity.bAllowIMU"); + Log.debug( "AllowIMU set to " + bAllowIMU); + } + //$${gameActivityReadMetadataAdditions}$$ } catch (NameNotFoundException e) @@ -775,7 +810,7 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba Log.debug("APK path: " + getPackageResourcePath()); Log.debug("OBB in APK: " + (PackageDataInsideApkValue==1)); - nativeSetGlobalActivity(UseExternalFilesDir, PackageDataInsideApkValue==1, getPackageResourcePath()); + nativeSetGlobalActivity(UseExternalFilesDir, getFilesDir().getPath(), getExternalFilesDir(null).getPath(), PackageDataInsideApkValue==1, getPackageResourcePath()); // tell the engine if this is a portrait app nativeSetWindowInfo(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT, DepthBufferPreference); @@ -784,10 +819,14 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba // note: this may need to be Locale.getDefault().getLanguage() String Language = java.util.Locale.getDefault().toString(); + boolean bDebuggerAttached = android.os.Debug.isDebuggerConnected(); + nativeSetAndroidStartupState(bDebuggerAttached); + Log.debug( "Android version is " + android.os.Build.VERSION.RELEASE ); Log.debug( "Android manufacturer is " + android.os.Build.MANUFACTURER ); Log.debug( "Android model is " + android.os.Build.MODEL ); Log.debug( "OS language is set to " + Language ); + Log.debug( "Debugger attached is " + bDebuggerAttached ); nativeSetAndroidVersionInformation( android.os.Build.VERSION.RELEASE, android.os.Build.MANUFACTURER, android.os.Build.MODEL, Language ); @@ -1188,9 +1227,23 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba return; } - sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME); - sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_GAME); - sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_GAME); + if (bAllowIMU) + { + Log.debug("Registering sensor listeners"); + if (accelerometer != null) + { + sensorManager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME); + } + if (magnetometer != null) + { + sensorManager.registerListener(this, magnetometer, SensorManager.SENSOR_DELAY_GAME); + } + if (gyroscope != null) + { + sensorManager.registerListener(this, gyroscope, SensorManager.SENSOR_DELAY_GAME); + } + } + // invalidate window cache nativeSetWindowInfo(getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT, DepthBufferPreference); @@ -1258,7 +1311,12 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba protected void onPause() { super.onPause(); - sensorManager.unregisterListener(this); + + if (bAllowIMU) + { + Log.debug("Unregistering sensor listeners"); + sensorManager.unregisterListener(this); + } // hide virtual keyboard before going into the background if( bKeyboardShowing ) @@ -1297,127 +1355,99 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba @Override public void onSensorChanged(SensorEvent event) { - float[] current_accelerometer = new float[]{0, 0, 0}; - float[] current_gyroscope = new float[]{0, 0, 0}; - float[] current_magnetometer = new float[]{0, 0, 0}; - int current_accelerometer_sample_count = 0; - int current_gyroscope_sample_count = 0; - int current_magnetometer_sample_count = 0; - - if (accelerometer != null && magnetometer != null) + if (bAllowIMU && accelerometer != null && magnetometer != null) { + boolean bUpdate = false; + boolean bGyroUpdate = false; + if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { - System.arraycopy(event.values, 0, current_accelerometer, 0, current_accelerometer.length); - ++current_accelerometer_sample_count; + System.arraycopy(event.values, 0, current_accelerometer, 0, 3); + bUpdate = true; + + // We use a low-pass filter to synthesize the gravity vector. + if (!first_acceleration_sample) + { + filtered_gravity[0] = last_gravity[0] * SampleDecayRate + current_accelerometer[0]*(1.0f - SampleDecayRate); + filtered_gravity[1] = last_gravity[1] * SampleDecayRate + current_accelerometer[1]*(1.0f - SampleDecayRate); + filtered_gravity[2] = last_gravity[2] * SampleDecayRate + current_accelerometer[2]*(1.0f - SampleDecayRate); + } + first_acceleration_sample = false; + last_gravity = filtered_gravity; } else if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) { - System.arraycopy(event.values, 0, current_magnetometer, 0, current_magnetometer.length); - ++current_magnetometer_sample_count; + System.arraycopy(event.values, 0, current_magnetometer, 0, 3); + bUpdate = true; } else if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) { - System.arraycopy(event.values, 0, current_gyroscope, 0, current_gyroscope.length); - ++current_gyroscope_sample_count; - } - - if (current_accelerometer_sample_count > 0) - { - // Do simple average of the samples we just got. - for(int i = 0; i < current_accelerometer.length; i++) - current_accelerometer[i] /= (float)current_accelerometer_sample_count; - last_accelerometer = current_accelerometer; - } - else - { - current_accelerometer = last_accelerometer; - } - - if (current_gyroscope_sample_count > 0) - { - // Do simple average of the samples we just got. - for(int i = 0; i < current_gyroscope.length; i++) - current_gyroscope[i] /= (float)current_gyroscope_sample_count; - } - - if (current_magnetometer_sample_count > 0) - { - // Do simple average of the samples we just got. - for(int i = 0; i < current_magnetometer.length; i++) - current_magnetometer[i] /= (float)current_magnetometer_sample_count; - last_magnetometer = current_magnetometer; - } - else - { - current_magnetometer = last_magnetometer; + System.arraycopy(event.values, 0, current_gyroscope, 0, 3); + bUpdate = true; + bGyroUpdate = true; } // If we have motion samples we generate the single event. - if (current_accelerometer_sample_count > 0 || current_gyroscope_sample_count > 0 || current_magnetometer_sample_count > 0) + if (bUpdate) { - // The data we compose the motion event from. - float[] current_tilt = new float[]{0, 0, 0}; - float[] current_rotation_rate = new float[]{0, 0, 0}; - float[] current_gravity = new float[]{0, 0, 0}; - float[] current_acceleration = new float[]{0, 0, 0}; - - - - // We use a low-pass filter to synthesize the gravity - // vector. - - if (!first_acceleration_sample) - { - current_gravity[0] = last_gravity[0] * SampleDecayRate + current_accelerometer[0]*(1.0f - SampleDecayRate); - current_gravity[1] = last_gravity[1] * SampleDecayRate + current_accelerometer[1]*(1.0f - SampleDecayRate); - current_gravity[2] = last_gravity[2] * SampleDecayRate + current_accelerometer[2]*(1.0f - SampleDecayRate); - } - first_acceleration_sample = false; - // get the rotation matrix value, the convert those to Euler angle rotation values - updateOrientationAngles(current_accelerometer, current_magnetometer); + sensorManager.getRotationMatrix(rotationMatrix, null, current_accelerometer, current_magnetometer); + sensorManager.getOrientation(rotationMatrix, orientationAngles); - current_tilt = new float[]{orientationAngles[1], orientationAngles[2], orientationAngles[0]}; - - // And take out the gravity from the accel to get - // the linear acceleration. - for (int i = 0; i < current_acceleration.length; ++i) - current_acceleration[i] = current_accelerometer[i] - current_gravity[i]; - - if (current_gyroscope_sample_count > 0) + // protect against request from other thread + synchronized(this) { - // The rotation rate is the what the gyroscope gives us. - current_rotation_rate = current_gyroscope; - } - else if (null == gyroscope) - { - // If we don't have a gyroscope at all we need to calc a rotation - // rate from our calculated tilt and a delta. - for (int index = 0; index < current_rotation_rate.length; ++index) - current_rotation_rate[index] = current_tilt[index] - last_tilt[index]; + // remember gravity + current_gravity = filtered_gravity; + + // fix up the tilt mapping to proper coordinate frame + current_tilt[0] = orientationAngles[1]; + current_tilt[1] = orientationAngles[2]; + current_tilt[2] = orientationAngles[0]; + + // And take out the gravity from the accel to get the linear acceleration. + current_acceleration[0] = current_accelerometer[0] - current_gravity[0]; + current_acceleration[1] = current_accelerometer[1] - current_gravity[1]; + current_acceleration[2] = current_accelerometer[2] - current_gravity[2]; + + // Figure out the rotation rate + if (bGyroUpdate) + { + // The rotation rate is the what the gyroscope gives us. + current_rotation_rate = current_gyroscope; + } + else if (null == gyroscope) + { + // If we don't have a gyroscope at all we need to calc a rotation rate from delta from previous tilt. + current_rotation_rate[0] = current_tilt[0] - last_tilt[0]; + current_rotation_rate[1] = current_tilt[1] - last_tilt[1]; + current_rotation_rate[2] = current_tilt[2] - last_tilt[2]; + } + last_tilt = current_tilt; } - // Finally record the motion event with all the data. - - nativeHandleSensorEvents(current_tilt, current_rotation_rate, current_gravity, current_acceleration); - - // Update history values. - last_tilt = current_tilt; - last_gravity = current_gravity; + // flag new sensor data ready + bSensorDataUpdated = true; } } } - - public void updateOrientationAngles(float[] accelerometerReading, float[] magnetometerReading) + public void AndroidThunkJava_PushSensorEvents() { - - sensorManager.getRotationMatrix(rotationMatrix, null, accelerometerReading, magnetometerReading); - - sensorManager.getOrientation(rotationMatrix, orientationAngles); + if (bAllowIMU) + { + // protect against other thread updating the values + synchronized(this) + { + if (bSensorDataUpdated) + { + nativeHandleSensorEvents(current_tilt, current_rotation_rate, current_gravity, current_acceleration); + bSensorDataUpdated = false; + } + } + } } - + @Override public void onNewIntent(Intent newIntent) { @@ -1426,6 +1456,46 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba //$${gameActivityOnNewIntentAdditions}$$ } + public void onTrimMemory(int level) + { + // Determine which lifecycle or system event was raised. + switch (level) { + // user interface is in background, release UI memory + case ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN: + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_UI_HIDDEN) called!"); + break; + + // app is running but getting low on memory + case ComponentCallbacks2.TRIM_MEMORY_RUNNING_MODERATE: + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_RUNNING_MODERATE) called!"); + break; + case ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW: + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_RUNNING_LOW) called!"); + break; + case ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL: + // system will begin killing background processes + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_RUNNING_CRITICAL) called!"); + break; + + // app is on LRU list (background), release what you can + case ComponentCallbacks2.TRIM_MEMORY_BACKGROUND: + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_BACKGROUND) called!"); + break; + case ComponentCallbacks2.TRIM_MEMORY_MODERATE: + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_MODERATE) called!"); + break; + case ComponentCallbacks2.TRIM_MEMORY_COMPLETE: + // this process up first to kill for more memory! + Log.debug("==============> GameActive.onTrimMemory(TRIM_MEMORY_COMPLETE) called!"); + break; + + // unrecognized level; generic low memory situation + default: + Log.debug("==============> GameActive.onTrimMemory(" + level + ") called!"); + break; + } + } + @Override public void onStop() { @@ -1740,8 +1810,6 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba //TYPE: disable text suggestion newVirtualKeyboardInputType |= InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS; - //TYPE: disable autocorrect - newVirtualKeyboardInputType &= ~InputType.TYPE_TEXT_FLAG_AUTO_CORRECT; //TYPE: set input type flags newVirtualKeyboardInput.setInputType(newVirtualKeyboardInputType); @@ -1794,6 +1862,8 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba nativeVirtualKeyboardVisible(true); bKeyboardShowing = true; + + CheckKeyboardDisplayed(); } } break; @@ -1822,6 +1892,25 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba lastVirtualKeyboardCommand = VirtualKeyboardCommand.VK_CMD_NONE; } + // timer to check if the onGlobalLayout callback was correctly called when displaying the virtual keyboard + private void CheckKeyboardDisplayed() + { + virtualKeyboardHandler.postDelayed(new Runnable() + { + public void run() + { + synchronized(this) + { + if(bKeyboardShowing && newVirtualKeyboardInput.getY() < 0) + { + //couldn't show the VK input. Force layout refresh + mainView.requestLayout(); + } + } + } + }, checkLastVirtualKeyboardCommandDelay); + } + public void AndroidThunkJava_LaunchURL(String URL) { Log.debug("[JAVA} AndroidThunkJava_LaunchURL: URL = " + URL); @@ -1866,6 +1955,32 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba return null; } + public void AndroidThunkJava_ShareURL(String URL, String Description, String Prompt, int LocationX, int LocationY) + { + Log.debug("[JAVA} AndroidThunkJava_ShareURL: URL = " + URL); + + if (!URL.contains("://")) + { + URL = "http://" + URL; + Log.debug("[JAVA} AndroidThunkJava_ShareURL: corrected URL = " + URL); + } + + try + { + Intent SendIntent = new Intent(Intent.ACTION_SEND); + SendIntent.setType("text/plain"); + SendIntent.putExtra(Intent.EXTRA_SUBJECT, Description); + SendIntent.putExtra(Intent.EXTRA_TEXT, URL); + + Log.debug("[JAVA} AndroidThunkJava_ShareURL: Sharing URL"); + startActivity(Intent.createChooser(SendIntent, Prompt)); + } + catch (Exception e) + { + Log.debug("[JAVA} AndroidThunkJava_ShareURL: Failed with exception " + e.getMessage()); + } + } + public void AndroidThunkJava_ResetAchievements() { /* Disable so don't need GET_ACCOUNTS - we don't need this @@ -2688,17 +2803,67 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba return false; } - public boolean AndroidThunkJava_HasActiveWiFiConnection() + @SuppressWarnings("deprecation") + @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1) + public static boolean isAirplaneModeOn(Context context) { - ConnectivityManager cm = (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) + { + return Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0) != 0; + } + return Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0) != 0; + } + + public String getConnectionType() + { + if (isAirplaneModeOn(getApplicationContext())) + { + return "AirplaneMode"; + } + + ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); - - boolean isConnected = (activeNetwork != null && activeNetwork.isConnectedOrConnecting()); + + boolean isConnected = (activeNetwork != null && activeNetwork.isAvailable() && activeNetwork.isConnectedOrConnecting()); if (isConnected) { - return (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI); + int connType = activeNetwork.getType(); + switch (connType) + { + case ConnectivityManager.TYPE_WIFI: return "WiFi"; + case ConnectivityManager.TYPE_BLUETOOTH: return "Bluetooth"; + case ConnectivityManager.TYPE_ETHERNET: return "Ethernet"; + case ConnectivityManager.TYPE_WIMAX: return "WiMAX"; + } + return "Cell"; } - return false; + return "None"; + } + + public int AndroidThunkJava_GetNetworkConnectionType() + { + if (isAirplaneModeOn(getApplicationContext())) + { + return CONNECTION_TYPE_AIRPLANEMODE; + } + + ConnectivityManager cm = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + + boolean isConnected = (activeNetwork != null && activeNetwork.isAvailable() && activeNetwork.isConnectedOrConnecting()); + if (isConnected) + { + int connType = activeNetwork.getType(); + switch (connType) + { + case ConnectivityManager.TYPE_WIFI: return CONNECTION_TYPE_WIFI; + case ConnectivityManager.TYPE_BLUETOOTH: return CONNECTION_TYPE_BLUETOOTH; + case ConnectivityManager.TYPE_ETHERNET: return CONNECTION_TYPE_ETHERNET; + case ConnectivityManager.TYPE_WIMAX: return CONNECTION_TYPE_WIMAX; + } + return CONNECTION_TYPE_CELL; + } + return CONNECTION_TYPE_NONE; } public boolean AndroidThunkJava_HasMetaDataKey(String key) @@ -2829,6 +2994,41 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba return _bundle.getString(key); } + public boolean AndroidThunkJava_HasIntentExtrasKey(String key) + { + if (_extrasBundle == null || key == null) + { + return false; + } + return _extrasBundle.containsKey(key); + } + + public boolean AndroidThunkJava_GetIntentExtrasBoolean(String key) + { + if (_extrasBundle == null || key == null) + { + return false; + } + return _extrasBundle.getBoolean(key); + } + + public int AndroidThunkJava_GetIntentExtrasInt(String key) + { + if (_extrasBundle == null || key == null) + { + return 0; + } + return _extrasBundle.getInt(key); + } + + public String AndroidThunkJava_GetIntentExtrasString(String key) + { + if (_extrasBundle == null || key == null) + { + return null; + } + return _extrasBundle.getString(key); + } public void AndroidThunkJava_SetSustainedPerformanceMode(final boolean bEnable) { @@ -3193,6 +3393,22 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba return false; } + + public boolean AndroidThunkJava_LaunchPackage(String packageName, String extraKey, String extraValue) + { + Intent launchIntent = getPackageManager().getLaunchIntentForPackage(packageName); + if (launchIntent != null) + { + if (extraKey != "") + { + launchIntent.putExtra(extraKey, extraValue); + } + startActivity(launchIntent); + System.exit(0); + } + return false; + } + public void AndroidThunkJava_RestartApplication() { Context context = getApplicationContext(); @@ -3229,7 +3445,8 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba public native boolean nativeSupportsNEON(); public native boolean nativeIsShippingBuild(); - public native void nativeSetGlobalActivity(boolean bUseExternalFilesDir, boolean bOBBInAPK, String APKPath); + public native void nativeSetAndroidStartupState(boolean bDebuggerAttached); + public native void nativeSetGlobalActivity(boolean bUseExternalFilesDir, String internalFilePath, String externalFilePath, boolean bOBBInAPK, String APKPath); public native void nativeSetWindowInfo(boolean bIsPortrait, int DepthBufferPreference); public native void nativeSetObbInfo(String ProjectName, String PackageName, int Version, int PatchVersion, String AppType); public native void nativeSetAndroidVersionInformation( String AndroidVersion, String PhoneMake, String PhoneModel, String OSLanguage ); @@ -3266,4 +3483,3 @@ public class GameActivity extends NativeActivity implements SurfaceHolder.Callba private static ClipboardManager clipboardManager; } - diff --git a/Engine/Build/Android/Java/src/com/epicgames/ue4/GooglePlayStoreHelper.java b/Engine/Build/Android/Java/src/com/epicgames/ue4/GooglePlayStoreHelper.java index 31ab4c0cf36c..3c08b8b16c94 100644 --- a/Engine/Build/Android/Java/src/com/epicgames/ue4/GooglePlayStoreHelper.java +++ b/Engine/Build/Android/Java/src/com/epicgames/ue4/GooglePlayStoreHelper.java @@ -19,6 +19,7 @@ import com.android.vending.billing.util.Base64; import com.android.vending.billing.IInAppBillingService; import com.android.vending.billing.util.Purchase; import java.util.ArrayList; +import java.util.List; import org.json.JSONException; import org.json.JSONObject; @@ -50,6 +51,9 @@ public class GooglePlayStoreHelper implements StoreHelper public static final String RESPONSE_INAPP_SIGNATURE_LIST = "INAPP_DATA_SIGNATURE_LIST"; public static final String INAPP_CONTINUATION_TOKEN = "INAPP_CONTINUATION_TOKEN"; + // Max number of offers to query at once (see getSkuDetails in IInAppbillingServer.aidl) + public static final int QueryPurchaseMaxCount = 20; + // Item types public static final String ITEM_TYPE_INAPP = "inapp"; @@ -73,6 +77,22 @@ public class GooglePlayStoreHelper implements StoreHelper private final int UndefinedFailureResponse = -1; + private class GooglePlayProductDescription + { + // Product offer id + public String id; + // Product friendly name + public String title; + // Product description + public String description; + // Currency friendly string + public String price; + // Raw price in currency units + public Float priceRaw; + // Local currency code + public String currencyCode; + } + public interface PurchaseLaunchCallback { void launchForResult(PendingIntent pendingIntent, int requestCode); @@ -88,13 +108,13 @@ public class GooglePlayStoreHelper implements StoreHelper gameActivity = InGameActivity; productKey = InProductKey; - + Intent serviceIntent = new Intent("com.android.vending.billing.InAppBillingService.BIND"); serviceIntent.setPackage("com.android.vending"); gameActivity.bindService(serviceIntent, mServiceConn, Context.BIND_AUTO_CREATE); } - + /////////////////////////////////////////////////////// // The StoreHelper interfaces implementation for Google Play Store. @@ -113,87 +133,129 @@ public class GooglePlayStoreHelper implements StoreHelper public boolean QueryInAppPurchases(String[] InProductIDs) { Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases"); - ArrayList skuList = new ArrayList (); - - for (String productId : InProductIDs) + + if (InProductIDs.length > 0) { - Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Querying " + productId); - skuList.add(productId); - } + ArrayList skuList = new ArrayList(InProductIDs.length); - Bundle querySkus = new Bundle(); - querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuList); - - try - { - Bundle skuDetails = mService.getSkuDetails(3, gameActivity.getPackageName(), ITEM_TYPE_INAPP, querySkus); - - int response = skuDetails.getInt(RESPONSE_CODE); - Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Response " + response + " Bundle:" + skuDetails.toString()); - if (response == BILLING_RESPONSE_RESULT_OK) + for (String productId : InProductIDs) { - ArrayList productIds = new ArrayList(); - ArrayList titles = new ArrayList(); - ArrayList descriptions = new ArrayList(); - ArrayList prices = new ArrayList(); - ArrayList pricesRaw = new ArrayList(); - ArrayList currencyCodes = new ArrayList(); + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Querying " + productId); + skuList.add(productId); + } - ArrayList responseList = skuDetails.getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST); - for (String thisResponse : responseList) + ArrayList productIds = new ArrayList(); + ArrayList titles = new ArrayList(); + ArrayList descriptions = new ArrayList(); + ArrayList prices = new ArrayList(); + ArrayList pricesRaw = new ArrayList(); + ArrayList currencyCodes = new ArrayList(); + + while (skuList.size() > 0) + { + Log.debug("[GooglePlayStoreHelper] - NumSkus: " + skuList.size()); + int numSkus = Math.min(QueryPurchaseMaxCount, skuList.size()); + Log.debug("[GooglePlayStoreHelper] - Grabbing from 0 to " + numSkus); + List skuSubList = skuList.subList(0, numSkus); + ArrayList realSubList = new ArrayList(skuSubList); + ArrayList productDescriptions = new ArrayList(); + + int response = QueryInAppPurchasesInternal(realSubList, productDescriptions); + if (response == BILLING_RESPONSE_RESULT_OK) { - JSONObject object = new JSONObject(thisResponse); - - String productId = object.getString("productId"); - productIds.add(productId); - Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Parsing details for: " + productId); - - String title = object.getString("title"); - titles.add(title); - Log.debug("[GooglePlayStoreHelper] - title: " + title); + for (GooglePlayProductDescription product : productDescriptions) + { + productIds.add(product.id); + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Parsing details for: " + product.id); - String description = object.getString("description"); - descriptions.add(description); - Log.debug("[GooglePlayStoreHelper] - description: " + description); + titles.add(product.title); + Log.debug("[GooglePlayStoreHelper] - title: " + product.title); - String price = object.getString("price"); - prices.add(price); - Log.debug("[GooglePlayStoreHelper] - price: " + price); + descriptions.add(product.description); + Log.debug("[GooglePlayStoreHelper] - description: " + product.description); - double priceRaw = object.getDouble("price_amount_micros") / 1000000.0; - pricesRaw.add((float)priceRaw); - Log.debug("[GooglePlayStoreHelper] - price_amount_micros: " + priceRaw); + prices.add(product.price); + Log.debug("[GooglePlayStoreHelper] - price: " + product.price); - String currencyCode = object.getString("price_currency_code"); - currencyCodes.add(currencyCode); - Log.debug("[GooglePlayStoreHelper] - price_currency_code: " + currencyCode); + pricesRaw.add(product.priceRaw); + Log.debug("[GooglePlayStoreHelper] - price_amount_micros: " + product.priceRaw); + + currencyCodes.add(product.currencyCode); + Log.debug("[GooglePlayStoreHelper] - price_currency_code: " + product.currencyCode); + } + } + else + { + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Failed with: " + response); + // If anything fails right now, stop immediately, not sure how to reconcile partial success/failure + nativeQueryComplete(response, null, null, null, null, null, null); + return false; } - float[] pricesRawPrimitive = new float[pricesRaw.size()]; - for (int i = 0; i < pricesRaw.size(); i++) - { - pricesRawPrimitive[i] = pricesRaw.get(i); - } + skuSubList.clear(); + } - Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases " + productIds.size() + " items - Success!"); - nativeQueryComplete(response, productIds.toArray(new String[productIds.size()]), titles.toArray(new String[titles.size()]), descriptions.toArray(new String[descriptions.size()]), prices.toArray(new String[prices.size()]), pricesRawPrimitive, currencyCodes.toArray(new String[currencyCodes.size()])); - Log.debug("[GooglePlayStoreHelper] - nativeQueryComplete done!"); - } - else + float[] pricesRawPrimitive = new float[pricesRaw.size()]; + for (int i = 0; i < pricesRaw.size(); i++) { - Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Failed!"); - nativeQueryComplete(response, null, null, null, null, null, null); + pricesRawPrimitive[i] = pricesRaw.get(i); } + + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases " + productIds.size() + " items - Success!"); + nativeQueryComplete(BILLING_RESPONSE_RESULT_OK, productIds.toArray(new String[productIds.size()]), titles.toArray(new String[titles.size()]), descriptions.toArray(new String[descriptions.size()]), prices.toArray(new String[prices.size()]), pricesRawPrimitive, currencyCodes.toArray(new String[currencyCodes.size()])); + Log.debug("[GooglePlayStoreHelper] - nativeQueryComplete done!"); } - catch(Exception e) + else { - Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Failed! " + e.getMessage()); + // nothing to query + Log.debug("[GooglePlayStoreHelper] - no products given to query"); nativeQueryComplete(UndefinedFailureResponse, null, null, null, null, null, null); } return true; } - + + public int QueryInAppPurchasesInternal(ArrayList skuList, ArrayList outProducts) + { + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchasesInternal"); + + Bundle querySkus = new Bundle(); + querySkus.putStringArrayList(GET_SKU_DETAILS_ITEM_LIST, skuList); + + int response = UndefinedFailureResponse; + try + { + Bundle skuDetails = mService.getSkuDetails(3, gameActivity.getPackageName(), ITEM_TYPE_INAPP, querySkus); + + response = skuDetails.getInt(RESPONSE_CODE); + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchases - Response " + response + " Bundle:" + skuDetails.toString()); + if (response == BILLING_RESPONSE_RESULT_OK) + { + ArrayList responseList = skuDetails.getStringArrayList(RESPONSE_GET_SKU_DETAILS_LIST); + for (String thisResponse : responseList) + { + JSONObject object = new JSONObject(thisResponse); + + GooglePlayProductDescription newDescription = new GooglePlayProductDescription(); + newDescription.id = object.getString("productId"); + newDescription.title = object.getString("title"); + newDescription.description = object.getString("description"); + newDescription.price = object.getString("price"); + double priceRaw = object.getDouble("price_amount_micros") / 1000000.0; + newDescription.priceRaw = (float)priceRaw; + newDescription.currencyCode = object.getString("price_currency_code"); + outProducts.add(newDescription); + } + } + } + catch(Exception e) + { + Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryInAppPurchasesInternal - Failed! " + e.getMessage()); + } + + return response; + } + /** * Start the purchase flow for a particular sku */ @@ -215,7 +277,7 @@ public class GooglePlayStoreHelper implements StoreHelper { Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::BeginPurchase - v7 VR purchase" + ProductID); buyIntentBundle = mService.getBuyIntentExtraParams(7, gameActivity.getPackageName(), ProductID, ITEM_TYPE_INAPP, devPayload, bundle); - } + } else { Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::BeginPurchase - v3 IAB purchase:" + ProductID); @@ -275,8 +337,8 @@ public class GooglePlayStoreHelper implements StoreHelper ArrayList ownedSkus = new ArrayList(); ArrayList purchaseDataList = new ArrayList(); ArrayList signatureList = new ArrayList(); - - // On first pass the continuation token should be null. + + // On first pass the continuation token should be null. // This will allow us to gather large sets of purchased items recursively int responseCode = GatherOwnedPurchaseData(ownedSkus, purchaseDataList, signatureList, null); if (responseCode == BILLING_RESPONSE_RESULT_OK) @@ -315,7 +377,7 @@ public class GooglePlayStoreHelper implements StoreHelper boolean bTryToConsume = false; int consumeResponse = 0; - + // This is assuming that all purchases should be consumed. Consuming a purchase that is meant to be a one-time purchase makes it so the // user is able to buy it again. Also, it makes it so the purchase will not be able to be restored again in the future. @@ -385,8 +447,8 @@ public class GooglePlayStoreHelper implements StoreHelper ArrayList ownedSkus = new ArrayList(); ArrayList purchaseDataList = new ArrayList(); ArrayList signatureList = new ArrayList(); - - // On first pass the continuation token should be null. + + // On first pass the continuation token should be null. // This will allow us to gather large sets of purchased items recursively int responseCode = GatherOwnedPurchaseData(ownedSkus, purchaseDataList, signatureList, null); if (responseCode == BILLING_RESPONSE_RESULT_OK) @@ -408,7 +470,7 @@ public class GooglePlayStoreHelper implements StoreHelper String receipt = Base64.encode(purchase.getOriginalJson().getBytes()); receipts.add(receipt); - } + } catch (JSONException e) { Log.debug("[GooglePlayStoreHelper] - GooglePlayStoreHelper::QueryExistingPurchases - Failed to parse receipt! " + e.getMessage()); @@ -482,13 +544,13 @@ public class GooglePlayStoreHelper implements StoreHelper mService = IInAppBillingService.Stub.asInterface(service); bIsIapSetup = true; - try + try { Log.debug("Checking for in-app billing 3 support."); // check for in-app billing v3 support int response = mService.isBillingSupported(3, gameActivity.getPackageName(), ITEM_TYPE_INAPP); - if (response != BILLING_RESPONSE_RESULT_OK) + if (response != BILLING_RESPONSE_RESULT_OK) { Log.debug("In-app billing version 3 NOT supported for " + gameActivity.getPackageName() + " error " + response); } @@ -505,10 +567,10 @@ public class GooglePlayStoreHelper implements StoreHelper } }; - + /////////////////////////////////////////////////////// // Game Activity/Context driven methods we need to listen for. - + /** * On Destory we should unbind our IInAppBillingService service */ @@ -521,7 +583,7 @@ public class GooglePlayStoreHelper implements StoreHelper gameActivity.unbindService(mServiceConn); } } - + /** * Route taken by the Purchase workflow. We listen for our purchaseIntentIdentifier request code and * handle the response accordingly @@ -532,7 +594,7 @@ public class GooglePlayStoreHelper implements StoreHelper if (requestCode == purchaseIntentIdentifier) { - if (data == null) + if (data == null) { Log.debug("Null data in purchase activity result."); nativePurchaseComplete(UndefinedFailureResponse, "", "", "", ""); @@ -612,10 +674,10 @@ public class GooglePlayStoreHelper implements StoreHelper return false; } - + /////////////////////////////////////////////////////// // Internal helper functions that deal assist with various IAB related events - + /** * Create a UE4 specific unique string that will be used to verify purchases are legit. */ @@ -623,7 +685,7 @@ public class GooglePlayStoreHelper implements StoreHelper { return "ue4." + ProductId; } - + /** * Check the returned payload matches one for the product we are buying. */ @@ -635,7 +697,7 @@ public class GooglePlayStoreHelper implements StoreHelper return ExistingPayload.equals(GeneratedPayload); } - + /** * Get a text tranlation of the Response Codes returned by google play. */ @@ -666,7 +728,7 @@ public class GooglePlayStoreHelper implements StoreHelper return "Unknown Server Response Code"; } } - + /** * Recursive functionality to gather all of the purchases owned by a user. * if the user owns a lot of products then we need to getPurchases again with a continuationToken diff --git a/Engine/Build/Android/Java/src/com/epicgames/ue4/MediaPlayer14.java b/Engine/Build/Android/Java/src/com/epicgames/ue4/MediaPlayer14.java index 88748004613b..2197df78ddff 100644 --- a/Engine/Build/Android/Java/src/com/epicgames/ue4/MediaPlayer14.java +++ b/Engine/Build/Android/Java/src/com/epicgames/ue4/MediaPlayer14.java @@ -563,6 +563,11 @@ public class MediaPlayer14 public void reset() { + synchronized(this) + { + Prepared = false; + Completed = false; + } if (null != mOESTextureRenderer) { while (WaitOnBitmapRender) ; diff --git a/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java b/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java index 17832fb3d81a..d427193adbca 100644 --- a/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java +++ b/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/DownloadNotification.java @@ -204,11 +204,7 @@ public class DownloadNotification implements IDownloaderClient { mLabel = applicationLabel; mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH) { - mActiveDownloadBuilder = new V4CustomNotificationBuilder(ctx); - } else { - mActiveDownloadBuilder = new NotificationCompat.Builder(ctx); - } + mActiveDownloadBuilder = new NotificationCompat.Builder(ctx); mBuilder = new NotificationCompat.Builder(ctx); // Set Notification category and priorities to something that makes sense for a long diff --git a/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/V4CustomNotificationBuilder.java b/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/V4CustomNotificationBuilder.java deleted file mode 100644 index 42057a082a47..000000000000 --- a/Engine/Build/Android/Java/src/com/google/android/vending/expansion/downloader/impl/V4CustomNotificationBuilder.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2012 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.android.vending.expansion.downloader.impl; - -import com.android.vending.expansion.downloader.R; -import com.google.android.vending.expansion.downloader.Helpers; - -import android.app.Notification; -import android.app.PendingIntent; -import android.content.Context; -import android.graphics.BitmapFactory; -import android.support.v4.app.NotificationCompat; -import android.view.View; -import android.widget.RemoteViews; - -/** - * This class wraps NotificationCompat to give us similar progress functionality on Donut-Honeycomb. - */ -public class V4CustomNotificationBuilder extends NotificationCompat.Builder { - - public V4CustomNotificationBuilder(Context context) { - super(context); - } - - @Override - public NotificationCompat.Builder setProgress(int max, int progress, boolean indeterminate) { - mTotalBytes = max; - mCurrentBytes = progress; - return super.setProgress(max, progress, indeterminate); - } - - @Override - public NotificationCompat.Builder setContentInfo(CharSequence info) { - mContentInfo = info; - return super.setContentInfo(info); - } - - int mTotalBytes = -1; - int mCurrentBytes = -1; - int mIcon; - CharSequence mContentInfo = ""; - - @Override - public Notification build() { - if (android.os.Build.VERSION.SDK_INT > 10) { - // only matters for Honeycomb - setOnlyAlertOnce(true); - } - - // Build the RemoteView object - RemoteViews expandedView = new RemoteViews( - mContext.getPackageName(), - R.layout.status_bar_ongoing_event_progress_bar); - - expandedView.setTextViewText(R.id.title, mContentTitle); - // look at strings - expandedView.setViewVisibility(R.id.description, View.VISIBLE); - expandedView.setTextViewText(R.id.description, - Helpers.getDownloadProgressString(this.mCurrentBytes, mTotalBytes)); - expandedView.setViewVisibility(R.id.progress_bar_frame, View.VISIBLE); - expandedView.setProgressBar(R.id.progress_bar, - (int) (mTotalBytes >> 8), - (int) (mCurrentBytes >> 8), - mTotalBytes <= 0); - expandedView.setViewVisibility(R.id.time_remaining, View.VISIBLE); - expandedView.setTextViewText( - R.id.time_remaining, - mContentInfo); - expandedView.setTextViewText(R.id.progress_text, - Helpers.getDownloadProgressPercent(mCurrentBytes, mTotalBytes)); - expandedView.setImageViewResource(R.id.appIcon, mIcon); - - Notification n = super.build(); - n.contentView = expandedView; - return n; - } -} diff --git a/Engine/Build/BatchFiles/Mac/SetupMono.sh b/Engine/Build/BatchFiles/Mac/SetupMono.sh index 74d8cdf0f1de..c1fcdb69edf5 100755 --- a/Engine/Build/BatchFiles/Mac/SetupMono.sh +++ b/Engine/Build/BatchFiles/Mac/SetupMono.sh @@ -6,13 +6,27 @@ sh FixDependencyFiles.sh IS_MONO_INSTALLED=0 MONO_VERSION_PATH=`which mono` || true + +# if we can't find mono path, try one last hail mary of a standard install location +if [ "$MONO_VERSION_PATH" == "" ] || [ ! -f $MONO_VERSION_PATH ]; then + MONO_VERSION_PATH="/Library/Frameworks/Mono.framework/Versions/Current/Commands/mono" + # if it's found, then add it to the path + if [ ! $MONO_VERSION_PATH == "" ] && [ -f $MONO_VERSION_PATH ]; then + echo "Found mono via known Mono.framework path" + export PATH=/Library/Frameworks/Mono.framework/Versions/Current/Commands:$PATH + fi +fi + if [ ! $MONO_VERSION_PATH == "" ] && [ -f $MONO_VERSION_PATH ]; then # If Mono is installed, check if it's 4.0.2 or higher MONO_VERSION_PREFIX="Mono JIT compiler version " MONO_VERSION_PREFIX_LEN=${#MONO_VERSION_PREFIX} MONO_VERSION=`"${MONO_VERSION_PATH}" --version |grep "$MONO_VERSION_PREFIX"` + echo "Running installed mono, version: " ${MONO_VERSION} MONO_VERSION=(`echo ${MONO_VERSION:MONO_VERSION_PREFIX_LEN} |tr '.' ' '`) - if [ ${MONO_VERSION[0]} -ge 4 ]; then + if [ ${MONO_VERSION[0]} -ge 5 ]; then # Allow any Mono 5.x and up + IS_MONO_INSTALLED=1 + elif [ ${MONO_VERSION[0]} -eq 4 ]; then if [ ${MONO_VERSION[1]} -eq 0 ] && [ ${MONO_VERSION[2]} -ge 2 ]; then IS_MONO_INSTALLED=1 elif [ ${MONO_VERSION[1]} -gt 0 ] && [ ${MONO_VERSION[1]} -lt 6 ]; then # Mono 4.6 has issues on macOS 10.12 diff --git a/Engine/Build/BuildFarm/PostpExtensions.pl b/Engine/Build/BuildFarm/PostpExtensions.pl index 3f3c6015f482..fff3b3a34506 100644 --- a/Engine/Build/BuildFarm/PostpExtensions.pl +++ b/Engine/Build/BuildFarm/PostpExtensions.pl @@ -145,12 +145,12 @@ unshift @::gMatchers, ( { id => "clErrorMultiline", pattern => q{([^(]+)(\([\d,]+\))? ?: (fatal )?error [a-zA-Z]+[\d]+}, - action => q{incValue("errors"); my ($file_only) = ($1 =~ /([^\\\\]+)$/); diagnostic($file_only || $1, "error", 0, forwardWhile("^( |^([^(]+)\\\\([\\\\d,]+\\\\) ?: note)"))}, + action => q{my $line = logLine($::gCurrentLine); $line =~ /^( *)/; my $indent = ' ' x length($1); incValue("errors"); my ($file_only) = ($1 =~ /([^\\\\]+)$/); diagnostic($file_only || $1, "error", 0, forwardWhile("^$indent "))}, }, { id => "clWarningMultiline", pattern => q{([^(]+)(\([\d,]+\))? ?: warning[ :]}, - action => q{incValue("warnings"); my ($file_only) = ($1 =~ /([^\\\\]+)$/); diagnostic($file_only || $1, "warning", 0, forwardWhile("^( |^([^(]+)\\\\([\\\\d,]+\\\\) ?: note)")) }, + action => q{my $line = logLine($::gCurrentLine); $line =~ /^( *)/; my $indent = ' ' x length($1); incValue("warnings"); my ($file_only) = ($1 =~ /([^\\\\]+)$/); diagnostic($file_only || $1, "warning", 0, forwardWhile("^$indent "))}, }, { id => "clangError", diff --git a/Engine/Build/Commit.gitdeps.xml b/Engine/Build/Commit.gitdeps.xml index 8c731bc4a8a6..951cd4d4d22c 100644 --- a/Engine/Build/Commit.gitdeps.xml +++ b/Engine/Build/Commit.gitdeps.xml @@ -5,10 +5,11 @@ - - - - + + + + + @@ -28,7 +29,9 @@ - + + + @@ -54,8 +57,8 @@ - - + + @@ -168,7 +171,9 @@ + + @@ -2136,7 +2141,7 @@ - + @@ -2399,159 +2404,159 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3381,12 +3386,12 @@ - + - - + + - + @@ -3415,10 +3420,10 @@ - + - - + + @@ -3616,7 +3621,7 @@ - + @@ -5856,6 +5861,9 @@ + + + @@ -6799,7 +6807,7 @@ - + @@ -7164,6 +7172,8 @@ + + @@ -7183,8 +7193,10 @@ + + @@ -7221,7 +7233,7 @@ - + @@ -7499,6 +7511,8 @@ + + @@ -7544,13 +7558,13 @@ - - + + - - - + + + @@ -7716,6 +7730,7 @@ + @@ -7723,6 +7738,7 @@ + @@ -7758,7 +7774,9 @@ - + + + @@ -15910,7 +15928,7 @@ - + @@ -20075,6 +20093,7 @@ + @@ -21699,6 +21718,7 @@ + @@ -25585,9 +25605,9 @@ - + - + @@ -27197,7 +27217,7 @@ - + @@ -27216,7 +27236,7 @@ - + @@ -28015,109 +28035,109 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -28225,11 +28245,9 @@ - - - - - + + + @@ -28327,56 +28345,56 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -28603,6 +28621,10 @@ + + + + @@ -28893,7 +28915,7 @@ - + @@ -29855,7 +29877,7 @@ - + @@ -30056,6 +30078,7 @@ + @@ -30066,7 +30089,7 @@ - + @@ -30624,166 +30647,32 @@ - - + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + @@ -30857,7 +30746,7 @@ - + @@ -30899,7 +30788,7 @@ - + @@ -31200,7 +31089,7 @@ - + @@ -31221,7 +31110,7 @@ - + @@ -32870,20 +32759,26 @@ - - - - + + + + - - + + + + + + + + @@ -32892,8 +32787,8 @@ - - + + @@ -34570,117 +34465,117 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -34693,24 +34588,24 @@ - - - - - - + + + + + + - - - - - - + + + + + + @@ -34723,63 +34618,63 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -34807,324 +34702,324 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -39119,18 +39014,16 @@ - + - + - - + - @@ -39147,7 +39040,6 @@ - @@ -39155,7 +39047,6 @@ - @@ -39166,24 +39057,25 @@ - + + - + - + @@ -39221,13 +39113,13 @@ - + - + @@ -39235,13 +39127,12 @@ + - - @@ -39258,7 +39149,7 @@ - + @@ -39267,13 +39158,13 @@ - + - - + + - + @@ -39295,11 +39186,11 @@ - + - + @@ -39317,18 +39208,18 @@ - + + - + - @@ -39346,7 +39237,7 @@ - + @@ -39359,7 +39250,7 @@ - + @@ -39367,16 +39258,20 @@ + + + - + + @@ -39417,8 +39312,9 @@ - + + @@ -39432,11 +39328,11 @@ + - @@ -39445,7 +39341,7 @@ - + @@ -39460,16 +39356,17 @@ - + - + - + + @@ -39482,9 +39379,10 @@ - + + @@ -39492,19 +39390,17 @@ - + - - + - @@ -39536,8 +39432,6 @@ - - @@ -39552,12 +39446,11 @@ - + - @@ -39565,11 +39458,12 @@ - + + @@ -39591,8 +39485,8 @@ - + @@ -39600,9 +39494,11 @@ + - + + @@ -39610,7 +39506,7 @@ - + @@ -39625,34 +39521,34 @@ - - + - + - + - + + @@ -39674,10 +39570,10 @@ - + - - + + @@ -39685,10 +39581,10 @@ - + - + @@ -39719,7 +39615,6 @@ - @@ -39742,7 +39637,7 @@ - + @@ -39754,14 +39649,14 @@ - + - + @@ -39771,9 +39666,10 @@ - + + @@ -39786,6 +39682,7 @@ + @@ -39794,12 +39691,13 @@ - + + - + @@ -39808,7 +39706,6 @@ - @@ -39817,6 +39714,7 @@ + @@ -39828,12 +39726,12 @@ - + - + @@ -39852,10 +39750,10 @@ - + - + @@ -39868,20 +39766,21 @@ - + - + - + + @@ -39895,7 +39794,6 @@ - @@ -39933,6 +39831,7 @@ + @@ -39944,14 +39843,16 @@ - + + - + - + + @@ -39978,13 +39879,13 @@ + - @@ -39993,9 +39894,9 @@ - + - + @@ -40022,9 +39923,8 @@ - + - @@ -40041,30 +39941,30 @@ - - + + - + - + - + - + - + @@ -40076,19 +39976,22 @@ + - - + + + + @@ -40100,9 +40003,8 @@ - - + @@ -40111,10 +40013,11 @@ - + + @@ -40140,14 +40043,12 @@ - - @@ -40156,7 +40057,7 @@ - + @@ -40177,19 +40078,19 @@ - + - + - + @@ -40203,26 +40104,25 @@ - + - + - + - @@ -40263,7 +40163,8 @@ - + + @@ -40281,7 +40182,7 @@ - + @@ -40292,10 +40193,8 @@ - - @@ -40309,7 +40208,7 @@ - + @@ -40335,11 +40234,10 @@ - + - @@ -40358,9 +40256,11 @@ - + + + @@ -40369,17 +40269,17 @@ - + - + - + @@ -40388,17 +40288,20 @@ + + - + + @@ -40417,8 +40320,8 @@ + - @@ -40428,7 +40331,7 @@ - + @@ -40437,7 +40340,7 @@ - + @@ -40452,8 +40355,6 @@ - - @@ -40465,7 +40366,7 @@ - + @@ -40473,7 +40374,7 @@ - + @@ -40505,7 +40406,6 @@ - @@ -40514,6 +40414,7 @@ + @@ -40522,10 +40423,9 @@ - - + @@ -40537,8 +40437,9 @@ + - + @@ -40549,7 +40450,7 @@ - + @@ -40559,19 +40460,17 @@ - - + + - - @@ -40582,7 +40481,7 @@ - + @@ -40593,7 +40492,6 @@ - @@ -40604,14 +40502,13 @@ - - + @@ -40640,7 +40537,7 @@ - + @@ -40654,19 +40551,18 @@ - - + - + - + - + @@ -40686,11 +40582,11 @@ - + - + @@ -40702,10 +40598,8 @@ - - @@ -40714,9 +40608,10 @@ + - + @@ -40728,11 +40623,10 @@ - + - @@ -40766,18 +40660,18 @@ - - + - + + - + @@ -40795,7 +40689,7 @@ - + @@ -40810,6 +40704,7 @@ + @@ -40818,15 +40713,15 @@ - + - + - + @@ -40847,7 +40742,7 @@ - + @@ -40855,7 +40750,6 @@ - @@ -40865,16 +40759,15 @@ + - - + - @@ -40891,10 +40784,9 @@ - - + @@ -40902,13 +40794,13 @@ - + - + @@ -40922,7 +40814,7 @@ - + @@ -40932,6 +40824,7 @@ + @@ -40939,7 +40832,7 @@ - + @@ -40959,27 +40852,29 @@ - + - + + + - + - + @@ -40993,7 +40888,6 @@ - @@ -41004,7 +40898,7 @@ - + @@ -41014,6 +40908,7 @@ + @@ -41039,27 +40934,25 @@ - - - + + - + - + - + - @@ -41076,6 +40969,7 @@ + @@ -41083,9 +40977,8 @@ - - + @@ -41101,11 +40994,13 @@ - + + - + + @@ -41138,6 +41033,7 @@ + @@ -41151,15 +41047,14 @@ - - + - + @@ -41169,18 +41064,18 @@ - + - + @@ -41193,8 +41088,8 @@ - - + + @@ -41209,8 +41104,9 @@ - + + @@ -41222,7 +41118,6 @@ - @@ -41244,12 +41139,13 @@ + - - + + @@ -41271,7 +41167,7 @@ - + @@ -41289,31 +41185,32 @@ + - + - - + - + + - + @@ -41324,7 +41221,6 @@ - @@ -41336,7 +41232,7 @@ - + @@ -41344,7 +41240,7 @@ - + @@ -41361,7 +41257,7 @@ - + @@ -41382,24 +41278,23 @@ - - + - + - + - - - - + + + + @@ -41423,7 +41318,6 @@ - @@ -41441,11 +41335,11 @@ - + - + - + @@ -41459,11 +41353,12 @@ + - + @@ -41483,33 +41378,32 @@ - + - + - - - + + - + @@ -41522,7 +41416,7 @@ - + @@ -41531,12 +41425,12 @@ - + - + @@ -41546,6 +41440,7 @@ + @@ -41580,11 +41475,13 @@ + + @@ -41597,6 +41494,7 @@ + @@ -41605,16 +41503,18 @@ + + - + - + @@ -41626,7 +41526,7 @@ - + @@ -41637,6 +41537,7 @@ + @@ -41652,13 +41553,10 @@ - - - + - - + @@ -41670,12 +41568,11 @@ - + - @@ -41731,22 +41628,20 @@ - + - - + - + - @@ -41755,7 +41650,7 @@ - + @@ -41771,6 +41666,7 @@ + @@ -41781,7 +41677,7 @@ - + @@ -41796,6 +41692,7 @@ + @@ -41810,7 +41707,7 @@ - + @@ -41828,6 +41725,7 @@ + @@ -41840,23 +41738,23 @@ + - + - + - + - - + @@ -41873,20 +41771,22 @@ - + - + - + + - + + @@ -41896,15 +41796,14 @@ - - + - + - + @@ -41914,20 +41813,21 @@ + - - + + - + - + @@ -41943,7 +41843,6 @@ - @@ -41951,12 +41850,11 @@ - + - @@ -41982,7 +41880,7 @@ - + @@ -42001,7 +41899,7 @@ - + @@ -42021,15 +41919,16 @@ - + - + + @@ -42058,20 +41957,21 @@ - + - + + - + @@ -42094,7 +41994,7 @@ - + @@ -42103,7 +42003,7 @@ - + @@ -42114,8 +42014,9 @@ - + + @@ -42148,7 +42049,7 @@ - + @@ -42162,7 +42063,7 @@ - + @@ -42170,6 +42071,7 @@ + @@ -42178,23 +42080,20 @@ - + + - - - - - + @@ -42220,7 +42119,6 @@ - @@ -42233,7 +42131,7 @@ - + @@ -42245,7 +42143,7 @@ - + @@ -42253,7 +42151,7 @@ - + @@ -42262,6 +42160,7 @@ + @@ -42273,10 +42172,10 @@ - + - + @@ -42285,13 +42184,14 @@ - - + + - + + @@ -42314,23 +42214,22 @@ - + - + - - + @@ -42351,10 +42250,10 @@ - - + + - + @@ -42366,17 +42265,18 @@ + - + - + @@ -42389,7 +42289,7 @@ - + @@ -42406,22 +42306,22 @@ + - + - - - + + @@ -42470,13 +42370,12 @@ - + - @@ -42497,11 +42396,11 @@ + - - + @@ -42515,6 +42414,7 @@ + @@ -42524,7 +42424,8 @@ - + + @@ -42533,7 +42434,7 @@ - + @@ -42543,8 +42444,8 @@ - - + + @@ -42553,6 +42454,7 @@ + @@ -42577,19 +42479,19 @@ - - + + + - @@ -42599,14 +42501,16 @@ + + - + @@ -42627,25 +42531,27 @@ + - + + - + - + @@ -42653,7 +42559,7 @@ - + @@ -42664,16 +42570,16 @@ - + - + - + @@ -42689,7 +42595,6 @@ - @@ -42699,6 +42604,7 @@ + @@ -42713,13 +42619,14 @@ + - + @@ -42740,9 +42647,8 @@ - + - @@ -42757,18 +42663,18 @@ - + - + - + @@ -42800,16 +42706,15 @@ - - + - + @@ -42817,17 +42722,17 @@ - + - - + + @@ -42838,16 +42743,16 @@ - + - - + + + - - + @@ -42855,7 +42760,6 @@ - @@ -42863,7 +42767,7 @@ - + @@ -42877,11 +42781,11 @@ - + - + @@ -42895,20 +42799,19 @@ - + - - + @@ -42925,7 +42828,8 @@ - + + @@ -42942,13 +42846,14 @@ - + + + - @@ -42969,15 +42874,16 @@ - + + - + @@ -42985,21 +42891,19 @@ - + - - + - @@ -43014,6 +42918,7 @@ + @@ -43024,15 +42929,15 @@ - - + - + + @@ -43048,7 +42953,7 @@ - + @@ -43062,14 +42967,14 @@ - + - + - + @@ -43079,10 +42984,10 @@ - + @@ -43104,7 +43009,6 @@ - @@ -43116,7 +43020,7 @@ - + @@ -43156,21 +43060,23 @@ + - - - + + + + - + - + @@ -43179,9 +43085,10 @@ + - + @@ -43211,19 +43118,20 @@ - + + - + @@ -43232,7 +43140,6 @@ - @@ -43291,11 +43198,11 @@ - + - + @@ -43309,7 +43216,7 @@ - + @@ -43321,13 +43228,12 @@ - - + @@ -43359,7 +43265,7 @@ - + @@ -43375,9 +43281,8 @@ - - + @@ -43387,14 +43292,13 @@ - - + @@ -43403,14 +43307,12 @@ - - - + @@ -43420,7 +43322,6 @@ - @@ -43431,6 +43332,7 @@ + @@ -43443,6 +43345,7 @@ + @@ -43452,18 +43355,17 @@ - + - - + @@ -43482,7 +43384,7 @@ - + @@ -43494,7 +43396,6 @@ - @@ -43533,7 +43434,6 @@ - @@ -43544,23 +43444,25 @@ - + + - + - - + + + @@ -43585,6 +43487,7 @@ + @@ -43592,20 +43495,18 @@ + - - - @@ -43622,19 +43523,18 @@ - + - - + @@ -43651,10 +43551,10 @@ + - @@ -43665,7 +43565,7 @@ - + @@ -43673,28 +43573,26 @@ + - + - + - - + - - @@ -43711,10 +43609,10 @@ - + - + @@ -43725,7 +43623,7 @@ - + @@ -43734,9 +43632,8 @@ - - + @@ -43758,29 +43655,32 @@ + + + - + - + - + @@ -43809,14 +43709,14 @@ + - - + @@ -43828,7 +43728,6 @@ - @@ -43843,13 +43742,12 @@ - - + @@ -43866,11 +43764,10 @@ - + - @@ -43893,14 +43790,13 @@ - + - @@ -43917,12 +43813,11 @@ - - + @@ -43934,10 +43829,10 @@ + - @@ -43948,14 +43843,13 @@ - + - + - + - @@ -43991,23 +43885,24 @@ - + + - - + + - + - + @@ -44020,20 +43915,20 @@ - - + - + + @@ -44050,26 +43945,26 @@ - + - + - + - + + - @@ -44083,7 +43978,7 @@ - + @@ -44101,7 +43996,7 @@ - + @@ -44114,12 +44009,13 @@ - + + @@ -44134,20 +44030,20 @@ - + - - + + + - @@ -44177,9 +44073,10 @@ + - + @@ -44207,14 +44104,17 @@ + + + @@ -44247,14 +44147,14 @@ - + - + @@ -44264,15 +44164,15 @@ - + - + + - @@ -44291,11 +44191,11 @@ - + - - + + @@ -44315,7 +44215,7 @@ - + @@ -44327,14 +44227,15 @@ - + - - - + + + + @@ -44345,10 +44246,12 @@ + + @@ -44368,6 +44271,7 @@ + @@ -44378,7 +44282,7 @@ - + @@ -44407,11 +44311,12 @@ + - + @@ -44421,10 +44326,10 @@ - - + + @@ -44433,10 +44338,9 @@ - - + @@ -44449,6 +44353,7 @@ + @@ -44471,10 +44376,9 @@ - - + @@ -44484,14 +44388,13 @@ - - + @@ -44502,9 +44405,10 @@ + - + @@ -44517,7 +44421,7 @@ - + @@ -44529,32 +44433,31 @@ - - - + - + - + - + + @@ -44565,17 +44468,16 @@ - - + - + @@ -44608,7 +44510,7 @@ - + @@ -44618,13 +44520,12 @@ - - + @@ -44635,7 +44536,6 @@ - @@ -44654,9 +44554,8 @@ - + - @@ -44664,17 +44563,17 @@ - + - + - + @@ -44687,17 +44586,17 @@ + - + - - + @@ -44709,7 +44608,7 @@ - + @@ -44723,20 +44622,18 @@ - - + - - + - + @@ -44744,12 +44641,14 @@ + + @@ -44757,14 +44656,14 @@ - - + + - + @@ -44774,7 +44673,6 @@ - @@ -44795,7 +44693,7 @@ - + @@ -44804,8 +44702,6 @@ - - @@ -44814,7 +44710,7 @@ - + @@ -44826,7 +44722,7 @@ - + @@ -44838,7 +44734,6 @@ - @@ -44851,7 +44746,6 @@ - @@ -44872,7 +44766,6 @@ - @@ -44882,7 +44775,6 @@ - @@ -44907,22 +44799,22 @@ - + - - + + - + - + @@ -44956,13 +44848,12 @@ - + - - - + + @@ -45003,17 +44894,17 @@ + - + - + + - - @@ -45028,11 +44919,12 @@ - + + @@ -45051,6 +44943,7 @@ + @@ -45079,19 +44972,18 @@ - + + - - @@ -45100,35 +44992,35 @@ - - + - + - + - - + + - + + @@ -45148,10 +45040,11 @@ - + + @@ -45163,6 +45056,7 @@ + @@ -45172,7 +45066,7 @@ - + @@ -45192,13 +45086,12 @@ - - - + + - + @@ -45208,7 +45101,6 @@ - @@ -45218,7 +45110,7 @@ - + @@ -45228,13 +45120,12 @@ - + - + - @@ -45257,24 +45148,24 @@ - + - + - + - + - + - - + + @@ -45333,7 +45224,6 @@ - @@ -45377,7 +45267,7 @@ - + @@ -45387,14 +45277,14 @@ - + - + @@ -45418,11 +45308,11 @@ - + + - @@ -45436,15 +45326,17 @@ + - + - + + @@ -45455,15 +45347,14 @@ - + - - + @@ -45501,7 +45392,7 @@ - + @@ -45515,7 +45406,7 @@ - + @@ -45534,7 +45425,7 @@ - + @@ -45543,10 +45434,9 @@ - + - @@ -45554,7 +45444,6 @@ - @@ -45603,8 +45492,9 @@ - + + @@ -45634,16 +45524,16 @@ - + - + - + @@ -45657,8 +45547,10 @@ + + @@ -45671,7 +45563,7 @@ - + @@ -45680,6 +45572,7 @@ + @@ -45692,6 +45585,8 @@ + + @@ -45699,7 +45594,6 @@ - @@ -45733,12 +45627,12 @@ - + - + - + @@ -45758,13 +45652,13 @@ - - + + @@ -45814,6 +45708,7 @@ + @@ -45821,7 +45716,7 @@ - + @@ -45852,7 +45747,6 @@ - @@ -45864,9 +45758,9 @@ - + @@ -45888,7 +45782,7 @@ - + @@ -45902,7 +45796,7 @@ - + @@ -45921,9 +45815,9 @@ - + - + @@ -45944,7 +45838,6 @@ - @@ -45954,10 +45847,11 @@ - + + @@ -45966,13 +45860,13 @@ + - @@ -45985,9 +45879,9 @@ + - @@ -46001,17 +45895,16 @@ + - + - - @@ -46022,6 +45915,7 @@ + @@ -46045,6 +45939,7 @@ + @@ -46060,7 +45955,7 @@ - + @@ -46079,27 +45974,30 @@ + + - + - + + @@ -46112,7 +46010,6 @@ - @@ -46140,6 +46037,7 @@ + @@ -46147,8 +46045,7 @@ - - + @@ -46175,7 +46072,7 @@ - + @@ -46203,7 +46100,7 @@ - + @@ -46221,17 +46118,20 @@ + + + @@ -46241,7 +46141,7 @@ - + @@ -46251,7 +46151,7 @@ - + @@ -46268,11 +46168,12 @@ + - + @@ -46283,7 +46184,7 @@ - + @@ -46296,6 +46197,7 @@ + @@ -46310,7 +46212,6 @@ - @@ -46326,9 +46227,9 @@ - + - + @@ -46355,6 +46256,7 @@ + @@ -46378,24 +46280,23 @@ - - + + - - + + - @@ -46416,6 +46317,7 @@ + @@ -46443,7 +46345,6 @@ - @@ -46452,9 +46353,8 @@ - + - @@ -46482,7 +46382,6 @@ - @@ -46490,10 +46389,10 @@ - + @@ -46505,13 +46404,13 @@ - + - + @@ -46522,7 +46421,6 @@ - @@ -46537,7 +46435,6 @@ - @@ -46551,6 +46448,7 @@ + @@ -46589,7 +46487,7 @@ - + @@ -46597,13 +46495,13 @@ - + - + @@ -46617,6 +46515,7 @@ + @@ -46630,12 +46529,12 @@ + - @@ -46647,7 +46546,8 @@ - + + @@ -46661,16 +46561,17 @@ + - + - + @@ -46679,17 +46580,16 @@ - - - + + @@ -46714,19 +46614,17 @@ - - - + @@ -46735,13 +46633,11 @@ - - - + @@ -46755,6 +46651,7 @@ + @@ -46767,7 +46664,7 @@ - + @@ -46775,8 +46672,8 @@ + - @@ -46784,7 +46681,7 @@ - + @@ -46794,14 +46691,14 @@ - + - - + + @@ -46814,7 +46711,6 @@ - @@ -46839,7 +46735,7 @@ - + @@ -46861,7 +46757,6 @@ - @@ -46870,7 +46765,7 @@ - + @@ -46882,6 +46777,7 @@ + @@ -46892,20 +46788,20 @@ - + - + @@ -46929,10 +46825,11 @@ - + + @@ -46966,7 +46863,7 @@ - + @@ -46978,11 +46875,10 @@ - + - @@ -46998,14 +46894,14 @@ + - + - - - + + @@ -47017,7 +46913,7 @@ - + @@ -47042,25 +46938,24 @@ - + - + - - + - + - + @@ -47079,7 +46974,7 @@ - + @@ -47088,19 +46983,20 @@ - - + + - + + @@ -47109,6 +47005,7 @@ + @@ -47118,9 +47015,9 @@ + - @@ -47152,6 +47049,7 @@ + @@ -47178,6 +47076,7 @@ + @@ -47209,7 +47108,7 @@ - + @@ -47234,7 +47133,7 @@ - + @@ -47254,7 +47153,6 @@ - @@ -47272,16 +47170,19 @@ + + - + + @@ -47290,7 +47191,7 @@ - + @@ -47300,11 +47201,10 @@ - + - @@ -47314,12 +47214,12 @@ - + - + @@ -47328,12 +47228,12 @@ - + @@ -47342,11 +47242,10 @@ - - + @@ -47355,13 +47254,14 @@ + - + @@ -47369,18 +47269,18 @@ - + - + - + @@ -47406,7 +47306,7 @@ - + @@ -47415,13 +47315,13 @@ - + + - @@ -47444,7 +47344,7 @@ - + @@ -47457,7 +47357,7 @@ - + @@ -47465,7 +47365,7 @@ - + @@ -47487,14 +47387,14 @@ + - - + @@ -47507,13 +47407,13 @@ + - @@ -47523,8 +47423,6 @@ - - @@ -47540,9 +47438,11 @@ - + + - + + @@ -47553,6 +47453,7 @@ + @@ -47582,11 +47483,12 @@ + - + @@ -47610,7 +47512,7 @@ - + @@ -47625,7 +47527,7 @@ - + @@ -47633,18 +47535,19 @@ + - + @@ -47652,7 +47555,6 @@ - @@ -47660,34 +47562,35 @@ - + - + - + - - + - + + + @@ -47700,14 +47603,14 @@ - + - + @@ -47753,6 +47656,7 @@ + @@ -47763,7 +47667,7 @@ - + @@ -47790,14 +47694,15 @@ - + + + - @@ -47827,50 +47732,47 @@ - - + - - - + + - + - + - - + @@ -47890,29 +47792,27 @@ - + - - + - + - @@ -47938,7 +47838,6 @@ - @@ -47947,7 +47846,6 @@ - @@ -47959,15 +47857,15 @@ - - + - + + @@ -47975,7 +47873,7 @@ - + @@ -47989,6 +47887,7 @@ + @@ -48005,7 +47904,6 @@ - @@ -48040,17 +47938,18 @@ - + - - + + + @@ -48082,7 +47981,6 @@ - @@ -48094,15 +47992,14 @@ - - + - + @@ -48119,14 +48016,15 @@ + - + - + @@ -48134,7 +48032,7 @@ - + @@ -48149,12 +48047,13 @@ - + + @@ -48172,7 +48071,6 @@ - @@ -48193,6 +48091,7 @@ + @@ -48215,7 +48114,7 @@ - + @@ -48241,7 +48140,7 @@ - + @@ -48254,6 +48153,7 @@ + @@ -48262,12 +48162,12 @@ - + - + @@ -48276,14 +48176,12 @@ - - + - @@ -48302,21 +48200,19 @@ - - - - + + - + - + @@ -48324,13 +48220,13 @@ - + - + @@ -48343,8 +48239,8 @@ - - + + @@ -48368,22 +48264,22 @@ - - + + - - + + - + @@ -48409,7 +48305,7 @@ - + @@ -48418,9 +48314,8 @@ - + - @@ -48442,7 +48337,7 @@ - + @@ -48451,21 +48346,21 @@ - - - + + - + + @@ -48488,7 +48383,6 @@ - @@ -48496,16 +48390,18 @@ + + - - - + + + @@ -48543,11 +48439,10 @@ - + - @@ -48574,7 +48469,6 @@ - @@ -48590,27 +48484,28 @@ - + + - + - + - + - + @@ -48623,16 +48518,14 @@ - + - - @@ -48657,11 +48550,9 @@ - - @@ -48685,15 +48576,16 @@ - + - + + @@ -48714,11 +48606,10 @@ - - + @@ -48742,7 +48633,7 @@ - + @@ -48752,15 +48643,15 @@ - - + + @@ -48768,16 +48659,15 @@ - + - @@ -48790,7 +48680,7 @@ - + @@ -48805,15 +48695,14 @@ - + - + - @@ -48829,27 +48718,27 @@ - - - + + + - + - + - + - + @@ -48867,16 +48756,14 @@ - - - + @@ -48886,12 +48773,11 @@ - - + @@ -48931,6 +48817,7 @@ + @@ -48941,6 +48828,7 @@ + @@ -48948,7 +48836,7 @@ - + @@ -48957,7 +48845,7 @@ - + @@ -48975,10 +48863,12 @@ + - + + @@ -48986,13 +48876,12 @@ - + - - + - + @@ -49005,10 +48894,10 @@ - + - + @@ -49035,12 +48924,11 @@ - + - @@ -49058,7 +48946,7 @@ - + @@ -49068,10 +48956,10 @@ - + - + @@ -49085,6 +48973,7 @@ + @@ -49099,18 +48988,19 @@ - + + @@ -49119,8 +49009,9 @@ + - + @@ -49134,7 +49025,8 @@ - + + @@ -49146,10 +49038,10 @@ - + - + @@ -49166,7 +49058,6 @@ - @@ -49184,7 +49075,7 @@ - + @@ -49207,8 +49098,8 @@ - + @@ -49222,9 +49113,11 @@ + + @@ -49234,16 +49127,15 @@ - + - - + @@ -49255,13 +49147,12 @@ - + - @@ -49271,8 +49162,7 @@ - - + @@ -49280,7 +49170,7 @@ - + @@ -49299,7 +49189,7 @@ - + @@ -49309,7 +49199,7 @@ - + @@ -49317,9 +49207,8 @@ - - + @@ -49331,10 +49220,9 @@ - + - @@ -49353,7 +49241,6 @@ - @@ -49364,7 +49251,7 @@ - + @@ -49378,7 +49265,7 @@ - + @@ -49395,6 +49282,7 @@ + @@ -49404,6 +49292,7 @@ + @@ -49411,17 +49300,17 @@ - + - + - + @@ -49433,16 +49322,14 @@ - + - - @@ -49450,6 +49337,7 @@ + @@ -49464,31 +49352,31 @@ + - - + - + - + - - + + - + @@ -49499,11 +49387,12 @@ - + - + + @@ -49529,16 +49418,17 @@ + - + - + - + @@ -49550,6 +49440,7 @@ + @@ -49562,6 +49453,7 @@ + @@ -49569,13 +49461,15 @@ - - - + + + + + @@ -49590,20 +49484,20 @@ - - + + - + @@ -49621,13 +49515,13 @@ - + - + @@ -49635,7 +49529,7 @@ - + @@ -49646,22 +49540,23 @@ + - - - + + + @@ -49682,11 +49577,12 @@ - + + - + @@ -49712,7 +49608,7 @@ - + @@ -49723,22 +49619,20 @@ - + - - - + - + @@ -49753,7 +49647,7 @@ - + @@ -49773,15 +49667,15 @@ - + - + @@ -49794,13 +49688,13 @@ - + - + @@ -49812,7 +49706,6 @@ - @@ -49834,11 +49727,11 @@ - + - + @@ -49848,7 +49741,7 @@ - + @@ -49857,18 +49750,20 @@ - + + + - + - + @@ -49891,18 +49786,17 @@ - - - + + @@ -49911,14 +49805,15 @@ - + + + - @@ -49927,10 +49822,9 @@ - - + @@ -49945,14 +49839,12 @@ - - @@ -49966,7 +49858,7 @@ - + @@ -49997,13 +49889,13 @@ - + - + @@ -50011,16 +49903,16 @@ + - + - @@ -50036,7 +49928,7 @@ - + @@ -50050,7 +49942,6 @@ - @@ -50071,7 +49962,7 @@ - + @@ -50082,18 +49973,18 @@ - + - + @@ -50102,7 +49993,7 @@ - + @@ -50113,7 +50004,7 @@ - + @@ -50134,10 +50025,11 @@ - + + @@ -50147,14 +50039,14 @@ - + - + @@ -50166,6 +50058,7 @@ + @@ -50178,12 +50071,10 @@ - + - - @@ -50221,9 +50112,10 @@ - + + @@ -50250,11 +50142,12 @@ + - + @@ -50271,7 +50164,6 @@ - @@ -50280,11 +50172,11 @@ - + - + @@ -50299,7 +50191,6 @@ - @@ -50311,7 +50202,7 @@ - + @@ -50319,7 +50210,7 @@ - + @@ -50343,7 +50234,7 @@ - + @@ -50358,11 +50249,12 @@ - + - + + @@ -50383,26 +50275,26 @@ - + - + - + - - + + @@ -50426,7 +50318,6 @@ - @@ -50445,17 +50336,18 @@ + - + - + - + @@ -50468,7 +50360,6 @@ - @@ -50489,7 +50380,6 @@ - @@ -50508,17 +50398,17 @@ - + + - @@ -50572,6 +50462,7 @@ + @@ -50579,12 +50470,13 @@ - + + - + @@ -50597,7 +50489,7 @@ - + @@ -50613,6 +50505,7 @@ + @@ -50624,20 +50517,19 @@ - - + + - + - @@ -50647,7 +50539,7 @@ - + @@ -50658,7 +50550,6 @@ - @@ -50680,12 +50571,12 @@ - + - + @@ -50697,7 +50588,7 @@ - + @@ -50705,7 +50596,9 @@ + + @@ -50717,10 +50610,11 @@ - + + @@ -50734,7 +50628,6 @@ - @@ -50743,6 +50636,7 @@ + @@ -50761,18 +50655,17 @@ + + - - - @@ -50780,7 +50673,6 @@ - @@ -50791,7 +50683,6 @@ - @@ -50808,22 +50699,19 @@ - - - - - + + - + @@ -50843,10 +50731,11 @@ - + + @@ -50880,7 +50769,7 @@ - + @@ -50892,19 +50781,18 @@ - - + @@ -50918,6 +50806,7 @@ + @@ -50932,7 +50821,6 @@ - @@ -50960,11 +50848,10 @@ - + - @@ -50979,11 +50866,10 @@ - + - @@ -51005,12 +50891,13 @@ - + + - + - + @@ -51018,6 +50905,7 @@ + @@ -51043,19 +50931,19 @@ - + - + - + @@ -51073,7 +50961,7 @@ - + @@ -51110,14 +50998,14 @@ - + - + @@ -51134,7 +51022,6 @@ - @@ -51145,9 +51032,10 @@ - + + - + @@ -51176,17 +51064,19 @@ + + + - @@ -51194,10 +51084,9 @@ - + - @@ -51226,7 +51115,6 @@ - @@ -51236,7 +51124,6 @@ - @@ -51249,19 +51136,17 @@ - + - - + - - + @@ -51272,9 +51157,8 @@ - - - + + @@ -51282,9 +51166,8 @@ - - + @@ -51295,6 +51178,7 @@ + @@ -51304,7 +51188,7 @@ - + @@ -51319,7 +51203,6 @@ - @@ -51327,10 +51210,9 @@ - - + - + @@ -51349,21 +51231,18 @@ - - + - + - - - + @@ -51374,24 +51253,23 @@ - + - + - + - @@ -51411,15 +51289,15 @@ - + - + - + @@ -51431,6 +51309,7 @@ + @@ -51439,9 +51318,8 @@ - - + @@ -51456,17 +51334,18 @@ - + + - + - + @@ -51500,7 +51379,7 @@ - + @@ -51535,11 +51414,11 @@ - + - + @@ -51562,9 +51441,10 @@ - + + - + @@ -51579,7 +51459,7 @@ - + @@ -51594,6 +51474,7 @@ + @@ -51607,7 +51488,7 @@ - + @@ -51635,7 +51516,6 @@ - @@ -51660,7 +51540,6 @@ - @@ -51672,7 +51551,7 @@ - + @@ -51686,7 +51565,6 @@ - @@ -51707,22 +51585,19 @@ - - - + - - + @@ -51745,21 +51620,20 @@ - + - + - + - + - @@ -51783,6 +51657,7 @@ + @@ -51800,7 +51675,6 @@ - @@ -51820,11 +51694,11 @@ - - + + - + @@ -51856,8 +51730,8 @@ - + @@ -51866,12 +51740,12 @@ - + - + @@ -51891,7 +51765,7 @@ - + @@ -51914,19 +51788,17 @@ - + + - - - @@ -51937,6 +51809,7 @@ + @@ -51949,14 +51822,12 @@ - - - + @@ -51966,6 +51837,7 @@ + @@ -51978,17 +51850,17 @@ + - + - - + @@ -52000,6 +51872,7 @@ + @@ -52011,7 +51884,6 @@ - @@ -52038,7 +51910,6 @@ - @@ -52051,19 +51922,21 @@ + - + - + - + + @@ -52079,11 +51952,12 @@ + - + @@ -52098,7 +51972,6 @@ - @@ -52107,18 +51980,17 @@ - - + - - + + @@ -52127,12 +51999,12 @@ - + - + @@ -52140,6 +52012,7 @@ + @@ -52151,10 +52024,10 @@ + - @@ -52162,7 +52035,7 @@ - + @@ -52202,10 +52075,10 @@ - + - + @@ -52222,9 +52095,9 @@ - + @@ -52252,7 +52125,6 @@ - @@ -52261,6 +52133,7 @@ + @@ -52269,9 +52142,9 @@ - - + + @@ -52288,13 +52161,14 @@ - + - + + @@ -52304,6 +52178,7 @@ + @@ -52312,10 +52187,11 @@ - + - - + + + @@ -52334,18 +52210,18 @@ - + - + - - + + @@ -52355,11 +52231,10 @@ - - + @@ -52391,17 +52266,17 @@ + - - + @@ -52409,11 +52284,11 @@ - + - + @@ -52424,8 +52299,10 @@ + + @@ -52449,6 +52326,7 @@ + @@ -52457,7 +52335,7 @@ - + @@ -52500,7 +52378,6 @@ - @@ -52510,7 +52387,7 @@ - + @@ -52522,9 +52399,7 @@ - - @@ -52537,7 +52412,7 @@ - + @@ -52567,26 +52442,26 @@ - + - + - - + - + + + - @@ -52600,18 +52475,17 @@ - + - - + @@ -52645,6 +52519,7 @@ + @@ -52664,7 +52539,7 @@ - + @@ -52673,7 +52548,7 @@ - + @@ -52687,7 +52562,7 @@ - + @@ -52713,12 +52588,12 @@ - + - + @@ -52732,7 +52607,7 @@ - + @@ -52752,7 +52627,6 @@ - @@ -52767,7 +52641,6 @@ - @@ -52788,11 +52661,12 @@ + - + @@ -52817,7 +52691,7 @@ - + @@ -52833,8 +52707,9 @@ - + + @@ -52848,14 +52723,14 @@ - + - + - + @@ -52863,8 +52738,7 @@ - - + @@ -52872,10 +52746,10 @@ + - @@ -52894,29 +52768,30 @@ - + + - + - + - + - + - + - + @@ -52927,6 +52802,7 @@ + @@ -52935,6 +52811,7 @@ + @@ -52944,7 +52821,6 @@ - @@ -52979,14 +52855,14 @@ - + - + @@ -53002,8 +52878,9 @@ + + - @@ -53012,8 +52889,7 @@ - - + @@ -53024,30 +52900,31 @@ - - + - + + - + - + + - + @@ -53058,7 +52935,7 @@ - + @@ -53070,10 +52947,9 @@ - + - @@ -53084,7 +52960,6 @@ - @@ -53093,34 +52968,36 @@ - + - + + + - + - + @@ -53134,20 +53011,21 @@ + - + - + + - @@ -53177,18 +53055,16 @@ - + - + - - @@ -53205,7 +53081,6 @@ - @@ -53238,6 +53113,7 @@ + @@ -53248,7 +53124,7 @@ - + @@ -53263,18 +53139,17 @@ - + - + + - + - - @@ -53347,7 +53222,7 @@ - + @@ -53355,7 +53230,7 @@ - + @@ -53368,15 +53243,16 @@ + - + - + @@ -53390,7 +53266,6 @@ - @@ -53402,7 +53277,7 @@ - + @@ -53424,15 +53299,17 @@ + - + + @@ -53448,7 +53325,7 @@ - + @@ -53458,7 +53335,7 @@ - + @@ -53488,7 +53365,7 @@ - + @@ -53521,7 +53398,7 @@ - + @@ -53533,16 +53410,17 @@ - + + - + @@ -53551,13 +53429,14 @@ - + + @@ -53571,11 +53450,12 @@ - + + - + @@ -53589,9 +53469,9 @@ - + - + @@ -53613,7 +53493,7 @@ - + @@ -53636,14 +53516,12 @@ - - + - @@ -53657,17 +53535,17 @@ + - - + - + @@ -53681,12 +53559,12 @@ - + - + @@ -53701,16 +53579,16 @@ - - + + - + - + @@ -53718,17 +53596,17 @@ - + - + @@ -53764,7 +53642,7 @@ - + @@ -53786,7 +53664,6 @@ - @@ -53805,6 +53682,7 @@ + @@ -53812,13 +53690,15 @@ - + + + - + @@ -53830,7 +53710,6 @@ - @@ -53838,7 +53717,7 @@ - + @@ -53860,7 +53739,7 @@ - + @@ -53881,6 +53760,7 @@ + @@ -53896,12 +53776,13 @@ + + - @@ -53913,13 +53794,13 @@ - + - + @@ -53929,7 +53810,7 @@ - + @@ -53939,10 +53820,12 @@ + + @@ -53973,18 +53856,18 @@ - - + + - + @@ -53996,7 +53879,7 @@ - + @@ -54056,16 +53939,14 @@ - - - + - + @@ -54076,6 +53957,7 @@ + @@ -54089,9 +53971,10 @@ - + + @@ -54101,6 +53984,7 @@ + @@ -54122,13 +54006,14 @@ - + + @@ -54136,7 +54021,7 @@ - + @@ -54145,7 +54030,7 @@ - + @@ -54153,7 +54038,6 @@ - @@ -54161,6 +54045,7 @@ + @@ -54172,7 +54057,7 @@ - + @@ -54193,15 +54078,15 @@ + - - + @@ -54214,7 +54099,7 @@ - + @@ -54230,8 +54115,9 @@ - + + @@ -54243,37 +54129,35 @@ + - - + - - + - + - @@ -54284,21 +54168,21 @@ - + - - + + @@ -54309,7 +54193,6 @@ - @@ -54321,11 +54204,10 @@ - + - @@ -54334,26 +54216,25 @@ - + + - - - + + - @@ -54378,6 +54259,7 @@ + @@ -54394,19 +54276,19 @@ - + - + - + - + @@ -54420,7 +54302,6 @@ - @@ -54429,10 +54310,9 @@ - + - @@ -54450,7 +54330,7 @@ - + @@ -54458,7 +54338,7 @@ - + @@ -54467,14 +54347,13 @@ - + - @@ -54510,8 +54389,7 @@ - - + @@ -54522,12 +54400,12 @@ - + @@ -54535,17 +54413,17 @@ + + - - @@ -54578,7 +54456,7 @@ - + @@ -54588,13 +54466,13 @@ - + - + @@ -54615,7 +54493,7 @@ - + @@ -54629,7 +54507,8 @@ - + + @@ -54641,10 +54520,9 @@ - - + @@ -54676,7 +54554,7 @@ - + @@ -54689,7 +54567,7 @@ - + @@ -54706,7 +54584,7 @@ - + @@ -54715,7 +54593,7 @@ - + @@ -54726,8 +54604,8 @@ + - @@ -54735,6 +54613,7 @@ + @@ -54766,11 +54645,12 @@ - + + @@ -54799,7 +54679,7 @@ - + @@ -54808,7 +54688,6 @@ - @@ -54819,6 +54698,7 @@ + @@ -54830,8 +54710,7 @@ - - + @@ -54845,7 +54724,7 @@ - + @@ -54856,33 +54735,35 @@ - + + - + + - + - + - + - + @@ -54890,6 +54771,7 @@ + @@ -54908,7 +54790,7 @@ - + @@ -54917,7 +54799,6 @@ - @@ -54931,9 +54812,10 @@ - + - + + @@ -54955,7 +54837,6 @@ - @@ -54975,6 +54856,7 @@ + @@ -54983,6 +54865,7 @@ + @@ -55020,7 +54903,8 @@ - + + @@ -55035,30 +54919,30 @@ - + - + - + - - + + @@ -55071,7 +54955,7 @@ - + @@ -55085,14 +54969,13 @@ - + - - + @@ -55102,7 +54985,7 @@ - + @@ -55131,6 +55014,7 @@ + @@ -55142,12 +55026,12 @@ - + - + @@ -55160,13 +55044,12 @@ - - + @@ -55189,7 +55072,7 @@ - + @@ -55197,6 +55080,7 @@ + @@ -55215,7 +55099,7 @@ - + @@ -55248,39 +55132,36 @@ - + - - - - + - + + - @@ -55298,7 +55179,7 @@ - + @@ -55306,6 +55187,7 @@ + @@ -55334,8 +55216,8 @@ - + @@ -55348,7 +55230,7 @@ - + @@ -55358,11 +55240,10 @@ - - + @@ -55380,21 +55261,22 @@ - + - + - + - + + @@ -55411,14 +55293,12 @@ - + - - @@ -55431,8 +55311,7 @@ - - + @@ -55441,12 +55320,12 @@ + - - + @@ -55466,7 +55345,6 @@ - @@ -55478,11 +55356,10 @@ - + - - + @@ -55502,13 +55379,13 @@ - + - + @@ -55521,8 +55398,10 @@ + + @@ -55531,7 +55410,6 @@ - @@ -55546,15 +55424,14 @@ - + - + - @@ -55567,8 +55444,8 @@ + - @@ -55581,12 +55458,14 @@ + + @@ -55594,14 +55473,14 @@ - + - + @@ -55612,7 +55491,8 @@ - + + @@ -55660,7 +55540,7 @@ - + @@ -55677,16 +55557,13 @@ - - - + + - - - + @@ -55696,17 +55573,18 @@ + - + + - + - @@ -55716,11 +55594,11 @@ - + - + @@ -55729,13 +55607,13 @@ - + @@ -55745,7 +55623,8 @@ - + + @@ -55758,17 +55637,18 @@ - + + + - @@ -55776,8 +55656,8 @@ - - + + @@ -55787,12 +55667,11 @@ - + - @@ -55807,6 +55686,7 @@ + @@ -55824,7 +55704,6 @@ - @@ -55833,6 +55712,7 @@ + @@ -55843,14 +55723,13 @@ - + - @@ -55860,7 +55739,6 @@ - @@ -55870,6 +55748,7 @@ + @@ -55912,13 +55791,12 @@ - + - - + @@ -55931,13 +55809,11 @@ - - @@ -55952,15 +55828,14 @@ - + - + - @@ -55994,8 +55869,8 @@ - - + + @@ -56006,14 +55881,13 @@ - - + - + @@ -56037,8 +55911,8 @@ + - @@ -56058,7 +55932,6 @@ - @@ -56076,7 +55949,7 @@ - + @@ -56085,7 +55958,6 @@ - @@ -56109,15 +55981,16 @@ + - + + - + - @@ -56125,10 +55998,10 @@ - + + - @@ -56144,6 +56017,7 @@ + @@ -56184,15 +56058,15 @@ - + - + - + @@ -56200,7 +56074,6 @@ - @@ -56230,17 +56103,18 @@ - + - + + @@ -56258,23 +56132,26 @@ - + - + + + + @@ -56289,24 +56166,23 @@ - + - + - + - @@ -56328,7 +56204,7 @@ - + @@ -56355,7 +56231,6 @@ - @@ -56363,15 +56238,14 @@ - + - @@ -56395,12 +56269,13 @@ - + + @@ -56410,12 +56285,12 @@ - - + + - + - + @@ -56429,18 +56304,17 @@ - - + - + @@ -56450,16 +56324,15 @@ - - + - + - + @@ -56467,7 +56340,6 @@ - @@ -56478,7 +56350,6 @@ - @@ -56486,7 +56357,6 @@ - @@ -56517,14 +56387,16 @@ - + + + @@ -56543,7 +56415,6 @@ - @@ -56553,17 +56424,17 @@ - - + + - + @@ -56574,7 +56445,7 @@ - + @@ -56583,27 +56454,25 @@ - - + + + - - - + - - + @@ -56613,7 +56482,6 @@ - @@ -56625,18 +56493,17 @@ - - + + - @@ -56661,15 +56528,15 @@ - + - + - + @@ -56685,10 +56552,12 @@ + + - + @@ -56702,13 +56571,13 @@ - + - + @@ -56719,7 +56588,7 @@ - + @@ -56750,17 +56619,16 @@ - - + - + - + @@ -56777,26 +56645,24 @@ - - + - - + - + @@ -56809,7 +56675,7 @@ - + @@ -56818,7 +56684,6 @@ - @@ -56827,32 +56692,30 @@ - + - - - + - + + - - + @@ -56866,7 +56729,7 @@ - + @@ -56879,6 +56742,7 @@ + @@ -56926,16 +56790,14 @@ - - + - @@ -56948,7 +56810,7 @@ - + @@ -56964,12 +56826,10 @@ - - @@ -56991,6 +56851,7 @@ + @@ -56998,16 +56859,16 @@ + - + - - + @@ -57030,7 +56891,7 @@ - + @@ -57048,21 +56909,21 @@ - + + - - + - + @@ -57070,9 +56931,7 @@ - - @@ -57083,7 +56942,7 @@ - + @@ -57091,7 +56950,6 @@ - @@ -57099,8 +56957,8 @@ - - + + @@ -57119,7 +56977,7 @@ - + @@ -57139,7 +56997,7 @@ - + @@ -57166,8 +57024,8 @@ - - + + @@ -57180,10 +57038,10 @@ - + - + @@ -57197,7 +57055,7 @@ - + @@ -57213,9 +57071,8 @@ - + - @@ -57224,19 +57081,19 @@ - + - + - + - + @@ -57244,10 +57101,11 @@ - + - + + @@ -57263,35 +57121,34 @@ + + - - + - + - - - + @@ -57306,10 +57163,10 @@ - + - + @@ -57322,13 +57179,14 @@ - + + @@ -57336,7 +57194,7 @@ - + @@ -57348,7 +57206,7 @@ - + @@ -57358,6 +57216,7 @@ + @@ -57371,12 +57230,11 @@ - + - @@ -57387,15 +57245,14 @@ - - + - - + + @@ -57422,7 +57279,6 @@ - @@ -57430,13 +57286,13 @@ - + + - @@ -57446,7 +57302,7 @@ - + @@ -57475,10 +57331,10 @@ - + - + @@ -57490,7 +57346,6 @@ - @@ -57499,14 +57354,14 @@ - + - + @@ -57524,8 +57379,7 @@ - - + @@ -57550,6 +57404,7 @@ + @@ -57573,9 +57428,8 @@ - + - @@ -57591,6 +57445,7 @@ + @@ -57602,7 +57457,7 @@ - + @@ -57614,14 +57469,13 @@ - + - @@ -57635,7 +57489,7 @@ - + @@ -57644,7 +57498,6 @@ - @@ -57652,11 +57505,10 @@ - + - @@ -57680,6 +57532,7 @@ + @@ -57700,7 +57553,6 @@ - @@ -57716,7 +57568,7 @@ - + @@ -57730,10 +57582,10 @@ - + - + @@ -57746,6 +57598,7 @@ + @@ -57769,7 +57622,7 @@ - + @@ -57808,7 +57661,7 @@ - + @@ -57826,8 +57679,7 @@ - - + @@ -57835,8 +57687,8 @@ + - @@ -57844,10 +57696,12 @@ + + @@ -57855,14 +57709,14 @@ - - + - + + @@ -57888,23 +57742,25 @@ - + + - + - + + @@ -57914,7 +57770,7 @@ - + @@ -57930,8 +57786,7 @@ - - + @@ -57940,6 +57795,8 @@ + + @@ -57948,12 +57805,11 @@ - - + @@ -57985,7 +57841,8 @@ - + + @@ -57996,17 +57853,15 @@ - - + - @@ -58018,14 +57873,15 @@ - + - + - + + @@ -58044,7 +57900,8 @@ - + + @@ -58056,17 +57913,16 @@ - + - @@ -58097,8 +57953,7 @@ - - + @@ -58107,7 +57962,6 @@ - @@ -58140,7 +57994,7 @@ - + @@ -58158,9 +58012,8 @@ - + - @@ -58168,7 +58021,6 @@ - @@ -58185,14 +58037,15 @@ + - - + + @@ -58210,12 +58063,12 @@ - + - + @@ -58229,7 +58082,9 @@ + + @@ -58239,9 +58094,9 @@ - + - + @@ -58266,7 +58121,7 @@ - + @@ -58274,6 +58129,7 @@ + @@ -58297,7 +58153,7 @@ - + @@ -58306,18 +58162,19 @@ + - + - + @@ -58326,7 +58183,7 @@ - + @@ -58350,7 +58207,7 @@ - + @@ -58361,9 +58218,10 @@ + - + @@ -58376,7 +58234,6 @@ - @@ -58387,17 +58244,15 @@ - - - + @@ -58405,24 +58260,22 @@ - - - - + - + + @@ -58430,7 +58283,7 @@ - + @@ -58438,9 +58291,10 @@ - + + @@ -58449,16 +58303,17 @@ + - + - + @@ -58471,50 +58326,49 @@ - - + - + + - + - - + + - + - + - + - @@ -58522,11 +58376,12 @@ + - + @@ -58542,7 +58397,6 @@ - @@ -58560,12 +58414,12 @@ - + @@ -58583,7 +58437,6 @@ - @@ -58592,22 +58445,22 @@ - + - + - + - - + + @@ -58618,7 +58471,6 @@ - @@ -58634,9 +58486,10 @@ - + + - + @@ -58648,17 +58501,18 @@ - + + - + - + @@ -58697,12 +58551,12 @@ - + - + @@ -58712,14 +58566,14 @@ - + - - + + - + @@ -58728,7 +58582,7 @@ - + @@ -58745,11 +58599,9 @@ - - - + @@ -58778,11 +58630,12 @@ + - + @@ -58791,14 +58644,12 @@ - - - + @@ -58813,7 +58664,7 @@ - + @@ -58841,14 +58692,15 @@ + - + - + @@ -58859,7 +58711,7 @@ - + @@ -58908,32 +58760,28 @@ - - - - - + - - + + - + - + @@ -58945,7 +58793,7 @@ - + @@ -58955,10 +58803,9 @@ - + - @@ -58969,16 +58816,17 @@ - + - + + @@ -58997,10 +58845,10 @@ - + @@ -59014,11 +58862,10 @@ - + - @@ -59032,7 +58879,7 @@ - + @@ -59044,7 +58891,9 @@ - + + + @@ -59054,8 +58903,7 @@ - - + @@ -59064,14 +58912,16 @@ + + + - @@ -59081,10 +58931,9 @@ - + - @@ -59093,8 +58942,8 @@ - - + + @@ -59121,14 +58970,13 @@ - + - @@ -59173,7 +59021,7 @@ - + @@ -59181,7 +59029,7 @@ - + @@ -59194,9 +59042,10 @@ + - + @@ -59216,7 +59065,6 @@ - @@ -59230,10 +59078,9 @@ - - + @@ -59246,7 +59093,7 @@ - + @@ -59267,7 +59114,6 @@ - @@ -59282,7 +59128,6 @@ - @@ -59319,12 +59164,11 @@ - - + @@ -59341,7 +59185,7 @@ - + @@ -59353,6 +59197,7 @@ + @@ -59361,10 +59206,9 @@ - + - @@ -59381,15 +59225,15 @@ - + - + @@ -59398,17 +59242,17 @@ - + - + - + @@ -59444,6 +59288,7 @@ + @@ -59452,7 +59297,6 @@ - @@ -59463,7 +59307,7 @@ - + @@ -59489,8 +59333,10 @@ + + @@ -59500,7 +59346,7 @@ - + @@ -59533,7 +59379,6 @@ - @@ -59550,6 +59395,7 @@ + @@ -59557,18 +59403,17 @@ - + - - + - + @@ -59580,11 +59425,10 @@ - + - @@ -59605,6 +59449,7 @@ + @@ -59632,8 +59477,9 @@ + - + @@ -59646,7 +59492,7 @@ - + @@ -59666,7 +59512,6 @@ - @@ -59684,16 +59529,16 @@ - + - + @@ -59709,6 +59554,7 @@ + @@ -59739,7 +59585,7 @@ - + @@ -59759,11 +59605,11 @@ - + - + @@ -59783,7 +59629,6 @@ - @@ -59793,7 +59638,8 @@ - + + @@ -59806,8 +59652,6 @@ - - @@ -59815,14 +59659,15 @@ + - + - + @@ -59832,15 +59677,14 @@ - + - - + @@ -59851,7 +59695,6 @@ - @@ -59867,7 +59710,7 @@ - + @@ -59892,8 +59735,9 @@ - + + @@ -59919,31 +59763,30 @@ - + - - - + + - + - - + + @@ -59955,15 +59798,17 @@ + - + + @@ -59994,7 +59839,7 @@ - + @@ -60010,17 +59855,18 @@ - + + - - - + + + @@ -60029,23 +59875,24 @@ - + + - + - + - + - + @@ -60066,7 +59913,6 @@ - @@ -60074,7 +59920,7 @@ - + @@ -60085,6 +59931,7 @@ + @@ -60104,9 +59951,8 @@ - - + @@ -60120,7 +59966,7 @@ - + @@ -60132,13 +59978,12 @@ - + - - + @@ -60153,7 +59998,7 @@ - + @@ -60166,7 +60011,7 @@ - + @@ -60177,7 +60022,6 @@ - @@ -60221,7 +60065,7 @@ - + @@ -60229,7 +60073,6 @@ - @@ -60241,7 +60084,6 @@ - @@ -60289,11 +60131,9 @@ - - - + @@ -60301,10 +60141,8 @@ - - @@ -60318,6 +60156,7 @@ + @@ -60347,6 +60186,7 @@ + @@ -60354,7 +60194,6 @@ - @@ -60362,7 +60201,7 @@ - + @@ -60370,18 +60209,16 @@ - + - - - + @@ -60405,26 +60242,26 @@ + - + - - + @@ -60435,7 +60272,7 @@ - + @@ -60455,6 +60292,7 @@ + @@ -60467,42 +60305,41 @@ + - + - - - + - - + + - + - - + - + + @@ -60511,10 +60348,8 @@ - - @@ -60529,13 +60364,12 @@ - - + @@ -60546,10 +60380,9 @@ - - + @@ -60572,6 +60405,7 @@ + @@ -60585,7 +60419,6 @@ - @@ -60604,10 +60437,10 @@ - + - + @@ -60621,7 +60454,7 @@ - + @@ -60649,10 +60482,11 @@ - + + @@ -60671,21 +60505,19 @@ - + - - + - - + @@ -60720,6 +60552,7 @@ + @@ -60729,6 +60562,7 @@ + @@ -60742,7 +60576,6 @@ - @@ -60765,11 +60598,12 @@ - + - + + @@ -60785,17 +60619,17 @@ + - + + - - @@ -60814,9 +60648,10 @@ - + + - + @@ -60828,15 +60663,16 @@ + - + - + @@ -60860,12 +60696,13 @@ - + + @@ -60881,7 +60718,6 @@ - @@ -60902,15 +60738,17 @@ + - + + @@ -60924,7 +60762,7 @@ - + @@ -60942,7 +60780,7 @@ - + @@ -60954,13 +60792,13 @@ - + - + @@ -60968,7 +60806,7 @@ - + @@ -60982,7 +60820,6 @@ - @@ -60993,25 +60830,24 @@ - + - - + - + - + - + @@ -61024,7 +60860,7 @@ - + @@ -61036,7 +60872,7 @@ - + @@ -61044,7 +60880,7 @@ - + @@ -61053,7 +60889,7 @@ - + @@ -61063,7 +60899,7 @@ - + @@ -61079,6 +60915,7 @@ + @@ -61086,7 +60923,7 @@ - + @@ -61099,10 +60936,10 @@ - + - + @@ -61132,23 +60969,26 @@ - - + + + - + + + @@ -61169,19 +61009,19 @@ - + - + - + @@ -61190,7 +61030,7 @@ - + @@ -61210,6 +61050,7 @@ + @@ -61231,6 +61072,7 @@ + @@ -61251,7 +61093,7 @@ - + @@ -61259,19 +61101,18 @@ - + - + - + - @@ -61283,7 +61124,7 @@ - + @@ -61318,6 +61159,7 @@ + @@ -61333,7 +61175,7 @@ - + @@ -61346,7 +61188,6 @@ - @@ -61368,7 +61209,7 @@ - + @@ -61392,7 +61233,7 @@ - + @@ -61400,7 +61241,6 @@ - @@ -61410,6 +61250,7 @@ + @@ -61432,6 +61273,7 @@ + @@ -61439,7 +61281,7 @@ - + @@ -61455,16 +61297,16 @@ - + - + @@ -61494,18 +61336,18 @@ - + - + + - - + - + @@ -61513,16 +61355,16 @@ - + - + - + @@ -61537,18 +61379,17 @@ - - - + - + + @@ -61576,10 +61417,13 @@ + + + @@ -61590,18 +61434,19 @@ + - + - + @@ -61620,7 +61465,7 @@ - + @@ -61635,13 +61480,13 @@ - + @@ -61656,11 +61501,12 @@ + - + - + @@ -61672,7 +61518,7 @@ - + @@ -61689,6 +61535,7 @@ + @@ -61699,6 +61546,7 @@ + @@ -61721,7 +61569,6 @@ - @@ -61732,9 +61579,8 @@ - - - + + @@ -61749,7 +61595,7 @@ - + @@ -61781,36 +61627,32 @@ - - + - + - + - - - + - @@ -61819,7 +61661,7 @@ - + @@ -61831,8 +61673,6 @@ - - @@ -61849,7 +61689,6 @@ - @@ -61862,7 +61701,7 @@ - + @@ -61877,6 +61716,7 @@ + @@ -61886,7 +61726,7 @@ - + @@ -61914,9 +61754,9 @@ - - + + @@ -61929,29 +61769,30 @@ - + - + - + - + + @@ -61969,7 +61810,8 @@ - + + @@ -61980,7 +61822,7 @@ - + @@ -61992,7 +61834,7 @@ - + @@ -62003,7 +61845,6 @@ - @@ -62011,19 +61852,19 @@ - + + - + - @@ -62042,7 +61883,6 @@ - @@ -62050,11 +61890,11 @@ + - - + @@ -62069,37 +61909,38 @@ - + + - - + + - + - - + + @@ -62110,7 +61951,7 @@ - + @@ -62122,28 +61963,28 @@ + - + + - + - - @@ -62160,14 +62001,15 @@ - + + @@ -62186,26 +62028,24 @@ - + - - + - + - - - + + @@ -62223,6 +62063,7 @@ + @@ -62230,10 +62071,10 @@ + - + - @@ -62258,7 +62099,7 @@ - + @@ -62280,10 +62121,10 @@ - + - + @@ -62291,7 +62132,7 @@ - + @@ -62307,7 +62148,6 @@ - @@ -62323,15 +62163,15 @@ - + - + @@ -62367,7 +62207,6 @@ - @@ -62377,7 +62216,6 @@ - @@ -62407,11 +62245,10 @@ - - + - + @@ -62427,7 +62264,7 @@ - + @@ -62437,20 +62274,22 @@ - + + + + - - + @@ -62470,24 +62309,23 @@ - + - + - + - + - - + - + @@ -62502,24 +62340,24 @@ - - - + + - + - + + @@ -62527,23 +62365,23 @@ - + + - @@ -62575,7 +62413,6 @@ - @@ -62596,7 +62433,7 @@ - + @@ -62613,15 +62450,16 @@ - + - + + @@ -62629,12 +62467,9 @@ - - - @@ -62643,9 +62478,9 @@ - + - + @@ -62672,15 +62507,17 @@ - + + + @@ -62693,7 +62530,6 @@ - @@ -62708,6 +62544,7 @@ + @@ -62717,8 +62554,8 @@ - - + + @@ -62728,7 +62565,7 @@ - + @@ -62736,10 +62573,9 @@ - - - - + + + @@ -62778,26 +62614,28 @@ - - + + + - + + @@ -62809,11 +62647,10 @@ - - + @@ -62839,17 +62676,16 @@ - + - + - - + @@ -62858,6 +62694,7 @@ + @@ -62873,10 +62710,8 @@ - + - - @@ -62890,18 +62725,17 @@ - - + - + - + @@ -62917,7 +62751,9 @@ + + @@ -62927,14 +62763,14 @@ - + - + @@ -62951,9 +62787,10 @@ + - + @@ -62969,7 +62806,6 @@ - @@ -62985,7 +62821,9 @@ + + @@ -62995,7 +62833,7 @@ - + @@ -63013,6 +62851,7 @@ + @@ -63023,9 +62862,8 @@ - + - @@ -63075,10 +62913,12 @@ + + @@ -63090,6 +62930,7 @@ + @@ -63103,23 +62944,22 @@ - - + - + @@ -63145,23 +62985,22 @@ + - - + - - + @@ -63172,28 +63011,26 @@ - - + - + - - + @@ -63201,9 +63038,9 @@ + - - + @@ -63219,10 +63056,10 @@ - + @@ -63232,16 +63069,14 @@ - - + - - + @@ -63257,12 +63092,12 @@ - + - + @@ -63270,7 +63105,7 @@ - + @@ -63279,10 +63114,9 @@ - - + @@ -63290,8 +63124,9 @@ + - + @@ -63300,7 +63135,6 @@ - @@ -63310,7 +63144,6 @@ - @@ -63325,6 +63158,7 @@ + @@ -63339,7 +63173,7 @@ - + @@ -63365,7 +63199,7 @@ - + @@ -63416,7 +63250,7 @@ - + @@ -63461,10 +63295,10 @@ - - + + - + @@ -63489,12 +63323,12 @@ - + - + @@ -63519,7 +63353,6 @@ - @@ -63544,9 +63377,9 @@ - + @@ -63567,7 +63400,7 @@ - + @@ -63577,7 +63410,6 @@ - @@ -63591,10 +63423,8 @@ - - @@ -63611,10 +63441,9 @@ - + - @@ -63624,12 +63453,11 @@ + - - @@ -63654,6 +63482,7 @@ + @@ -63667,36 +63496,32 @@ - + - - + - - + - - + - @@ -63711,18 +63536,18 @@ - - + - + + - + @@ -63762,6 +63587,7 @@ + @@ -63794,17 +63620,19 @@ + + - + @@ -63812,6 +63640,7 @@ + @@ -63820,20 +63649,18 @@ - - + - - + @@ -63841,14 +63668,15 @@ + + - @@ -63882,6 +63710,7 @@ + @@ -63899,6 +63728,7 @@ + @@ -63910,14 +63740,12 @@ - - + - @@ -63926,11 +63754,11 @@ - - - + + + - + @@ -63944,6 +63772,7 @@ + @@ -63985,7 +63814,6 @@ - @@ -63999,6 +63827,7 @@ + @@ -64026,7 +63855,7 @@ - + @@ -64034,9 +63863,10 @@ - + - + + @@ -64045,17 +63875,17 @@ - + - + - + @@ -64115,7 +63945,7 @@ - + @@ -64128,7 +63958,7 @@ - + @@ -64139,9 +63969,9 @@ - + - + @@ -64155,19 +63985,20 @@ - + + - + @@ -64180,7 +64011,6 @@ - @@ -64199,7 +64029,6 @@ - @@ -64216,6 +64045,7 @@ + @@ -64225,7 +64055,6 @@ - @@ -64233,7 +64062,7 @@ - + @@ -64249,7 +64078,7 @@ - + @@ -64269,8 +64098,6 @@ - - @@ -64281,18 +64108,19 @@ - - + + - + + @@ -64300,12 +64128,12 @@ + - @@ -64316,7 +64144,6 @@ - @@ -64325,7 +64152,9 @@ + + @@ -64338,7 +64167,7 @@ - + @@ -64350,7 +64179,7 @@ - + @@ -64367,7 +64196,7 @@ - + @@ -64375,6 +64204,7 @@ + @@ -64400,6 +64230,7 @@ + @@ -64421,13 +64252,13 @@ + - + - @@ -64443,6 +64274,7 @@ + @@ -64458,11 +64290,10 @@ - + - - + @@ -64488,10 +64319,10 @@ - + @@ -64503,11 +64334,10 @@ - + - @@ -64522,6 +64352,7 @@ + @@ -64529,7 +64360,6 @@ - @@ -64553,29 +64383,33 @@ - + - + + + + + @@ -64599,8 +64433,7 @@ - - + @@ -64613,6 +64446,7 @@ + @@ -64621,14 +64455,14 @@ - + - + - + @@ -64647,7 +64481,6 @@ - @@ -64656,7 +64489,7 @@ - + @@ -64668,10 +64501,10 @@ - + - + @@ -64689,13 +64522,13 @@ - + - + @@ -64704,13 +64537,13 @@ - - - + + + @@ -64731,29 +64564,29 @@ + - + - + - - + - + @@ -64764,14 +64597,13 @@ - - + - + @@ -64786,11 +64618,12 @@ + - + @@ -64803,7 +64636,7 @@ - + @@ -64814,19 +64647,19 @@ - + - + - + @@ -64840,7 +64673,7 @@ - + @@ -64862,8 +64695,9 @@ - + + @@ -64877,6 +64711,7 @@ + @@ -64908,14 +64743,14 @@ + + - - @@ -64923,10 +64758,10 @@ - + - + @@ -64935,7 +64770,7 @@ - + @@ -64959,8 +64794,8 @@ - - + + @@ -64987,7 +64822,7 @@ - + @@ -64999,8 +64834,10 @@ + + @@ -65012,7 +64849,7 @@ - + @@ -65020,7 +64857,6 @@ - @@ -65028,7 +64864,6 @@ - @@ -65039,14 +64874,15 @@ + - + @@ -65055,29 +64891,29 @@ - + - + + - - + @@ -65095,7 +64931,7 @@ - + @@ -65112,7 +64948,7 @@ - + @@ -65121,11 +64957,12 @@ - + + + - @@ -65133,6 +64970,7 @@ + @@ -65143,7 +64981,7 @@ - + @@ -65166,22 +65004,20 @@ - - + + - - + - + - @@ -65191,30 +65027,29 @@ - + + + - + - - - - + @@ -65228,7 +65063,7 @@ - + @@ -65267,15 +65102,14 @@ - - - + + @@ -65286,11 +65120,9 @@ - + - - @@ -65305,9 +65137,10 @@ - + + - + @@ -65317,10 +65150,10 @@ - + - + @@ -65328,15 +65161,15 @@ - - - + + + - + @@ -65385,13 +65218,12 @@ - + - @@ -65407,18 +65239,18 @@ - - + + @@ -65426,18 +65258,19 @@ - - - + + + + - + @@ -65449,15 +65282,17 @@ - + + - + + @@ -65465,10 +65300,10 @@ - + - + @@ -65486,6 +65321,7 @@ + @@ -65493,14 +65329,13 @@ - + - @@ -65514,18 +65349,19 @@ - + - + - + + - + @@ -65534,9 +65370,8 @@ - - + @@ -65548,14 +65383,13 @@ - + - + - - + @@ -65573,11 +65407,12 @@ - + - + + @@ -65585,8 +65420,6 @@ - - @@ -65607,14 +65440,13 @@ - - + - + - + @@ -65636,12 +65468,11 @@ - + - + - @@ -65651,9 +65482,8 @@ - - + @@ -65673,23 +65503,23 @@ - + + - + - @@ -65706,22 +65536,22 @@ - + - - + - + - + - + + @@ -65729,6 +65559,7 @@ + @@ -65740,21 +65571,20 @@ - + - + - - + @@ -65773,7 +65603,7 @@ - + @@ -65786,6 +65616,7 @@ + @@ -65809,9 +65640,7 @@ - - @@ -65821,6 +65650,7 @@ + @@ -65829,9 +65659,9 @@ - + - + @@ -65842,7 +65672,7 @@ - + @@ -65853,7 +65683,7 @@ - + @@ -65871,18 +65701,18 @@ - + - + @@ -65891,15 +65721,17 @@ + + - + @@ -65911,8 +65743,8 @@ - - + + @@ -65933,20 +65765,19 @@ - + + - - @@ -65956,7 +65787,7 @@ - + @@ -65964,10 +65795,11 @@ - + + @@ -65977,9 +65809,11 @@ + + @@ -65989,12 +65823,12 @@ - + - + @@ -66005,7 +65839,7 @@ - + @@ -66025,7 +65859,6 @@ - @@ -66041,7 +65874,7 @@ - + @@ -66051,7 +65884,6 @@ - @@ -66059,13 +65891,11 @@ - - @@ -66078,7 +65908,7 @@ - + @@ -66088,7 +65918,7 @@ - + @@ -66110,15 +65940,16 @@ + + - - + - + @@ -66138,31 +65969,43 @@ - + + + + + + + + + + + + + @@ -66175,6 +66018,8 @@ + + @@ -66182,23 +66027,26 @@ - + + + + + - + - - + @@ -66210,13 +66058,12 @@ - + - @@ -66230,31 +66077,28 @@ - - + - - - + - + - + @@ -66264,26 +66108,23 @@ + - + + - - - - + - + - - @@ -66295,27 +66136,35 @@ + + + + + + - + + - + + @@ -66326,19 +66175,21 @@ - + + + + - + - @@ -66348,8 +66199,6 @@ - - @@ -66361,45 +66210,49 @@ - - - - + - + + + - + + + + + - + + @@ -66407,13 +66260,12 @@ - + - @@ -66425,7 +66277,6 @@ - @@ -66443,6 +66294,7 @@ + @@ -66451,13 +66303,9 @@ - + - - - - @@ -66467,59 +66315,64 @@ - + + + - + + - + - + + - + - + + + - + - @@ -66530,19 +66383,22 @@ + - + + + @@ -66555,7 +66411,11 @@ + + + + @@ -66565,39 +66425,36 @@ - + - + + - - + - - - + - - - - + + + @@ -66607,30 +66464,26 @@ - - - + - - + - - + @@ -66638,7 +66491,7 @@ - + @@ -66647,15 +66500,18 @@ + + + @@ -66668,25 +66524,26 @@ - + + - + - + @@ -66695,37 +66552,44 @@ + + + - + + - + - + - - + + + + + @@ -66733,30 +66597,26 @@ - - + + - - - - - + @@ -66767,35 +66627,37 @@ - + - + + + + - - + @@ -66803,17 +66665,17 @@ + - - + @@ -66821,28 +66683,23 @@ - - - - + - - - + + - @@ -66853,6 +66710,9 @@ + + + @@ -66863,26 +66723,29 @@ + - + + - + - + + @@ -66892,10 +66755,9 @@ - + - @@ -66903,14 +66765,15 @@ - + - - + + + @@ -66925,12 +66788,13 @@ + - + - + @@ -66938,50 +66802,50 @@ - - - - + - - + + - - + - - + + + + + + @@ -66990,21 +66854,16 @@ - - - - - - + @@ -67012,14 +66871,14 @@ - - + + @@ -67030,14 +66889,17 @@ + + + - + @@ -67045,6 +66907,7 @@ + @@ -67053,69 +66916,76 @@ + - + + - + - - + + + + - - - + + + + - - + + + + @@ -67125,19 +66995,20 @@ + - - + + @@ -67149,14 +67020,13 @@ - + + - - - + @@ -67165,7 +67035,6 @@ - @@ -67178,7 +67047,6 @@ - @@ -67188,8 +67056,6 @@ - - @@ -67199,7 +67065,6 @@ - @@ -67207,45 +67072,43 @@ - - - - - + + + + - - + - - + + - - + + @@ -67254,18 +67117,19 @@ - - + + + @@ -67277,37 +67141,37 @@ + + + + + - - - + - - - @@ -67320,28 +67184,28 @@ + + - - - - + - + - - + + + @@ -67349,49 +67213,47 @@ + + - + - + - - - - - + + - - + - + @@ -67407,7 +67269,6 @@ - @@ -67422,8 +67283,10 @@ + + @@ -67432,10 +67295,9 @@ - + - @@ -67443,12 +67305,13 @@ - + + @@ -67457,7 +67320,7 @@ - + @@ -67466,6 +67329,7 @@ + @@ -67478,39 +67342,32 @@ - - - - - + + - - - - - + @@ -67521,24 +67378,25 @@ + + + + - - - @@ -67547,37 +67405,29 @@ - - - - - + - - - - - - + + - + @@ -67592,27 +67442,31 @@ - - + + + + + + @@ -67622,28 +67476,20 @@ - - - - + - - - - - @@ -67651,51 +67497,53 @@ + + - + + - + - - - + + @@ -67708,10 +67556,7 @@ - - - @@ -67719,57 +67564,51 @@ + - - + - - + - - + - - - - + + - - + - @@ -67777,26 +67616,27 @@ + - + - + + - @@ -67806,25 +67646,30 @@ + + + + + + - + - @@ -67836,41 +67681,36 @@ + - - + - - - - - - + @@ -67880,49 +67720,43 @@ - - - - - - - + + - - + + + - + - + - - - + @@ -67933,73 +67767,75 @@ + - - + - + + + + - - + + + + - - - + - - + - + + - + - - + - - + + - + @@ -68015,32 +67851,31 @@ - - + + + + - - - @@ -68053,34 +67888,34 @@ + + + - - + + - - + - + - - @@ -68095,59 +67930,57 @@ - + - - + + - - + - + + - - - + - - + + @@ -68155,37 +67988,31 @@ - - - - + - - - - + @@ -68196,7 +68023,6 @@ - @@ -68206,6 +68032,7 @@ + @@ -68213,25 +68040,24 @@ - + - - - + + @@ -68241,40 +68067,44 @@ + + - + + - - + - + + - - + + + + - - + @@ -68287,23 +68117,28 @@ - + + + - + + + + @@ -68318,78 +68153,75 @@ + + - - + - - - - - - - - + + + + - + - - + - - + + + @@ -68403,38 +68235,39 @@ - + + + - + - - + @@ -68442,12 +68275,12 @@ - + - + @@ -68457,34 +68290,34 @@ + - - + + - - + + - @@ -68500,17 +68333,12 @@ - + - - - - - @@ -68523,17 +68351,27 @@ + + + - + + + + + + + + @@ -68541,16 +68379,17 @@ - - + + + @@ -68562,19 +68401,24 @@ + + - + + + + @@ -68582,55 +68426,52 @@ - - + + + - - - + - - + - + - - + @@ -68640,34 +68481,29 @@ - - + - - - - + - + - - - + + + - @@ -68676,6 +68512,7 @@ + @@ -68685,40 +68522,40 @@ - + + - - - + + - + + - + - - - + + @@ -68732,7 +68569,6 @@ - @@ -68750,39 +68586,39 @@ + - - + - + + - + - + - - + @@ -68791,27 +68627,25 @@ - - - + + - - + @@ -68825,36 +68659,35 @@ + - - + + + - - + - - + + - - @@ -68864,12 +68697,9 @@ - - + - - - + @@ -68878,54 +68708,55 @@ - + - - + - - + + - - - + - + + + + + - + @@ -68933,82 +68764,87 @@ + + - + + + - + + + - + + - + - + - - - - + + - - + + - - + + - + @@ -69025,21 +68861,21 @@ - - + - + + - + @@ -69047,9 +68883,11 @@ + + @@ -69057,32 +68895,30 @@ - - - + + - + - + - @@ -69090,6 +68926,7 @@ + @@ -69098,14 +68935,14 @@ + - + - - + @@ -69115,14 +68952,12 @@ - - + - @@ -69131,9 +68966,7 @@ - - @@ -69151,16 +68984,18 @@ - + + + - + diff --git a/Engine/Build/PhysXBuild.xml b/Engine/Build/PhysXBuild.xml index 29c383a0d851..c5b417832f50 100644 --- a/Engine/Build/PhysXBuild.xml +++ b/Engine/Build/PhysXBuild.xml @@ -7,6 +7,7 @@